From d742697a34ee9bd579db6921fc48576c6d665c78 Mon Sep 17 00:00:00 2001 From: ogerly Date: Wed, 21 Jun 2023 12:24:00 +0200 Subject: [PATCH 01/29] add moderator messages message type, add mutation adminListContributionMessages --- .../ContributionMessagesFormular.spec.js | 10 ++++--- .../ContributionMessagesFormular.vue | 26 ++++++++++++++++--- .../ContributionMessagesList.vue | 7 ++--- .../graphql/adminListContributionMessages.js | 24 +++++++++++++++++ 4 files changed, 58 insertions(+), 9 deletions(-) create mode 100644 admin/src/graphql/adminListContributionMessages.js diff --git a/admin/src/components/ContributionMessages/ContributionMessagesFormular.spec.js b/admin/src/components/ContributionMessages/ContributionMessagesFormular.spec.js index a81009c09..c575ba01c 100644 --- a/admin/src/components/ContributionMessages/ContributionMessagesFormular.spec.js +++ b/admin/src/components/ContributionMessages/ContributionMessagesFormular.spec.js @@ -64,7 +64,7 @@ describe('ContributionMessagesFormular', () => { text: 'text form message', }, }) - await wrapper.find('form').trigger('submit') + await wrapper.find('[data-test="submit-dialog"]').trigger('click') }) it('emitted "get-list-contribution-messages" with data', async () => { @@ -84,7 +84,7 @@ describe('ContributionMessagesFormular', () => { beforeEach(async () => { apolloMutateMock.mockRejectedValue({ message: 'OUCH!' }) wrapper = Wrapper() - await wrapper.find('form').trigger('submit') + await wrapper.find('[data-test="submit-dialog"]').trigger('submit') }) it('toasts an error message', () => { @@ -100,7 +100,11 @@ describe('ContributionMessagesFormular', () => { }, }) wrapper = Wrapper() - await wrapper.find('form').trigger('submit') + await wrapper.find('data-test="submit-dialog').trigger('submit') + }) + + it('moderatorMesage has `DIALOG`', () => { + expect(wrapper.vm.messageType).toBeCalledWith('DIALOG') }) it('toasts an success message', () => { diff --git a/admin/src/components/ContributionMessages/ContributionMessagesFormular.vue b/admin/src/components/ContributionMessages/ContributionMessagesFormular.vue index 3a5d6e0b8..a13df5ef9 100644 --- a/admin/src/components/ContributionMessages/ContributionMessagesFormular.vue +++ b/admin/src/components/ContributionMessages/ContributionMessagesFormular.vue @@ -1,7 +1,7 @@ @@ -39,13 +47,14 @@ export default { type: Object, required: true, }, + contributionUserId: { + type: Number, + required: true, + }, }, computed: { isModerator() { - return ( - this.message.userFirstName === this.$store.state.moderator.firstName && - this.message.userLastName === this.$store.state.moderator.lastName - ) + return this.contributionUserId !== this.message.userId }, isModeratorMessage() { return this.message.type === 'MODERATOR' diff --git a/admin/src/components/Tables/OpenCreationsTable.vue b/admin/src/components/Tables/OpenCreationsTable.vue index 9d93eba60..33e9bb141 100644 --- a/admin/src/components/Tables/OpenCreationsTable.vue +++ b/admin/src/components/Tables/OpenCreationsTable.vue @@ -103,6 +103,7 @@ From ba98797009719de6744ee901d6d1adf3317d251d Mon Sep 17 00:00:00 2001 From: mahula Date: Mon, 26 Jun 2023 13:55:45 +0200 Subject: [PATCH 09/29] add deleted user and not registered user scenarios to e2e password reset feature --- .../User.Authentication.ResetPassword.feature | 29 +++++++++++++++---- .../support/step_definitions/email_steps.ts | 15 ++++++++++ 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/e2e-tests/cypress/e2e/User.Authentication.ResetPassword.feature b/e2e-tests/cypress/e2e/User.Authentication.ResetPassword.feature index 50a29d320..ab9213cb9 100644 --- a/e2e-tests/cypress/e2e/User.Authentication.ResetPassword.feature +++ b/e2e-tests/cypress/e2e/User.Authentication.ResetPassword.feature @@ -2,13 +2,27 @@ Feature: User Authentication - reset password As a user I want to reset my password from the sign in page - # TODO for these pre-conditions utilize seeding or API check, if user exists in test system - # Background: - # Given the following "users" are in the database: - # | email | password | name | - # | raeuber@hotzenplotz.de | Aa12345_ | Räuber Hotzenplotz | - + Scenario: Reset password as not registered user + Given the user navigates to page "/login" + And the user navigates to the forgot password page + When the user enters the e-mail address "not@registered.com" + And the user submits the e-mail form + Then the user receives no password reset e-mail + + Scenario: Reset password as deleted user + # Given the following "users" are in the database: + # | email | password | name | + # | stephen@hawking.uk | Aa12345_ | Stephen Hawking | + Given the user navigates to page "/login" + And the user navigates to the forgot password page + When the user enters the e-mail address "stephen@hawking.uk" + And the user submits the e-mail form + Then the user receives no password reset e-mail + Scenario: Reset password from signin page successfully + # Given the following "users" are in the database: + # | email | password | name | + # | raeuber@hotzenplotz.de | Aa12345_ | Räuber Hotzenplotz | Given the user navigates to page "/login" And the user navigates to the forgot password page When the user enters the e-mail address "raeuber@hotzenplotz.de" @@ -23,3 +37,6 @@ Feature: User Authentication - reset password And the user cannot login But the user submits the credentials "raeuber@hotzenplotz.de" "12345Aa_" And the user is logged in with username "Räuber Hotzenplotz" + + + diff --git a/e2e-tests/cypress/support/step_definitions/email_steps.ts b/e2e-tests/cypress/support/step_definitions/email_steps.ts index d31e2474e..fdf273def 100644 --- a/e2e-tests/cypress/support/step_definitions/email_steps.ts +++ b/e2e-tests/cypress/support/step_definitions/email_steps.ts @@ -51,6 +51,21 @@ Then('the user receives an e-mail containing the {string} link', (linkName: stri ) }) +Then('the user receives no password reset e-mail', () { + cy.origin( + Cypress.env('mailserverURL'), + { args: { userEMailSite } }, + ({ userEMailSite }) => { + cy.visit('/') + cy.get(userEMailSite.emailInbox).should('be.visible') + + cy.get(userEMailSite.emailList) + .find('.email-item') + .should('have.length', 0) + } + ) +}) + When('the user opens the {string} link in the browser', (linkName: string) => { cy.task('getEmailLink').then((emailLink) => { cy.visit(emailLink) From 6f1bb9653b7ad1c6c763640eef96027e549b4aad Mon Sep 17 00:00:00 2001 From: ogerly Date: Tue, 27 Jun 2023 09:38:39 +0200 Subject: [PATCH 10/29] refactor history message, fix test for ContributionMessagesListItem.spec.js --- .../ContributionMessagesListItem.spec.js | 10 ++++-- .../slots/ContributionMessagesListItem.vue | 33 +++++++++++++------ admin/src/locales/de.json | 3 +- admin/src/locales/en.json | 3 +- 4 files changed, 34 insertions(+), 15 deletions(-) diff --git a/admin/src/components/ContributionMessages/slots/ContributionMessagesListItem.spec.js b/admin/src/components/ContributionMessages/slots/ContributionMessagesListItem.spec.js index 3f9fef77d..9f8ad5ba2 100644 --- a/admin/src/components/ContributionMessages/slots/ContributionMessagesListItem.spec.js +++ b/admin/src/components/ContributionMessages/slots/ContributionMessagesListItem.spec.js @@ -26,6 +26,7 @@ describe('ContributionMessagesListItem', () => { describe('if message author has moderator role', () => { const propsData = { contributionId: 42, + contributionUserId: 108, state: 'PENDING', message: { id: 111, @@ -81,6 +82,7 @@ describe('ContributionMessagesListItem', () => { describe('if message author does not have moderator role', () => { const propsData = { contributionId: 42, + contributionUserId: 108, state: 'PENDING', message: { id: 113, @@ -132,6 +134,7 @@ describe('ContributionMessagesListItem', () => { describe('links in contribtion message', () => { const propsData = { + contributionUserId: 108, message: { id: 111, message: 'Lorem ipsum?', @@ -159,7 +162,7 @@ describe('ContributionMessagesListItem', () => { beforeEach(() => { propsData.message.message = 'https://gradido.net/de/' wrapper = ModeratorItemWrapper() - messageField = wrapper.find('div.is-not-moderator.text-left > div:nth-child(4)') + messageField = wrapper.find('[data-test="moderator-message"]') }) it('contains the link as text', () => { @@ -176,7 +179,7 @@ describe('ContributionMessagesListItem', () => { propsData.message.message = `Here you find all you need to know about Gradido: https://gradido.net/de/ and here is the link to the repository: https://github.com/gradido/gradido` wrapper = ModeratorItemWrapper() - messageField = wrapper.find('div.is-not-moderator.text-left > div:nth-child(4)') + messageField = wrapper.find('[data-test="moderator-message"]') }) it('contains the whole text', () => { @@ -196,6 +199,7 @@ and here is the link to the repository: https://github.com/gradido/gradido`) describe('contribution message type HISTORY', () => { const propsData = { + contributionUserId: 108, message: { id: 111, message: `Sun Nov 13 2022 13:05:48 GMT+0100 (Central European Standard Time) @@ -227,7 +231,7 @@ This message also contains a link: https://gradido.net/de/ beforeEach(() => { jest.clearAllMocks() wrapper = itemWrapper() - messageField = wrapper.find('div.is-not-moderator.text-left > div:nth-child(4)') + messageField = wrapper }) it('renders the date', () => { diff --git a/admin/src/components/ContributionMessages/slots/ContributionMessagesListItem.vue b/admin/src/components/ContributionMessages/slots/ContributionMessagesListItem.vue index 5be952a2c..67a42433e 100644 --- a/admin/src/components/ContributionMessages/slots/ContributionMessagesListItem.vue +++ b/admin/src/components/ContributionMessages/slots/ContributionMessagesListItem.vue @@ -1,10 +1,6 @@