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) } },