From 4b26c99be986eba4e713946442a000d90b2becb7 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Mon, 25 Jul 2022 14:24:20 +0200 Subject: [PATCH 1/2] add bv modal to confirm deletion of contribution --- admin/src/locales/de.json | 1 + admin/src/locales/en.json | 1 + admin/src/pages/CreationConfirm.vue | 31 ++++++++++++++++------------- 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/admin/src/locales/de.json b/admin/src/locales/de.json index fa0ca6903..3d88e0257 100644 --- a/admin/src/locales/de.json +++ b/admin/src/locales/de.json @@ -35,6 +35,7 @@ "creation_form": { "creation_failed": "Ausstehende Schöpfung für {email} konnte nicht erzeugt werden.", "creation_for": "Aktives Grundeinkommen für", + "deleteNow": "Möchtest du diesen Beitrag zur Gemeinschaft wirklich löschen?", "enter_text": "Text eintragen", "form": "Schöpfungsformular", "min_characters": "Mindestens 10 Zeichen eingeben", diff --git a/admin/src/locales/en.json b/admin/src/locales/en.json index 6d19b1732..f23c61e21 100644 --- a/admin/src/locales/en.json +++ b/admin/src/locales/en.json @@ -35,6 +35,7 @@ "creation_form": { "creation_failed": "Could not create pending creation for {email}", "creation_for": "Active Basic Income for", + "deleteNow": "Do you really want to delete this contribution to the community?", "enter_text": "Enter text", "form": "Creation form", "min_characters": "Enter at least 10 characters", diff --git a/admin/src/pages/CreationConfirm.vue b/admin/src/pages/CreationConfirm.vue index 061556ba1..e78499c4b 100644 --- a/admin/src/pages/CreationConfirm.vue +++ b/admin/src/pages/CreationConfirm.vue @@ -34,20 +34,23 @@ export default { }, methods: { removeCreation(item) { - this.$apollo - .mutate({ - mutation: adminDeleteContribution, - variables: { - id: item.id, - }, - }) - .then((result) => { - this.updatePendingCreations(item.id) - this.toastSuccess(this.$t('creation_form.toasted_delete')) - }) - .catch((error) => { - this.toastError(error.message) - }) + this.$bvModal.msgBoxConfirm(this.$t('creation_form.deleteNow')).then(async (value) => { + if (value) + await this.$apollo + .mutate({ + mutation: adminDeleteContribution, + variables: { + id: item.id, + }, + }) + .then((result) => { + this.updatePendingCreations(item.id) + this.toastSuccess(this.$t('creation_form.toasted_delete')) + }) + .catch((error) => { + this.toastError(error.message) + }) + }) }, confirmCreation() { this.$apollo From 0b97e8e38e3212776c7b2f64ee852dcf4ae260f9 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Mon, 25 Jul 2022 14:31:16 +0200 Subject: [PATCH 2/2] test the confirm deletion modal --- admin/src/pages/CreationConfirm.spec.js | 50 +++++++++++++++++++------ 1 file changed, 38 insertions(+), 12 deletions(-) diff --git a/admin/src/pages/CreationConfirm.spec.js b/admin/src/pages/CreationConfirm.spec.js index 632f19ff9..d0293fb3f 100644 --- a/admin/src/pages/CreationConfirm.spec.js +++ b/admin/src/pages/CreationConfirm.spec.js @@ -80,28 +80,54 @@ describe('CreationConfirm', () => { }) describe('remove creation with success', () => { - beforeEach(async () => { - await wrapper.findAll('tr').at(1).findAll('button').at(0).trigger('click') - }) + let spy - it('calls the adminDeleteContribution mutation', () => { - expect(apolloMutateMock).toBeCalledWith({ - mutation: adminDeleteContribution, - variables: { id: 1 }, + describe('admin confirms deletion', () => { + beforeEach(async () => { + spy = jest.spyOn(wrapper.vm.$bvModal, 'msgBoxConfirm') + spy.mockImplementation(() => Promise.resolve('some value')) + await wrapper.findAll('tr').at(1).findAll('button').at(0).trigger('click') + }) + + it('opens a modal', () => { + expect(spy).toBeCalled() + }) + + it('calls the adminDeleteContribution mutation', () => { + expect(apolloMutateMock).toBeCalledWith({ + mutation: adminDeleteContribution, + variables: { id: 1 }, + }) + }) + + it('commits openCreationsMinus to store', () => { + expect(storeCommitMock).toBeCalledWith('openCreationsMinus', 1) + }) + + it('toasts a success message', () => { + expect(toastSuccessSpy).toBeCalledWith('creation_form.toasted_delete') }) }) - it('commits openCreationsMinus to store', () => { - expect(storeCommitMock).toBeCalledWith('openCreationsMinus', 1) - }) + describe('admin cancels deletion', () => { + beforeEach(async () => { + spy = jest.spyOn(wrapper.vm.$bvModal, 'msgBoxConfirm') + spy.mockImplementation(() => Promise.resolve(false)) + await wrapper.findAll('tr').at(1).findAll('button').at(0).trigger('click') + }) - it('toasts a success message', () => { - expect(toastSuccessSpy).toBeCalledWith('creation_form.toasted_delete') + it('does not call the adminDeleteContribution mutation', () => { + expect(apolloMutateMock).not.toBeCalled() + }) }) }) describe('remove creation with error', () => { + let spy + beforeEach(async () => { + spy = jest.spyOn(wrapper.vm.$bvModal, 'msgBoxConfirm') + spy.mockImplementation(() => Promise.resolve('some value')) apolloMutateMock.mockRejectedValue({ message: 'Ouchhh!' }) await wrapper.findAll('tr').at(1).findAll('button').at(0).trigger('click') })