From 43d811e2fa07be73cc564cf647b8902b255a8238 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 26 Jan 2022 14:31:13 +0100 Subject: [PATCH 1/4] fix: Creation Confirmation User Ids --- admin/src/components/UserTable.vue | 21 +---- admin/src/pages/Creation.vue | 3 +- admin/src/pages/CreationConfirm.vue | 114 +++++++++++++++------------- 3 files changed, 65 insertions(+), 73 deletions(-) diff --git a/admin/src/components/UserTable.vue b/admin/src/components/UserTable.vue index 3f8dface3..22fadafa2 100644 --- a/admin/src/components/UserTable.vue +++ b/admin/src/components/UserTable.vue @@ -161,8 +161,6 @@ import ConfirmRegisterMailFormular from '../components/ConfirmRegisterMailFormul import CreationTransactionListFormular from '../components/CreationTransactionListFormular.vue' import RowDetails from '../components/RowDetails.vue' -import { confirmPendingCreation } from '../graphql/confirmPendingCreation' - const slotNames = ['show-creation', 'show-register-mail', 'show-transaction-list'] export default { @@ -272,7 +270,7 @@ export default { this.bookmarkRemove(item) } if (bookmarkType === 'confirm') { - this.bookmarkConfirm(item) + this.$emit('confirm-creation', item) } this.overlay = false }, @@ -288,24 +286,9 @@ export default { } if (this.type === 'PageCreationConfirm') { - this.$emit('remove-confirm-result', item, 'remove') + this.$emit('remove-creation', item) } }, - bookmarkConfirm(item) { - this.$apollo - .mutate({ - mutation: confirmPendingCreation, - variables: { - id: item.id, - }, - }) - .then(() => { - this.$emit('remove-confirm-result', item, 'confirmed') - }) - .catch((error) => { - this.$toasted.error(error.message) - }) - }, updateCreationData(data) { this.creationUserData.amount = data.amount this.creationUserData.date = data.date diff --git a/admin/src/pages/Creation.vue b/admin/src/pages/Creation.vue index 0de804288..11b098ba4 100644 --- a/admin/src/pages/Creation.vue +++ b/admin/src/pages/Creation.vue @@ -126,6 +126,7 @@ export default { currentPage: this.currentPage, pageSize: this.perPage, }, + fetchPolicy: 'network-only', }) .then((result) => { this.rows = result.data.searchUsers.userCount @@ -162,8 +163,8 @@ export default { } }, removeAllBookmark() { - this.itemsMassCreation.forEach((item) => this.itemsList.push(item)) this.itemsMassCreation = [] + this.getUsers() }, }, watch: { diff --git a/admin/src/pages/CreationConfirm.vue b/admin/src/pages/CreationConfirm.vue index bfb3100aa..41411d410 100644 --- a/admin/src/pages/CreationConfirm.vue +++ b/admin/src/pages/CreationConfirm.vue @@ -5,7 +5,8 @@ type="PageCreationConfirm" :itemsUser="confirmResult" :fieldsTable="fields" - @remove-confirm-result="removeConfirmResult" + @remove-creation="removeCreation" + @confirm-creation="confirmCreation" /> @@ -13,6 +14,7 @@ import UserTable from '../components/UserTable.vue' import { getPendingCreations } from '../graphql/getPendingCreations' import { deletePendingCreation } from '../graphql/deletePendingCreation' +import { confirmPendingCreation } from '../graphql/confirmPendingCreation' export default { name: 'CreationConfirm', @@ -21,8 +23,63 @@ export default { }, data() { return { - showArrays: false, - fields: [ + confirmResult: [], + } + }, + methods: { + removeCreation(item) { + this.$apollo + .mutate({ + mutation: deletePendingCreation, + variables: { + id: item.id, + }, + }) + .then((result) => { + this.confirmResult = this.confirmResult.filter((obj) => obj.id !== item.id) + this.$store.commit('openCreationsMinus', 1) + this.$toasted.success(this.$t('creation_form.toasted_delete')) + }) + .catch((error) => { + this.$toasted.error(error.message) + }) + }, + confirmCreation(item) { + this.$apollo + .mutate({ + mutation: confirmPendingCreation, + variables: { + id: item.id, + }, + }) + .then(() => { + this.confirmResult = this.confirmResult.filter((obj) => obj.id !== item.id) + this.$store.commit('openCreationsMinus', 1) + this.$toasted.success(this.$t('creation_form.toasted_created')) + }) + .catch((error) => { + this.$toasted.error(error.message) + }) + }, + getPendingCreations() { + this.$apollo + .query({ + query: getPendingCreations, + fetchPolicy: 'network-only', + }) + .then((result) => { + this.$store.commit('resetOpenCreations') + this.confirmResult = result.data.getPendingCreations + this.$store.commit('setOpenCreations', result.data.getPendingCreations.length) + }) + .catch((error) => { + this.$toasted.error(error.message) + }) + }, + }, + computed: { + fields() { + return [ { key: 'bookmark', label: 'löschen' }, { key: 'email', label: 'Email' }, { key: 'firstName', label: 'Vorname' }, @@ -45,56 +102,7 @@ export default { { key: 'moderator', label: 'Moderator' }, { key: 'edit_creation', label: 'ändern' }, { key: 'confirm', label: 'speichern' }, - ], - confirmResult: [], - } - }, - methods: { - removeConfirmResult(e, event) { - let index = 0 - const findArr = this.confirmResult.find((arr) => arr.id === e.id) - switch (event) { - case 'remove': - this.$apollo - .mutate({ - mutation: deletePendingCreation, - variables: { - id: findArr.id, - }, - }) - .then((result) => { - index = this.confirmResult.indexOf(findArr) - this.confirmResult.splice(index, 1) - this.$store.commit('openCreationsMinus', 1) - this.$toasted.success(this.$t('creation_form.toasted_delete')) - }) - .catch((error) => { - this.$toasted.error(error.message) - }) - break - case 'confirmed': - this.confirmResult.splice(index, 1) - this.$store.commit('openCreationsMinus', 1) - this.$toasted.success(this.$t('creation_form.toasted_created')) - break - default: - this.$toasted.error(this.$t('creation_form.toasted_default', { event })) - } - }, - getPendingCreations() { - this.$apollo - .query({ - query: getPendingCreations, - fetchPolicy: 'network-only', - }) - .then((result) => { - this.$store.commit('resetOpenCreations') - this.confirmResult = result.data.getPendingCreations - this.$store.commit('setOpenCreations', result.data.getPendingCreations.length) - }) - .catch((error) => { - this.$toasted.error(error.message) - }) + ] }, }, async created() { From 1c833d394f502a7aed2b5a648c0171a2fe4ee1e6 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 26 Jan 2022 15:06:37 +0100 Subject: [PATCH 2/4] fix and improve test --- .github/workflows/test.yml | 2 +- admin/src/pages/CreationConfirm.spec.js | 97 ++++++------------------- admin/src/pages/CreationConfirm.vue | 12 +-- 3 files changed, 29 insertions(+), 82 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 8c2f5d96c..b21d0d355 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -470,7 +470,7 @@ jobs: report_name: Coverage Admin Interface type: lcov result_path: ./coverage/lcov.info - min_coverage: 77 + min_coverage: 78 token: ${{ github.token }} ############################################################################## diff --git a/admin/src/pages/CreationConfirm.spec.js b/admin/src/pages/CreationConfirm.spec.js index cc0a096da..e6b644bb7 100644 --- a/admin/src/pages/CreationConfirm.spec.js +++ b/admin/src/pages/CreationConfirm.spec.js @@ -1,6 +1,7 @@ import { mount } from '@vue/test-utils' import CreationConfirm from './CreationConfirm.vue' import { deletePendingCreation } from '../graphql/deletePendingCreation' +import { confirmPendingCreation } from '../graphql/confirmPendingCreation' const localVue = global.localVue @@ -26,7 +27,7 @@ const apolloQueryMock = jest.fn().mockResolvedValue({ lastName: 'Hotzenplotz', email: 'raeuber@hotzenplotz.de', amount: 1000000, - memo: 'Gut Ergatert', + memo: 'Gut Ergattert', date: new Date(), moderator: 0, }, @@ -73,6 +74,10 @@ describe('CreationConfirm', () => { expect(wrapper.find('div.creation-confirm').exists()).toBeTruthy() }) + it('has two pending creations', () => { + expect(wrapper.vm.pendingCreations).toHaveLength(2) + }) + describe('store', () => { it('commits resetOpenCreations to store', () => { expect(storeCommitMock).toBeCalledWith('resetOpenCreations') @@ -82,37 +87,9 @@ describe('CreationConfirm', () => { }) }) - describe('delete creation delete with success', () => { + describe('remove creation with success', () => { beforeEach(async () => { - apolloQueryMock.mockResolvedValue({ - data: { - getPendingCreations: [ - { - id: 1, - firstName: 'Bibi', - lastName: 'Bloxberg', - email: 'bibi@bloxberg.de', - amount: 500, - memo: 'Danke für alles', - date: new Date(), - moderator: 0, - }, - { - id: 2, - firstName: 'Räuber', - lastName: 'Hotzenplotz', - email: 'raeuber@hotzenplotz.de', - amount: 1000000, - memo: 'Gut Ergatert', - date: new Date(), - moderator: 0, - }, - ], - }, - }) - await wrapper - .findComponent({ name: 'UserTable' }) - .vm.$emit('remove-confirm-result', { id: 1 }, 'remove') + await wrapper.findComponent({ name: 'UserTable' }).vm.$emit('remove-creation', { id: 1 }) }) it('calls the deletePendingCreation mutation', () => { @@ -131,12 +108,10 @@ describe('CreationConfirm', () => { }) }) - describe('delete creation delete with error', () => { + describe('remove creation with error', () => { beforeEach(async () => { apolloMutateMock.mockRejectedValue({ message: 'Ouchhh!' }) - await wrapper - .findComponent({ name: 'UserTable' }) - .vm.$emit('remove-confirm-result', { id: 1 }, 'remove') + await wrapper.findComponent({ name: 'UserTable' }).vm.$emit('remove-creation', { id: 1 }) }) it('toasts an error message', () => { @@ -144,43 +119,16 @@ describe('CreationConfirm', () => { }) }) - describe('confirm creation delete with success', () => { + describe('confirm creation with success', () => { beforeEach(async () => { - apolloQueryMock.mockResolvedValue({ - data: { - getPendingCreations: [ - { - id: 1, - firstName: 'Bibi', - lastName: 'Bloxberg', - email: 'bibi@bloxberg.de', - amount: 500, - memo: 'Danke für alles', - date: new Date(), - moderator: 0, - }, - { - id: 2, - firstName: 'Räuber', - lastName: 'Hotzenplotz', - email: 'raeuber@hotzenplotz.de', - amount: 1000000, - memo: 'Gut Ergatert', - date: new Date(), - moderator: 0, - }, - ], - }, - }) - await wrapper - .findComponent({ name: 'UserTable' }) - .vm.$emit('remove-confirm-result', { id: 1 }, 'confirmed') + apolloMutateMock.mockResolvedValue({}) + await wrapper.findComponent({ name: 'UserTable' }).vm.$emit('confirm-creation', { id: 2 }) }) - it('calls the deletePendingCreation mutation', () => { - expect(apolloMutateMock).not.toBeCalledWith({ - mutation: deletePendingCreation, - variables: { id: 1 }, + it('calls the confirmPendingCreation mutation', () => { + expect(apolloMutateMock).toBeCalledWith({ + mutation: confirmPendingCreation, + variables: { id: 2 }, }) }) @@ -193,19 +141,18 @@ describe('CreationConfirm', () => { }) }) - describe('delete creation delete with error', () => { + describe('confirm creation with error', () => { beforeEach(async () => { - await wrapper - .findComponent({ name: 'UserTable' }) - .vm.$emit('remove-confirm-result', { id: 1 }, 'confirm') + apolloMutateMock.mockRejectedValue({ message: 'Ouchhh!' }) + await wrapper.findComponent({ name: 'UserTable' }).vm.$emit('confirm-creation', { id: 2 }) }) it('toasts an error message', () => { - expect(toastedErrorMock).toBeCalledWith('creation_form.toasted_default') + expect(toastedErrorMock).toBeCalledWith('Ouchhh!') }) }) - describe('server response is error', () => { + describe('server response got get pending creations is error', () => { beforeEach(() => { jest.clearAllMocks() apolloQueryMock.mockRejectedValue({ diff --git a/admin/src/pages/CreationConfirm.vue b/admin/src/pages/CreationConfirm.vue index 41411d410..712e4ece1 100644 --- a/admin/src/pages/CreationConfirm.vue +++ b/admin/src/pages/CreationConfirm.vue @@ -3,7 +3,7 @@ { - this.confirmResult = this.confirmResult.filter((obj) => obj.id !== item.id) + this.pendingCreations = this.pendingCreations.filter((obj) => obj.id !== item.id) this.$store.commit('openCreationsMinus', 1) this.$toasted.success(this.$t('creation_form.toasted_delete')) }) @@ -52,8 +52,8 @@ export default { id: item.id, }, }) - .then(() => { - this.confirmResult = this.confirmResult.filter((obj) => obj.id !== item.id) + .then((result) => { + this.pendingCreations = this.pendingCreations.filter((obj) => obj.id !== item.id) this.$store.commit('openCreationsMinus', 1) this.$toasted.success(this.$t('creation_form.toasted_created')) }) @@ -69,7 +69,7 @@ export default { }) .then((result) => { this.$store.commit('resetOpenCreations') - this.confirmResult = result.data.getPendingCreations + this.pendingCreations = result.data.getPendingCreations this.$store.commit('setOpenCreations', result.data.getPendingCreations.length) }) .catch((error) => { From eb2d2a0d3d209e3ac7400c7e7348e536265d5fed Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 26 Jan 2022 15:13:12 +0100 Subject: [PATCH 3/4] fix typo --- admin/src/pages/CreationConfirm.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/admin/src/pages/CreationConfirm.spec.js b/admin/src/pages/CreationConfirm.spec.js index e6b644bb7..cd854fb19 100644 --- a/admin/src/pages/CreationConfirm.spec.js +++ b/admin/src/pages/CreationConfirm.spec.js @@ -152,7 +152,7 @@ describe('CreationConfirm', () => { }) }) - describe('server response got get pending creations is error', () => { + describe('server response for get pending creations is error', () => { beforeEach(() => { jest.clearAllMocks() apolloQueryMock.mockRejectedValue({ From 8af325d3d06bdc716b2ca372a434db0a6b1587e7 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 26 Jan 2022 15:17:53 +0100 Subject: [PATCH 4/4] more compact code --- admin/src/pages/CreationConfirm.vue | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/admin/src/pages/CreationConfirm.vue b/admin/src/pages/CreationConfirm.vue index 712e4ece1..202133460 100644 --- a/admin/src/pages/CreationConfirm.vue +++ b/admin/src/pages/CreationConfirm.vue @@ -36,8 +36,7 @@ export default { }, }) .then((result) => { - this.pendingCreations = this.pendingCreations.filter((obj) => obj.id !== item.id) - this.$store.commit('openCreationsMinus', 1) + this.updatePendingCreations(item.id) this.$toasted.success(this.$t('creation_form.toasted_delete')) }) .catch((error) => { @@ -53,8 +52,7 @@ export default { }, }) .then((result) => { - this.pendingCreations = this.pendingCreations.filter((obj) => obj.id !== item.id) - this.$store.commit('openCreationsMinus', 1) + this.updatePendingCreations(item.id) this.$toasted.success(this.$t('creation_form.toasted_created')) }) .catch((error) => { @@ -76,6 +74,10 @@ export default { this.$toasted.error(error.message) }) }, + updatePendingCreations(id) { + this.pendingCreations = this.pendingCreations.filter((obj) => obj.id !== id) + this.$store.commit('openCreationsMinus', 1) + }, }, computed: { fields() {