diff --git a/.versionrc.json b/.versionrc.json new file mode 100644 index 000000000..25c298f45 --- /dev/null +++ b/.versionrc.json @@ -0,0 +1,7 @@ +{ + "bumpFiles": [ + "package.json", + "backend/package.json", + "webapp/package.json" + ] +} diff --git a/VERSION b/VERSION deleted file mode 100644 index 0c62199f1..000000000 --- a/VERSION +++ /dev/null @@ -1 +0,0 @@ -0.2.1 diff --git a/backend/package.json b/backend/package.json index e7d00cee3..28e78247f 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "human-connection-backend", - "version": "0.0.1", + "version": "0.2.1", "description": "GraphQL Backend for Human Connection", "main": "src/index.js", "scripts": { @@ -62,24 +62,24 @@ "linkifyjs": "~2.1.8", "lodash": "~4.17.14", "merge-graphql-schemas": "^1.7.6", - "metascraper": "^5.10.2", - "metascraper-audio": "^5.9.5", + "metascraper": "^5.10.5", + "metascraper-audio": "^5.10.3", "metascraper-author": "^5.10.3", "metascraper-clearbit-logo": "^5.3.0", "metascraper-date": "^5.10.3", - "metascraper-description": "^5.9.5", - "metascraper-image": "^5.9.5", + "metascraper-description": "^5.10.5", + "metascraper-image": "^5.10.3", "metascraper-lang": "^5.10.3", "metascraper-lang-detector": "^4.10.2", "metascraper-logo": "^5.10.3", "metascraper-publisher": "^5.10.3", - "metascraper-soundcloud": "^5.9.5", + "metascraper-soundcloud": "^5.10.5", "metascraper-title": "^5.10.3", "metascraper-url": "^5.10.3", - "metascraper-video": "^5.9.5", - "metascraper-youtube": "^5.9.5", + "metascraper-video": "^5.10.3", + "metascraper-youtube": "^5.10.5", "minimatch": "^3.0.4", - "mustache": "^3.2.1", + "mustache": "^4.0.0", "neo4j-driver": "^4.0.1", "neo4j-graphql-js": "^2.11.5", "neode": "^0.3.7", @@ -91,7 +91,7 @@ "sanitize-html": "~1.20.1", "slug": "~2.1.0", "trunc-html": "~1.1.2", - "uuid": "~3.3.3", + "uuid": "~3.4.0", "validator": "^12.1.0", "wait-on": "~3.3.0", "xregexp": "^4.2.4" diff --git a/backend/yarn.lock b/backend/yarn.lock index af96816a1..57bc2e878 100644 --- a/backend/yarn.lock +++ b/backend/yarn.lock @@ -1099,10 +1099,10 @@ url-regex "~4.1.1" video-extensions "~1.1.0" -"@metascraper/helpers@^5.10.3", "@metascraper/helpers@^5.9.5": - version "5.10.3" - resolved "https://registry.yarnpkg.com/@metascraper/helpers/-/helpers-5.10.3.tgz#38abd95ffbcfaf0bd6afbaa85853d4b9aa780c87" - integrity sha512-ZiDS3aGIK3OSGBMaYORvUVZAVFKmjh1KZaaFnmjIPi6vWPFOrtLK8r4OrkwroJ0IK6Hg6ZiuDjQo63LDcmLqdA== +"@metascraper/helpers@^5.10.3", "@metascraper/helpers@^5.10.5": + version "5.10.5" + resolved "https://registry.yarnpkg.com/@metascraper/helpers/-/helpers-5.10.5.tgz#c3558533f30144bacecf9599fd02ac88d839a0cc" + integrity sha512-noTBDk3cF3UzKoPrC9/Sye1f9945PVEDju6br7S19YWyUpceEXoDrPF1YaqN37ku62f1s7bul11+Lv/xAYuEVQ== dependencies: audio-extensions "0.0.0" chrono-node "~1.4.2" @@ -3834,7 +3834,8 @@ extsprintf@^1.2.0: faker@Marak/faker.js#master: version "4.1.0" - resolved "https://codeload.github.com/Marak/faker.js/tar.gz/9fd8d7d37b398842d0784a116a340f7aa6afb89b" + uid "3b2fa4aebccee52ae1bafc15d575061fb30c3cf1" + resolved "https://codeload.github.com/Marak/faker.js/tar.gz/3b2fa4aebccee52ae1bafc15d575061fb30c3cf1" fast-deep-equal@^2.0.1: version "2.0.1" @@ -5961,12 +5962,12 @@ merge2@^1.3.0: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81" integrity sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw== -metascraper-audio@^5.9.5: - version "5.9.5" - resolved "https://registry.yarnpkg.com/metascraper-audio/-/metascraper-audio-5.9.5.tgz#e20c6a6b2d436a5c84655063655b342dfe4b0432" - integrity sha512-UBvyF0MQe1NUDPNXYAOuprPhVasXNYVRof65CGeAxyD4tWA4FgMzeUlrtCSkWtR8BA70BsJ7UZgxJ04nfGij2g== +metascraper-audio@^5.10.3: + version "5.10.3" + resolved "https://registry.yarnpkg.com/metascraper-audio/-/metascraper-audio-5.10.3.tgz#ce0c3a895f8d45c488c5b5916038f6479c8b0f31" + integrity sha512-L4ft5y36MJPZt8Odzbpzm5/iazNaDPHy6EkQtzDYwr7yoOJTrUE+RMkiYRz81HBl/ThRh0Ez4RuTNVNQfNsQZA== dependencies: - "@metascraper/helpers" "^5.9.5" + "@metascraper/helpers" "^5.10.3" metascraper-author@^5.10.3: version "5.10.3" @@ -5990,19 +5991,19 @@ metascraper-date@^5.10.3: dependencies: "@metascraper/helpers" "^5.10.3" -metascraper-description@^5.9.5: - version "5.9.5" - resolved "https://registry.yarnpkg.com/metascraper-description/-/metascraper-description-5.9.5.tgz#1b397ff97eeee963c254416d16f0d13ee7bce319" - integrity sha512-dZwk/x6dUHKCaSvtBCsTECftCi2ZGoEQbjCyvVXF3aTGz9KRxLMePkWFhrG4UXdBPvlYFwGkHp7scoIDwCXNPQ== +metascraper-description@^5.10.5: + version "5.10.5" + resolved "https://registry.yarnpkg.com/metascraper-description/-/metascraper-description-5.10.5.tgz#5db8a3fe05ea19e75058fb55d72aed1d50539aff" + integrity sha512-LAEO8s0CkV5B/unBZR8hNpA/b18zedQuE0gP3KusBXQYTm0z+1wsdDdulxhoLmgEJPUjYwnn5LKS0jUME7PXaA== dependencies: - "@metascraper/helpers" "^5.9.5" + "@metascraper/helpers" "^5.10.5" -metascraper-image@^5.9.5: - version "5.9.5" - resolved "https://registry.yarnpkg.com/metascraper-image/-/metascraper-image-5.9.5.tgz#f3e3aa4ee1a442aa4ef813ceef8150bf10c83fdc" - integrity sha512-O3v6QQD/gUsUuNpW1zS+1+Rj/MffuilSnq64w8lDnGnO0/8P/MwBIJikcIfq5kTVCwk1tBsHdoKDvQMaE+b1yg== +metascraper-image@^5.10.3: + version "5.10.3" + resolved "https://registry.yarnpkg.com/metascraper-image/-/metascraper-image-5.10.3.tgz#853eb464c3b717f8fe4ac8bf31c4b2bc39b83216" + integrity sha512-22/WPf9A+jUc/Unvpfursi6FAfo/s71Pq/N9jiTNxBgOjfrUWjrzzw8qUKBxTc7Dwz1mERfDn2B0f/tKdsBAFA== dependencies: - "@metascraper/helpers" "^5.9.5" + "@metascraper/helpers" "^5.10.3" metascraper-lang-detector@^4.10.2: version "4.10.2" @@ -6034,12 +6035,12 @@ metascraper-publisher@^5.10.3: dependencies: "@metascraper/helpers" "^5.10.3" -metascraper-soundcloud@^5.9.5: - version "5.9.5" - resolved "https://registry.yarnpkg.com/metascraper-soundcloud/-/metascraper-soundcloud-5.9.5.tgz#a7dce92dce5c99b1816096e3501655bbf032e8bd" - integrity sha512-Um7mIu1EW8yQvgstaLUqmk+twt+ZENLD6jtcUmHNAlq3qm0DnmYBrUuLWtZWy6tT93id9ngiJC5FLL3c9wIKVw== +metascraper-soundcloud@^5.10.5: + version "5.10.5" + resolved "https://registry.yarnpkg.com/metascraper-soundcloud/-/metascraper-soundcloud-5.10.5.tgz#741e1e1fb127192a295b77bf55a694c6ed510eec" + integrity sha512-h3hXX0msfEIozsH06Cca+X29ZLP73+nEbMPPsQWt1nQPDkM0nW+JiJ+Ai9AygqLe28X/KAo5p1T7nWNQD30xNA== dependencies: - "@metascraper/helpers" "^5.9.5" + "@metascraper/helpers" "^5.10.5" tldts "~5.6.3" metascraper-title@^5.10.3: @@ -6057,30 +6058,30 @@ metascraper-url@^5.10.3: dependencies: "@metascraper/helpers" "^5.10.3" -metascraper-video@^5.9.5: - version "5.9.5" - resolved "https://registry.yarnpkg.com/metascraper-video/-/metascraper-video-5.9.5.tgz#707eb9726a96a64ecd8f234a7716c021ccf10f3f" - integrity sha512-ApYCnVpEPy3+sLHxjMVXUVolHgdEOwpaiH41win4h5HmDX6jz/gWg3ENaHWfRLTn94Gc3c2Fjkqg/dwShRK0/A== +metascraper-video@^5.10.3: + version "5.10.3" + resolved "https://registry.yarnpkg.com/metascraper-video/-/metascraper-video-5.10.3.tgz#deb0510b247aff0c9f1777a9d790f0aa55fa2890" + integrity sha512-xXGtPWX1RYSEOkLDvIzD20+o4hrSYycN31briMwQkjL7ZcuSfGgILDOCXSnT+WcpEbRNNxAOmODvAxU5qGnqjQ== dependencies: - "@metascraper/helpers" "^5.9.5" + "@metascraper/helpers" "^5.10.3" lodash "~4.17.15" -metascraper-youtube@^5.9.5: - version "5.9.5" - resolved "https://registry.yarnpkg.com/metascraper-youtube/-/metascraper-youtube-5.9.5.tgz#0d67c3619cfaf5434fe51bd3d18be6a6f1b31c7f" - integrity sha512-xC6e6l08/qdqNp7rtyMWPumIh0tCqNhWJkL8F5BjMZCGA3iL2OYh82v26qH/H4GdMZlxSsglNJQTjl8ywcdEmw== +metascraper-youtube@^5.10.5: + version "5.10.5" + resolved "https://registry.yarnpkg.com/metascraper-youtube/-/metascraper-youtube-5.10.5.tgz#ce0ff223fc50aaf9572f0e12c33d8eb752aa8201" + integrity sha512-Y0pVcQWXghdXb7rNZ/i459bCIFWpt43sc4zkvjn6+tsMYqQC9gn2ZLCy7eF5AWcZ/aReTychO6HPVGWal10oWQ== dependencies: - "@metascraper/helpers" "^5.9.5" + "@metascraper/helpers" "^5.10.5" get-video-id "~3.1.4" is-reachable "~4.0.0" p-locate "~4.1.0" -metascraper@^5.10.2: - version "5.10.2" - resolved "https://registry.yarnpkg.com/metascraper/-/metascraper-5.10.2.tgz#3e2d5c3f8cbe40a8fbd60319bc648d9efd922d13" - integrity sha512-h89HZ1jMSzHcp9xAN51/rqOh9oKuY9UBNlar0hdOp9D5v71+e0y4i+lJEly9wJqLAwgVOjRKK5dirTzkj3GdTQ== +metascraper@^5.10.5: + version "5.10.5" + resolved "https://registry.yarnpkg.com/metascraper/-/metascraper-5.10.5.tgz#d23a6f76ea0ae3222aa88ed4e93026926bdacbdd" + integrity sha512-2ZeEbI9668ByIurvyZC8fmE6PGMgJ3kWWQYtmGUVsfK2USuoq4z1e9SpP9s4+fSRpZNyaAZFrnRUtpu9E9chiQ== dependencies: - "@metascraper/helpers" "^5.9.5" + "@metascraper/helpers" "^5.10.5" cheerio "~1.0.0-rc.3" cheerio-advanced-selectors "~2.0.1" lodash "~4.17.15" @@ -6239,10 +6240,10 @@ ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -mustache@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/mustache/-/mustache-3.2.1.tgz#89e78a9d207d78f2799b1e95764a25bf71a28322" - integrity sha512-RERvMFdLpaFfSRIEe632yDm5nsd0SDKn8hGmcUwswnyiE5mtdZLDybtHAz6hjJhawokF0hXvGLtx9mrQfm6FkA== +mustache@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mustache/-/mustache-4.0.0.tgz#7f02465dbb5b435859d154831c032acdfbbefb31" + integrity sha512-FJgjyX/IVkbXBXYUwH+OYwQKqWpFPLaLVESd70yHjSDunwzV2hZOoTBvPf4KLoxesUzzyfTH6F784Uqd7Wm5yA== mute-stream@0.0.8: version "0.0.8" @@ -8697,10 +8698,10 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@^3.1.0, uuid@^3.3.2, uuid@~3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" - integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== +uuid@^3.1.0, uuid@^3.3.2, uuid@~3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== v8-compile-cache@^2.0.3: version "2.1.0" diff --git a/cypress/support/commands.js b/cypress/support/commands.js index f52b38faf..13d33964a 100644 --- a/cypress/support/commands.js +++ b/cypress/support/commands.js @@ -60,7 +60,6 @@ Cypress.Commands.add("login", ({ email, password }) => { .as("submitButton") .click(); cy.get(".iziToast-message").should("contain", "You are logged in!"); - cy.get(".iziToast-close").click(); }); Cypress.Commands.add("logout", (email, password) => { diff --git a/package.json b/package.json index 14fd25508..0e8930251 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,10 @@ "description": "Fullstack and API tests with cypress and cucumber for Human Connection", "author": "Human Connection gGmbh", "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/Human-Connection/Human-Connection.git" + }, "cypress-cucumber-preprocessor": { "nonGlobalStepDefinitions": true }, @@ -18,7 +22,7 @@ "cypress:open": "cross-env cypress open --browser chromium", "cucumber:setup": "cd backend && yarn run dev", "cucumber": "wait-on tcp:4000 && cucumber-js --require-module @babel/register --exit", - "version": "auto-changelog -p" + "release": "standard-version" }, "devDependencies": { "@babel/core": "^7.8.3", @@ -41,7 +45,8 @@ "neo4j-driver": "^4.0.1", "neode": "^0.3.7", "npm-run-all": "^4.1.5", - "slug": "^2.1.0" + "slug": "^2.1.0", + "standard-version": "^7.1.0" }, "resolutions": { "set-value": "^2.0.1" diff --git a/scripts/docker_push.sh b/scripts/docker_push.sh index b342278b9..3c746af92 100755 --- a/scripts/docker_push.sh +++ b/scripts/docker_push.sh @@ -2,7 +2,8 @@ ROOT_DIR=$(dirname "$0")/.. # BUILD_COMMIT=${TRAVIS_COMMIT:-$(git rev-parse HEAD)} -IFS='.' read -r major minor patch < $ROOT_DIR/VERSION +VERSION=$(jq -r '.version' $ROOT_DIR/package.json) +IFS='.' read -r major minor patch <<< $VERSION apps=(nitro-web nitro-backend neo4j maintenance) tags=($major $major.$minor $major.$minor.$patch) diff --git a/scripts/github_release.sh b/scripts/github_release.sh index 81e63d8ff..93f50289d 100755 --- a/scripts/github_release.sh +++ b/scripts/github_release.sh @@ -2,7 +2,7 @@ ROOT_DIR=$(dirname "$0")/.. RELEASE_DIR="${ROOT_DIR}/release" -VERSION=$(<$ROOT_DIR/VERSION) +VERSION=$(jq -r ".version" $ROOT_DIR/package.json) # mkdir -p $RELEASE_DIR @@ -13,4 +13,4 @@ VERSION=$(<$ROOT_DIR/VERSION) # docker image save "humanconnection/${app}:latest" | gzip > "${RELEASE_DIR}/${app}.${VERSION}.tar.gz" # done -ghr -soft "${VERSION}" +ghr -c "${VERSION}" "${VERSION}" diff --git a/webapp/components/CategoriesSelect/CategoriesSelect.spec.js b/webapp/components/CategoriesSelect/CategoriesSelect.spec.js index b633e5811..82f5e61eb 100644 --- a/webapp/components/CategoriesSelect/CategoriesSelect.spec.js +++ b/webapp/components/CategoriesSelect/CategoriesSelect.spec.js @@ -1,5 +1,6 @@ import { mount } from '@vue/test-utils' import CategoriesSelect from './CategoriesSelect' +import Vue from 'vue' const localVue = global.localVue @@ -55,8 +56,9 @@ describe('CategoriesSelect.vue', () => { }) describe('toggleCategory', () => { - beforeEach(() => { + beforeEach(async () => { wrapper.vm.categories = categories + await Vue.nextTick() democracyAndPolitics = wrapper.findAll('button').at(0) democracyAndPolitics.trigger('click') }) diff --git a/webapp/components/CommentForm/CommentForm.spec.js b/webapp/components/CommentForm/CommentForm.spec.js index 5dde84008..420ab26fb 100644 --- a/webapp/components/CommentForm/CommentForm.spec.js +++ b/webapp/components/CommentForm/CommentForm.spec.js @@ -1,6 +1,6 @@ import { mount } from '@vue/test-utils' import CommentForm from './CommentForm' - +import Vue from 'vue' import MutationObserver from 'mutation-observer' global.MutationObserver = MutationObserver @@ -74,6 +74,7 @@ describe('CommentForm.vue', () => { it('calls `clear` method when the cancel button is clicked', async () => { wrapper.vm.updateEditorContent('ok') + await Vue.nextTick() await wrapper.find('[data-test="cancel-button"]').trigger('submit') expect(cancelMethodSpy).toHaveBeenCalledTimes(1) }) diff --git a/webapp/components/ContributionForm/ContributionForm.spec.js b/webapp/components/ContributionForm/ContributionForm.spec.js index 7bcaa8212..b2ce7d530 100644 --- a/webapp/components/ContributionForm/ContributionForm.spec.js +++ b/webapp/components/ContributionForm/ContributionForm.spec.js @@ -1,6 +1,7 @@ import { config, mount } from '@vue/test-utils' import ContributionForm from './ContributionForm.vue' +import Vue from 'vue' import Vuex from 'vuex' import PostMutations from '~/graphql/PostMutations.js' import CategoriesSelect from '~/components/CategoriesSelect/CategoriesSelect' @@ -147,31 +148,31 @@ describe('ContributionForm.vue', () => { dataPrivacyButton.trigger('click') }) - it('title should not be empty', async () => { + it('title cannot be empty', async () => { postTitleInput.setValue('') wrapper.find('form').trigger('submit') expect(mocks.$apollo.mutate).not.toHaveBeenCalled() }) - it('title should not be too long', async () => { + it('title cannot be too long', async () => { postTitleInput.setValue(postTitleTooLong) wrapper.find('form').trigger('submit') expect(mocks.$apollo.mutate).not.toHaveBeenCalled() }) - it('title should not be too short', async () => { + it('title cannot be too short', async () => { postTitleInput.setValue(postTitleTooShort) wrapper.find('form').trigger('submit') expect(mocks.$apollo.mutate).not.toHaveBeenCalled() }) - it('content should not be empty', async () => { + it('content cannot be empty', async () => { await wrapper.vm.updateEditorContent('') await wrapper.find('form').trigger('submit') expect(mocks.$apollo.mutate).not.toHaveBeenCalled() }) - it('should have at least one category', async () => { + it('has at least one category', async () => { dataPrivacyButton = await wrapper .find(CategoriesSelect) .find('[data-test="category-buttons-cat12"]') @@ -180,8 +181,9 @@ describe('ContributionForm.vue', () => { expect(mocks.$apollo.mutate).not.toHaveBeenCalled() }) - it('should have not have more than three categories', async () => { + it('has no more than three categories', async () => { wrapper.vm.form.categoryIds = ['cat4', 'cat9', 'cat15', 'cat27'] + await Vue.nextTick() wrapper.find('form').trigger('submit') expect(mocks.$apollo.mutate).not.toHaveBeenCalled() }) @@ -209,10 +211,12 @@ describe('ContributionForm.vue', () => { wrapper.find(CategoriesSelect).setData({ categories }) englishLanguage = wrapper.findAll('li').filter(language => language.text() === 'English') englishLanguage.trigger('click') + await Vue.nextTick() dataPrivacyButton = await wrapper .find(CategoriesSelect) .find('[data-test="category-buttons-cat12"]') dataPrivacyButton.trigger('click') + await Vue.nextTick() }) it('creates a post with valid title, content, and at least one category', async () => { @@ -278,10 +282,12 @@ describe('ContributionForm.vue', () => { wrapper.find(CategoriesSelect).setData({ categories }) englishLanguage = wrapper.findAll('li').filter(language => language.text() === 'English') englishLanguage.trigger('click') + await Vue.nextTick() dataPrivacyButton = await wrapper .find(CategoriesSelect) .find('[data-test="category-buttons-cat12"]') dataPrivacyButton.trigger('click') + await Vue.nextTick() }) it('shows an error toaster when apollo mutation rejects', async () => { @@ -370,6 +376,7 @@ describe('ContributionForm.vue', () => { it('supports updating categories', async () => { expectedParams.variables.categoryIds.push('cat3') wrapper.find(CategoriesSelect).setData({ categories }) + await Vue.nextTick() const healthWellbeingButton = await wrapper .find(CategoriesSelect) .find('[data-test="category-buttons-cat3"]') diff --git a/webapp/components/DeleteData/DeleteData.spec.js b/webapp/components/DeleteData/DeleteData.spec.js index 484fd5492..3529c1b7b 100644 --- a/webapp/components/DeleteData/DeleteData.spec.js +++ b/webapp/components/DeleteData/DeleteData.spec.js @@ -1,6 +1,6 @@ import { mount } from '@vue/test-utils' import DeleteData from './DeleteData.vue' - +import Vue from 'vue' import Vuex from 'vuex' const localVue = global.localVue @@ -168,6 +168,7 @@ describe('DeleteData.vue', () => { it('shows an error toaster when the mutation rejects', async () => { enableDeletionInput = wrapper.find('.enable-deletion-input input') enableDeletionInput.setValue(deleteAccountName) + await Vue.nextTick() deleteAccountBtn = wrapper.find('[data-test="delete-button"]') await deleteAccountBtn.trigger('click') // second submission causes mutation to reject diff --git a/webapp/components/MasonryGrid/MasonryGrid.spec.js b/webapp/components/MasonryGrid/MasonryGrid.spec.js index b42b9b221..00e7859d8 100644 --- a/webapp/components/MasonryGrid/MasonryGrid.spec.js +++ b/webapp/components/MasonryGrid/MasonryGrid.spec.js @@ -1,5 +1,5 @@ import { mount } from '@vue/test-utils' - +import Vue from 'vue' import MasonryGrid from './MasonryGrid' const localVue = global.localVue @@ -13,29 +13,29 @@ describe('MasonryGrid', () => { masonryGridItem = wrapper.vm.$children[0] }) - it('adds the "reset-grid-height" class when itemsCalculating is more than 0', () => { + it('adds the "reset-grid-height" class when itemsCalculating is more than 0', async () => { wrapper.setData({ itemsCalculating: 1 }) - + await Vue.nextTick() expect(wrapper.classes()).toContain('reset-grid-height') }) - it('removes the "reset-grid-height" class when itemsCalculating is 0', () => { + it('removes the "reset-grid-height" class when itemsCalculating is 0', async () => { wrapper.setData({ itemsCalculating: 0 }) - + await Vue.nextTick() expect(wrapper.classes()).not.toContain('reset-grid-height') }) - it('adds 1 to itemsCalculating when a child emits "calculating-item-height"', () => { + it('adds 1 to itemsCalculating when a child emits "calculating-item-height"', async () => { wrapper.setData({ itemsCalculating: 0 }) masonryGridItem.$emit('calculating-item-height') - + await Vue.nextTick() expect(wrapper.vm.itemsCalculating).toBe(1) }) - it('subtracts 1 from itemsCalculating when a child emits "finished-calculating-item-height"', () => { + it('subtracts 1 from itemsCalculating when a child emits "finished-calculating-item-height"', async () => { wrapper.setData({ itemsCalculating: 2 }) masonryGridItem.$emit('finished-calculating-item-height') - + await Vue.nextTick() expect(wrapper.vm.itemsCalculating).toBe(1) }) }) diff --git a/webapp/components/Modal.spec.js b/webapp/components/Modal.spec.js index 2dae4285a..c309d5684 100644 --- a/webapp/components/Modal.spec.js +++ b/webapp/components/Modal.spec.js @@ -5,6 +5,7 @@ import DisableModal from './Modal/DisableModal.vue' import ReportModal from './Modal/ReportModal.vue' import Vuex from 'vuex' import { getters, mutations } from '../store/modal' +import Vue from 'vue' const localVue = global.localVue @@ -89,8 +90,9 @@ describe('Modal.vue', () => { }) describe('child component emits close', () => { - it('turns empty', () => { + it('turns empty', async () => { wrapper.find(DisableModal).vm.$emit('close') + await Vue.nextTick() expect(wrapper.contains(DisableModal)).toBe(false) }) }) diff --git a/webapp/components/Modal/ReportModal.spec.js b/webapp/components/Modal/ReportModal.spec.js index b151f3c7b..de95cce99 100644 --- a/webapp/components/Modal/ReportModal.spec.js +++ b/webapp/components/Modal/ReportModal.spec.js @@ -1,5 +1,6 @@ import { config, shallowMount, mount } from '@vue/test-utils' import ReportModal from './ReportModal.vue' +import Vue from 'vue' const localVue = global.localVue @@ -151,9 +152,11 @@ describe('ReportModal.vue', () => { }) describe('click confirm button', () => { - beforeEach(() => { + beforeEach(async () => { wrapper.find('.ds-radio-option-label').trigger('click') + await Vue.nextTick() wrapper.find('button.confirm').trigger('click') + await Vue.nextTick() }) it('calls report mutation', () => { diff --git a/webapp/components/PageFooter/PageFooter.vue b/webapp/components/PageFooter/PageFooter.vue index e01aae817..fc497bdf5 100644 --- a/webapp/components/PageFooter/PageFooter.vue +++ b/webapp/components/PageFooter/PageFooter.vue @@ -18,12 +18,23 @@ {{ $t('site.faq') }} - - - {{ $t('site.changelog') }} + + {{ version }} + +