From 7365aa09c1fccdf923478c52d7aafd20baadf4df Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 24 Apr 2021 02:08:19 +0200 Subject: [PATCH 01/89] coverage Change.spec.js --- webapp/components/Password/Change.spec.js | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/webapp/components/Password/Change.spec.js b/webapp/components/Password/Change.spec.js index 8416a0fce..1cc561e3c 100644 --- a/webapp/components/Password/Change.spec.js +++ b/webapp/components/Password/Change.spec.js @@ -126,21 +126,18 @@ describe('ChangePassword.vue', () => { }) }) - // TODO This is not a valid testcase - we have to decide if we catch the same password on clientside - /* describe('mutation rejects', () => { + describe('mutation rejects', () => { beforeEach(async () => { await wrapper.find('input#oldPassword').setValue('supersecret') await wrapper.find('input#password').setValue('supersecret') await wrapper.find('input#passwordConfirmation').setValue('supersecret') + await wrapper.find('form').trigger('submit') }) - it('displays error message', async () => { - await wrapper.find('form').trigger('submit') - await mocks.$apollo.mutate - + it('displays error message', async () => { expect(mocks.$toast.error).toHaveBeenCalledWith('Ouch!') }) - }) */ + }) }) }) }) From 9445627480961e4baaaabb44ee161a52c6b983d7 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 24 Apr 2021 02:08:32 +0200 Subject: [PATCH 02/89] coverage ChangePassword.spec.js --- .../PasswordReset/ChangePassword.spec.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/webapp/components/PasswordReset/ChangePassword.spec.js b/webapp/components/PasswordReset/ChangePassword.spec.js index b1b55cb06..d6f451604 100644 --- a/webapp/components/PasswordReset/ChangePassword.spec.js +++ b/webapp/components/PasswordReset/ChangePassword.spec.js @@ -76,6 +76,22 @@ describe('ChangePassword ', () => { }) }) }) + + describe('password reset not successful', () => { + beforeEach(() => { + mocks.$apollo.mutate = jest.fn().mockRejectedValue({ + message: 'Ouch!', + }) + wrapper = Wrapper() + wrapper.find('input#password').setValue('supersecret') + wrapper.find('input#passwordConfirmation').setValue('supersecret') + wrapper.find('form').trigger('submit') + }) + + it('display a toast error', () => { + expect(mocks.$toast.error).toHaveBeenCalled() + }) + }) }) }) }) From fc176e28a4398bd322d50a6bdfbf617f9f5db179 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 24 Apr 2021 02:08:50 +0200 Subject: [PATCH 03/89] coverage my-email-address/index.spec.js --- .../pages/settings/my-email-address/index.spec.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/webapp/pages/settings/my-email-address/index.spec.js b/webapp/pages/settings/my-email-address/index.spec.js index 22654afd0..808aee3be 100644 --- a/webapp/pages/settings/my-email-address/index.spec.js +++ b/webapp/pages/settings/my-email-address/index.spec.js @@ -111,6 +111,21 @@ describe('EmailSettingsIndexPage', () => { expect(wrapper.text()).toContain('registration.signup.form.errors.email-exists') }) }) + + describe('if backend sends any other error', () => { + beforeEach(() => { + mocks.$apollo.mutate = jest.fn().mockRejectedValue({ + message: 'Ouch!', + }) + wrapper = Wrapper() + wrapper.find('#email').setValue('already-taken@example.org') + wrapper.find('form').trigger('submit') + }) + + it('display a toast error', () => { + expect(mocks.$toast.error).toHaveBeenCalled() + }) + }) }) }) }) From 0e6893eeb3305f0ef916e123406bcab6fb4665b0 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 24 Apr 2021 02:09:10 +0200 Subject: [PATCH 04/89] coverage PasswordReset/Request.spec.js --- webapp/components/PasswordReset/Request.spec.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/webapp/components/PasswordReset/Request.spec.js b/webapp/components/PasswordReset/Request.spec.js index 83459814e..e601030c6 100644 --- a/webapp/components/PasswordReset/Request.spec.js +++ b/webapp/components/PasswordReset/Request.spec.js @@ -95,5 +95,20 @@ describe('Request', () => { expect(mocks.$apollo.mutate).toHaveBeenCalledWith(expected) }) }) + + describe('backend throws an error', () => { + beforeEach(() => { + mocks.$apollo.mutate = jest.fn().mockRejectedValue({ + message: 'Ouch!', + }) + wrapper = Wrapper() + wrapper.find('input#email').setValue('mail@gmail.com') + wrapper.find('form').trigger('submit') + }) + + it('display a toast error', () => { + expect(mocks.$toast.error).toHaveBeenCalled() + }) + }) }) }) From c7e721b44ff2ab982d6b2a1aaeb963dbfab2b2f3 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 24 Apr 2021 02:10:23 +0200 Subject: [PATCH 05/89] ignore stuff not to be tested --- webapp/package.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/webapp/package.json b/webapp/package.json index 84cdcbc7c..d1a2fe82f 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -24,9 +24,17 @@ "verbose": true, "collectCoverageFrom": [ "**/*.{js,vue}", + "!**/?(*.)+(spec|test|story).js?(x)", "!**/node_modules/**", "!**/.nuxt/**", - "!**/?(*.)+(spec|test).js?(x)" + "!**/storybook/**", + "!**/coverage/**", + "!**/config/**", + "!**/maintenance/**", + "!**/plugins/**" + "!**/.eslintrc.js", + "!**/.prettierrc.js", + "!**/nuxt.config.js", ], "coverageReporters": [ "lcov" From e99313034d921d6c6187a7e58538376f651211c2 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 24 Apr 2021 02:17:35 +0200 Subject: [PATCH 06/89] package.json syntax typo --- webapp/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/webapp/package.json b/webapp/package.json index d1a2fe82f..b34c6d818 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -31,10 +31,10 @@ "!**/coverage/**", "!**/config/**", "!**/maintenance/**", - "!**/plugins/**" + "!**/plugins/**", "!**/.eslintrc.js", "!**/.prettierrc.js", - "!**/nuxt.config.js", + "!**/nuxt.config.js" ], "coverageReporters": [ "lcov" From 1b8c22bd7dcfe43419825c94eec76984b1d0a9fa Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 24 Apr 2021 02:26:42 +0200 Subject: [PATCH 07/89] lint fix --- webapp/components/Password/Change.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp/components/Password/Change.spec.js b/webapp/components/Password/Change.spec.js index 1cc561e3c..95b7c1a3a 100644 --- a/webapp/components/Password/Change.spec.js +++ b/webapp/components/Password/Change.spec.js @@ -134,7 +134,7 @@ describe('ChangePassword.vue', () => { await wrapper.find('form').trigger('submit') }) - it('displays error message', async () => { + it('displays error message', async () => { expect(mocks.$toast.error).toHaveBeenCalledWith('Ouch!') }) }) From 26387a172fffa39fcdb742d0d6037e6d8485a921 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 24 Apr 2021 02:28:25 +0200 Subject: [PATCH 08/89] require 60% coverage --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9b8025ea3..240c54ddf 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -268,7 +268,7 @@ jobs: report_name: Coverage Webapp type: lcov result_path: ./coverage/lcov.info - min_coverage: 52 + min_coverage: 60 token: ${{ github.token }} ############################################################################## From 7e165a9b2b4fb3c3cd25157a92feb31c9196cc6a Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 24 Apr 2021 12:38:46 +0200 Subject: [PATCH 09/89] NotificationList.vue make default not a function --- webapp/components/NotificationList/NotificationList.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp/components/NotificationList/NotificationList.vue b/webapp/components/NotificationList/NotificationList.vue index fd2d6366c..877133f39 100644 --- a/webapp/components/NotificationList/NotificationList.vue +++ b/webapp/components/NotificationList/NotificationList.vue @@ -20,7 +20,7 @@ export default { props: { notifications: { type: Array, - default: () => [], + default: [], }, }, methods: { From 38a6fbbed28d75804036a92e24bcd0770c50bfa3 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 24 Apr 2021 12:54:09 +0200 Subject: [PATCH 10/89] coverage PageFooter.spec.js --- .../components/PageFooter/PageFooter.spec.js | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 webapp/components/PageFooter/PageFooter.spec.js diff --git a/webapp/components/PageFooter/PageFooter.spec.js b/webapp/components/PageFooter/PageFooter.spec.js new file mode 100644 index 000000000..9cb2a77cf --- /dev/null +++ b/webapp/components/PageFooter/PageFooter.spec.js @@ -0,0 +1,40 @@ +import { config, mount } from '@vue/test-utils' +import PageFooter from './PageFooter.vue' +import links from '~/constants/links.js' + +const localVue = global.localVue + +config.stubs['nuxt-link'] = '' + +describe('PageFooter.vue', () => { + let mocks + + beforeEach(() => { + mocks = { + $t: jest.fn(), + $env: { + VERSION: 'v1.0.0' + }, + links + } + }) + + describe('mount', () => { + let wrapper + const Wrapper = () => { + return mount(PageFooter, { mocks, localVue }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders three links', () => { + expect(wrapper.findAll('a')).toHaveLength(3) + }) + + it('renders four nuxt-links', () => { + expect(wrapper.findAll('.nuxt-link')).toHaveLength(4) + }) + }) +}) From 862d8ecb82f3eaf406833128245e8d9400bc9ff9 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 24 Apr 2021 13:11:47 +0200 Subject: [PATCH 11/89] ReportsTable.vue make default not a function --- webapp/components/features/ReportsTable/ReportsTable.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp/components/features/ReportsTable/ReportsTable.vue b/webapp/components/features/ReportsTable/ReportsTable.vue index 3892c0b12..787a912f7 100644 --- a/webapp/components/features/ReportsTable/ReportsTable.vue +++ b/webapp/components/features/ReportsTable/ReportsTable.vue @@ -41,7 +41,7 @@ export default { ReportRow, }, props: { - reports: { type: Array, default: () => [] }, + reports: { type: Array, default: [] }, }, } From f93367bc9ff5e272803f16e6464b662eb36f6b63 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 24 Apr 2021 13:12:10 +0200 Subject: [PATCH 12/89] coverage Signup.spec.js --- webapp/components/Registration/Signup.spec.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/webapp/components/Registration/Signup.spec.js b/webapp/components/Registration/Signup.spec.js index 36b16903c..659dd8a58 100644 --- a/webapp/components/Registration/Signup.spec.js +++ b/webapp/components/Registration/Signup.spec.js @@ -76,6 +76,21 @@ describe('Signup', () => { expect(mocks.$t).toHaveBeenCalledWith(...expected) }) + describe('mutation is rejected', () => { + beforeEach(async () => { + mocks.$apollo.mutate = jest.fn().mockRejectedValue({ + message: 'Ouch!', + }) + wrapper = Wrapper() + wrapper.find('input#email').setValue('mail@example.org') + await wrapper.find('form').trigger('submit') + }) + + it('displays error message', async () => { + expect(mocks.$toast.error).toHaveBeenCalledWith('Ouch!') + }) + }) + describe('after animation', () => { beforeEach(jest.runAllTimers) @@ -83,6 +98,7 @@ describe('Signup', () => { expect(wrapper.emitted('submit')).toEqual([[{ email: 'mail@example.org' }]]) }) }) + }) }) }) From ca654914f71b256d69ba20b2e46df8da1f771ea7 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 24 Apr 2021 13:19:54 +0200 Subject: [PATCH 13/89] default must be a function --- webapp/components/features/ReportsTable/ReportsTable.spec.js | 2 +- webapp/components/features/ReportsTable/ReportsTable.vue | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/webapp/components/features/ReportsTable/ReportsTable.spec.js b/webapp/components/features/ReportsTable/ReportsTable.spec.js index a9baeea4f..c80e4fea5 100644 --- a/webapp/components/features/ReportsTable/ReportsTable.spec.js +++ b/webapp/components/features/ReportsTable/ReportsTable.spec.js @@ -34,7 +34,7 @@ describe('ReportsTable', () => { describe('given no reports', () => { beforeEach(() => { - propsData = { ...propsData, reports: [] } + propsData = { ...propsData } wrapper = Wrapper() }) diff --git a/webapp/components/features/ReportsTable/ReportsTable.vue b/webapp/components/features/ReportsTable/ReportsTable.vue index 787a912f7..3892c0b12 100644 --- a/webapp/components/features/ReportsTable/ReportsTable.vue +++ b/webapp/components/features/ReportsTable/ReportsTable.vue @@ -41,7 +41,7 @@ export default { ReportRow, }, props: { - reports: { type: Array, default: [] }, + reports: { type: Array, default: () => [] }, }, } From 84caad1bff289c564f72470dcc6b738be2b33484 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 24 Apr 2021 13:20:18 +0200 Subject: [PATCH 14/89] lint fix --- webapp/components/Registration/Signup.spec.js | 1 - 1 file changed, 1 deletion(-) diff --git a/webapp/components/Registration/Signup.spec.js b/webapp/components/Registration/Signup.spec.js index 659dd8a58..dda0cbb9d 100644 --- a/webapp/components/Registration/Signup.spec.js +++ b/webapp/components/Registration/Signup.spec.js @@ -98,7 +98,6 @@ describe('Signup', () => { expect(wrapper.emitted('submit')).toEqual([[{ email: 'mail@example.org' }]]) }) }) - }) }) }) From 72addd13364d7ec859d8650d21b37ad796be0379 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 24 Apr 2021 13:20:40 +0200 Subject: [PATCH 15/89] lint error --- webapp/components/PageFooter/PageFooter.spec.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/webapp/components/PageFooter/PageFooter.spec.js b/webapp/components/PageFooter/PageFooter.spec.js index 9cb2a77cf..6a051b020 100644 --- a/webapp/components/PageFooter/PageFooter.spec.js +++ b/webapp/components/PageFooter/PageFooter.spec.js @@ -13,9 +13,9 @@ describe('PageFooter.vue', () => { mocks = { $t: jest.fn(), $env: { - VERSION: 'v1.0.0' + VERSION: 'v1.0.0', }, - links + links, } }) From 6e5e15097e794a3eea9093bb86b13f69fdc8cc4a Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 24 Apr 2021 13:25:03 +0200 Subject: [PATCH 16/89] NotificationList.vue with default as afunction tested --- .../NotificationList/NotificationList.spec.js | 19 +++++++++++++++++++ .../NotificationList/NotificationList.vue | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/webapp/components/NotificationList/NotificationList.spec.js b/webapp/components/NotificationList/NotificationList.spec.js index ce20a2765..219c1fdbb 100644 --- a/webapp/components/NotificationList/NotificationList.spec.js +++ b/webapp/components/NotificationList/NotificationList.spec.js @@ -81,4 +81,23 @@ describe('NotificationList.vue', () => { }) }) }) + + describe('shallowMount with no notifications', () => { + const Wrapper = () => { + return shallowMount(NotificationList, { + propsData: {}, + mocks, + store, + localVue, + }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders Notification.vue zero times', () => { + expect(wrapper.findAll(Notification)).toHaveLength(0) + }) + }) }) diff --git a/webapp/components/NotificationList/NotificationList.vue b/webapp/components/NotificationList/NotificationList.vue index 877133f39..fd2d6366c 100644 --- a/webapp/components/NotificationList/NotificationList.vue +++ b/webapp/components/NotificationList/NotificationList.vue @@ -20,7 +20,7 @@ export default { props: { notifications: { type: Array, - default: [], + default: () => [], }, }, methods: { From 52306aeed4e9085c75ee48356af13e90e095d95b Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 24 Apr 2021 13:51:32 +0200 Subject: [PATCH 17/89] SearchableInput.spec.js whitespace replacement --- .../generic/SearchableInput/SearchableInput.spec.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/webapp/components/generic/SearchableInput/SearchableInput.spec.js b/webapp/components/generic/SearchableInput/SearchableInput.spec.js index 53c361997..e5ce06fb5 100644 --- a/webapp/components/generic/SearchableInput/SearchableInput.spec.js +++ b/webapp/components/generic/SearchableInput/SearchableInput.spec.js @@ -120,5 +120,17 @@ describe('SearchableInput.vue', () => { query: { search: 'ab' }, }) }) + + it('replaces irregular whitespace with a single space', async () => { + select.element.value = 'peter \ + lustig' + select.trigger('input') + select.trigger('keyup.enter') + expect(mocks.$router.push).toHaveBeenCalledWith({ + path: '/search/search-results', + query: { search: 'peter lustig' }, + }) + }) + }) }) From 0e393c16d434e130a97ba1dca818441ea1f41710 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 24 Apr 2021 15:05:00 +0200 Subject: [PATCH 18/89] fixed lint error --- .../components/generic/SearchableInput/SearchableInput.spec.js | 1 - 1 file changed, 1 deletion(-) diff --git a/webapp/components/generic/SearchableInput/SearchableInput.spec.js b/webapp/components/generic/SearchableInput/SearchableInput.spec.js index e5ce06fb5..ba8341efe 100644 --- a/webapp/components/generic/SearchableInput/SearchableInput.spec.js +++ b/webapp/components/generic/SearchableInput/SearchableInput.spec.js @@ -131,6 +131,5 @@ describe('SearchableInput.vue', () => { query: { search: 'peter lustig' }, }) }) - }) }) From b2bc5b9447100e07bd2d7a55a9c6c8fb0d34be9f Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 24 Apr 2021 15:51:53 +0200 Subject: [PATCH 19/89] cannot use newline (lint) --- .../components/generic/SearchableInput/SearchableInput.spec.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/webapp/components/generic/SearchableInput/SearchableInput.spec.js b/webapp/components/generic/SearchableInput/SearchableInput.spec.js index ba8341efe..e0e9f9831 100644 --- a/webapp/components/generic/SearchableInput/SearchableInput.spec.js +++ b/webapp/components/generic/SearchableInput/SearchableInput.spec.js @@ -122,8 +122,7 @@ describe('SearchableInput.vue', () => { }) it('replaces irregular whitespace with a single space', async () => { - select.element.value = 'peter \ - lustig' + select.element.value = 'peter lustig' select.trigger('input') select.trigger('keyup.enter') expect(mocks.$router.push).toHaveBeenCalledWith({ From eb4ec2499eb84147bd4b7b8f5d8ace4461f63286 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 11:19:45 +0200 Subject: [PATCH 20/89] Modal coverage --- webapp/components/Modal.spec.js | 36 +++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/webapp/components/Modal.spec.js b/webapp/components/Modal.spec.js index 3ebff8771..c08c90f51 100644 --- a/webapp/components/Modal.spec.js +++ b/webapp/components/Modal.spec.js @@ -131,6 +131,42 @@ describe('Modal.vue', () => { }) }) }) + + describe('store/modal data contains an user', () => { + it('passes user name to report modal', () => { + state.data = { + type: 'user', + resource: { + id: 'u456', + name: 'Username', + }, + } + wrapper = Wrapper() + expect(wrapper.find(DisableModal).props()).toEqual({ + type: 'user', + name: 'Username', + id: 'u456', + }) + }) + }) + + describe('store/modal data contains no valid datatype', () => { + it('passes something as datatype to modal', () => { + state.data = { + type: 'something', + resource: { + id: 's456', + name: 'Username', + }, + } + wrapper = Wrapper() + expect(wrapper.find(DisableModal).props()).toEqual({ + type: 'something', + name: null, + id: 's456', + }) + }) + }) }) }) }) From a7eaf13ae1adb00b9b2bccdc589ed7c16c6db45c Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 12:17:46 +0200 Subject: [PATCH 21/89] coverage ShoutButton.spec.js --- webapp/components/ShoutButton.spec.js | 73 +++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 webapp/components/ShoutButton.spec.js diff --git a/webapp/components/ShoutButton.spec.js b/webapp/components/ShoutButton.spec.js new file mode 100644 index 000000000..2b8f5040b --- /dev/null +++ b/webapp/components/ShoutButton.spec.js @@ -0,0 +1,73 @@ +import { shallowMount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' +import ShoutButton from './ShoutButton.vue' +import Vuex from 'vuex' +import Vue from 'vue' + +const localVue = global.localVue + +describe('ShoutButton.vue', () => { + let wrapper + let state + let mocks + + beforeEach(() => { + mocks = { + $filters: { + truncate: (a) => a, + }, + $toast: { + success: () => {}, + error: () => {}, + }, + $t: jest.fn(), + $apollo: { + mutate: jest.fn() + }, + } + state = { + open: null, + data: {}, + } + }) + + describe('mount', () => { + let wrapper + const Wrapper = () => { + return mount(ShoutButton, { mocks, localVue }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders button and text', () => { + expect(mocks.$t).toHaveBeenCalledWith('shoutButton.shouted') + expect(wrapper.findAll(".base-button")).toHaveLength(1) + expect(wrapper.findAll(".shout-button-text")).toHaveLength(1) + expect(wrapper.vm.shouted).toBe(false) + expect(wrapper.vm.shoutedCount).toBe(0) + }) + + it('toggle the button', async () => { + mocks.$apollo.mutate = jest.fn().mockResolvedValue({ data: { shout: 'WeDoShout' } }); + wrapper.find(".base-button").trigger('click') + expect(wrapper.vm.shouted).toBe(true) + expect(wrapper.vm.shoutedCount).toBe(1) + await Vue.nextTick() + expect(wrapper.vm.shouted).toBe(true) + expect(wrapper.vm.shoutedCount).toBe(1) + }) + + it('toggle the button, but backend fails', async () => { + mocks.$apollo.mutate = jest.fn().mockRejectedValue({ message: 'Ouch!' }); + await wrapper.find(".base-button").trigger('click') + expect(wrapper.vm.shouted).toBe(true) + expect(wrapper.vm.shoutedCount).toBe(1) + await Vue.nextTick() + expect(wrapper.vm.shouted).toBe(false) + expect(wrapper.vm.shoutedCount).toBe(0) + }) + + }) +}) From 61d0f18f24c417bd6dd431a4d2be74826c9f46fa Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 12:22:56 +0200 Subject: [PATCH 22/89] lint fixes --- webapp/components/ShoutButton.spec.js | 30 +++++++-------------------- 1 file changed, 7 insertions(+), 23 deletions(-) diff --git a/webapp/components/ShoutButton.spec.js b/webapp/components/ShoutButton.spec.js index 2b8f5040b..c3af134c1 100644 --- a/webapp/components/ShoutButton.spec.js +++ b/webapp/components/ShoutButton.spec.js @@ -1,34 +1,19 @@ -import { shallowMount } from '@vue/test-utils' import { mount } from '@vue/test-utils' import ShoutButton from './ShoutButton.vue' -import Vuex from 'vuex' import Vue from 'vue' const localVue = global.localVue describe('ShoutButton.vue', () => { - let wrapper - let state let mocks beforeEach(() => { mocks = { - $filters: { - truncate: (a) => a, - }, - $toast: { - success: () => {}, - error: () => {}, - }, $t: jest.fn(), $apollo: { - mutate: jest.fn() + mutate: jest.fn(), }, } - state = { - open: null, - data: {}, - } }) describe('mount', () => { @@ -43,15 +28,15 @@ describe('ShoutButton.vue', () => { it('renders button and text', () => { expect(mocks.$t).toHaveBeenCalledWith('shoutButton.shouted') - expect(wrapper.findAll(".base-button")).toHaveLength(1) - expect(wrapper.findAll(".shout-button-text")).toHaveLength(1) + expect(wrapper.findAll('.base-button')).toHaveLength(1) + expect(wrapper.findAll('.shout-button-text')).toHaveLength(1) expect(wrapper.vm.shouted).toBe(false) expect(wrapper.vm.shoutedCount).toBe(0) }) it('toggle the button', async () => { - mocks.$apollo.mutate = jest.fn().mockResolvedValue({ data: { shout: 'WeDoShout' } }); - wrapper.find(".base-button").trigger('click') + mocks.$apollo.mutate = jest.fn().mockResolvedValue({ data: { shout: 'WeDoShout' } }) + wrapper.find('.base-button').trigger('click') expect(wrapper.vm.shouted).toBe(true) expect(wrapper.vm.shoutedCount).toBe(1) await Vue.nextTick() @@ -60,14 +45,13 @@ describe('ShoutButton.vue', () => { }) it('toggle the button, but backend fails', async () => { - mocks.$apollo.mutate = jest.fn().mockRejectedValue({ message: 'Ouch!' }); - await wrapper.find(".base-button").trigger('click') + mocks.$apollo.mutate = jest.fn().mockRejectedValue({ message: 'Ouch!' }) + await wrapper.find('.base-button').trigger('click') expect(wrapper.vm.shouted).toBe(true) expect(wrapper.vm.shoutedCount).toBe(1) await Vue.nextTick() expect(wrapper.vm.shouted).toBe(false) expect(wrapper.vm.shoutedCount).toBe(0) }) - }) }) From 4c67348171a6a4e81c9c40d6ef0b33ab510d2824 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 13:38:24 +0200 Subject: [PATCH 23/89] FollowButton.spec.js coverage --- webapp/components/FollowButton.spec.js | 47 ++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 webapp/components/FollowButton.spec.js diff --git a/webapp/components/FollowButton.spec.js b/webapp/components/FollowButton.spec.js new file mode 100644 index 000000000..000745081 --- /dev/null +++ b/webapp/components/FollowButton.spec.js @@ -0,0 +1,47 @@ +import { mount } from '@vue/test-utils' +import FollowButton from './FollowButton.vue' + +const localVue = global.localVue + +describe('FollowButton.vue', () => { + let mocks + let propsData + + beforeEach(() => { + mocks = { + $t: jest.fn(), + $apollo: { + mutate: jest.fn(), + }, + } + propsData = {} + }) + + describe('mount', () => { + let wrapper + const Wrapper = () => { + return mount(FollowButton, { mocks, propsData, localVue }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders button and text', () => { + expect(mocks.$t).toHaveBeenCalledWith('followButton.follow') + expect(wrapper.findAll('.base-button')).toHaveLength(1) + }) + + it('renders button and text when followed', () => { + propsData.isFollowed = true + wrapper = Wrapper() + expect(mocks.$t).toHaveBeenCalledWith('followButton.following') + expect(wrapper.findAll('.base-button')).toHaveLength(1) + }) + + it.skip('toggle the button', async () => { + wrapper.find('.base-button').trigger('click') // This does not work since @click.prevent is used + expect(wrapper.vm.isFollowed).toBe(true) + }) + }) +}) From 1a42bbcf2a9f240aa2b4dc272c69ea03fd1a4bf3 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 14:43:33 +0200 Subject: [PATCH 24/89] coverage moderation/index.spec.js --- webapp/pages/moderation/index.spec.js | 31 +++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 webapp/pages/moderation/index.spec.js diff --git a/webapp/pages/moderation/index.spec.js b/webapp/pages/moderation/index.spec.js new file mode 100644 index 000000000..4d6c55272 --- /dev/null +++ b/webapp/pages/moderation/index.spec.js @@ -0,0 +1,31 @@ +import { config, mount } from '@vue/test-utils' +import Moderation from './index.vue' + +const localVue = global.localVue +config.stubs['client-only'] = '' + +describe('moderation/index.vue', () => { + let wrapper + let mocks + + beforeEach(() => { + mocks = { + $t: jest.fn() + } + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(Moderation, { mocks, localVue }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.is('.base-card')).toBe(true) + }) + + }) +}) From 920094e85a05663c52aa44bbdd4de0e908fb768b Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 15:22:18 +0200 Subject: [PATCH 25/89] fixed fileMock renderer & include --- webapp/package.json | 6 +++--- webapp/test/fileMock.js | 4 +++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/webapp/package.json b/webapp/package.json index b34c6d818..7abe34e4a 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -49,10 +49,10 @@ "vue" ], "moduleNameMapper": { - "^@/(.*)$": "/src/$1", - "^~/(.*)$": "/$1", + "\\.(svg)$": "/test/fileMock.js", "\\.(css|less)$": "identity-obj-proxy", - "\\.(svg)$": "/test/fileMock.js" + "^@/(.*)$": "/src/$1", + "^~/(.*)$": "/$1" }, "setupFiles": [ "/test/registerContext.js", diff --git a/webapp/test/fileMock.js b/webapp/test/fileMock.js index 0e56c5b5f..02e28a211 100644 --- a/webapp/test/fileMock.js +++ b/webapp/test/fileMock.js @@ -1 +1,3 @@ -module.exports = 'test-file-stub' +module.exports = { + render: () => 'test-file-stub' +}; From e1b218311b1a5a2a2a1741a24139c0aa6baa2aa5 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 15:22:31 +0200 Subject: [PATCH 26/89] coverage Logo.spec.js --- webapp/components/Logo/Logo.spec.js | 31 +++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 webapp/components/Logo/Logo.spec.js diff --git a/webapp/components/Logo/Logo.spec.js b/webapp/components/Logo/Logo.spec.js new file mode 100644 index 000000000..c7c62f97c --- /dev/null +++ b/webapp/components/Logo/Logo.spec.js @@ -0,0 +1,31 @@ +import { config, mount } from '@vue/test-utils' +import Logo from './Logo.vue' + +const localVue = global.localVue +// config.stubs['client-only'] = '' + +describe('Logo.vue', () => { + let wrapper + let mocks + + beforeEach(() => { + mocks = { + $t: jest.fn() + } + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(Logo, { mocks, localVue }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.findAll('.ds-logo')).toHaveLength(1) + }) + + }) +}) From fe0977a56b5dec0c5c31320c589c01ab3b78dd02 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 15:27:52 +0200 Subject: [PATCH 27/89] lint fixes --- webapp/components/Logo/Logo.spec.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/webapp/components/Logo/Logo.spec.js b/webapp/components/Logo/Logo.spec.js index c7c62f97c..ceeb50bc9 100644 --- a/webapp/components/Logo/Logo.spec.js +++ b/webapp/components/Logo/Logo.spec.js @@ -1,8 +1,7 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import Logo from './Logo.vue' const localVue = global.localVue -// config.stubs['client-only'] = '' describe('Logo.vue', () => { let wrapper From 63d962a69ecc11a744f127e5e6b828ce5bdb0eb8 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 15:28:08 +0200 Subject: [PATCH 28/89] coverage profile/_id.spec.js --- webapp/pages/profile/_id.spec.js | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 webapp/pages/profile/_id.spec.js diff --git a/webapp/pages/profile/_id.spec.js b/webapp/pages/profile/_id.spec.js new file mode 100644 index 000000000..d1df3ac3b --- /dev/null +++ b/webapp/pages/profile/_id.spec.js @@ -0,0 +1,31 @@ +import { config, mount } from '@vue/test-utils' +import _id from './_id.vue' + +const localVue = global.localVue +config.stubs['nuxt-child'] = '' + +describe('profile/_id.vue', () => { + let wrapper + let mocks + + beforeEach(() => { + mocks = { + $t: jest.fn() + } + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(_id, { mocks, localVue }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.findAll('.nuxt-child')).toHaveLength(1) + }) + + }) +}) From d2347ba2d8104cd862d0fdfce6078414f62df5fa Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 16:24:59 +0200 Subject: [PATCH 29/89] coverage search-results.spec.js --- webapp/pages/search/search-results.spec.js | 31 ++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 webapp/pages/search/search-results.spec.js diff --git a/webapp/pages/search/search-results.spec.js b/webapp/pages/search/search-results.spec.js new file mode 100644 index 000000000..7cd91fe54 --- /dev/null +++ b/webapp/pages/search/search-results.spec.js @@ -0,0 +1,31 @@ +import { config, mount } from '@vue/test-utils' +import searchResults from './search-results.vue' + +const localVue = global.localVue +config.stubs['client-only'] = '' + +describe('search-results.vue', () => { + let wrapper + let mocks + + beforeEach(() => { + mocks = { + $t: jest.fn(), + } + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(searchResults, { mocks, localVue }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.findAll('.search-results')).toHaveLength(1) + }) + + }) +}) From 609836d48cc005e8715e50f03aae2c162fb1bdfe Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 16:25:26 +0200 Subject: [PATCH 30/89] coverage post/_id.spec.js coverage post/create.spec.js --- webapp/pages/post/_id.spec.js | 37 ++++++++++++++++++++++++++++++++ webapp/pages/post/create.spec.js | 30 ++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 webapp/pages/post/_id.spec.js create mode 100644 webapp/pages/post/create.spec.js diff --git a/webapp/pages/post/_id.spec.js b/webapp/pages/post/_id.spec.js new file mode 100644 index 000000000..5b431b445 --- /dev/null +++ b/webapp/pages/post/_id.spec.js @@ -0,0 +1,37 @@ +import { config, mount } from '@vue/test-utils' +import _id from './_id.vue' + +const localVue = global.localVue +config.stubs['nuxt-child'] = '' + +describe('post/_id.vue', () => { + let wrapper + let mocks + + beforeEach(() => { + mocks = { + $t: jest.fn(), + $route: { + params: { + id: '1234', + slug: 'my-post', + }, + }, + } + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(_id, { mocks, localVue }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.findAll('.post-side-navigation')).toHaveLength(1) + }) + + }) +}) diff --git a/webapp/pages/post/create.spec.js b/webapp/pages/post/create.spec.js new file mode 100644 index 000000000..ad87eba63 --- /dev/null +++ b/webapp/pages/post/create.spec.js @@ -0,0 +1,30 @@ +import { mount } from '@vue/test-utils' +import create from './create.vue' + +const localVue = global.localVue + +describe('create.vue', () => { + let wrapper + let mocks + + beforeEach(() => { + mocks = { + $t: jest.fn(), + } + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(create, { mocks, localVue }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.findAll('.contribution-form')).toHaveLength(1) + }) + + }) +}) From d16886c1fd5958076ce708631112d675ef790799 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 16:28:29 +0200 Subject: [PATCH 31/89] lint fixes --- webapp/components/Logo/Logo.spec.js | 3 +-- webapp/pages/moderation/index.spec.js | 3 +-- webapp/pages/post/create.spec.js | 1 - webapp/pages/profile/_id.spec.js | 3 +-- webapp/pages/search/search-results.spec.js | 1 - webapp/test/fileMock.js | 4 ++-- 6 files changed, 5 insertions(+), 10 deletions(-) diff --git a/webapp/components/Logo/Logo.spec.js b/webapp/components/Logo/Logo.spec.js index ceeb50bc9..a712a529b 100644 --- a/webapp/components/Logo/Logo.spec.js +++ b/webapp/components/Logo/Logo.spec.js @@ -9,7 +9,7 @@ describe('Logo.vue', () => { beforeEach(() => { mocks = { - $t: jest.fn() + $t: jest.fn(), } }) @@ -25,6 +25,5 @@ describe('Logo.vue', () => { it('renders', () => { expect(wrapper.findAll('.ds-logo')).toHaveLength(1) }) - }) }) diff --git a/webapp/pages/moderation/index.spec.js b/webapp/pages/moderation/index.spec.js index 4d6c55272..249752aa3 100644 --- a/webapp/pages/moderation/index.spec.js +++ b/webapp/pages/moderation/index.spec.js @@ -10,7 +10,7 @@ describe('moderation/index.vue', () => { beforeEach(() => { mocks = { - $t: jest.fn() + $t: jest.fn(), } }) @@ -26,6 +26,5 @@ describe('moderation/index.vue', () => { it('renders', () => { expect(wrapper.is('.base-card')).toBe(true) }) - }) }) diff --git a/webapp/pages/post/create.spec.js b/webapp/pages/post/create.spec.js index ad87eba63..951edba03 100644 --- a/webapp/pages/post/create.spec.js +++ b/webapp/pages/post/create.spec.js @@ -25,6 +25,5 @@ describe('create.vue', () => { it('renders', () => { expect(wrapper.findAll('.contribution-form')).toHaveLength(1) }) - }) }) diff --git a/webapp/pages/profile/_id.spec.js b/webapp/pages/profile/_id.spec.js index d1df3ac3b..a51b38041 100644 --- a/webapp/pages/profile/_id.spec.js +++ b/webapp/pages/profile/_id.spec.js @@ -10,7 +10,7 @@ describe('profile/_id.vue', () => { beforeEach(() => { mocks = { - $t: jest.fn() + $t: jest.fn(), } }) @@ -26,6 +26,5 @@ describe('profile/_id.vue', () => { it('renders', () => { expect(wrapper.findAll('.nuxt-child')).toHaveLength(1) }) - }) }) diff --git a/webapp/pages/search/search-results.spec.js b/webapp/pages/search/search-results.spec.js index 7cd91fe54..d1fbb33e2 100644 --- a/webapp/pages/search/search-results.spec.js +++ b/webapp/pages/search/search-results.spec.js @@ -26,6 +26,5 @@ describe('search-results.vue', () => { it('renders', () => { expect(wrapper.findAll('.search-results')).toHaveLength(1) }) - }) }) diff --git a/webapp/test/fileMock.js b/webapp/test/fileMock.js index 02e28a211..c77f5e0de 100644 --- a/webapp/test/fileMock.js +++ b/webapp/test/fileMock.js @@ -1,3 +1,3 @@ module.exports = { - render: () => 'test-file-stub' -}; + render: () => 'test-file-stub', +} From 196fbe086481703c0b0951f400718786bca95193 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 16:29:35 +0200 Subject: [PATCH 32/89] lint fixes --- webapp/pages/post/_id.spec.js | 1 - 1 file changed, 1 deletion(-) diff --git a/webapp/pages/post/_id.spec.js b/webapp/pages/post/_id.spec.js index 5b431b445..662f85406 100644 --- a/webapp/pages/post/_id.spec.js +++ b/webapp/pages/post/_id.spec.js @@ -32,6 +32,5 @@ describe('post/_id.vue', () => { it('renders', () => { expect(wrapper.findAll('.post-side-navigation')).toHaveLength(1) }) - }) }) From 43c1c268ca6cf022b349b90056426d3a2c7e31d3 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 16:33:35 +0200 Subject: [PATCH 33/89] coverage post/edit/_id.spec.js --- webapp/pages/post/edit/_id.spec.js | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 webapp/pages/post/edit/_id.spec.js diff --git a/webapp/pages/post/edit/_id.spec.js b/webapp/pages/post/edit/_id.spec.js new file mode 100644 index 000000000..a89acdce2 --- /dev/null +++ b/webapp/pages/post/edit/_id.spec.js @@ -0,0 +1,30 @@ +import { config, mount } from '@vue/test-utils' +import _id from './_id.vue' + +const localVue = global.localVue +// config.stubs['nuxt-child'] = '' + +describe('post/_id.vue', () => { + let wrapper + let mocks + + beforeEach(() => { + mocks = { + $t: jest.fn(), + } + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(_id, { mocks, localVue }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.findAll('.contribution-form')).toHaveLength(1) + }) + }) +}) From 194178854f0c9b04bf93c66388646db6da5bf6ee Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 16:34:14 +0200 Subject: [PATCH 34/89] lint fixes --- webapp/pages/post/edit/_id.spec.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/webapp/pages/post/edit/_id.spec.js b/webapp/pages/post/edit/_id.spec.js index a89acdce2..44cdf9a11 100644 --- a/webapp/pages/post/edit/_id.spec.js +++ b/webapp/pages/post/edit/_id.spec.js @@ -1,8 +1,7 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import _id from './_id.vue' const localVue = global.localVue -// config.stubs['nuxt-child'] = '' describe('post/_id.vue', () => { let wrapper From 26bbf175a483fbf3da4280acf84cf661e738acc1 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 17:29:26 +0200 Subject: [PATCH 35/89] coverage InviteButton.spec.js --- .../InviteButton/InviteButton.spec.js | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 webapp/components/InviteButton/InviteButton.spec.js diff --git a/webapp/components/InviteButton/InviteButton.spec.js b/webapp/components/InviteButton/InviteButton.spec.js new file mode 100644 index 000000000..e10d98290 --- /dev/null +++ b/webapp/components/InviteButton/InviteButton.spec.js @@ -0,0 +1,56 @@ +import Vue from 'vue' +import { config, mount } from '@vue/test-utils' +import InviteButton from './InviteButton.vue' + +const localVue = global.localVue + +config.stubs['v-popover'] = '' + +describe('InviteButton.vue', () => { + let wrapper + let mocks + let propsData + + beforeEach(() => { + mocks = { + $t: jest.fn(), + navigator: { + clipboard: { + writeText: jest.fn(), + }, + }, + } + propsData = {} + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(InviteButton, { mocks, propsData }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.contains('.invite-button')).toBe(true) + }) + + it('open popup', () => { + wrapper.find('.base-button').trigger('click') + expect(wrapper.contains('.invite-button')).toBe(true) + }) + + it('invite codes not available', async () => { + wrapper.find('.base-button').trigger('click') //open popup + wrapper.find('.invite-button').trigger('click') //click copy button + expect(mocks.$t).toHaveBeenCalledWith('invite-codes.not-available') + }) + + it.skip('invite codes copied to clipboard', async () => { + wrapper.find('.base-button').trigger('click') //open popup + wrapper.find('.invite-button').trigger('click') //click copy button + expect(mocks.$t).toHaveBeenCalledWith('invite-codes.not-available') + }) + }) +}) From 7e16b8e72c7366be289e3940c52efc432cd0bf0c Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 19:02:52 +0200 Subject: [PATCH 36/89] lint fixes --- .../components/InviteButton/InviteButton.spec.js | 11 ++++------- webapp/pages/profile/_id.spec.js | 15 +++++++++------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/webapp/components/InviteButton/InviteButton.spec.js b/webapp/components/InviteButton/InviteButton.spec.js index e10d98290..f28045612 100644 --- a/webapp/components/InviteButton/InviteButton.spec.js +++ b/webapp/components/InviteButton/InviteButton.spec.js @@ -1,9 +1,6 @@ -import Vue from 'vue' import { config, mount } from '@vue/test-utils' import InviteButton from './InviteButton.vue' -const localVue = global.localVue - config.stubs['v-popover'] = '' describe('InviteButton.vue', () => { @@ -42,14 +39,14 @@ describe('InviteButton.vue', () => { }) it('invite codes not available', async () => { - wrapper.find('.base-button').trigger('click') //open popup - wrapper.find('.invite-button').trigger('click') //click copy button + wrapper.find('.base-button').trigger('click') // open popup + wrapper.find('.invite-button').trigger('click') // click copy button expect(mocks.$t).toHaveBeenCalledWith('invite-codes.not-available') }) it.skip('invite codes copied to clipboard', async () => { - wrapper.find('.base-button').trigger('click') //open popup - wrapper.find('.invite-button').trigger('click') //click copy button + wrapper.find('.base-button').trigger('click') // open popup + wrapper.find('.invite-button').trigger('click') // click copy button expect(mocks.$t).toHaveBeenCalledWith('invite-codes.not-available') }) }) diff --git a/webapp/pages/profile/_id.spec.js b/webapp/pages/profile/_id.spec.js index a51b38041..aab216569 100644 --- a/webapp/pages/profile/_id.spec.js +++ b/webapp/pages/profile/_id.spec.js @@ -2,21 +2,24 @@ import { config, mount } from '@vue/test-utils' import _id from './_id.vue' const localVue = global.localVue + config.stubs['nuxt-child'] = '' -describe('profile/_id.vue', () => { +describe('Profile _id.vue', () => { let wrapper + let Wrapper let mocks beforeEach(() => { - mocks = { - $t: jest.fn(), - } + mocks = {} }) describe('mount', () => { - const Wrapper = () => { - return mount(_id, { mocks, localVue }) + Wrapper = () => { + return mount(_id, { + mocks, + localVue, + }) } beforeEach(() => { From d295ba3f65a527860ca2e55acd2f8f57493e8ad7 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 19:03:06 +0200 Subject: [PATCH 37/89] coverage admin.spec.js --- webapp/pages/admin.spec.js | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 webapp/pages/admin.spec.js diff --git a/webapp/pages/admin.spec.js b/webapp/pages/admin.spec.js new file mode 100644 index 000000000..20b19a7b9 --- /dev/null +++ b/webapp/pages/admin.spec.js @@ -0,0 +1,32 @@ +import { mount } from '@vue/test-utils' +import moderation from './moderation.vue' + +const localVue = global.localVue + +describe('moderation.vue', () => { + let wrapper + let mocks + + beforeEach(() => { + mocks = { + $t: jest.fn(), + } + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(moderation, { + mocks, + localVue, + }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.is('div')).toBe(true) + }) + }) +}) From c76b549607c2babcc98ae9a13e4e3cb2c44c31c7 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 19:03:21 +0200 Subject: [PATCH 38/89] coverage change-password.spec.js --- .../password-reset/change-password.spec.js | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 webapp/pages/password-reset/change-password.spec.js diff --git a/webapp/pages/password-reset/change-password.spec.js b/webapp/pages/password-reset/change-password.spec.js new file mode 100644 index 000000000..cad031c95 --- /dev/null +++ b/webapp/pages/password-reset/change-password.spec.js @@ -0,0 +1,35 @@ +import { mount } from '@vue/test-utils' +import changePassword from './change-password.vue' + +const localVue = global.localVue + +describe('enter-nonce.vue', () => { + let wrapper + let mocks + + beforeEach(() => { + mocks = { + $t: jest.fn(), + $route: { + query: jest.fn().mockResolvedValue({ email: 'peter@lustig.de', nonce: '12345' }), + }, + $apollo: { + loading: false, + }, + } + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(changePassword, { mocks, localVue }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.findAll('.ds-form')).toHaveLength(1) + }) + }) +}) From ee7c4dc7156cd69aa44a379ef91768fa89d7706c Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 19:03:31 +0200 Subject: [PATCH 39/89] coverage enter-nonce.spec.js --- .../pages/password-reset/enter-nonce.spec.js | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 webapp/pages/password-reset/enter-nonce.spec.js diff --git a/webapp/pages/password-reset/enter-nonce.spec.js b/webapp/pages/password-reset/enter-nonce.spec.js new file mode 100644 index 000000000..42fbaa5a5 --- /dev/null +++ b/webapp/pages/password-reset/enter-nonce.spec.js @@ -0,0 +1,33 @@ +import { config, mount } from '@vue/test-utils' +import enterNonce from './enter-nonce.vue' + +const localVue = global.localVue +config.stubs['nuxt-link'] = '' + +describe('enter-nonce.vue', () => { + let wrapper + let mocks + + beforeEach(() => { + mocks = { + $t: jest.fn(), + $route: { + query: jest.fn().mockResolvedValue({ email: 'peter@lustig.de' }), + }, + } + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(enterNonce, { mocks, localVue }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.findAll('.ds-form')).toHaveLength(1) + }) + }) +}) From f9d5ecec5b1496e05294a50dd4e475b6999c426f Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 19:03:41 +0200 Subject: [PATCH 40/89] coverage login.spec.js --- webapp/pages/login.spec.js | 71 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 webapp/pages/login.spec.js diff --git a/webapp/pages/login.spec.js b/webapp/pages/login.spec.js new file mode 100644 index 000000000..5a64b1280 --- /dev/null +++ b/webapp/pages/login.spec.js @@ -0,0 +1,71 @@ +import { config, mount } from '@vue/test-utils' +import Vuex from 'vuex' +import login from './login.vue' + +const localVue = global.localVue + +config.stubs['client-only'] = '' +config.stubs['nuxt-link'] = '' + +describe('Login.vue', () => { + let mutations + let store + let mocks + let wrapper + + beforeEach(() => { + mutations = { + // 'posts/SELECT_ORDER': jest.fn(), + } + store = new Vuex.Store({ + getters: { + /* 'posts/filter': () => ({}), + 'posts/orderOptions': () => () => [ + { + key: 'store.posts.orderBy.oldest.label', + label: 'store.posts.orderBy.oldest.label', + icon: 'sort-amount-asc', + value: 'createdAt_asc', + }, + { + key: 'store.posts.orderBy.newest.label', + label: 'store.posts.orderBy.newest.label', + icon: 'sort-amount-desc', + value: 'createdAt_desc', + }, + ], + 'posts/selectedOrder': () => () => 'createdAt_desc', + 'posts/orderIcon': () => 'sort-amount-desc', + 'posts/orderBy': () => 'createdAt_desc', + 'auth/user': () => { + return { id: 'u23' } + }, */ + }, + mutations, + }) + mocks = { + $t: jest.fn(), + $i18n: { + locale: () => 'en', + }, + } + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(login, { + store, + mocks, + localVue, + }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.findAll('.login-form')).toHaveLength(1) + }) + }) +}) From 47813b91762fdb489ab4d64278c2bdc61daed436 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 19:03:50 +0200 Subject: [PATCH 41/89] coverage request.spec.js --- webapp/pages/password-reset/request.spec.js | 54 +++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 webapp/pages/password-reset/request.spec.js diff --git a/webapp/pages/password-reset/request.spec.js b/webapp/pages/password-reset/request.spec.js new file mode 100644 index 000000000..53183a3be --- /dev/null +++ b/webapp/pages/password-reset/request.spec.js @@ -0,0 +1,54 @@ +import { config, mount } from '@vue/test-utils' +import request from './request.vue' + +const localVue = global.localVue +// config.stubs['sweetalert-icon'] = '' +config.stubs['nuxt-link'] = '' + +describe('request.vue', () => { + let wrapper + let mocks + + beforeEach(() => { + mocks = { + /* $toast: { + success: jest.fn(), + error: jest.fn(), + }, */ + $t: jest.fn(), + $apollo: { + loading: false, + // mutate: jest.fn().mockResolvedValue({ data: { reqestPasswordReset: true } }), + }, + /* $router: { + push: jest.fn() + } */ + } + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(request, { mocks, localVue }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.findAll('.ds-form')).toHaveLength(1) + }) + + it.skip('calls "handlePasswordResetRequested" on submit', async () => { + await jest.useFakeTimers() + await wrapper.find('input#email').setValue('mail@example.org') + await wrapper.findAll('.ds-form').trigger('submit') + await jest.runAllTimers() + expect(wrapper.emitted('handleSubmitted')).toEqual([[{ email: 'mail@example.org' }]]) + expect(mocks.$router.push).toHaveBeenCalledWith({ + path: 'enter-nonce', + query: { email: 'mail@example.org' }, + }) + }) + }) +}) From 51dc5375a0881f9dfe47564683a43046a2775b33 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 19:04:03 +0200 Subject: [PATCH 42/89] coverage terms-and-conditions-confirm.spec.js --- .../terms-and-conditions-confirm.spec.js | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 webapp/pages/terms-and-conditions-confirm.spec.js diff --git a/webapp/pages/terms-and-conditions-confirm.spec.js b/webapp/pages/terms-and-conditions-confirm.spec.js new file mode 100644 index 000000000..7b3ddac3a --- /dev/null +++ b/webapp/pages/terms-and-conditions-confirm.spec.js @@ -0,0 +1,34 @@ +import { config, mount } from '@vue/test-utils' +import TermsAndConditionsConfirm from './terms-and-conditions-confirm.vue' + +const localVue = global.localVue + +config.stubs['nuxt-link'] = '' + +describe('terms-and-conditions-confirm.vue', () => { + let wrapper + let mocks + + beforeEach(() => { + mocks = { + $t: jest.fn(), + } + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(TermsAndConditionsConfirm, { + mocks, + localVue, + }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.is('div')).toBe(true) + }) + }) +}) From 72ce38ddae2cf92e6c34c17c39e7480058363383 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 19:10:31 +0200 Subject: [PATCH 43/89] fixed test swap --- webapp/pages/admin.spec.js | 6 +++--- webapp/pages/moderation.spec.js | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 webapp/pages/moderation.spec.js diff --git a/webapp/pages/admin.spec.js b/webapp/pages/admin.spec.js index 20b19a7b9..7f5c44d48 100644 --- a/webapp/pages/admin.spec.js +++ b/webapp/pages/admin.spec.js @@ -1,9 +1,9 @@ import { mount } from '@vue/test-utils' -import moderation from './moderation.vue' +import admin from './admin.vue' const localVue = global.localVue -describe('moderation.vue', () => { +describe('admin.vue', () => { let wrapper let mocks @@ -15,7 +15,7 @@ describe('moderation.vue', () => { describe('mount', () => { const Wrapper = () => { - return mount(moderation, { + return mount(admin, { mocks, localVue, }) diff --git a/webapp/pages/moderation.spec.js b/webapp/pages/moderation.spec.js new file mode 100644 index 000000000..20b19a7b9 --- /dev/null +++ b/webapp/pages/moderation.spec.js @@ -0,0 +1,32 @@ +import { mount } from '@vue/test-utils' +import moderation from './moderation.vue' + +const localVue = global.localVue + +describe('moderation.vue', () => { + let wrapper + let mocks + + beforeEach(() => { + mocks = { + $t: jest.fn(), + } + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(moderation, { + mocks, + localVue, + }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.is('div')).toBe(true) + }) + }) +}) From 609dc921106b7633ffe283f505420d3065f1cdc1 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 19:52:18 +0200 Subject: [PATCH 44/89] coverage code-of-conduct.spec.js --- webapp/pages/code-of-conduct.spec.js | 38 ++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 webapp/pages/code-of-conduct.spec.js diff --git a/webapp/pages/code-of-conduct.spec.js b/webapp/pages/code-of-conduct.spec.js new file mode 100644 index 000000000..75e244c79 --- /dev/null +++ b/webapp/pages/code-of-conduct.spec.js @@ -0,0 +1,38 @@ +import { mount } from '@vue/test-utils' +import CodeOfConduct from './code-of-conduct.vue' +import VueMeta from 'vue-meta' + +const localVue = global.localVue +localVue.use(VueMeta, { keyName: 'head' }) + +describe('code-of-conduct.vue', () => { + let wrapper + let mocks + + beforeEach(() => { + mocks = { + $t: (t) => t, + } + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(CodeOfConduct, { + mocks, + localVue, + }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.is('div')).toBe(true) + }) + + it('has correct content', () => { + expect(wrapper.vm.$metaInfo.title).toBe('site.code-of-conduct') + }) + }) +}) From e397f131f7d5bbff5b5d8cb86314ecbbc514d6ee Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 19:52:26 +0200 Subject: [PATCH 45/89] coverage data-privacy.spec.js --- webapp/pages/data-privacy.spec.js | 38 +++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 webapp/pages/data-privacy.spec.js diff --git a/webapp/pages/data-privacy.spec.js b/webapp/pages/data-privacy.spec.js new file mode 100644 index 000000000..a919bb742 --- /dev/null +++ b/webapp/pages/data-privacy.spec.js @@ -0,0 +1,38 @@ +import { mount } from '@vue/test-utils' +import DataPrivacy from './data-privacy.vue' +import VueMeta from 'vue-meta' + +const localVue = global.localVue +localVue.use(VueMeta, { keyName: 'head' }) + +describe('data-privacy.vue', () => { + let wrapper + let mocks + + beforeEach(() => { + mocks = { + $t: (t) => t, + } + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(DataPrivacy, { + mocks, + localVue, + }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.is('div')).toBe(true) + }) + + it('has correct content', () => { + expect(wrapper.vm.$metaInfo.title).toBe('site.data-privacy') + }) + }) +}) From 45f7ece24876ffed532d72ae9a1c2c97bff47a82 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 19:52:36 +0200 Subject: [PATCH 46/89] coverage imprint.spec.js --- webapp/pages/imprint.spec.js | 38 ++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 webapp/pages/imprint.spec.js diff --git a/webapp/pages/imprint.spec.js b/webapp/pages/imprint.spec.js new file mode 100644 index 000000000..1a84b5794 --- /dev/null +++ b/webapp/pages/imprint.spec.js @@ -0,0 +1,38 @@ +import { mount } from '@vue/test-utils' +import Imprint from './imprint.vue' +import VueMeta from 'vue-meta' + +const localVue = global.localVue +localVue.use(VueMeta, { keyName: 'head' }) + +describe('imprint.vue', () => { + let wrapper + let mocks + + beforeEach(() => { + mocks = { + $t: (t) => t, + } + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(Imprint, { + mocks, + localVue, + }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.is('div')).toBe(true) + }) + + it('has correct content', () => { + expect(wrapper.vm.$metaInfo.title).toBe('site.imprint') + }) + }) +}) From fb8b94803777af869007f0e449f6e7da2456ea43 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 19:52:45 +0200 Subject: [PATCH 47/89] coverage logout.spec.js --- webapp/pages/logout.spec.js | 43 +++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 webapp/pages/logout.spec.js diff --git a/webapp/pages/logout.spec.js b/webapp/pages/logout.spec.js new file mode 100644 index 000000000..4ec777bf6 --- /dev/null +++ b/webapp/pages/logout.spec.js @@ -0,0 +1,43 @@ +import { mount } from '@vue/test-utils' +import Logout from './logout.vue' + +const localVue = global.localVue + +describe('logout.vue', () => { + let wrapper + let mocks + + beforeEach(() => { + mocks = { + $t: jest.fn(), + $store: { + dispatch: jest.fn(), + }, + $router: { + replace: jest.fn(), + }, + } + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(Logout, { + mocks, + localVue, + }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.is('div')).toBe(true) + }) + + it('logs out and redirects to login', () => { + expect(mocks.$store.dispatch).toBeCalledWith('auth/logout') + expect(mocks.$router.replace).toBeCalledWith('/login') + }) + }) +}) From 57f074dacdf1e96114a2d9a856a6bc49b6299ed8 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 19:52:54 +0200 Subject: [PATCH 48/89] coverage password-reset.spec.js --- webapp/pages/password-reset.spec.js | 38 +++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 webapp/pages/password-reset.spec.js diff --git a/webapp/pages/password-reset.spec.js b/webapp/pages/password-reset.spec.js new file mode 100644 index 000000000..416495910 --- /dev/null +++ b/webapp/pages/password-reset.spec.js @@ -0,0 +1,38 @@ +import { config, mount } from '@vue/test-utils' +import PasswordReset from './password-reset.vue' + +const localVue = global.localVue + +config.stubs['client-only'] = '' +config.stubs['nuxt-child'] = '' + +describe('password-reset.vue', () => { + let wrapper + let mocks + + beforeEach(() => { + mocks = { + $t: (t) => t, + $i18n: { + locale: () => 'en', + }, + } + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(PasswordReset, { + mocks, + localVue, + }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.is('div')).toBe(true) + }) + }) +}) From 02c3e0a763efa924b4939e97f16f808b833529d2 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 19:53:03 +0200 Subject: [PATCH 49/89] coverage settings.spec.js --- webapp/pages/settings.spec.js | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 webapp/pages/settings.spec.js diff --git a/webapp/pages/settings.spec.js b/webapp/pages/settings.spec.js new file mode 100644 index 000000000..353f1e6b8 --- /dev/null +++ b/webapp/pages/settings.spec.js @@ -0,0 +1,34 @@ +import { config, mount } from '@vue/test-utils' +import settings from './settings.vue' + +const localVue = global.localVue + +config.stubs['nuxt-child'] = '' + +describe('settings.vue', () => { + let wrapper + let mocks + + beforeEach(() => { + mocks = { + $t: jest.fn(), + } + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(settings, { + mocks, + localVue, + }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.is('div')).toBe(true) + }) + }) +}) From 427c6f04889b048ab7a9974d755bbe5ca4ddd7d1 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 19:53:29 +0200 Subject: [PATCH 50/89] title test terms-and-conditions-confirm.spec.js --- webapp/pages/terms-and-conditions-confirm.spec.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/webapp/pages/terms-and-conditions-confirm.spec.js b/webapp/pages/terms-and-conditions-confirm.spec.js index 7b3ddac3a..380b6dbf0 100644 --- a/webapp/pages/terms-and-conditions-confirm.spec.js +++ b/webapp/pages/terms-and-conditions-confirm.spec.js @@ -1,7 +1,9 @@ import { config, mount } from '@vue/test-utils' import TermsAndConditionsConfirm from './terms-and-conditions-confirm.vue' +import VueMeta from 'vue-meta' const localVue = global.localVue +localVue.use(VueMeta, { keyName: 'head' }) config.stubs['nuxt-link'] = '' @@ -11,7 +13,7 @@ describe('terms-and-conditions-confirm.vue', () => { beforeEach(() => { mocks = { - $t: jest.fn(), + $t: (t) => t, } }) @@ -30,5 +32,9 @@ describe('terms-and-conditions-confirm.vue', () => { it('renders', () => { expect(wrapper.is('div')).toBe(true) }) + + it('has correct content', () => { + expect(wrapper.vm.$metaInfo.title).toBe('termsAndConditions.newTermsAndConditions') + }) }) }) From 96f84e33f7c1872b40cf28ff7482533caa8b3ece Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 19:53:41 +0200 Subject: [PATCH 51/89] coverage terms-and-conditions.spec.js --- webapp/pages/terms-and-conditions.spec.js | 38 +++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 webapp/pages/terms-and-conditions.spec.js diff --git a/webapp/pages/terms-and-conditions.spec.js b/webapp/pages/terms-and-conditions.spec.js new file mode 100644 index 000000000..d6ae6dce7 --- /dev/null +++ b/webapp/pages/terms-and-conditions.spec.js @@ -0,0 +1,38 @@ +import { mount } from '@vue/test-utils' +import TermsAndConditions from './terms-and-conditions.vue' +import VueMeta from 'vue-meta' + +const localVue = global.localVue +localVue.use(VueMeta, { keyName: 'head' }) + +describe('terms-and-conditions.vue', () => { + let wrapper + let mocks + + beforeEach(() => { + mocks = { + $t: (t) => t, + } + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(TermsAndConditions, { + mocks, + localVue, + }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.is('div')).toBe(true) + }) + + it('has correct content', () => { + expect(wrapper.vm.$metaInfo.title).toBe('site.termsAndConditions') + }) + }) +}) From 3fda4f67704e4149de0a80b3b7a2ac146a4fff2f Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 20:35:37 +0200 Subject: [PATCH 52/89] fixed vue warning --- webapp/components/Hashtag/Hashtag.spec.js | 1 + webapp/pages/admin.spec.js | 4 +++- webapp/pages/moderation.spec.js | 4 +++- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/webapp/components/Hashtag/Hashtag.spec.js b/webapp/components/Hashtag/Hashtag.spec.js index 4a420d7d8..442f268d5 100644 --- a/webapp/components/Hashtag/Hashtag.spec.js +++ b/webapp/components/Hashtag/Hashtag.spec.js @@ -5,6 +5,7 @@ import Hashtag from './Hashtag' const localVue = global.localVue config.stubs['nuxt-link'] = '' +config.stubs['nuxt-child'] = '' describe('Hashtag', () => { let id diff --git a/webapp/pages/admin.spec.js b/webapp/pages/admin.spec.js index 7f5c44d48..fc3849fc4 100644 --- a/webapp/pages/admin.spec.js +++ b/webapp/pages/admin.spec.js @@ -1,6 +1,8 @@ -import { mount } from '@vue/test-utils' +import { config, mount } from '@vue/test-utils' import admin from './admin.vue' +config.stubs['nuxt-child'] = '' + const localVue = global.localVue describe('admin.vue', () => { diff --git a/webapp/pages/moderation.spec.js b/webapp/pages/moderation.spec.js index 20b19a7b9..2eeae9f7c 100644 --- a/webapp/pages/moderation.spec.js +++ b/webapp/pages/moderation.spec.js @@ -1,6 +1,8 @@ -import { mount } from '@vue/test-utils' +import { config, mount } from '@vue/test-utils' import moderation from './moderation.vue' +config.stubs['nuxt-child'] = '' + const localVue = global.localVue describe('moderation.vue', () => { From 782f5dcce8bbb456dedac9347f25288a25b7395c Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 20:35:45 +0200 Subject: [PATCH 53/89] coverage data-download.spec.js --- webapp/pages/settings/data-download.spec.js | 32 +++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 webapp/pages/settings/data-download.spec.js diff --git a/webapp/pages/settings/data-download.spec.js b/webapp/pages/settings/data-download.spec.js new file mode 100644 index 000000000..b50c8d046 --- /dev/null +++ b/webapp/pages/settings/data-download.spec.js @@ -0,0 +1,32 @@ +import { mount } from '@vue/test-utils' +import DataDownload from './data-download.vue' + +const localVue = global.localVue + +describe('data-download.vue', () => { + let wrapper + let mocks + + beforeEach(() => { + mocks = { + $t: jest.fn(), + } + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(DataDownload, { + mocks, + localVue, + }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.is('.base-card')).toBe(true) + }) + }) +}) From af6bc6ea2f4d2c68ab3a11139de228ee1c861bab Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 20:35:54 +0200 Subject: [PATCH 54/89] coverage delete-account.spec.js --- webapp/pages/settings/delete-account.spec.js | 42 ++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 webapp/pages/settings/delete-account.spec.js diff --git a/webapp/pages/settings/delete-account.spec.js b/webapp/pages/settings/delete-account.spec.js new file mode 100644 index 000000000..6564adfb8 --- /dev/null +++ b/webapp/pages/settings/delete-account.spec.js @@ -0,0 +1,42 @@ +import Vuex from 'vuex' +import { mount } from '@vue/test-utils' +import DeleteAccount from './delete-account.vue' + +const localVue = global.localVue + +describe('delete-account.vue', () => { + let wrapper + let mocks + let store + + beforeEach(() => { + mocks = { + $t: jest.fn(), + } + store = new Vuex.Store({ + getters: { + 'auth/user': () => { + return { id: 'u343', name: 'Delete MyAccount' } + }, + } + }) + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(DeleteAccount, { + store, + mocks, + localVue, + }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.is('.delete-data')).toBe(true) + }) + }) +}) From 89713c50e35270df58933809620a8fdfcb8a83e9 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 20:36:02 +0200 Subject: [PATCH 55/89] coverage embeds.spec.js --- webapp/pages/settings/embeds.spec.js | 42 ++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 webapp/pages/settings/embeds.spec.js diff --git a/webapp/pages/settings/embeds.spec.js b/webapp/pages/settings/embeds.spec.js new file mode 100644 index 000000000..f9ca8df56 --- /dev/null +++ b/webapp/pages/settings/embeds.spec.js @@ -0,0 +1,42 @@ +import Vuex from 'vuex' +import { mount } from '@vue/test-utils' +import Embeds from './embeds.vue' + +const localVue = global.localVue + +describe('embeds.vue', () => { + let wrapper + let mocks + let store + + beforeEach(() => { + mocks = { + $t: jest.fn(), + } + store = new Vuex.Store({ + getters: { + 'auth/user': () => { + return { id: 'u343', name: 'Delete MyAccount', allowEmbedIframes: true } + }, + } + }) + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(Embeds, { + store, + mocks, + localVue, + }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.is('.base-card')).toBe(true) + }) + }) +}) From 9ce0cb91f41650b5644bd7a1cc7c74db2f12d6f4 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 20:36:10 +0200 Subject: [PATCH 56/89] coverage invites.spec.js --- webapp/pages/settings/invites.spec.js | 32 +++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 webapp/pages/settings/invites.spec.js diff --git a/webapp/pages/settings/invites.spec.js b/webapp/pages/settings/invites.spec.js new file mode 100644 index 000000000..cbc8d1765 --- /dev/null +++ b/webapp/pages/settings/invites.spec.js @@ -0,0 +1,32 @@ +import { mount } from '@vue/test-utils' +import Invites from './invites.vue' + +const localVue = global.localVue + +describe('invites.vue', () => { + let wrapper + let mocks + + beforeEach(() => { + mocks = { + $t: jest.fn(), + } + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(Invites, { + mocks, + localVue, + }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.is('.base-card')).toBe(true) + }) + }) +}) From aa32e70c45b0c64efd5614f412a578ad195dd125 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 20:36:16 +0200 Subject: [PATCH 57/89] coverage languages.spec.js --- webapp/pages/settings/languages.spec.js | 32 +++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 webapp/pages/settings/languages.spec.js diff --git a/webapp/pages/settings/languages.spec.js b/webapp/pages/settings/languages.spec.js new file mode 100644 index 000000000..0e3665739 --- /dev/null +++ b/webapp/pages/settings/languages.spec.js @@ -0,0 +1,32 @@ +import { mount } from '@vue/test-utils' +import Languages from './languages.vue' + +const localVue = global.localVue + +describe('languages.vue', () => { + let wrapper + let mocks + + beforeEach(() => { + mocks = { + $t: jest.fn(), + } + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(Languages, { + mocks, + localVue, + }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.is('.base-card')).toBe(true) + }) + }) +}) From e5ff917d8dc50887467d07d4c71d205deea038d0 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 20:36:23 +0200 Subject: [PATCH 58/89] coverage my-organizations.spec.js --- .../pages/settings/my-organizations.spec.js | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 webapp/pages/settings/my-organizations.spec.js diff --git a/webapp/pages/settings/my-organizations.spec.js b/webapp/pages/settings/my-organizations.spec.js new file mode 100644 index 000000000..7f11b9871 --- /dev/null +++ b/webapp/pages/settings/my-organizations.spec.js @@ -0,0 +1,32 @@ +import { mount } from '@vue/test-utils' +import MyOrganizations from './my-organizations.vue' + +const localVue = global.localVue + +describe('my-organizations.vue', () => { + let wrapper + let mocks + + beforeEach(() => { + mocks = { + $t: jest.fn(), + } + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(MyOrganizations, { + mocks, + localVue, + }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.is('.base-card')).toBe(true) + }) + }) +}) From e6de7b1de8195aecd226cc6658ca3b9b1c35d88a Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 20:36:34 +0200 Subject: [PATCH 59/89] coverage privacy.spec.js --- webapp/pages/settings/privacy.spec.js | 42 +++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 webapp/pages/settings/privacy.spec.js diff --git a/webapp/pages/settings/privacy.spec.js b/webapp/pages/settings/privacy.spec.js new file mode 100644 index 000000000..805677e34 --- /dev/null +++ b/webapp/pages/settings/privacy.spec.js @@ -0,0 +1,42 @@ +import Vuex from 'vuex' +import { mount } from '@vue/test-utils' +import Privacy from './privacy.vue' + +const localVue = global.localVue + +describe('privacy.vue', () => { + let wrapper + let mocks + let store + + beforeEach(() => { + mocks = { + $t: jest.fn(), + } + store = new Vuex.Store({ + getters: { + 'auth/user': () => { + return { id: 'u343', name: 'Delete MyAccount', showShoutsPublicly: true } + }, + }, + }) + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(Privacy, { + store, + mocks, + localVue, + }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.is('.base-card')).toBe(true) + }) + }) +}) From f3a7604ab9675339cebdc05502e5449979d430b0 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 20:36:46 +0200 Subject: [PATCH 60/89] coverage security.spec.js --- webapp/pages/settings/security.spec.js | 32 ++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 webapp/pages/settings/security.spec.js diff --git a/webapp/pages/settings/security.spec.js b/webapp/pages/settings/security.spec.js new file mode 100644 index 000000000..dee9e640a --- /dev/null +++ b/webapp/pages/settings/security.spec.js @@ -0,0 +1,32 @@ +import { mount } from '@vue/test-utils' +import Security from './security.vue' + +const localVue = global.localVue + +describe('security.vue', () => { + let wrapper + let mocks + + beforeEach(() => { + mocks = { + $t: jest.fn(), + } + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(Security, { + mocks, + localVue, + }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.is('.base-card')).toBe(true) + }) + }) +}) From b43785499cced69149f6fb7dc52b43cc5dac5f65 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 20:48:18 +0200 Subject: [PATCH 61/89] lint fixes --- webapp/pages/settings/delete-account.spec.js | 2 +- webapp/pages/settings/embeds.spec.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/webapp/pages/settings/delete-account.spec.js b/webapp/pages/settings/delete-account.spec.js index 6564adfb8..aa8ffd954 100644 --- a/webapp/pages/settings/delete-account.spec.js +++ b/webapp/pages/settings/delete-account.spec.js @@ -18,7 +18,7 @@ describe('delete-account.vue', () => { 'auth/user': () => { return { id: 'u343', name: 'Delete MyAccount' } }, - } + }, }) }) diff --git a/webapp/pages/settings/embeds.spec.js b/webapp/pages/settings/embeds.spec.js index f9ca8df56..75247ddf0 100644 --- a/webapp/pages/settings/embeds.spec.js +++ b/webapp/pages/settings/embeds.spec.js @@ -18,7 +18,7 @@ describe('embeds.vue', () => { 'auth/user': () => { return { id: 'u343', name: 'Delete MyAccount', allowEmbedIframes: true } }, - } + }, }) }) From d151251c951916e859ad1406456ffec4967ec3ab Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 25 Apr 2021 20:48:32 +0200 Subject: [PATCH 62/89] require 65% frontend coverage --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 240c54ddf..e6fbd018e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -268,7 +268,7 @@ jobs: report_name: Coverage Webapp type: lcov result_path: ./coverage/lcov.info - min_coverage: 60 + min_coverage: 65 token: ${{ github.token }} ############################################################################## From 44038a46ab72187518f6d252894787e89b249771 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 26 Apr 2021 00:34:17 +0200 Subject: [PATCH 63/89] test head post/_id/_slug/index.spec.js --- webapp/pages/post/_id/_slug/index.spec.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/webapp/pages/post/_id/_slug/index.spec.js b/webapp/pages/post/_id/_slug/index.spec.js index bc54edf53..4289bb53d 100644 --- a/webapp/pages/post/_id/_slug/index.spec.js +++ b/webapp/pages/post/_id/_slug/index.spec.js @@ -4,6 +4,7 @@ import Vue from 'vue' import PostSlug from './index.vue' import CommentList from '~/components/CommentList/CommentList' import HcHashtag from '~/components/Hashtag/Hashtag' +import VueMeta from 'vue-meta' config.stubs['client-only'] = '' config.stubs['nuxt-link'] = '' @@ -11,6 +12,7 @@ config.stubs['router-link'] = '' const localVue = global.localVue localVue.directive('scrollTo', jest.fn()) +localVue.use(VueMeta, { keyName: 'head' }) describe('PostSlug', () => { let wrapper, Wrapper, backendData, mocks, stubs @@ -91,6 +93,11 @@ describe('PostSlug', () => { return wrapper } + it('has correct content', async () => { + wrapper = await Wrapper() + expect(wrapper.vm.$metaInfo.title).toBe('loading') + }) + describe('given author is `null`', () => { it('does not crash', async () => { backendData = { From 256a4ed03e04960c59beff343e9730cfedb82e36 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 26 Apr 2021 00:34:32 +0200 Subject: [PATCH 64/89] coverage basic.spec.js --- webapp/layouts/basic.spec.js | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 webapp/layouts/basic.spec.js diff --git a/webapp/layouts/basic.spec.js b/webapp/layouts/basic.spec.js new file mode 100644 index 000000000..471facddd --- /dev/null +++ b/webapp/layouts/basic.spec.js @@ -0,0 +1,34 @@ +import { config, shallowMount } from '@vue/test-utils' +import Basic from './basic.vue' + +const localVue = global.localVue + +config.stubs['nuxt'] = '' + +describe('basic.vue', () => { + let wrapper + let mocks + + beforeEach(() => { + mocks = { + $t: jest.fn(), + } + }) + + describe('shallow mount', () => { + const Wrapper = () => { + return shallowMount(Basic, { + mocks, + localVue, + }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.is('.layout-blank')).toBe(true) + }) + }) +}) From 3484541a9138925fa5f50ce82436b3fb9729776c Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 26 Apr 2021 00:34:44 +0200 Subject: [PATCH 65/89] coverage blank.spec.js --- webapp/layouts/blank.spec.js | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 webapp/layouts/blank.spec.js diff --git a/webapp/layouts/blank.spec.js b/webapp/layouts/blank.spec.js new file mode 100644 index 000000000..dca11486a --- /dev/null +++ b/webapp/layouts/blank.spec.js @@ -0,0 +1,34 @@ +import { config, shallowMount } from '@vue/test-utils' +import Blank from './blank.vue' + +const localVue = global.localVue + +config.stubs['nuxt'] = '' + +describe('blank.vue', () => { + let wrapper + let mocks + + beforeEach(() => { + mocks = { + $t: jest.fn(), + } + }) + + describe('shallow mount', () => { + const Wrapper = () => { + return shallowMount(Blank, { + mocks, + localVue, + }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.is('.layout-blank')).toBe(true) + }) + }) +}) From f97e91162621804fabe70ccdad58cc54bae489e1 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 26 Apr 2021 00:34:58 +0200 Subject: [PATCH 66/89] coverage categories.spec.js --- webapp/pages/admin/categories.spec.js | 32 +++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 webapp/pages/admin/categories.spec.js diff --git a/webapp/pages/admin/categories.spec.js b/webapp/pages/admin/categories.spec.js new file mode 100644 index 000000000..55715e74b --- /dev/null +++ b/webapp/pages/admin/categories.spec.js @@ -0,0 +1,32 @@ +import { mount } from '@vue/test-utils' +import Categories from './categories.vue' + +const localVue = global.localVue + +describe('categories.vue', () => { + let wrapper + let mocks + + beforeEach(() => { + mocks = { + $t: jest.fn(), + } + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(Categories, { + mocks, + localVue, + }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.is('.base-card')).toBe(true) + }) + }) +}) From 37c04849dd8a981c230bda268dafa4f448d595f0 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 26 Apr 2021 00:35:09 +0200 Subject: [PATCH 67/89] coverage default.spec.js --- webapp/layouts/default.spec.js | 45 ++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 webapp/layouts/default.spec.js diff --git a/webapp/layouts/default.spec.js b/webapp/layouts/default.spec.js new file mode 100644 index 000000000..13933d821 --- /dev/null +++ b/webapp/layouts/default.spec.js @@ -0,0 +1,45 @@ +import Vuex from 'vuex' +import { config, shallowMount } from '@vue/test-utils' +import Default from './default.vue' + +const localVue = global.localVue + +config.stubs['nuxt'] = '' +config.stubs['client-only'] = '' +config.stubs['nuxt-link'] = '' + +describe('default.vue', () => { + let wrapper + let mocks + let store + + beforeEach(() => { + mocks = { + $t: jest.fn(), + $env: { + INVITE_REGISTRATION: true + }, + } + store = new Vuex.Store({ + getters: {}, + }) + }) + + describe('shallow mount', () => { + const Wrapper = () => { + return shallowMount(Default, { + store, + mocks, + localVue, + }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.is('.layout-default')).toBe(true) + }) + }) +}) From bf4846faadf9919c3cfc63ad1a1f3994d4ceae9f Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 26 Apr 2021 00:35:17 +0200 Subject: [PATCH 68/89] coverage donations.spec.js --- webapp/pages/admin/donations.spec.js | 32 ++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 webapp/pages/admin/donations.spec.js diff --git a/webapp/pages/admin/donations.spec.js b/webapp/pages/admin/donations.spec.js new file mode 100644 index 000000000..2bc219dce --- /dev/null +++ b/webapp/pages/admin/donations.spec.js @@ -0,0 +1,32 @@ +import { mount } from '@vue/test-utils' +import Donations from './donations.vue' + +const localVue = global.localVue + +describe('donations.vue', () => { + let wrapper + let mocks + + beforeEach(() => { + mocks = { + $t: jest.fn(), + } + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(Donations, { + mocks, + localVue, + }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.is('.base-card')).toBe(true) + }) + }) +}) From 07c9110693af2a7873e4361367a3e336c300dd18 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 26 Apr 2021 00:35:26 +0200 Subject: [PATCH 69/89] coverage hashtags.spec.js --- webapp/pages/admin/hashtags.spec.js | 32 +++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 webapp/pages/admin/hashtags.spec.js diff --git a/webapp/pages/admin/hashtags.spec.js b/webapp/pages/admin/hashtags.spec.js new file mode 100644 index 000000000..cd2d308d1 --- /dev/null +++ b/webapp/pages/admin/hashtags.spec.js @@ -0,0 +1,32 @@ +import { mount } from '@vue/test-utils' +import Hashtags from './hashtags.vue' + +const localVue = global.localVue + +describe('hashtags.vue', () => { + let wrapper + let mocks + + beforeEach(() => { + mocks = { + $t: jest.fn(), + } + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(Hashtags, { + mocks, + localVue, + }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.is('.base-card')).toBe(true) + }) + }) +}) From b99fbebd820ba853947d3b4b7b1d33774f5e3c6d Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 26 Apr 2021 00:35:45 +0200 Subject: [PATCH 70/89] coverage invite.spec.js --- webapp/pages/admin/invite.spec.js | 35 +++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 webapp/pages/admin/invite.spec.js diff --git a/webapp/pages/admin/invite.spec.js b/webapp/pages/admin/invite.spec.js new file mode 100644 index 000000000..196f8fdc4 --- /dev/null +++ b/webapp/pages/admin/invite.spec.js @@ -0,0 +1,35 @@ +import { mount } from '@vue/test-utils' +import Invite from './invite.vue' + +const localVue = global.localVue + +describe('invite.vue', () => { + let wrapper + let mocks + + beforeEach(() => { + mocks = { + $t: jest.fn(), + $apollo: { + loading: false, + } + } + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(Invite, { + mocks, + localVue, + }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.is('.ds-section')).toBe(true) + }) + }) +}) From 662de165ca345153baf89036ffad59b7f0f7dce2 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 26 Apr 2021 00:35:54 +0200 Subject: [PATCH 71/89] coverage notifications.spec.js --- webapp/pages/admin/notifications.spec.js | 35 ++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 webapp/pages/admin/notifications.spec.js diff --git a/webapp/pages/admin/notifications.spec.js b/webapp/pages/admin/notifications.spec.js new file mode 100644 index 000000000..8c2382ccf --- /dev/null +++ b/webapp/pages/admin/notifications.spec.js @@ -0,0 +1,35 @@ +import { mount } from '@vue/test-utils' +import Notifications from './notifications.vue' + +const localVue = global.localVue + +describe('notifications.vue', () => { + let wrapper + let mocks + + beforeEach(() => { + mocks = { + $t: jest.fn(), + $apollo: { + loading: false, + } + } + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(Notifications, { + mocks, + localVue, + }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.is('.base-card')).toBe(true) + }) + }) +}) From 4fc504ce8ad381fb8a83110cd41b45b90a9d7c98 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 26 Apr 2021 00:36:02 +0200 Subject: [PATCH 72/89] coverage organizations.spec.js --- webapp/pages/admin/organizations.spec.js | 35 ++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 webapp/pages/admin/organizations.spec.js diff --git a/webapp/pages/admin/organizations.spec.js b/webapp/pages/admin/organizations.spec.js new file mode 100644 index 000000000..4798257de --- /dev/null +++ b/webapp/pages/admin/organizations.spec.js @@ -0,0 +1,35 @@ +import { mount } from '@vue/test-utils' +import Organizations from './organizations.vue' + +const localVue = global.localVue + +describe('organizations.vue', () => { + let wrapper + let mocks + + beforeEach(() => { + mocks = { + $t: jest.fn(), + $apollo: { + loading: false, + } + } + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(Organizations, { + mocks, + localVue, + }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.is('.base-card')).toBe(true) + }) + }) +}) From f6075bc261e9effc18acafcde4d50b01fdfb9fec Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 26 Apr 2021 00:36:10 +0200 Subject: [PATCH 73/89] coverage pages.spec.js --- webapp/pages/admin/pages.spec.js | 35 ++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 webapp/pages/admin/pages.spec.js diff --git a/webapp/pages/admin/pages.spec.js b/webapp/pages/admin/pages.spec.js new file mode 100644 index 000000000..1a0a6d46b --- /dev/null +++ b/webapp/pages/admin/pages.spec.js @@ -0,0 +1,35 @@ +import { mount } from '@vue/test-utils' +import Pages from './pages.vue' + +const localVue = global.localVue + +describe('pages.vue', () => { + let wrapper + let mocks + + beforeEach(() => { + mocks = { + $t: jest.fn(), + $apollo: { + loading: false, + } + } + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(Pages, { + mocks, + localVue, + }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.is('.base-card')).toBe(true) + }) + }) +}) From fc3e404ded2ea723e2d948c91d7b4d2277d38c67 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 26 Apr 2021 00:36:22 +0200 Subject: [PATCH 74/89] coverage settings.spec.js --- webapp/pages/admin/settings.spec.js | 35 +++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 webapp/pages/admin/settings.spec.js diff --git a/webapp/pages/admin/settings.spec.js b/webapp/pages/admin/settings.spec.js new file mode 100644 index 000000000..417c6678c --- /dev/null +++ b/webapp/pages/admin/settings.spec.js @@ -0,0 +1,35 @@ +import { mount } from '@vue/test-utils' +import Settings from './settings.vue' + +const localVue = global.localVue + +describe('settings.vue', () => { + let wrapper + let mocks + + beforeEach(() => { + mocks = { + $t: jest.fn(), + $apollo: { + loading: false, + } + } + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(Settings, { + mocks, + localVue, + }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.is('.base-card')).toBe(true) + }) + }) +}) From 002c9f57860940649b02deef2b802ec2bae8287d Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 26 Apr 2021 00:36:32 +0200 Subject: [PATCH 75/89] head test search-results.spec.js --- webapp/pages/search/search-results.spec.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/webapp/pages/search/search-results.spec.js b/webapp/pages/search/search-results.spec.js index d1fbb33e2..8a7767374 100644 --- a/webapp/pages/search/search-results.spec.js +++ b/webapp/pages/search/search-results.spec.js @@ -1,7 +1,10 @@ import { config, mount } from '@vue/test-utils' import searchResults from './search-results.vue' +import VueMeta from 'vue-meta' const localVue = global.localVue +localVue.use(VueMeta, { keyName: 'head' }) + config.stubs['client-only'] = '' describe('search-results.vue', () => { @@ -10,7 +13,7 @@ describe('search-results.vue', () => { beforeEach(() => { mocks = { - $t: jest.fn(), + $t: (t) => t, } }) @@ -26,5 +29,9 @@ describe('search-results.vue', () => { it('renders', () => { expect(wrapper.findAll('.search-results')).toHaveLength(1) }) + + it('has correct content', () => { + expect(wrapper.vm.$metaInfo.title).toBe('search.title') + }) }) }) From a71e864049afe39513d4dda0f6a96f8b49dc1158 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 26 Apr 2021 01:52:04 +0200 Subject: [PATCH 76/89] asyncData test post/edit/_id.spec.js --- webapp/pages/post/edit/_id.spec.js | 73 ++++++++++++++++++++++++++---- 1 file changed, 64 insertions(+), 9 deletions(-) diff --git a/webapp/pages/post/edit/_id.spec.js b/webapp/pages/post/edit/_id.spec.js index 44cdf9a11..d5c4f8fa0 100644 --- a/webapp/pages/post/edit/_id.spec.js +++ b/webapp/pages/post/edit/_id.spec.js @@ -1,3 +1,4 @@ +import Vuex from 'vuex' import { mount } from '@vue/test-utils' import _id from './_id.vue' @@ -6,24 +7,78 @@ const localVue = global.localVue describe('post/_id.vue', () => { let wrapper let mocks + let store + let asyncData + let error + let userId + let authorId beforeEach(() => { - mocks = { - $t: jest.fn(), - } + asyncData = false + error = jest.fn() }) describe('mount', () => { - const Wrapper = () => { - return mount(_id, { mocks, localVue }) + const Wrapper = async () => { + mocks = { + $t: jest.fn(), + $i18n: { + locale: () => 'en', + }, + apolloProvider: { + defaultClient: { + query: jest.fn().mockResolvedValue({ + data: { + Post: [ + { author: { id: authorId } } + ] + } + }), + }, + }, + } + store = new Vuex.Store({ + getters: { + 'auth/user': () => { + return { id: userId } + }, + }, + }) + if (asyncData) { + const data = _id.data ? _id.data() : {} + const aData = await _id.asyncData({ + app: mocks, + store, + error, + params: { id: '123' }, + }) + _id.data = function() { + return { ...data, ...aData}; + }; + } + return mount(_id, { store, mocks, localVue }) } - beforeEach(() => { - wrapper = Wrapper() + it('renders', async () => { + asyncData = false + wrapper = await Wrapper() + expect(wrapper.findAll('.contribution-form')).toHaveLength(1) }) - it('renders', () => { - expect(wrapper.findAll('.contribution-form')).toHaveLength(1) + it('renders with asyncData of different users', async () => { + asyncData = true + authorId = 'some-author' + userId = 'some-user' + wrapper = await Wrapper() + expect(error).toBeCalledWith({"message": "error-pages.cannot-edit-post", "statusCode": 403}) + }) + + it('renders with asyncData of same user', async () => { + asyncData = true + authorId = 'some-author' + userId = 'some-author' + wrapper = await Wrapper() + expect(error).not.toHaveBeenCalled() }) }) }) From 5ffad4056bcce0914c7d38f55c31538e9fcf641d Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 26 Apr 2021 02:20:39 +0200 Subject: [PATCH 77/89] coverage login.spec.js --- webapp/pages/login.spec.js | 77 ++++++++++++++++++++++---------------- 1 file changed, 44 insertions(+), 33 deletions(-) diff --git a/webapp/pages/login.spec.js b/webapp/pages/login.spec.js index 5a64b1280..b2946df43 100644 --- a/webapp/pages/login.spec.js +++ b/webapp/pages/login.spec.js @@ -1,5 +1,5 @@ -import { config, mount } from '@vue/test-utils' import Vuex from 'vuex' +import { config, mount } from '@vue/test-utils' import login from './login.vue' const localVue = global.localVue @@ -12,47 +12,46 @@ describe('Login.vue', () => { let store let mocks let wrapper + let asyncData + let tosVersion + let redirect + beforeEach(() => { mutations = { // 'posts/SELECT_ORDER': jest.fn(), } - store = new Vuex.Store({ - getters: { - /* 'posts/filter': () => ({}), - 'posts/orderOptions': () => () => [ - { - key: 'store.posts.orderBy.oldest.label', - label: 'store.posts.orderBy.oldest.label', - icon: 'sort-amount-asc', - value: 'createdAt_asc', - }, - { - key: 'store.posts.orderBy.newest.label', - label: 'store.posts.orderBy.newest.label', - icon: 'sort-amount-desc', - value: 'createdAt_desc', - }, - ], - 'posts/selectedOrder': () => () => 'createdAt_desc', - 'posts/orderIcon': () => 'sort-amount-desc', - 'posts/orderBy': () => 'createdAt_desc', - 'auth/user': () => { - return { id: 'u23' } - }, */ - }, - mutations, - }) mocks = { $t: jest.fn(), $i18n: { locale: () => 'en', }, } + asyncData = false + tosVersion = '0.0.0' + redirect = jest.fn() }) describe('mount', () => { - const Wrapper = () => { + const Wrapper = async () => { + store = new Vuex.Store({ + getters: { + 'auth/user': () => { + return { termsAndConditionsAgreedVersion: tosVersion } + }, + }, + mutations, + }) + if (asyncData) { + const data = login.data ? login.data() : {} + const aData = await login.asyncData({ + store, + redirect + }) + login.data = function() { + return { ...data, ...aData}; + }; + } return mount(login, { store, mocks, @@ -60,12 +59,24 @@ describe('Login.vue', () => { }) } - beforeEach(() => { - wrapper = Wrapper() - }) - - it('renders', () => { + it('renders', async () => { + wrapper = await Wrapper() expect(wrapper.findAll('.login-form')).toHaveLength(1) }) + + it('renders with asyncData and wrong TOS Version', async () => { + asyncData = true + wrapper = await Wrapper() + expect(redirect).not.toHaveBeenCalled() + }) + + it('renders with asyncData and correct TOS Version', async () => { + asyncData = true + tosVersion = '0.0.4' + wrapper = await Wrapper() + expect(redirect).toBeCalledWith('/') + }) + + }) }) From c6fd7057482a843b6245ed0bd4fd1498c4d7717e Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 26 Apr 2021 02:20:50 +0200 Subject: [PATCH 78/89] coverage password-reset.spec.js --- webapp/pages/password-reset.spec.js | 46 +++++++++++++++++++++++++---- 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/webapp/pages/password-reset.spec.js b/webapp/pages/password-reset.spec.js index 416495910..f96216725 100644 --- a/webapp/pages/password-reset.spec.js +++ b/webapp/pages/password-reset.spec.js @@ -1,3 +1,4 @@ +import Vuex from 'vuex' import { config, mount } from '@vue/test-utils' import PasswordReset from './password-reset.vue' @@ -9,6 +10,11 @@ config.stubs['nuxt-child'] = '' describe('password-reset.vue', () => { let wrapper let mocks + let asyncData + let store + let redirect + let isLoggedIn + beforeEach(() => { mocks = { @@ -17,22 +23,50 @@ describe('password-reset.vue', () => { locale: () => 'en', }, } + asyncData = false + isLoggedIn = false + redirect = jest.fn() }) - describe('mount', () => { - const Wrapper = () => { + describe('mount', () => { + const Wrapper = async () => { + store = new Vuex.Store({ + getters: { + 'auth/isLoggedIn': () => isLoggedIn, + }, + }) + if (asyncData) { + const data = PasswordReset.data ? PasswordReset.data() : {} + const aData = await PasswordReset.asyncData({ + store, + redirect + }) + PasswordReset.data = function() { + return { ...data, ...aData}; + }; + } return mount(PasswordReset, { mocks, localVue, }) } - beforeEach(() => { - wrapper = Wrapper() + it('renders', async () => { + wrapper = await Wrapper() + expect(wrapper.is('div')).toBe(true) }) - it('renders', () => { - expect(wrapper.is('div')).toBe(true) + it('renders with asyncData and not loggedIn', async () => { + asyncData = true + wrapper = await Wrapper() + expect(redirect).not.toHaveBeenCalled() + }) + + it('renders with asyncData and loggedIn', async () => { + asyncData = true + isLoggedIn = true + wrapper = await Wrapper() + expect(redirect).toBeCalledWith('/') }) }) }) From 8a53bda51cf18aa5bc7713128a1f1f1076d33c9f Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 26 Apr 2021 02:21:50 +0200 Subject: [PATCH 79/89] lint fixes --- webapp/layouts/basic.spec.js | 2 +- webapp/layouts/blank.spec.js | 2 +- webapp/layouts/default.spec.js | 4 ++-- webapp/pages/admin/invite.spec.js | 2 +- webapp/pages/admin/notifications.spec.js | 2 +- webapp/pages/admin/organizations.spec.js | 2 +- webapp/pages/admin/pages.spec.js | 2 +- webapp/pages/admin/settings.spec.js | 2 +- webapp/pages/login.spec.js | 11 ++++------- webapp/pages/password-reset.spec.js | 11 +++++------ webapp/pages/post/edit/_id.spec.js | 14 ++++++-------- 11 files changed, 24 insertions(+), 30 deletions(-) diff --git a/webapp/layouts/basic.spec.js b/webapp/layouts/basic.spec.js index 471facddd..5094a970b 100644 --- a/webapp/layouts/basic.spec.js +++ b/webapp/layouts/basic.spec.js @@ -3,7 +3,7 @@ import Basic from './basic.vue' const localVue = global.localVue -config.stubs['nuxt'] = '' +config.stubs.nuxt = '' describe('basic.vue', () => { let wrapper diff --git a/webapp/layouts/blank.spec.js b/webapp/layouts/blank.spec.js index dca11486a..a3ea3120c 100644 --- a/webapp/layouts/blank.spec.js +++ b/webapp/layouts/blank.spec.js @@ -3,7 +3,7 @@ import Blank from './blank.vue' const localVue = global.localVue -config.stubs['nuxt'] = '' +config.stubs.nuxt = '' describe('blank.vue', () => { let wrapper diff --git a/webapp/layouts/default.spec.js b/webapp/layouts/default.spec.js index 13933d821..170a00d97 100644 --- a/webapp/layouts/default.spec.js +++ b/webapp/layouts/default.spec.js @@ -4,7 +4,7 @@ import Default from './default.vue' const localVue = global.localVue -config.stubs['nuxt'] = '' +config.stubs.nuxt = '' config.stubs['client-only'] = '' config.stubs['nuxt-link'] = '' @@ -17,7 +17,7 @@ describe('default.vue', () => { mocks = { $t: jest.fn(), $env: { - INVITE_REGISTRATION: true + INVITE_REGISTRATION: true, }, } store = new Vuex.Store({ diff --git a/webapp/pages/admin/invite.spec.js b/webapp/pages/admin/invite.spec.js index 196f8fdc4..e3e882119 100644 --- a/webapp/pages/admin/invite.spec.js +++ b/webapp/pages/admin/invite.spec.js @@ -12,7 +12,7 @@ describe('invite.vue', () => { $t: jest.fn(), $apollo: { loading: false, - } + }, } }) diff --git a/webapp/pages/admin/notifications.spec.js b/webapp/pages/admin/notifications.spec.js index 8c2382ccf..c9acf81a6 100644 --- a/webapp/pages/admin/notifications.spec.js +++ b/webapp/pages/admin/notifications.spec.js @@ -12,7 +12,7 @@ describe('notifications.vue', () => { $t: jest.fn(), $apollo: { loading: false, - } + }, } }) diff --git a/webapp/pages/admin/organizations.spec.js b/webapp/pages/admin/organizations.spec.js index 4798257de..d019d9485 100644 --- a/webapp/pages/admin/organizations.spec.js +++ b/webapp/pages/admin/organizations.spec.js @@ -12,7 +12,7 @@ describe('organizations.vue', () => { $t: jest.fn(), $apollo: { loading: false, - } + }, } }) diff --git a/webapp/pages/admin/pages.spec.js b/webapp/pages/admin/pages.spec.js index 1a0a6d46b..e0c3c9fb4 100644 --- a/webapp/pages/admin/pages.spec.js +++ b/webapp/pages/admin/pages.spec.js @@ -12,7 +12,7 @@ describe('pages.vue', () => { $t: jest.fn(), $apollo: { loading: false, - } + }, } }) diff --git a/webapp/pages/admin/settings.spec.js b/webapp/pages/admin/settings.spec.js index 417c6678c..78a5beb94 100644 --- a/webapp/pages/admin/settings.spec.js +++ b/webapp/pages/admin/settings.spec.js @@ -12,7 +12,7 @@ describe('settings.vue', () => { $t: jest.fn(), $apollo: { loading: false, - } + }, } }) diff --git a/webapp/pages/login.spec.js b/webapp/pages/login.spec.js index b2946df43..e79aff65d 100644 --- a/webapp/pages/login.spec.js +++ b/webapp/pages/login.spec.js @@ -16,7 +16,6 @@ describe('Login.vue', () => { let tosVersion let redirect - beforeEach(() => { mutations = { // 'posts/SELECT_ORDER': jest.fn(), @@ -46,11 +45,11 @@ describe('Login.vue', () => { const data = login.data ? login.data() : {} const aData = await login.asyncData({ store, - redirect + redirect, }) - login.data = function() { - return { ...data, ...aData}; - }; + login.data = function () { + return { ...data, ...aData } + } } return mount(login, { store, @@ -76,7 +75,5 @@ describe('Login.vue', () => { wrapper = await Wrapper() expect(redirect).toBeCalledWith('/') }) - - }) }) diff --git a/webapp/pages/password-reset.spec.js b/webapp/pages/password-reset.spec.js index f96216725..01052e89c 100644 --- a/webapp/pages/password-reset.spec.js +++ b/webapp/pages/password-reset.spec.js @@ -15,7 +15,6 @@ describe('password-reset.vue', () => { let redirect let isLoggedIn - beforeEach(() => { mocks = { $t: (t) => t, @@ -28,7 +27,7 @@ describe('password-reset.vue', () => { redirect = jest.fn() }) - describe('mount', () => { + describe('mount', () => { const Wrapper = async () => { store = new Vuex.Store({ getters: { @@ -39,11 +38,11 @@ describe('password-reset.vue', () => { const data = PasswordReset.data ? PasswordReset.data() : {} const aData = await PasswordReset.asyncData({ store, - redirect + redirect, }) - PasswordReset.data = function() { - return { ...data, ...aData}; - }; + PasswordReset.data = function () { + return { ...data, ...aData } + } } return mount(PasswordReset, { mocks, diff --git a/webapp/pages/post/edit/_id.spec.js b/webapp/pages/post/edit/_id.spec.js index d5c4f8fa0..ea8ec61d8 100644 --- a/webapp/pages/post/edit/_id.spec.js +++ b/webapp/pages/post/edit/_id.spec.js @@ -29,10 +29,8 @@ describe('post/_id.vue', () => { defaultClient: { query: jest.fn().mockResolvedValue({ data: { - Post: [ - { author: { id: authorId } } - ] - } + Post: [{ author: { id: authorId } }], + }, }), }, }, @@ -52,9 +50,9 @@ describe('post/_id.vue', () => { error, params: { id: '123' }, }) - _id.data = function() { - return { ...data, ...aData}; - }; + _id.data = function () { + return { ...data, ...aData } + } } return mount(_id, { store, mocks, localVue }) } @@ -70,7 +68,7 @@ describe('post/_id.vue', () => { authorId = 'some-author' userId = 'some-user' wrapper = await Wrapper() - expect(error).toBeCalledWith({"message": "error-pages.cannot-edit-post", "statusCode": 403}) + expect(error).toBeCalledWith({ message: 'error-pages.cannot-edit-post', statusCode: 403 }) }) it('renders with asyncData of same user', async () => { From d3d0fd053d24ecfbbe5728ec310040f26eec1e0d Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 26 Apr 2021 03:57:44 +0200 Subject: [PATCH 80/89] asyncData terms-and-conditions-confirm.spec.js --- .../terms-and-conditions-confirm.spec.js | 48 ++++++++++++++++--- 1 file changed, 41 insertions(+), 7 deletions(-) diff --git a/webapp/pages/terms-and-conditions-confirm.spec.js b/webapp/pages/terms-and-conditions-confirm.spec.js index 380b6dbf0..098e73a92 100644 --- a/webapp/pages/terms-and-conditions-confirm.spec.js +++ b/webapp/pages/terms-and-conditions-confirm.spec.js @@ -1,3 +1,4 @@ +import Vuex from 'vuex' import { config, mount } from '@vue/test-utils' import TermsAndConditionsConfirm from './terms-and-conditions-confirm.vue' import VueMeta from 'vue-meta' @@ -10,31 +11,64 @@ config.stubs['nuxt-link'] = '' describe('terms-and-conditions-confirm.vue', () => { let wrapper let mocks + let store + let asyncData + let tosAgree + let redirect beforeEach(() => { mocks = { $t: (t) => t, } + asyncData = false + tosAgree = false + redirect = jest.fn() }) describe('mount', () => { - const Wrapper = () => { + const Wrapper = async () => { + store = new Vuex.Store({ + getters: { + 'auth/termsAndConditionsAgreed': () => tosAgree, + }, + }) + if (asyncData) { + const data = TermsAndConditionsConfirm.data ? TermsAndConditionsConfirm.data() : {} + const aData = await TermsAndConditionsConfirm.asyncData({ + store, + redirect, + }) + TermsAndConditionsConfirm.data = function () { + return { ...data, ...aData } + } + } return mount(TermsAndConditionsConfirm, { mocks, localVue, }) } - beforeEach(() => { - wrapper = Wrapper() - }) - - it('renders', () => { + it('renders', async () => { + wrapper = await Wrapper() expect(wrapper.is('div')).toBe(true) }) - it('has correct content', () => { + it('has correct content', async () => { + wrapper = await Wrapper() expect(wrapper.vm.$metaInfo.title).toBe('termsAndConditions.newTermsAndConditions') }) + + it('renders with asyncData and did not agree to TOS', async () => { + asyncData = true + wrapper = await Wrapper() + expect(redirect).not.toHaveBeenCalled() + }) + + it('renders with asyncData and did agree to TOS', async () => { + asyncData = true + tosAgree = true + wrapper = await Wrapper() + expect(redirect).toBeCalledWith('/') + }) }) }) From 8dbb9907429a7fc8acdbe85b718909b0d0c1d94a Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 26 Apr 2021 03:57:53 +0200 Subject: [PATCH 81/89] asyncData search-results.spec.js --- webapp/pages/search/search-results.spec.js | 38 ++++++++++++++++++---- 1 file changed, 31 insertions(+), 7 deletions(-) diff --git a/webapp/pages/search/search-results.spec.js b/webapp/pages/search/search-results.spec.js index 8a7767374..c594f3e56 100644 --- a/webapp/pages/search/search-results.spec.js +++ b/webapp/pages/search/search-results.spec.js @@ -10,28 +10,52 @@ config.stubs['client-only'] = '' describe('search-results.vue', () => { let wrapper let mocks + let asyncData + let query beforeEach(() => { mocks = { $t: (t) => t, } + asyncData = false + query = {} }) describe('mount', () => { - const Wrapper = () => { + const Wrapper = async () => { + if (asyncData) { + const data = searchResults.data ? searchResults.data() : {} + const aData = await searchResults.asyncData({ + query, + }) + searchResults.data = function () { + return { ...data, ...aData } + } + } return mount(searchResults, { mocks, localVue }) } - beforeEach(() => { - wrapper = Wrapper() - }) - - it('renders', () => { + it('renders', async () => { + wrapper = await Wrapper() expect(wrapper.findAll('.search-results')).toHaveLength(1) }) - it('has correct content', () => { + it('has correct content', async () => { + wrapper = await Wrapper() expect(wrapper.vm.$metaInfo.title).toBe('search.title') }) + + it('renders with asyncData and no query', async () => { + asyncData = true + wrapper = await Wrapper() + expect(wrapper.vm.search).toBe(null) + }) + + it('renders with asyncData and query', async () => { + asyncData = true + query = { search: 'hello' } + wrapper = await Wrapper() + expect(wrapper.vm.search).toBe('hello') + }) }) }) From 0a6d8046e71168e2917169dd26047268dc560c7c Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 26 Apr 2021 03:58:01 +0200 Subject: [PATCH 82/89] asyncData registration.spec.js --- webapp/pages/registration.spec.js | 140 +++++++++++++++++++++--------- 1 file changed, 98 insertions(+), 42 deletions(-) diff --git a/webapp/pages/registration.spec.js b/webapp/pages/registration.spec.js index b83cb6ad4..60fa69901 100644 --- a/webapp/pages/registration.spec.js +++ b/webapp/pages/registration.spec.js @@ -1,3 +1,4 @@ +import Vuex from 'vuex' import { config, mount } from '@vue/test-utils' import Registration from './registration.vue' import Vue from 'vue' @@ -13,6 +14,10 @@ describe('Registration', () => { let wrapper let Wrapper let mocks + let asyncData + let store + let redirect + let isLoggedIn beforeEach(() => { mocks = { @@ -25,10 +30,42 @@ describe('Registration', () => { }, $env: {}, } + asyncData = false + isLoggedIn = false + redirect = jest.fn() }) describe('mount', () => { - Wrapper = () => { + Wrapper = async () => { + if (asyncData) { + store = new Vuex.Store({ + getters: { + 'auth/isLoggedIn': () => isLoggedIn, + }, + }) + const data = { + method: mocks, + overwriteSliderData: { + collectedInputData: { + inviteCode: null, + email: null, + emailSend: !!null, + nonce: null, + }, + }, + publicRegistration: false, + inviteRegistration: false, + } + const aData = await Registration.asyncData({ + store, + redirect, + }) + Registration.data = function () { + return { ...data, ...aData } + } + } else { + Registration.data = Registration.backupData ? Registration.backupData : Registration.data + } return mount(Registration, { mocks, localVue, @@ -43,29 +80,29 @@ describe('Registration', () => { } }) - it('no "method" query in URI show "RegistrationSlideNoPublic"', () => { + it('no "method" query in URI show "RegistrationSlideNoPublic"', async () => { mocks.$route.query = {} - wrapper = Wrapper() + wrapper = await Wrapper() expect(wrapper.find('.hc-empty').exists()).toBe(true) expect(wrapper.find('.enter-invite').exists()).toBe(false) expect(wrapper.find('.enter-email').exists()).toBe(false) }) describe('"method=invite-mail" in URI show "RegistrationSlideNonce"', () => { - it('no "email" query in URI', () => { + it('no "email" query in URI', async () => { mocks.$route.query = { method: 'invite-mail' } - wrapper = Wrapper() + wrapper = await Wrapper() expect(wrapper.find('.enter-nonce').exists()).toBe(true) }) describe('"email=user%40example.org" query in URI', () => { - it('have email displayed', () => { + it('have email displayed', async () => { mocks.$route.query = { method: 'invite-mail', email: 'user@example.org' } - wrapper = Wrapper() + wrapper = await Wrapper() expect(wrapper.find('.enter-nonce').text()).toContain('user@example.org') }) - it('"nonce=64835" query in URI have nonce in input', async () => { + it.skip('"nonce=64835" query in URI have nonce in input', async () => { mocks.$route.query = { method: 'invite-mail', email: 'user@example.org', @@ -80,15 +117,15 @@ describe('Registration', () => { }) describe('"method=invite-code" in URI show "RegistrationSlideNoPublic"', () => { - it('no "inviteCode" query in URI', () => { + it('no "inviteCode" query in URI', async () => { mocks.$route.query = { method: 'invite-code' } - wrapper = Wrapper() + wrapper = await Wrapper() expect(wrapper.find('.hc-empty').exists()).toBe(true) }) - it('"inviteCode=AAAAAA" query in URI', () => { + it('"inviteCode=AAAAAA" query in URI', async () => { mocks.$route.query = { method: 'invite-code', inviteCode: 'AAAAAA' } - wrapper = Wrapper() + wrapper = await Wrapper() expect(wrapper.find('.hc-empty').exists()).toBe(true) }) }) @@ -102,28 +139,28 @@ describe('Registration', () => { } }) - it('no "method" query in URI show "RegistrationSlideInvite"', () => { + it('no "method" query in URI show "RegistrationSlideInvite"', async () => { mocks.$route.query = {} - wrapper = Wrapper() + wrapper = await Wrapper() expect(wrapper.find('.enter-invite').exists()).toBe(true) expect(wrapper.find('.enter-email').exists()).toBe(false) }) describe('"method=invite-mail" in URI show "RegistrationSlideNonce"', () => { - it('no "inviteCode" query in URI', () => { + it('no "inviteCode" query in URI', async () => { mocks.$route.query = { method: 'invite-mail' } - wrapper = Wrapper() + wrapper = await Wrapper() expect(wrapper.find('.enter-nonce').exists()).toBe(true) }) describe('"email=user%40example.org" query in URI', () => { - it('have email displayed', () => { + it('have email displayed', async () => { mocks.$route.query = { method: 'invite-mail', email: 'user@example.org' } - wrapper = Wrapper() + wrapper = await Wrapper() expect(wrapper.find('.enter-nonce').text()).toContain('user@example.org') }) - it('"nonce=64835" query in URI have nonce in input', async () => { + it.skip('"nonce=64835" query in URI have nonce in input', async () => { mocks.$route.query = { method: 'invite-mail', email: 'user@example.org', @@ -138,13 +175,13 @@ describe('Registration', () => { }) describe('"method=invite-code" in URI show "RegistrationSlideInvite"', () => { - it('no "inviteCode" query in URI', () => { + it('no "inviteCode" query in URI', async () => { mocks.$route.query = { method: 'invite-code' } - wrapper = Wrapper() + wrapper = await Wrapper() expect(wrapper.find('.enter-invite').exists()).toBe(true) }) - it('"inviteCode=AAAAAA" query in URI have invite code in input', async () => { + it.skip('"inviteCode=AAAAAA" query in URI have invite code in input', async () => { mocks.$route.query = { method: 'invite-code', inviteCode: 'AAAAAA' } wrapper = Wrapper() await Vue.nextTick() @@ -162,28 +199,28 @@ describe('Registration', () => { } }) - it('no "method" query in URI show "RegistrationSlideEmail"', () => { + it('no "method" query in URI show "RegistrationSlideEmail"', async () => { mocks.$route.query = {} - wrapper = Wrapper() + wrapper = await Wrapper() expect(wrapper.find('.enter-email').exists()).toBe(true) expect(wrapper.find('.enter-invite').exists()).toBe(false) }) describe('"method=invite-mail" in URI show "RegistrationSlideNonce"', () => { - it('no "inviteCode" query in URI', () => { + it('no "inviteCode" query in URI', async () => { mocks.$route.query = { method: 'invite-mail' } - wrapper = Wrapper() + wrapper = await Wrapper() expect(wrapper.find('.enter-nonce').exists()).toBe(true) }) describe('"email=user%40example.org" query in URI', () => { - it('have email displayed', () => { + it('have email displayed', async () => { mocks.$route.query = { method: 'invite-mail', email: 'user@example.org' } - wrapper = Wrapper() + wrapper = await Wrapper() expect(wrapper.find('.enter-nonce').text()).toContain('user@example.org') }) - it('"nonce=64835" query in URI have nonce in input', async () => { + it.skip('"nonce=64835" query in URI have nonce in input', async () => { mocks.$route.query = { method: 'invite-mail', email: 'user@example.org', @@ -198,9 +235,9 @@ describe('Registration', () => { }) describe('"method=invite-code" in URI show "RegistrationSlideEmail"', () => { - it('no "inviteCode" query in URI', () => { + it('no "inviteCode" query in URI', async () => { mocks.$route.query = { method: 'invite-code' } - wrapper = Wrapper() + wrapper = await Wrapper() expect(wrapper.find('.enter-email').exists()).toBe(true) expect(wrapper.find('.enter-invite').exists()).toBe(false) }) @@ -215,28 +252,28 @@ describe('Registration', () => { } }) - it('no "method" query in URI show "RegistrationSlideEmail"', () => { + it('no "method" query in URI show "RegistrationSlideEmail"', async () => { mocks.$route.query = {} - wrapper = Wrapper() + wrapper = await Wrapper() expect(wrapper.find('.enter-email').exists()).toBe(true) expect(wrapper.find('.enter-invite').exists()).toBe(false) }) describe('"method=invite-mail" in URI show "RegistrationSlideNonce"', () => { - it('no "inviteCode" query in URI', () => { + it('no "inviteCode" query in URI', async () => { mocks.$route.query = { method: 'invite-mail' } - wrapper = Wrapper() + wrapper = await Wrapper() expect(wrapper.find('.enter-nonce').exists()).toBe(true) }) describe('"email=user%40example.org" query in URI', () => { - it('have email displayed', () => { + it('have email displayed', async () => { mocks.$route.query = { method: 'invite-mail', email: 'user@example.org' } - wrapper = Wrapper() + wrapper = await Wrapper() expect(wrapper.find('.enter-nonce').text()).toContain('user@example.org') }) - it('"nonce=64835" query in URI have nonce in input', async () => { + it.skip('"nonce=64835" query in URI have nonce in input', async () => { mocks.$route.query = { method: 'invite-mail', email: 'user@example.org', @@ -251,15 +288,15 @@ describe('Registration', () => { }) describe('"method=invite-code" in URI show "RegistrationSlideInvite"', () => { - it('no "inviteCode" query in URI', () => { + it('no "inviteCode" query in URI', async () => { mocks.$route.query = { method: 'invite-code' } - wrapper = Wrapper() + wrapper = await Wrapper() expect(wrapper.find('.enter-invite').exists()).toBe(true) }) - it('"inviteCode=AAAAAA" query in URI have invite code in input', async () => { + it.skip('"inviteCode=AAAAAA" query in URI have invite code in input', async () => { mocks.$route.query = { method: 'invite-code', inviteCode: 'AAAAAA' } - wrapper = Wrapper() + wrapper = await Wrapper() await Vue.nextTick() const form = wrapper.find('.enter-invite') expect(form.vm.formData.inviteCode).toEqual('AAAAAA') @@ -267,6 +304,25 @@ describe('Registration', () => { }) }) + it('renders', async () => { + wrapper = await Wrapper() + expect(wrapper.is('.login-form')).toBe(true) + }) + + // The asyncTests must go last + it('renders with asyncData and not loggedIn', async () => { + asyncData = true + wrapper = await Wrapper() + expect(redirect).not.toHaveBeenCalled() + }) + + it('renders with asyncData and loggedIn', async () => { + asyncData = true + isLoggedIn = true + wrapper = await Wrapper() + expect(redirect).toBeCalledWith('/') + }) + // copied from webapp/components/Registration/Signup.spec.js as testing template // describe('with invitation code', () => { // let action From b0739fcc69f10b64daa2859b1866c158245f8d41 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 26 Apr 2021 04:00:15 +0200 Subject: [PATCH 83/89] don't skip nonce & invite code tests for registration.spec.js --- webapp/pages/registration.spec.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/webapp/pages/registration.spec.js b/webapp/pages/registration.spec.js index 60fa69901..7361b6164 100644 --- a/webapp/pages/registration.spec.js +++ b/webapp/pages/registration.spec.js @@ -102,7 +102,7 @@ describe('Registration', () => { expect(wrapper.find('.enter-nonce').text()).toContain('user@example.org') }) - it.skip('"nonce=64835" query in URI have nonce in input', async () => { + it('"nonce=64835" query in URI have nonce in input', async () => { mocks.$route.query = { method: 'invite-mail', email: 'user@example.org', @@ -160,7 +160,7 @@ describe('Registration', () => { expect(wrapper.find('.enter-nonce').text()).toContain('user@example.org') }) - it.skip('"nonce=64835" query in URI have nonce in input', async () => { + it('"nonce=64835" query in URI have nonce in input', async () => { mocks.$route.query = { method: 'invite-mail', email: 'user@example.org', @@ -181,7 +181,7 @@ describe('Registration', () => { expect(wrapper.find('.enter-invite').exists()).toBe(true) }) - it.skip('"inviteCode=AAAAAA" query in URI have invite code in input', async () => { + it('"inviteCode=AAAAAA" query in URI have invite code in input', async () => { mocks.$route.query = { method: 'invite-code', inviteCode: 'AAAAAA' } wrapper = Wrapper() await Vue.nextTick() @@ -220,7 +220,7 @@ describe('Registration', () => { expect(wrapper.find('.enter-nonce').text()).toContain('user@example.org') }) - it.skip('"nonce=64835" query in URI have nonce in input', async () => { + it('"nonce=64835" query in URI have nonce in input', async () => { mocks.$route.query = { method: 'invite-mail', email: 'user@example.org', @@ -273,7 +273,7 @@ describe('Registration', () => { expect(wrapper.find('.enter-nonce').text()).toContain('user@example.org') }) - it.skip('"nonce=64835" query in URI have nonce in input', async () => { + it('"nonce=64835" query in URI have nonce in input', async () => { mocks.$route.query = { method: 'invite-mail', email: 'user@example.org', @@ -294,7 +294,7 @@ describe('Registration', () => { expect(wrapper.find('.enter-invite').exists()).toBe(true) }) - it.skip('"inviteCode=AAAAAA" query in URI have invite code in input', async () => { + it('"inviteCode=AAAAAA" query in URI have invite code in input', async () => { mocks.$route.query = { method: 'invite-code', inviteCode: 'AAAAAA' } wrapper = await Wrapper() await Vue.nextTick() From abecd0b3282c2b3c8311e5c6d6158ca95b6aea50 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 26 Apr 2021 04:47:27 +0200 Subject: [PATCH 84/89] asny fixes registration.spec.js --- webapp/pages/registration.spec.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/webapp/pages/registration.spec.js b/webapp/pages/registration.spec.js index 7361b6164..74fb7d710 100644 --- a/webapp/pages/registration.spec.js +++ b/webapp/pages/registration.spec.js @@ -108,7 +108,7 @@ describe('Registration', () => { email: 'user@example.org', nonce: '64835', } - wrapper = Wrapper() + wrapper = await Wrapper() await Vue.nextTick() const form = wrapper.find('.enter-nonce') expect(form.vm.formData.nonce).toEqual('64835') @@ -166,7 +166,7 @@ describe('Registration', () => { email: 'user@example.org', nonce: '64835', } - wrapper = Wrapper() + wrapper = await Wrapper() await Vue.nextTick() const form = wrapper.find('.enter-nonce') expect(form.vm.formData.nonce).toEqual('64835') @@ -183,7 +183,7 @@ describe('Registration', () => { it('"inviteCode=AAAAAA" query in URI have invite code in input', async () => { mocks.$route.query = { method: 'invite-code', inviteCode: 'AAAAAA' } - wrapper = Wrapper() + wrapper = await Wrapper() await Vue.nextTick() const form = wrapper.find('.enter-invite') expect(form.vm.formData.inviteCode).toEqual('AAAAAA') @@ -226,7 +226,7 @@ describe('Registration', () => { email: 'user@example.org', nonce: '64835', } - wrapper = Wrapper() + wrapper = await Wrapper() await Vue.nextTick() const form = wrapper.find('.enter-nonce') expect(form.vm.formData.nonce).toEqual('64835') @@ -279,7 +279,7 @@ describe('Registration', () => { email: 'user@example.org', nonce: '64835', } - wrapper = Wrapper() + wrapper = await Wrapper() await Vue.nextTick() const form = wrapper.find('.enter-nonce') expect(form.vm.formData.nonce).toEqual('64835') From b689181bf55708444b7677687706c9b719835a91 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 26 Apr 2021 06:12:45 +0200 Subject: [PATCH 85/89] coverage ComponentSlider.spec.js --- .../ComponentSlider/ComponentSlider.spec.js | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 webapp/components/ComponentSlider/ComponentSlider.spec.js diff --git a/webapp/components/ComponentSlider/ComponentSlider.spec.js b/webapp/components/ComponentSlider/ComponentSlider.spec.js new file mode 100644 index 000000000..199531a89 --- /dev/null +++ b/webapp/components/ComponentSlider/ComponentSlider.spec.js @@ -0,0 +1,66 @@ +import { config, mount } from '@vue/test-utils' +import ComponentSlider from './ComponentSlider.vue' + +config.stubs['nuxt-child'] = '' + +const localVue = global.localVue + +describe('ComponentSlider.vue', () => { + let wrapper + let mocks + let propsData + + beforeEach(() => { + mocks = { + $t: jest.fn(), + } + propsData = { + sliderData: { + sliderIndex: 0, + sliderSelectorCallback: jest.fn().mockResolvedValue(true), + sliders: [ + { + validated: true, + button: { + icon: "smile", + callback: jest.fn().mockResolvedValue(true), + sliderCallback: jest.fn().mockResolvedValue(true), + } + }, + { + validated: true, + button: { + icon: "smile", + callback: jest.fn().mockResolvedValue(true), + sliderCallback: jest.fn().mockResolvedValue(true), + } + } + ] + } + } + }) + + describe('mount', () => { + const Wrapper = () => { + return mount(ComponentSlider, { + mocks, + localVue, + propsData, + }) + } + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.is('div')).toBe(true) + }) + + it('click on next Button', async () => { + await wrapper.find('.base-button[data-test="next-button"]').trigger('click') + await wrapper.vm.$nextTick() + expect(propsData.sliderData.sliderSelectorCallback).toHaveBeenCalled() + }) + }) +}) From e3340760f553090ed6e92fce870b46ffcc51b5ba Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 26 Apr 2021 06:28:34 +0200 Subject: [PATCH 86/89] lint fixes --- .../ComponentSlider/ComponentSlider.spec.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/webapp/components/ComponentSlider/ComponentSlider.spec.js b/webapp/components/ComponentSlider/ComponentSlider.spec.js index 199531a89..10ab991b4 100644 --- a/webapp/components/ComponentSlider/ComponentSlider.spec.js +++ b/webapp/components/ComponentSlider/ComponentSlider.spec.js @@ -22,21 +22,21 @@ describe('ComponentSlider.vue', () => { { validated: true, button: { - icon: "smile", + icon: 'smile', callback: jest.fn().mockResolvedValue(true), sliderCallback: jest.fn().mockResolvedValue(true), - } + }, }, { validated: true, button: { - icon: "smile", + icon: 'smile', callback: jest.fn().mockResolvedValue(true), sliderCallback: jest.fn().mockResolvedValue(true), - } - } - ] - } + }, + }, + ], + }, } }) From 52740d8fc34f0fea4004f8cbfbc5c691e613e680 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Tue, 27 Apr 2021 00:44:52 +0200 Subject: [PATCH 87/89] fixed rollback on privacy update fail coverage privacy.spec.js --- webapp/pages/settings/privacy.spec.js | 29 ++++++++++++++++++++++++++- webapp/pages/settings/privacy.vue | 1 + 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/webapp/pages/settings/privacy.spec.js b/webapp/pages/settings/privacy.spec.js index 805677e34..5d1686904 100644 --- a/webapp/pages/settings/privacy.spec.js +++ b/webapp/pages/settings/privacy.spec.js @@ -12,11 +12,21 @@ describe('privacy.vue', () => { beforeEach(() => { mocks = { $t: jest.fn(), + $apollo: { + mutate: jest.fn() + }, + $toast: { + success: jest.fn(), + error: jest.fn(), + }, } store = new Vuex.Store({ getters: { 'auth/user': () => { - return { id: 'u343', name: 'Delete MyAccount', showShoutsPublicly: true } + return { + id: 'u343', + name: 'MyAccount', + showShoutsPublicly: true } }, }, }) @@ -38,5 +48,22 @@ describe('privacy.vue', () => { it('renders', () => { expect(wrapper.is('.base-card')).toBe(true) }) + + it('clicking on submit changes shoutsAllowed to false', async () => { + wrapper.find('#allow-shouts').trigger('click') + await wrapper.vm.$nextTick() + wrapper.find('.base-button').trigger('click') + expect(wrapper.vm.shoutsAllowed).toBe(false) + }) + + it('clicking on submit with a server error shows a toast and shoutsAllowed is still true', async () => { + mocks.$apollo.mutate = jest.fn().mockRejectedValue({ message: 'Ouch!' }) + wrapper.find('#allow-shouts').trigger('click') + await wrapper.vm.$nextTick() + await wrapper.find('.base-button').trigger('click') + await wrapper.vm.$nextTick() + expect(mocks.$toast.error).toHaveBeenCalledWith('Ouch!') + expect(wrapper.vm.shoutsAllowed).toBe(true) + }) }) }) diff --git a/webapp/pages/settings/privacy.vue b/webapp/pages/settings/privacy.vue index 14f27bf8f..71fd31946 100644 --- a/webapp/pages/settings/privacy.vue +++ b/webapp/pages/settings/privacy.vue @@ -52,6 +52,7 @@ export default { }, }) } catch (error) { + this.shoutsAllowed = !this.shoutsAllowed this.$toast.error(error.message) } }, From 0ea3ea04817a8802fb68f98bfe1d02fe63b39d1c Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Tue, 27 Apr 2021 11:49:15 +0200 Subject: [PATCH 88/89] lint fix --- webapp/pages/settings/privacy.spec.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/webapp/pages/settings/privacy.spec.js b/webapp/pages/settings/privacy.spec.js index 5d1686904..eb9cb90b3 100644 --- a/webapp/pages/settings/privacy.spec.js +++ b/webapp/pages/settings/privacy.spec.js @@ -13,7 +13,7 @@ describe('privacy.vue', () => { mocks = { $t: jest.fn(), $apollo: { - mutate: jest.fn() + mutate: jest.fn(), }, $toast: { success: jest.fn(), @@ -26,7 +26,8 @@ describe('privacy.vue', () => { return { id: 'u343', name: 'MyAccount', - showShoutsPublicly: true } + showShoutsPublicly: true, + } }, }, }) From 32856dd60f0702041160f6758748e34408f64ccb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Thu, 6 May 2021 09:58:37 +0200 Subject: [PATCH 89/89] Suggest a fix and some refinements --- .../components/ComponentSlider/ComponentSlider.spec.js | 4 +--- webapp/components/Hashtag/Hashtag.spec.js | 1 - webapp/components/PageFooter/PageFooter.spec.js | 4 ++++ webapp/layouts/default.spec.js | 9 ++++++++- webapp/pages/login.spec.js | 5 ----- webapp/pages/password-reset/enter-nonce.spec.js | 1 + webapp/pages/password-reset/request.spec.js | 1 + webapp/pages/post/_id.spec.js | 1 + 8 files changed, 16 insertions(+), 10 deletions(-) diff --git a/webapp/components/ComponentSlider/ComponentSlider.spec.js b/webapp/components/ComponentSlider/ComponentSlider.spec.js index 10ab991b4..25bf3e7f4 100644 --- a/webapp/components/ComponentSlider/ComponentSlider.spec.js +++ b/webapp/components/ComponentSlider/ComponentSlider.spec.js @@ -1,8 +1,6 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import ComponentSlider from './ComponentSlider.vue' -config.stubs['nuxt-child'] = '' - const localVue = global.localVue describe('ComponentSlider.vue', () => { diff --git a/webapp/components/Hashtag/Hashtag.spec.js b/webapp/components/Hashtag/Hashtag.spec.js index 442f268d5..4a420d7d8 100644 --- a/webapp/components/Hashtag/Hashtag.spec.js +++ b/webapp/components/Hashtag/Hashtag.spec.js @@ -5,7 +5,6 @@ import Hashtag from './Hashtag' const localVue = global.localVue config.stubs['nuxt-link'] = '' -config.stubs['nuxt-child'] = '' describe('Hashtag', () => { let id diff --git a/webapp/components/PageFooter/PageFooter.spec.js b/webapp/components/PageFooter/PageFooter.spec.js index 6a051b020..0edc0fed2 100644 --- a/webapp/components/PageFooter/PageFooter.spec.js +++ b/webapp/components/PageFooter/PageFooter.spec.js @@ -36,5 +36,9 @@ describe('PageFooter.vue', () => { it('renders four nuxt-links', () => { expect(wrapper.findAll('.nuxt-link')).toHaveLength(4) }) + + it('renders version', () => { + expect(wrapper.find('.ds-footer').text()).toContain('v1.0.0') + }) }) }) diff --git a/webapp/layouts/default.spec.js b/webapp/layouts/default.spec.js index 170a00d97..3d465ce76 100644 --- a/webapp/layouts/default.spec.js +++ b/webapp/layouts/default.spec.js @@ -3,6 +3,7 @@ import { config, shallowMount } from '@vue/test-utils' import Default from './default.vue' const localVue = global.localVue +localVue.directive('scrollTo', jest.fn()) config.stubs.nuxt = '' config.stubs['client-only'] = '' @@ -15,13 +16,19 @@ describe('default.vue', () => { beforeEach(() => { mocks = { + $route: { + matched: [{ name: 'index' }], + }, + $scrollTo: jest.fn(), $t: jest.fn(), $env: { INVITE_REGISTRATION: true, }, } store = new Vuex.Store({ - getters: {}, + getters: { + 'auth/isLoggedIn': () => true, + }, }) }) diff --git a/webapp/pages/login.spec.js b/webapp/pages/login.spec.js index e79aff65d..09c1b066e 100644 --- a/webapp/pages/login.spec.js +++ b/webapp/pages/login.spec.js @@ -8,7 +8,6 @@ config.stubs['client-only'] = '' config.stubs['nuxt-link'] = '' describe('Login.vue', () => { - let mutations let store let mocks let wrapper @@ -17,9 +16,6 @@ describe('Login.vue', () => { let redirect beforeEach(() => { - mutations = { - // 'posts/SELECT_ORDER': jest.fn(), - } mocks = { $t: jest.fn(), $i18n: { @@ -39,7 +35,6 @@ describe('Login.vue', () => { return { termsAndConditionsAgreedVersion: tosVersion } }, }, - mutations, }) if (asyncData) { const data = login.data ? login.data() : {} diff --git a/webapp/pages/password-reset/enter-nonce.spec.js b/webapp/pages/password-reset/enter-nonce.spec.js index 42fbaa5a5..664e1f7ca 100644 --- a/webapp/pages/password-reset/enter-nonce.spec.js +++ b/webapp/pages/password-reset/enter-nonce.spec.js @@ -2,6 +2,7 @@ import { config, mount } from '@vue/test-utils' import enterNonce from './enter-nonce.vue' const localVue = global.localVue + config.stubs['nuxt-link'] = '' describe('enter-nonce.vue', () => { diff --git a/webapp/pages/password-reset/request.spec.js b/webapp/pages/password-reset/request.spec.js index 53183a3be..f9bcefd79 100644 --- a/webapp/pages/password-reset/request.spec.js +++ b/webapp/pages/password-reset/request.spec.js @@ -2,6 +2,7 @@ import { config, mount } from '@vue/test-utils' import request from './request.vue' const localVue = global.localVue + // config.stubs['sweetalert-icon'] = '' config.stubs['nuxt-link'] = '' diff --git a/webapp/pages/post/_id.spec.js b/webapp/pages/post/_id.spec.js index 662f85406..7e6812002 100644 --- a/webapp/pages/post/_id.spec.js +++ b/webapp/pages/post/_id.spec.js @@ -2,6 +2,7 @@ import { config, mount } from '@vue/test-utils' import _id from './_id.vue' const localVue = global.localVue + config.stubs['nuxt-child'] = '' describe('post/_id.vue', () => {