From 31dfdc13379acc30dc069775a6bab8e2c5e173d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Mon, 2 May 2022 08:17:03 +0200 Subject: [PATCH 1/4] Fix code coverage in Login.vue test --- frontend/src/pages/Login.spec.js | 62 +++++++++++++++++++++----------- 1 file changed, 42 insertions(+), 20 deletions(-) diff --git a/frontend/src/pages/Login.spec.js b/frontend/src/pages/Login.spec.js index 36c293451..501745b19 100644 --- a/frontend/src/pages/Login.spec.js +++ b/frontend/src/pages/Login.spec.js @@ -204,18 +204,22 @@ describe('Login', () => { }) describe('login fails', () => { + const createError = async (errorMessage) => { + apolloQueryMock.mockRejectedValue({ + message: errorMessage, + }) + wrapper = Wrapper() + jest.clearAllMocks() + await wrapper.find('input[placeholder="Email"]').setValue('user@example.org') + await wrapper.find('input[placeholder="form.password"]').setValue('1234') + await flushPromises() + await wrapper.find('form').trigger('submit') + await flushPromises() + } + describe('login fails with "User email not validated"', () => { beforeEach(async () => { - apolloQueryMock.mockRejectedValue({ - message: 'GraphQL error: User email not validated', - }) - wrapper = Wrapper() - jest.clearAllMocks() - await wrapper.find('input[placeholder="Email"]').setValue('user@example.org') - await wrapper.find('input[placeholder="form.password"]').setValue('1234') - await flushPromises() - await wrapper.find('form').trigger('submit') - await flushPromises() + await createError('GraphQL error: User email not validated') }) it('hides the spinner', () => { @@ -244,16 +248,7 @@ describe('Login', () => { describe('login fails with "User has no password set yet"', () => { beforeEach(async () => { - apolloQueryMock.mockRejectedValue({ - message: 'GraphQL error: User has no password set yet', - }) - wrapper = Wrapper() - jest.clearAllMocks() - await wrapper.find('input[placeholder="Email"]').setValue('user@example.org') - await wrapper.find('input[placeholder="form.password"]').setValue('1234') - await flushPromises() - await wrapper.find('form').trigger('submit') - await flushPromises() + await createError('GraphQL error: User has no password set yet') }) it('shows error title, subtitle, login button', () => { @@ -277,6 +272,33 @@ describe('Login', () => { expect(toastErrorSpy).toBeCalledWith('error.no-account') }) }) + + describe('login fails with an unknow error', () => { + beforeEach(async () => { + await createError(' – Unknow error') + }) + + it('shows error title, subtitle, login button', () => { + expect(wrapper.vm.showPageMessage).toBeTruthy() + expect(wrapper.find('.test-message-headline').text()).toBe('site.thx.errorTitle') + expect(wrapper.find('.test-message-subtitle').text()).toBe( + 'error.unknown-error – Unknow error', + ) + expect(wrapper.find('.test-message-button').text()).toBe('settings.password.reset') + }) + + it('button link directs to "/forgot-password"', () => { + expect(wrapper.find('.test-message-button').attributes('href')).toBe('/forgot-password') + }) + + it.skip('click redirects to "/forgot-password"', () => { + // expect(mockRouterPush).toBeCalledWith('/forgot-password') + }) + + it('toasts the error message', () => { + expect(toastErrorSpy).toBeCalledWith('error.unknown-error – Unknow error') + }) + }) }) }) }) From 4632e83a47871dfd5d7177572120cbfc45a8f1d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Mon, 2 May 2022 08:44:53 +0200 Subject: [PATCH 2/4] Change out commented router test --- frontend/src/pages/Login.spec.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/frontend/src/pages/Login.spec.js b/frontend/src/pages/Login.spec.js index 501745b19..891c656d0 100644 --- a/frontend/src/pages/Login.spec.js +++ b/frontend/src/pages/Login.spec.js @@ -237,8 +237,11 @@ describe('Login', () => { expect(wrapper.find('.test-message-button').attributes('href')).toBe('/forgot-password') }) - it.skip('click redirects to "/forgot-password"', () => { - // expect(mockRouterPush).toBeCalledWith('/thx/login') + it.skip('click redirects to "/forgot-password"', async () => { + // wrapper.find('.test-message-button').trigger('click') + // await flushPromises() + // await wrapper.vm.$nextTick() + // expect(mockRouterPush).toBeCalledWith('/forgot-password') }) it('toasts the error message', () => { From d7ae0bc3b887472f76142da76846bf102db1e7c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Mon, 2 May 2022 09:39:31 +0200 Subject: [PATCH 3/4] Fix code coverage in Register.vue test --- frontend/src/pages/Register.spec.js | 67 +++++++++++++++++++++-------- 1 file changed, 50 insertions(+), 17 deletions(-) diff --git a/frontend/src/pages/Register.spec.js b/frontend/src/pages/Register.spec.js index 49984c008..ca419069c 100644 --- a/frontend/src/pages/Register.spec.js +++ b/frontend/src/pages/Register.spec.js @@ -221,31 +221,64 @@ describe('Register', () => { }) describe('server sends back error', () => { - beforeEach(async () => { + const createError = async (errorMessage) => { registerUserMutationMock.mockRejectedValue({ - message: 'GraphQL error: User already exists.', + message: errorMessage, }) await wrapper.find('form').trigger('submit') await flushPromises() + } + + describe('server sends back error "User already exists."', () => { + beforeEach(async () => { + await createError('GraphQL error: User already exists.') + }) + + it('shows success title, subtitle, login button', () => { + expect(wrapper.vm.showPageMessage).toBeTruthy() + expect(wrapper.find('.test-message-headline').text()).toBe('site.thx.errorTitle') + expect(wrapper.find('.test-message-subtitle').text()).toBe('error.user-already-exists') + expect(wrapper.find('.test-message-button').text()).toBe( + 'site.register.message-button-text', + ) + }) + + it('toasts the error message', () => { + expect(toastErrorSpy).toBeCalledWith('error.user-already-exists') + }) + + it('click calls "solveError"', async () => { + wrapper.find('.test-message-button').trigger('click') + await wrapper.vm.$nextTick() + expect(wrapper.vm.showPageMessage).not.toBeTruthy() + }) }) - it('shows success title, subtitle, login button', () => { - expect(wrapper.vm.showPageMessage).toBeTruthy() - expect(wrapper.find('.test-message-headline').text()).toBe('site.thx.errorTitle') - expect(wrapper.find('.test-message-subtitle').text()).toBe('error.user-already-exists') - expect(wrapper.find('.test-message-button').text()).toBe( - 'site.register.message-button-text', - ) - }) + describe('server sends back error "Unknown error"', () => { + beforeEach(async () => { + await createError(' – Unknown error.') + }) - it('toasts the error message', () => { - expect(toastErrorSpy).toBeCalledWith('error.user-already-exists') - }) + it('shows success title, subtitle, login button', () => { + expect(wrapper.vm.showPageMessage).toBeTruthy() + expect(wrapper.find('.test-message-headline').text()).toBe('site.thx.errorTitle') + expect(wrapper.find('.test-message-subtitle').text()).toBe( + 'error.unknown-error – Unknown error.', + ) + expect(wrapper.find('.test-message-button').text()).toBe( + 'site.register.message-button-text', + ) + }) - it('click calls "solveError"', async () => { - wrapper.find('.test-message-button').trigger('click') - await wrapper.vm.$nextTick() - expect(wrapper.vm.showPageMessage).not.toBeTruthy() + it('toasts the error message', () => { + expect(toastErrorSpy).toBeCalledWith('error.unknown-error – Unknown error.') + }) + + it('click calls "solveError"', async () => { + wrapper.find('.test-message-button').trigger('click') + await wrapper.vm.$nextTick() + expect(wrapper.vm.showPageMessage).not.toBeTruthy() + }) }) }) From f22b391557fe9e7a18f38a212023423ac780efc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Mon, 2 May 2022 10:14:29 +0200 Subject: [PATCH 4/4] Change code after Alex review suggestions --- .../src/components/Message/Message.spec.js | 2 +- frontend/src/components/Message/Message.vue | 11 ++++++-- frontend/src/pages/ForgotPassword.spec.js | 8 +++--- frontend/src/pages/Login.spec.js | 16 ++++++------ frontend/src/pages/Register.spec.js | 26 +++++++++---------- 5 files changed, 35 insertions(+), 28 deletions(-) diff --git a/frontend/src/components/Message/Message.spec.js b/frontend/src/components/Message/Message.spec.js index afbef53cd..db493b44a 100644 --- a/frontend/src/components/Message/Message.spec.js +++ b/frontend/src/components/Message/Message.spec.js @@ -27,7 +27,7 @@ describe('Message', () => { }) it('renders the component', () => { - expect(wrapper.find('div.header').exists()).toBeTruthy() + expect(wrapper.find('div.header').exists()).toBe(true) }) it('renders title, subtitle, and button text', () => { diff --git a/frontend/src/components/Message/Message.vue b/frontend/src/components/Message/Message.vue index cc3bb90a3..b09275ae9 100644 --- a/frontend/src/components/Message/Message.vue +++ b/frontend/src/components/Message/Message.vue @@ -7,9 +7,9 @@

{{ subtitle }}


{{ buttonText }} @@ -29,6 +29,7 @@ export default { buttonText: { type: String, required: false, default: null }, linkTo: { type: String, required: false, default: null }, callback: { type: Function, required: false, default: null }, + code: { type: String, required: false, default: null }, }, methods: { optionalCallback() { @@ -36,6 +37,12 @@ export default { this.callback() } }, + showButton() { + return this.buttonText && (this.linkTo || this.callback) + }, + buttonLinkTo() { + return this.linkTo ? this.linkTo + (this.code ? `/${this.code}` : '') : null + }, }, } diff --git a/frontend/src/pages/ForgotPassword.spec.js b/frontend/src/pages/ForgotPassword.spec.js index c6c798e22..cb22c77be 100644 --- a/frontend/src/pages/ForgotPassword.spec.js +++ b/frontend/src/pages/ForgotPassword.spec.js @@ -47,7 +47,7 @@ describe('ForgotPassword', () => { }) it('renders the component', () => { - expect(wrapper.find('div.forgot-password').exists()).toBeTruthy() + expect(wrapper.find('div.forgot-password').exists()).toBe(true) }) it('has a title', () => { @@ -84,7 +84,7 @@ describe('ForgotPassword', () => { }) it('has a submit button', () => { - expect(form.find('button[type="submit"]').exists()).toBeTruthy() + expect(form.find('button[type="submit"]').exists()).toBe(true) }) describe('invalid Email', () => { @@ -118,7 +118,7 @@ describe('ForgotPassword', () => { }) it('shows error title, subtitle, login button', () => { - expect(wrapper.vm.showPageMessage).toBeTruthy() + expect(wrapper.vm.showPageMessage).toBe(true) expect(wrapper.find('.test-message-headline').text()).toBe('site.thx.errorTitle') expect(wrapper.find('.test-message-subtitle').text()).toBe('error.email-already-sent') expect(wrapper.find('.test-message-button').text()).toBe('login') @@ -153,7 +153,7 @@ describe('ForgotPassword', () => { }) it('shows success title, subtitle, login button', () => { - expect(wrapper.vm.showPageMessage).toBeTruthy() + expect(wrapper.vm.showPageMessage).toBe(true) expect(wrapper.find('.test-message-headline').text()).toBe('site.thx.title') expect(wrapper.find('.test-message-subtitle').text()).toBe('site.thx.email') expect(wrapper.find('.test-message-button').text()).toBe('login') diff --git a/frontend/src/pages/Login.spec.js b/frontend/src/pages/Login.spec.js index 891c656d0..db11a036e 100644 --- a/frontend/src/pages/Login.spec.js +++ b/frontend/src/pages/Login.spec.js @@ -59,7 +59,7 @@ describe('Login', () => { }) it('renders the Login form', () => { - expect(wrapper.find('div.login-form').exists()).toBeTruthy() + expect(wrapper.find('div.login-form').exists()).toBe(true) }) describe('Login header', () => { @@ -102,19 +102,19 @@ describe('Login', () => { describe('Login form', () => { it('has a login form', () => { - expect(wrapper.find('form').exists()).toBeTruthy() + expect(wrapper.find('form').exists()).toBe(true) }) it('has an Email input field', () => { - expect(wrapper.find('input[placeholder="Email"]').exists()).toBeTruthy() + expect(wrapper.find('input[placeholder="Email"]').exists()).toBe(true) }) it('has an Password input field', () => { - expect(wrapper.find('input[placeholder="form.password"]').exists()).toBeTruthy() + expect(wrapper.find('input[placeholder="form.password"]').exists()).toBe(true) }) it('has a Submit button', () => { - expect(wrapper.find('button[type="submit"]').exists()).toBeTruthy() + expect(wrapper.find('button[type="submit"]').exists()).toBe(true) }) }) @@ -227,7 +227,7 @@ describe('Login', () => { }) it('shows error title, subtitle, login button', () => { - expect(wrapper.vm.showPageMessage).toBeTruthy() + expect(wrapper.vm.showPageMessage).toBe(true) expect(wrapper.find('.test-message-headline').text()).toBe('site.thx.errorTitle') expect(wrapper.find('.test-message-subtitle').text()).toBe('site.thx.activateEmail') expect(wrapper.find('.test-message-button').text()).toBe('settings.password.reset') @@ -255,7 +255,7 @@ describe('Login', () => { }) it('shows error title, subtitle, login button', () => { - expect(wrapper.vm.showPageMessage).toBeTruthy() + expect(wrapper.vm.showPageMessage).toBe(true) expect(wrapper.find('.test-message-headline').text()).toBe('site.thx.errorTitle') expect(wrapper.find('.test-message-subtitle').text()).toBe('site.thx.unsetPassword') expect(wrapper.find('.test-message-button').text()).toBe('settings.password.reset') @@ -282,7 +282,7 @@ describe('Login', () => { }) it('shows error title, subtitle, login button', () => { - expect(wrapper.vm.showPageMessage).toBeTruthy() + expect(wrapper.vm.showPageMessage).toBe(true) expect(wrapper.find('.test-message-headline').text()).toBe('site.thx.errorTitle') expect(wrapper.find('.test-message-subtitle').text()).toBe( 'error.unknown-error – Unknow error', diff --git a/frontend/src/pages/Register.spec.js b/frontend/src/pages/Register.spec.js index ca419069c..e889f0ca7 100644 --- a/frontend/src/pages/Register.spec.js +++ b/frontend/src/pages/Register.spec.js @@ -50,7 +50,7 @@ describe('Register', () => { }) it('renders the Register form', () => { - expect(wrapper.find('div#registerform').exists()).toBeTruthy() + expect(wrapper.find('div#registerform').exists()).toBe(true) }) describe('Register header', () => { @@ -94,22 +94,22 @@ describe('Register', () => { describe('Register form', () => { it('has a register form', () => { - expect(wrapper.find('form').exists()).toBeTruthy() + expect(wrapper.find('form').exists()).toBe(true) }) it('has firstname input fields', () => { - expect(wrapper.find('#registerFirstname').exists()).toBeTruthy() + expect(wrapper.find('#registerFirstname').exists()).toBe(true) }) it('has lastname input fields', () => { - expect(wrapper.find('#registerLastname').exists()).toBeTruthy() + expect(wrapper.find('#registerLastname').exists()).toBe(true) }) it('has email input fields', () => { - expect(wrapper.find('#Email-input-field').exists()).toBeTruthy() + expect(wrapper.find('#Email-input-field').exists()).toBe(true) }) it('has Language selected field', () => { - expect(wrapper.find('.selectedLanguage').exists()).toBeTruthy() + expect(wrapper.find('.selectedLanguage').exists()).toBe(true) }) it('selects Language value en', async () => { @@ -118,7 +118,7 @@ describe('Register', () => { }) it('has 1 checkbox input fields', () => { - expect(wrapper.find('#registerCheckbox').exists()).toBeTruthy() + expect(wrapper.find('#registerCheckbox').exists()).toBe(true) }) it('has PublisherId input fields', () => { @@ -235,7 +235,7 @@ describe('Register', () => { }) it('shows success title, subtitle, login button', () => { - expect(wrapper.vm.showPageMessage).toBeTruthy() + expect(wrapper.vm.showPageMessage).toBe(true) expect(wrapper.find('.test-message-headline').text()).toBe('site.thx.errorTitle') expect(wrapper.find('.test-message-subtitle').text()).toBe('error.user-already-exists') expect(wrapper.find('.test-message-button').text()).toBe( @@ -250,7 +250,7 @@ describe('Register', () => { it('click calls "solveError"', async () => { wrapper.find('.test-message-button').trigger('click') await wrapper.vm.$nextTick() - expect(wrapper.vm.showPageMessage).not.toBeTruthy() + expect(wrapper.vm.showPageMessage).toBe(false) }) }) @@ -260,7 +260,7 @@ describe('Register', () => { }) it('shows success title, subtitle, login button', () => { - expect(wrapper.vm.showPageMessage).toBeTruthy() + expect(wrapper.vm.showPageMessage).toBe(true) expect(wrapper.find('.test-message-headline').text()).toBe('site.thx.errorTitle') expect(wrapper.find('.test-message-subtitle').text()).toBe( 'error.unknown-error – Unknown error.', @@ -277,7 +277,7 @@ describe('Register', () => { it('click calls "solveError"', async () => { wrapper.find('.test-message-button').trigger('click') await wrapper.vm.$nextTick() - expect(wrapper.vm.showPageMessage).not.toBeTruthy() + expect(wrapper.vm.showPageMessage).toBe(false) }) }) }) @@ -308,13 +308,13 @@ describe('Register', () => { }) it('shows success title, subtitle', () => { - expect(wrapper.vm.showPageMessage).toBeTruthy() + expect(wrapper.vm.showPageMessage).toBe(true) expect(wrapper.find('.test-message-headline').text()).toBe('site.thx.title') expect(wrapper.find('.test-message-subtitle').text()).toBe('site.thx.register') }) it('button is not present', () => { - expect(wrapper.find('.test-message-button')).toBeTruthy() + expect(wrapper.find('.test-message-button').exists()).toBe(false) }) }) })