From 2171add6f31208faf054e07281ce5a500080c34c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Thu, 6 Jun 2019 12:35:49 +0200 Subject: [PATCH 1/2] Disable the location.reloads It might create better user experience, but for the small user group I think the complexity is worse than the feature itself. --- webapp/components/Modal/DisableModal.vue | 3 --- webapp/components/ReleaseModal/ReleaseModal.vue | 8 -------- 2 files changed, 11 deletions(-) diff --git a/webapp/components/Modal/DisableModal.vue b/webapp/components/Modal/DisableModal.vue index 988ecc8af..54c43472f 100644 --- a/webapp/components/Modal/DisableModal.vue +++ b/webapp/components/Modal/DisableModal.vue @@ -68,9 +68,6 @@ export default { setTimeout(() => { this.$emit('close') }, 1000) - setTimeout(() => { - location.reload() - }, 250) } catch (err) { this.$toast.error(err.message) } diff --git a/webapp/components/ReleaseModal/ReleaseModal.vue b/webapp/components/ReleaseModal/ReleaseModal.vue index f414d4328..79abe7765 100644 --- a/webapp/components/ReleaseModal/ReleaseModal.vue +++ b/webapp/components/ReleaseModal/ReleaseModal.vue @@ -57,17 +57,9 @@ export default { }) this.$toast.success(this.$t('release.success')) this.isOpen = false - /* - setTimeout(() => { - location.reload() - }, 1500) - */ setTimeout(() => { this.$emit('close') }, 1000) - setTimeout(() => { - location.reload() - }, 250) } catch (err) { this.$toast.error(err.message) } From f53d091691b1a7d6da267f040ef99e7dd1bcadfa Mon Sep 17 00:00:00 2001 From: Matt Rider Date: Thu, 6 Jun 2019 13:50:10 -0300 Subject: [PATCH 2/2] Add error handling component tests --- webapp/components/Modal/DisableModal.spec.js | 25 ++++++++++++++++--- .../ReleaseModal/ReleaseModal.spec.js | 25 ++++++++++++++++--- 2 files changed, 44 insertions(+), 6 deletions(-) diff --git a/webapp/components/Modal/DisableModal.spec.js b/webapp/components/Modal/DisableModal.spec.js index 87484f6bf..4780657ee 100644 --- a/webapp/components/Modal/DisableModal.spec.js +++ b/webapp/components/Modal/DisableModal.spec.js @@ -26,12 +26,15 @@ describe('DisableModal.vue', () => { truncate: a => a, }, $toast: { - success: () => {}, - error: () => {}, + success: jest.fn(), + error: jest.fn(), }, $t: jest.fn(), $apollo: { - mutate: jest.fn().mockResolvedValue(), + mutate: jest + .fn() + .mockResolvedValueOnce({ enable: 'u4711' }) + .mockRejectedValue({ message: 'Not Authorised!' }), }, location: { reload: jest.fn(), @@ -151,6 +154,10 @@ describe('DisableModal.vue', () => { await wrapper.find('button.confirm').trigger('click') }) + afterEach(() => { + jest.clearAllMocks() + }) + it('calls mutation', () => { expect(mocks.$apollo.mutate).toHaveBeenCalled() }) @@ -174,6 +181,18 @@ describe('DisableModal.vue', () => { expect(wrapper.emitted().close).toBeTruthy() }) }) + + describe('handles errors', () => { + beforeEach(() => { + wrapper = Wrapper() + // second submission causes mutation to reject + wrapper.find('button.confirm').trigger('click') + }) + + it('shows an error toaster when mutation rejects', async () => { + await expect(mocks.$toast.error).toHaveBeenCalledWith('Not Authorised!') + }) + }) }) }) }) diff --git a/webapp/components/ReleaseModal/ReleaseModal.spec.js b/webapp/components/ReleaseModal/ReleaseModal.spec.js index 766d981f8..bb7281ab7 100644 --- a/webapp/components/ReleaseModal/ReleaseModal.spec.js +++ b/webapp/components/ReleaseModal/ReleaseModal.spec.js @@ -23,12 +23,15 @@ describe('ReleaseModal.vue', () => { truncate: a => a, }, $toast: { - success: () => {}, - error: () => {}, + success: jest.fn(), + error: jest.fn(), }, $t: jest.fn(), $apollo: { - mutate: jest.fn().mockResolvedValue(), + mutate: jest + .fn() + .mockResolvedValueOnce({ enable: 'u4711' }) + .mockRejectedValue({ message: 'Not Authorised!' }), }, location: { reload: jest.fn(), @@ -146,6 +149,10 @@ describe('ReleaseModal.vue', () => { wrapper.find('button.confirm').trigger('click') }) + afterEach(() => { + jest.clearAllMocks() + }) + it('calls mutation', () => { expect(mocks.$apollo.mutate).toHaveBeenCalled() }) @@ -169,6 +176,18 @@ describe('ReleaseModal.vue', () => { expect(wrapper.emitted().close).toBeTruthy() }) }) + + describe('handles errors', () => { + beforeEach(() => { + wrapper = Wrapper() + // second submission causes mutation to reject + wrapper.find('button.confirm').trigger('click') + }) + + it('shows an error toaster when mutation rejects', async () => { + await expect(mocks.$toast.error).toHaveBeenCalledWith('Not Authorised!') + }) + }) }) }) })