From 6bcf81b7d3afe1c85787deca78906cdf2dd7ba1e Mon Sep 17 00:00:00 2001 From: elweyn Date: Tue, 13 Jun 2023 11:07:17 +0200 Subject: [PATCH 01/54] Add definition of cron-job for klicktipp export. --- deployment/bare_metal/setup.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/deployment/bare_metal/setup.md b/deployment/bare_metal/setup.md index 9cbc4e2e3..717dd8547 100644 --- a/deployment/bare_metal/setup.md +++ b/deployment/bare_metal/setup.md @@ -234,7 +234,8 @@ crontab -l This show all existing entries of the crontab for user `gradido` -To install/add the cronjob for a daily backup at 3:00am please +To install/add the cronjob for a daily backup at 3:00am please, +To install/add the cronjob for a daily klicktipp export at 4:00am please, Run: @@ -244,4 +245,5 @@ crontab -e and insert the following line ```bash 0 3 * * * ~/gradido/deployment/bare_metal/backup.sh +0 4 * * * cd ~/gradido/backend/ && yarn klicktipp && cd ``` From 33eda9501a045f5f9542d62ea742f50042330759 Mon Sep 17 00:00:00 2001 From: mahula Date: Tue, 13 Jun 2023 14:48:21 +0200 Subject: [PATCH 02/54] remove experimentalSessionAndOrigin from cypress config --- e2e-tests/cypress.config.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/e2e-tests/cypress.config.ts b/e2e-tests/cypress.config.ts index e26259626..e48810816 100644 --- a/e2e-tests/cypress.config.ts +++ b/e2e-tests/cypress.config.ts @@ -41,7 +41,6 @@ export default defineConfig({ e2e: { specPattern: '**/*.feature', excludeSpecPattern: '*.js', - experimentalSessionAndOrigin: true, baseUrl: 'http://localhost:3000', chromeWebSecurity: false, defaultCommandTimeout: 10000, From a837ce0a0da4e939b5b185eace0ddeaa5d4a3168 Mon Sep 17 00:00:00 2001 From: mahula Date: Fri, 16 Jun 2023 16:29:25 +0200 Subject: [PATCH 03/54] add send page obpejt for e2e tests --- e2e-tests/cypress/e2e/models/SendPage.ts | 33 ++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 e2e-tests/cypress/e2e/models/SendPage.ts diff --git a/e2e-tests/cypress/e2e/models/SendPage.ts b/e2e-tests/cypress/e2e/models/SendPage.ts new file mode 100644 index 000000000..ab2df6084 --- /dev/null +++ b/e2e-tests/cypress/e2e/models/SendPage.ts @@ -0,0 +1,33 @@ +/// + +export class SendPage { + submitBtn = '.btn-gradido' + + enterReceiverEmail(email: string) { + cy.get('[data-test="input-identifier"]').find('input') + .clear() + .type(email) + return this + } + + enterAmount(amount: string) { + cy.get('[data-test="input-amount"]') + .find('input') + .clear() + .type(amount) + return this + } + + enterMemoText(text: string) { + cy.get('[data-test="input-textarea"]') + .find('textarea') + .clear() + .type(text) + return this + } + + submit() { + cy.get(this.submitBtn) + .click() + } +} From e46ff56c1e6ac3ffd7c8efa3cb1eb950ff8f5971 Mon Sep 17 00:00:00 2001 From: mahula Date: Fri, 16 Jun 2023 16:32:19 +0200 Subject: [PATCH 04/54] add send test of e2e feature send coins --- e2e-tests/cypress/e2e/SendCoins.feature | 20 +++++++ .../step_definitions/send_coin_steps.ts | 60 +++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 e2e-tests/cypress/e2e/SendCoins.feature create mode 100644 e2e-tests/cypress/support/step_definitions/send_coin_steps.ts diff --git a/e2e-tests/cypress/e2e/SendCoins.feature b/e2e-tests/cypress/e2e/SendCoins.feature new file mode 100644 index 000000000..f04684afb --- /dev/null +++ b/e2e-tests/cypress/e2e/SendCoins.feature @@ -0,0 +1,20 @@ +Feature: Send coins + As a user + I want to send and receive GDD + I want to see transaction details on overview and transactions pages + + # Background: + # Given the following "users" are in the database: + # | email | password | name | + # | bob@baumeister.de | Aa12345_ | Bob Baumeister | + # | raeuber@hotzenplotz.de | Aa12345_ | Räuber Hotzenplotz | + + Scenario: Send GDD to other user + Given the user is logged in as "bob@baumeister.de" "Aa12345_" + And the user navigates to page "/send" + When the user fills the send form with "raeuber@hotzenplotz.de" "120,50" "Some memo text" + And the user submits the send form + Then the transaction details are presented for confirmation + When the user submits the transaction by confirming + Then the transaction details are displayed on the transcations page + diff --git a/e2e-tests/cypress/support/step_definitions/send_coin_steps.ts b/e2e-tests/cypress/support/step_definitions/send_coin_steps.ts new file mode 100644 index 000000000..f96da9768 --- /dev/null +++ b/e2e-tests/cypress/support/step_definitions/send_coin_steps.ts @@ -0,0 +1,60 @@ +import { And, Then, When } from '@badeball/cypress-cucumber-preprocessor' +import { SendPage } from '../../e2e/models/SendPage' + +const sendPage = new SendPage() + +When( + 'the user fills the send form with {string} {string} {string}', + (email: string, amount: string, memoText: string) => { + sendPage.enterReceiverEmail(email) + sendPage.enterAmount(amount) + sendPage.enterMemoText(memoText) + } +) + +And('the user submits the send form', () => { + sendPage.submit() + cy.get('.transaction-confirm-send').should('be.visible') +}) + + +Then('the transaction details are presented for confirmation', () => { + cy.get('.transaction-confirm-send').contains('raeuber@hotzenplotz.de') + cy.get('.transaction-confirm-send').contains('+ 120,50 GDD') + cy.get('.transaction-confirm-send').contains('Some memo text') + cy.get('.transaction-confirm-send').contains('+ 515,11 GDD') + cy.get('.transaction-confirm-send').contains('− 120,50 GDD') + cy.get('.transaction-confirm-send').contains('+ 394,61 GDD') +}) + +When('the user submits the transaction by confirming', () => { + cy.intercept({ + method: 'POST', + url: '/graphql', + hostname: 'localhost', + }).as('sendCoins') + + sendPage.submit() + + cy.wait('@sendCoins').then((interception) => { + cy.wrap(interception.response?.statusCode).should('eq', 200) + cy.wrap(interception.request.body) + .should('have.property', 'query', `mutation ($identifier: String!, $amount: Decimal!, $memo: String!) { + sendCoins(identifier: $identifier, amount: $amount, memo: $memo) +} +` ) + cy.wrap(interception.response?.body) + .should('have.nested.property', 'data.sendCoins') + .and('equal', true) + }) + cy.get('[data-test="send-transaction-success-text"]').should('be.visible') + cy.get('.rightside-last-transactions').should('be.visible') + cy.get('.align-items-center').contains('Räuber Hotzenplotz') + cy.get('.align-items-center').contains('− 120,50 GDD') +}) + +Then('the transaction details are displayed on the transcations page', () => { + cy.visit('/transactions') + cy.get('.test-list-group-item').contains('Räuber Hotzenplotz') + cy.get('.test-list-group-item').contains('− 120,50 GDD') +}) \ No newline at end of file From f80e8540ddd6b00a4db5f49daaf2c05f50184e66 Mon Sep 17 00:00:00 2001 From: mahula Date: Fri, 16 Jun 2023 16:32:19 +0200 Subject: [PATCH 05/54] add send test of e2e feature send coins --- .../support/step_definitions/send_coin_steps.ts | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/e2e-tests/cypress/support/step_definitions/send_coin_steps.ts b/e2e-tests/cypress/support/step_definitions/send_coin_steps.ts index f96da9768..b7c319c08 100644 --- a/e2e-tests/cypress/support/step_definitions/send_coin_steps.ts +++ b/e2e-tests/cypress/support/step_definitions/send_coin_steps.ts @@ -20,11 +20,11 @@ And('the user submits the send form', () => { Then('the transaction details are presented for confirmation', () => { cy.get('.transaction-confirm-send').contains('raeuber@hotzenplotz.de') - cy.get('.transaction-confirm-send').contains('+ 120,50 GDD') + cy.get('.transaction-confirm-send').contains('+ 120.50 GDD') cy.get('.transaction-confirm-send').contains('Some memo text') - cy.get('.transaction-confirm-send').contains('+ 515,11 GDD') - cy.get('.transaction-confirm-send').contains('− 120,50 GDD') - cy.get('.transaction-confirm-send').contains('+ 394,61 GDD') + cy.get('.transaction-confirm-send').contains('+ 515.11 GDD') + cy.get('.transaction-confirm-send').contains('− 120.50 GDD') + cy.get('.transaction-confirm-send').contains('+ 394.61 GDD') }) When('the user submits the transaction by confirming', () => { @@ -50,11 +50,5 @@ When('the user submits the transaction by confirming', () => { cy.get('[data-test="send-transaction-success-text"]').should('be.visible') cy.get('.rightside-last-transactions').should('be.visible') cy.get('.align-items-center').contains('Räuber Hotzenplotz') - cy.get('.align-items-center').contains('− 120,50 GDD') + cy.get('.align-items-center').contains('− 120.50 GDD') }) - -Then('the transaction details are displayed on the transcations page', () => { - cy.visit('/transactions') - cy.get('.test-list-group-item').contains('Räuber Hotzenplotz') - cy.get('.test-list-group-item').contains('− 120,50 GDD') -}) \ No newline at end of file From 5a86c10169853171ea1bc6ba135672207dedb2c8 Mon Sep 17 00:00:00 2001 From: mahula Date: Fri, 16 Jun 2023 16:32:19 +0200 Subject: [PATCH 06/54] add send test of e2e feature send coins --- e2e-tests/cypress/e2e/SendCoins.feature | 6 ++++-- e2e-tests/cypress/e2e/models/SendPage.ts | 1 + .../cypress/support/step_definitions/send_coin_steps.ts | 8 +++++++- frontend/src/components/Transactions/TransactionSend.vue | 2 +- 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/e2e-tests/cypress/e2e/SendCoins.feature b/e2e-tests/cypress/e2e/SendCoins.feature index f04684afb..3ff332012 100644 --- a/e2e-tests/cypress/e2e/SendCoins.feature +++ b/e2e-tests/cypress/e2e/SendCoins.feature @@ -12,9 +12,11 @@ Feature: Send coins Scenario: Send GDD to other user Given the user is logged in as "bob@baumeister.de" "Aa12345_" And the user navigates to page "/send" - When the user fills the send form with "raeuber@hotzenplotz.de" "120,50" "Some memo text" + When the user fills the send form with "raeuber@hotzenplotz.de" "120.50" "Some memo text" And the user submits the send form Then the transaction details are presented for confirmation When the user submits the transaction by confirming - Then the transaction details are displayed on the transcations page + And the user navigates to page "/transactions" + Then the transaction details are displayed on the transactions page + diff --git a/e2e-tests/cypress/e2e/models/SendPage.ts b/e2e-tests/cypress/e2e/models/SendPage.ts index ab2df6084..07b531c4a 100644 --- a/e2e-tests/cypress/e2e/models/SendPage.ts +++ b/e2e-tests/cypress/e2e/models/SendPage.ts @@ -1,6 +1,7 @@ /// export class SendPage { + confirmationBox = '.transaction-confirm-send' submitBtn = '.btn-gradido' enterReceiverEmail(email: string) { diff --git a/e2e-tests/cypress/support/step_definitions/send_coin_steps.ts b/e2e-tests/cypress/support/step_definitions/send_coin_steps.ts index b7c319c08..267de7dd1 100644 --- a/e2e-tests/cypress/support/step_definitions/send_coin_steps.ts +++ b/e2e-tests/cypress/support/step_definitions/send_coin_steps.ts @@ -14,7 +14,7 @@ When( And('the user submits the send form', () => { sendPage.submit() - cy.get('.transaction-confirm-send').should('be.visible') + cy.get(sendPage.confirmationBox).should('be.visible') }) @@ -52,3 +52,9 @@ When('the user submits the transaction by confirming', () => { cy.get('.align-items-center').contains('Räuber Hotzenplotz') cy.get('.align-items-center').contains('− 120.50 GDD') }) + + +Then('the transaction details are displayed on the transactions page', () => { + cy.get('div.mt-3 > div > div.test-list-group-item').eq(0).contains('div.gdd-transaction-list-item-name', 'Räuber Hotzenplotz') + cy.get('div.mt-3 > div > div.test-list-group-item').eq(0).contains('[data-test="send-amount"]', '− 120.50 GDD') +}) \ No newline at end of file diff --git a/frontend/src/components/Transactions/TransactionSend.vue b/frontend/src/components/Transactions/TransactionSend.vue index 62ac41ded..93a8aa98e 100644 --- a/frontend/src/components/Transactions/TransactionSend.vue +++ b/frontend/src/components/Transactions/TransactionSend.vue @@ -25,7 +25,7 @@
{{ $t('decay.types.send') }}
-
{{ amount | GDD }}
+
{{ amount | GDD }}
{{ $t('via_link') }} Date: Tue, 20 Jun 2023 10:37:54 +0200 Subject: [PATCH 07/54] add receive test to e2e feature send coins --- e2e-tests/cypress/e2e/SendCoins.feature | 26 +++++++-- e2e-tests/cypress/e2e/models/OverviewPage.ts | 2 + .../support/step_definitions/email_steps.ts | 54 +++++++++++++++++-- .../step_definitions/send_coin_steps.ts | 19 +++++-- .../Transactions/TransactionReceive.vue | 2 +- .../Transactions/TransactionSend.vue | 2 +- 6 files changed, 91 insertions(+), 14 deletions(-) diff --git a/e2e-tests/cypress/e2e/SendCoins.feature b/e2e-tests/cypress/e2e/SendCoins.feature index 3ff332012..0329b10f7 100644 --- a/e2e-tests/cypress/e2e/SendCoins.feature +++ b/e2e-tests/cypress/e2e/SendCoins.feature @@ -8,15 +8,33 @@ Feature: Send coins # | email | password | name | # | bob@baumeister.de | Aa12345_ | Bob Baumeister | # | raeuber@hotzenplotz.de | Aa12345_ | Räuber Hotzenplotz | - + Scenario: Send GDD to other user Given the user is logged in as "bob@baumeister.de" "Aa12345_" And the user navigates to page "/send" - When the user fills the send form with "raeuber@hotzenplotz.de" "120.50" "Some memo text" + When the user fills the send form with "raeuber@hotzenplotz.de" "" "Some memo text" And the user submits the send form Then the transaction details are presented for confirmation When the user submits the transaction by confirming And the user navigates to page "/transactions" - Then the transaction details are displayed on the transactions page - + Then the "" and "" are displayed on the "transactions" page + + Examples: + | receiverName | amount | + # | Räuber Hotzenplotz | 120.50 | + | Räuber Hotzenplotz | 120,50 | + Scenario: Receive GDD from other user + Given the user is logged in as "raeuber@hotzenplotz.de" "Aa12345_" + And the user receives the transaction e-mail about "" GDD from "" + When the user opens the "transaction" link in the browser + Then the "" and "" are displayed on the "overview" page + When the user navigates to page "/transactions" + Then the "" and "" are displayed on the "transactions" page + + Examples: + | senderName | amount | + # | Bob der Baumeister | 120.50 | + | Bob der Baumeister | 120,50 | + + diff --git a/e2e-tests/cypress/e2e/models/OverviewPage.ts b/e2e-tests/cypress/e2e/models/OverviewPage.ts index 345124c66..e8f881eba 100644 --- a/e2e-tests/cypress/e2e/models/OverviewPage.ts +++ b/e2e-tests/cypress/e2e/models/OverviewPage.ts @@ -2,6 +2,8 @@ export class OverviewPage { navbarName = '[data-test="navbar-item-username"]' + rightLastTransactionsList = '.rightside-last-transactions' + goto() { cy.visit('/overview') diff --git a/e2e-tests/cypress/support/step_definitions/email_steps.ts b/e2e-tests/cypress/support/step_definitions/email_steps.ts index d31e2474e..b0d88e9a7 100644 --- a/e2e-tests/cypress/support/step_definitions/email_steps.ts +++ b/e2e-tests/cypress/support/step_definitions/email_steps.ts @@ -1,9 +1,9 @@ -import { Then, When } from '@badeball/cypress-cucumber-preprocessor' +import { And, Then, When } from '@badeball/cypress-cucumber-preprocessor' +import { OverviewPage } from '../../e2e/models/OverviewPage' import { ResetPasswordPage } from '../../e2e/models/ResetPasswordPage' import { UserEMailSite } from '../../e2e/models/UserEMailSite' const userEMailSite = new UserEMailSite() -const resetPasswordPage = new ResetPasswordPage() Then('the user receives an e-mail containing the {string} link', (linkName: string) => { let emailSubject: string @@ -18,6 +18,10 @@ Then('the user receives an e-mail containing the {string} link', (linkName: stri emailSubject = 'asswor' linkPattern = /\/reset-password\/[0-9]+\d/ break + case 'transaction': + emailSubject = 'has sent you' + linkPattern = /\/overview/ + break default: throw new Error(`Error in "Then the user receives an e-mail containing the {string} link" step: incorrect linkname string "${linkName}"`) } @@ -51,9 +55,53 @@ Then('the user receives an e-mail containing the {string} link', (linkName: stri ) }) +And('the user receives the transaction e-mail about {string} GDD from {string}', (amount: string, senderName:string) => { + cy.origin( + Cypress.env('mailserverURL'), + { args: { amount, senderName, userEMailSite } }, + ({ amount, senderName, userEMailSite }) => { + const subject = `Gradido: ${senderName} has sent you ${amount} Gradido` + const linkPattern = /\/overview/ + cy.visit('/') + cy.get(userEMailSite.emailInbox).should('be.visible') + + cy.get(userEMailSite.emailList) + .find('.email-item') + .filter(`:contains(${subject})`) + .first() + .click() + + cy.get(userEMailSite.emailMeta) + .find(userEMailSite.emailSubject) + .contains(subject) + + cy.get('.email-content', { timeout: 2000}) + .find('.plain-text') + .contains(linkPattern) + .invoke('text') + .then((text) => { + const emailLink = text.match(linkPattern)[0] + cy.task('setEmailLink', emailLink) + }) + } + ) +}) + When('the user opens the {string} link in the browser', (linkName: string) => { cy.task('getEmailLink').then((emailLink) => { cy.visit(emailLink) }) - cy.get(resetPasswordPage.newPasswordInput).should('be.visible') + + switch (linkName) { + case 'activation': + const resetPasswordPage = new ResetPasswordPage() + cy.get(resetPasswordPage.newPasswordInput).should('be.visible') + break + case 'transaction': + const overviewPage = new OverviewPage() + cy.get(overviewPage.rightLastTransactionsList).should('be.visible') + break + default: + throw new Error(`Error in "Then the user receives an e-mail containing the {string} link" step: incorrect link name string "${linkName}"`) + } }) diff --git a/e2e-tests/cypress/support/step_definitions/send_coin_steps.ts b/e2e-tests/cypress/support/step_definitions/send_coin_steps.ts index 267de7dd1..2baf5968e 100644 --- a/e2e-tests/cypress/support/step_definitions/send_coin_steps.ts +++ b/e2e-tests/cypress/support/step_definitions/send_coin_steps.ts @@ -7,7 +7,7 @@ When( 'the user fills the send form with {string} {string} {string}', (email: string, amount: string, memoText: string) => { sendPage.enterReceiverEmail(email) - sendPage.enterAmount(amount) + sendPage.enterAmount(`${amount}`) sendPage.enterMemoText(memoText) } ) @@ -53,8 +53,17 @@ When('the user submits the transaction by confirming', () => { cy.get('.align-items-center').contains('− 120.50 GDD') }) - -Then('the transaction details are displayed on the transactions page', () => { - cy.get('div.mt-3 > div > div.test-list-group-item').eq(0).contains('div.gdd-transaction-list-item-name', 'Räuber Hotzenplotz') - cy.get('div.mt-3 > div > div.test-list-group-item').eq(0).contains('[data-test="send-amount"]', '− 120.50 GDD') +Then('the {string} and {string} are displayed on the {string} page', (name: string, amount: string, page: string) => { + switch (page) { + case 'overview': + cy.get('.align-items-center').contains(`${name}`) + cy.get('.align-items-center').contains(`${amount} GDD`) + break + case 'transactions': + cy.get('div.mt-3 > div > div.test-list-group-item').eq(0).contains('div.gdd-transaction-list-item-name', `${name}`) + cy.get('div.mt-3 > div > div.test-list-group-item').eq(0).contains('[data-test="transaction-amount"]', `${amount} GDD`) + break + default: + throw new Error(`Error in "Then the {string} and {string} are displayed on the {string}} page" step: incorrect page name string "${page}"`) + } }) \ No newline at end of file diff --git a/frontend/src/components/Transactions/TransactionReceive.vue b/frontend/src/components/Transactions/TransactionReceive.vue index 7778c6c6e..f9d776800 100644 --- a/frontend/src/components/Transactions/TransactionReceive.vue +++ b/frontend/src/components/Transactions/TransactionReceive.vue @@ -26,7 +26,7 @@
{{ $t('decay.types.receive') }}
-
{{ amount | GDD }}
+
{{ amount | GDD }}
{{ $t('via_link') }} {{ $t('decay.types.send') }}
-
{{ amount | GDD }}
+
{{ amount | GDD }}
{{ $t('via_link') }} Date: Tue, 20 Jun 2023 10:51:34 +0200 Subject: [PATCH 08/54] linting --- frontend/src/components/Transactions/TransactionReceive.vue | 4 +++- frontend/src/components/Transactions/TransactionSend.vue | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/Transactions/TransactionReceive.vue b/frontend/src/components/Transactions/TransactionReceive.vue index f9d776800..d6985ba16 100644 --- a/frontend/src/components/Transactions/TransactionReceive.vue +++ b/frontend/src/components/Transactions/TransactionReceive.vue @@ -26,7 +26,9 @@
{{ $t('decay.types.receive') }}
-
{{ amount | GDD }}
+
+ {{ amount | GDD }} +
{{ $t('via_link') }} {{ $t('decay.types.send') }}
-
{{ amount | GDD }}
+
+ {{ amount | GDD }} +
{{ $t('via_link') }} Date: Tue, 20 Jun 2023 11:09:45 +0200 Subject: [PATCH 09/54] fix send coin feature file --- e2e-tests/cypress/e2e/SendCoins.feature | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/e2e-tests/cypress/e2e/SendCoins.feature b/e2e-tests/cypress/e2e/SendCoins.feature index 0329b10f7..9abb68295 100644 --- a/e2e-tests/cypress/e2e/SendCoins.feature +++ b/e2e-tests/cypress/e2e/SendCoins.feature @@ -21,8 +21,7 @@ Feature: Send coins Examples: | receiverName | amount | - # | Räuber Hotzenplotz | 120.50 | - | Räuber Hotzenplotz | 120,50 | + | Räuber Hotzenplotz | 120.50 | Scenario: Receive GDD from other user Given the user is logged in as "raeuber@hotzenplotz.de" "Aa12345_" @@ -34,7 +33,5 @@ Feature: Send coins Examples: | senderName | amount | - # | Bob der Baumeister | 120.50 | - | Bob der Baumeister | 120,50 | - + | Bob der Baumeister | 120.50 | From 5345efed4eaef5aecbab288d26aefded2602a0d5 Mon Sep 17 00:00:00 2001 From: mahula Date: Tue, 20 Jun 2023 11:26:07 +0200 Subject: [PATCH 10/54] fix passwordreset e2e test --- e2e-tests/cypress/support/step_definitions/email_steps.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/e2e-tests/cypress/support/step_definitions/email_steps.ts b/e2e-tests/cypress/support/step_definitions/email_steps.ts index b0d88e9a7..9c994b7b8 100644 --- a/e2e-tests/cypress/support/step_definitions/email_steps.ts +++ b/e2e-tests/cypress/support/step_definitions/email_steps.ts @@ -88,13 +88,16 @@ And('the user receives the transaction e-mail about {string} GDD from {string}', }) When('the user opens the {string} link in the browser', (linkName: string) => { + const resetPasswordPage = new ResetPasswordPage() cy.task('getEmailLink').then((emailLink) => { cy.visit(emailLink) }) switch (linkName) { case 'activation': - const resetPasswordPage = new ResetPasswordPage() + cy.get(resetPasswordPage.newPasswordInput).should('be.visible') + break + case 'password reset': cy.get(resetPasswordPage.newPasswordInput).should('be.visible') break case 'transaction': From 39ee78467562075f50168cfc5996a45d39fb90cd Mon Sep 17 00:00:00 2001 From: mahula Date: Tue, 20 Jun 2023 11:32:36 +0200 Subject: [PATCH 11/54] fix send coins e2e test --- e2e-tests/cypress/e2e/SendCoins.feature | 2 +- e2e-tests/cypress/support/step_definitions/email_steps.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/e2e-tests/cypress/e2e/SendCoins.feature b/e2e-tests/cypress/e2e/SendCoins.feature index 9abb68295..169a120b9 100644 --- a/e2e-tests/cypress/e2e/SendCoins.feature +++ b/e2e-tests/cypress/e2e/SendCoins.feature @@ -33,5 +33,5 @@ Feature: Send coins Examples: | senderName | amount | - | Bob der Baumeister | 120.50 | + | Bob der Baumeister | 120,50 | diff --git a/e2e-tests/cypress/support/step_definitions/email_steps.ts b/e2e-tests/cypress/support/step_definitions/email_steps.ts index 9c994b7b8..12954fe86 100644 --- a/e2e-tests/cypress/support/step_definitions/email_steps.ts +++ b/e2e-tests/cypress/support/step_definitions/email_steps.ts @@ -19,7 +19,7 @@ Then('the user receives an e-mail containing the {string} link', (linkName: stri linkPattern = /\/reset-password\/[0-9]+\d/ break case 'transaction': - emailSubject = 'has sent you' + emailSubject = 'Gradido gesendet' linkPattern = /\/overview/ break default: From 65965a2ffd40c7f07b734de8cd0844b0ab8f46b8 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Tue, 20 Jun 2023 11:34:48 +0200 Subject: [PATCH 12/54] add MODERATOR contribution message type --- backend/src/graphql/arg/ContributionMessageArgs.ts | 5 +++++ .../enum/{MessageType.ts => ContributionMessageType.ts} | 1 + backend/src/graphql/resolver/ContributionMessageResolver.ts | 2 +- backend/src/graphql/resolver/ContributionResolver.ts | 2 +- 4 files changed, 8 insertions(+), 2 deletions(-) rename backend/src/graphql/enum/{MessageType.ts => ContributionMessageType.ts} (73%) diff --git a/backend/src/graphql/arg/ContributionMessageArgs.ts b/backend/src/graphql/arg/ContributionMessageArgs.ts index d36e1832d..6482793aa 100644 --- a/backend/src/graphql/arg/ContributionMessageArgs.ts +++ b/backend/src/graphql/arg/ContributionMessageArgs.ts @@ -1,5 +1,7 @@ import { ArgsType, Field, Int, InputType } from 'type-graphql' +import { ContributionMessageType } from '@enum/ContributionMessageType' + @InputType() @ArgsType() export class ContributionMessageArgs { @@ -8,4 +10,7 @@ export class ContributionMessageArgs { @Field(() => String) message: string + + @Field(() => ContributionMessageType, { defaultValue: ContributionMessageType.DIALOG }) + messageType: ContributionMessageType } diff --git a/backend/src/graphql/enum/MessageType.ts b/backend/src/graphql/enum/ContributionMessageType.ts similarity index 73% rename from backend/src/graphql/enum/MessageType.ts rename to backend/src/graphql/enum/ContributionMessageType.ts index a4606e464..83b011a0b 100644 --- a/backend/src/graphql/enum/MessageType.ts +++ b/backend/src/graphql/enum/ContributionMessageType.ts @@ -3,6 +3,7 @@ import { registerEnumType } from 'type-graphql' export enum ContributionMessageType { HISTORY = 'HISTORY', DIALOG = 'DIALOG', + MODERATOR = 'MODERATOR', // messages for moderator communication, can only be seen by moderators } registerEnumType(ContributionMessageType, { diff --git a/backend/src/graphql/resolver/ContributionMessageResolver.ts b/backend/src/graphql/resolver/ContributionMessageResolver.ts index b7fd37787..56a7a1ec9 100644 --- a/backend/src/graphql/resolver/ContributionMessageResolver.ts +++ b/backend/src/graphql/resolver/ContributionMessageResolver.ts @@ -8,8 +8,8 @@ import { Arg, Args, Authorized, Ctx, Int, Mutation, Query, Resolver } from 'type import { ContributionMessageArgs } from '@arg/ContributionMessageArgs' import { Paginated } from '@arg/Paginated' +import { ContributionMessageType } from '@enum/ContributionMessageType' import { ContributionStatus } from '@enum/ContributionStatus' -import { ContributionMessageType } from '@enum/MessageType' import { Order } from '@enum/Order' import { ContributionMessage, ContributionMessageListResult } from '@model/ContributionMessage' diff --git a/backend/src/graphql/resolver/ContributionResolver.ts b/backend/src/graphql/resolver/ContributionResolver.ts index fa1590523..42ec2f371 100644 --- a/backend/src/graphql/resolver/ContributionResolver.ts +++ b/backend/src/graphql/resolver/ContributionResolver.ts @@ -11,9 +11,9 @@ import { AdminCreateContributionArgs } from '@arg/AdminCreateContributionArgs' import { AdminUpdateContributionArgs } from '@arg/AdminUpdateContributionArgs' import { ContributionArgs } from '@arg/ContributionArgs' import { Paginated } from '@arg/Paginated' +import { ContributionMessageType } from '@enum/ContributionMessageType' import { ContributionStatus } from '@enum/ContributionStatus' import { ContributionType } from '@enum/ContributionType' -import { ContributionMessageType } from '@enum/MessageType' import { Order } from '@enum/Order' import { TransactionTypeId } from '@enum/TransactionTypeId' import { AdminUpdateContribution } from '@model/AdminUpdateContribution' From 85751f43b65778939234cf0bfc6e28af5c69fc0c Mon Sep 17 00:00:00 2001 From: mahula Date: Tue, 20 Jun 2023 11:32:36 +0200 Subject: [PATCH 13/54] fix send coins e2e test --- e2e-tests/cypress/support/step_definitions/email_steps.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e-tests/cypress/support/step_definitions/email_steps.ts b/e2e-tests/cypress/support/step_definitions/email_steps.ts index 12954fe86..55cafd600 100644 --- a/e2e-tests/cypress/support/step_definitions/email_steps.ts +++ b/e2e-tests/cypress/support/step_definitions/email_steps.ts @@ -60,7 +60,7 @@ And('the user receives the transaction e-mail about {string} GDD from {string}', Cypress.env('mailserverURL'), { args: { amount, senderName, userEMailSite } }, ({ amount, senderName, userEMailSite }) => { - const subject = `Gradido: ${senderName} has sent you ${amount} Gradido` + const subject = `Gradido: ${senderName} hat dir ${amount} Gradido gesendet` const linkPattern = /\/overview/ cy.visit('/') cy.get(userEMailSite.emailInbox).should('be.visible') From 732560aaac7e960ac606897c83cb9a51f9a9585f Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Tue, 20 Jun 2023 12:11:44 +0200 Subject: [PATCH 14/54] add message type arg to admin create contribution message --- .../ContributionMessageResolver.test.ts | 36 ++++++++++++++++++- .../resolver/ContributionMessageResolver.ts | 4 +-- backend/src/seeds/graphql/mutations.ts | 8 +++-- 3 files changed, 43 insertions(+), 5 deletions(-) diff --git a/backend/src/graphql/resolver/ContributionMessageResolver.test.ts b/backend/src/graphql/resolver/ContributionMessageResolver.test.ts index 1b6b034c4..f3b7a636e 100644 --- a/backend/src/graphql/resolver/ContributionMessageResolver.test.ts +++ b/backend/src/graphql/resolver/ContributionMessageResolver.test.ts @@ -217,6 +217,33 @@ describe('ContributionMessageResolver', () => { ) }) }) + + describe('contribution message type MODERATOR', () => { + it('creates ContributionMessage', async () => { + await expect( + mutate({ + mutation: adminCreateContributionMessage, + variables: { + contributionId: result.data.createContribution.id, + message: 'Internal moderator communication', + messageType: 'MODERATOR', + }, + }), + ).resolves.toEqual( + expect.objectContaining({ + data: { + adminCreateContributionMessage: expect.objectContaining({ + id: expect.any(Number), + message: 'Internal moderator communication', + type: 'MODERATOR', + userFirstName: 'Peter', + userLastName: 'Lustig', + }), + }, + }), + ) + }) + }) }) }) @@ -395,7 +422,7 @@ describe('ContributionMessageResolver', () => { expect.objectContaining({ data: { listContributionMessages: { - count: 2, + count: 3, messages: expect.arrayContaining([ expect.objectContaining({ id: expect.any(Number), @@ -411,6 +438,13 @@ describe('ContributionMessageResolver', () => { userFirstName: 'Bibi', userLastName: 'Bloxberg', }), + expect.objectContaining({ + id: expect.any(Number), + message: 'Internal moderator communication', + type: 'MODERATOR', + userFirstName: 'Peter', + userLastName: 'Lustig', + }), ]), }, }, diff --git a/backend/src/graphql/resolver/ContributionMessageResolver.ts b/backend/src/graphql/resolver/ContributionMessageResolver.ts index 56a7a1ec9..25f2a2560 100644 --- a/backend/src/graphql/resolver/ContributionMessageResolver.ts +++ b/backend/src/graphql/resolver/ContributionMessageResolver.ts @@ -104,7 +104,7 @@ export class ContributionMessageResolver { @Authorized([RIGHTS.ADMIN_CREATE_CONTRIBUTION_MESSAGE]) @Mutation(() => ContributionMessage) async adminCreateContributionMessage( - @Args() { contributionId, message }: ContributionMessageArgs, + @Args() { contributionId, message, messageType }: ContributionMessageArgs, @Ctx() context: Context, ): Promise { const moderator = getUser(context) @@ -133,7 +133,7 @@ export class ContributionMessageResolver { contributionMessage.createdAt = new Date() contributionMessage.message = message contributionMessage.userId = moderator.id - contributionMessage.type = ContributionMessageType.DIALOG + contributionMessage.type = messageType contributionMessage.isModerator = true await queryRunner.manager.insert(DbContributionMessage, contributionMessage) diff --git a/backend/src/seeds/graphql/mutations.ts b/backend/src/seeds/graphql/mutations.ts index 22e0b1b09..29d08b20a 100644 --- a/backend/src/seeds/graphql/mutations.ts +++ b/backend/src/seeds/graphql/mutations.ts @@ -284,8 +284,12 @@ export const createContributionMessage = gql` ` export const adminCreateContributionMessage = gql` - mutation ($contributionId: Int!, $message: String!) { - adminCreateContributionMessage(contributionId: $contributionId, message: $message) { + mutation ($contributionId: Int!, $message: String!, $messageType: ContributionMessageType) { + adminCreateContributionMessage( + contributionId: $contributionId + message: $message + messageType: $messageType + ) { id message createdAt From 4d119f8911d36fa863f58b7900e52feb3815cce8 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Tue, 20 Jun 2023 12:44:35 +0200 Subject: [PATCH 15/54] find contribution messages helper function --- .../resolver/ContributionMessageResolver.ts | 18 ++++++------- .../resolver/util/findContributionMessages.ts | 27 +++++++++++++++++++ 2 files changed, 35 insertions(+), 10 deletions(-) create mode 100644 backend/src/graphql/resolver/util/findContributionMessages.ts diff --git a/backend/src/graphql/resolver/ContributionMessageResolver.ts b/backend/src/graphql/resolver/ContributionMessageResolver.ts index 25f2a2560..69931467b 100644 --- a/backend/src/graphql/resolver/ContributionMessageResolver.ts +++ b/backend/src/graphql/resolver/ContributionMessageResolver.ts @@ -22,6 +22,8 @@ import { import { Context, getUser } from '@/server/context' import { LogError } from '@/server/LogError' +import { findContributionMessages } from './util/findContributionMessages' + @Resolver() export class ContributionMessageResolver { @Authorized([RIGHTS.CREATE_CONTRIBUTION_MESSAGE]) @@ -82,16 +84,12 @@ export class ContributionMessageResolver { @Args() { currentPage = 1, pageSize = 5, order = Order.DESC }: Paginated, ): Promise { - const [contributionMessages, count] = await getConnection() - .createQueryBuilder() - .select('cm') - .from(DbContributionMessage, 'cm') - .leftJoinAndSelect('cm.user', 'u') - .where({ contributionId }) - .orderBy('cm.createdAt', order) - .limit(pageSize) - .offset((currentPage - 1) * pageSize) - .getManyAndCount() + const [contributionMessages, count] = await findContributionMessages({ + contributionId, + currentPage, + pageSize, + order, + }) return { count, diff --git a/backend/src/graphql/resolver/util/findContributionMessages.ts b/backend/src/graphql/resolver/util/findContributionMessages.ts new file mode 100644 index 000000000..90555cca7 --- /dev/null +++ b/backend/src/graphql/resolver/util/findContributionMessages.ts @@ -0,0 +1,27 @@ +import { ContributionMessage as DbContributionMessage } from '@entity/ContributionMessage' + +import { Order } from '@enum/Order' + +interface FindContributionMessagesOptions { + contributionId: number + pageSize: number + currentPage: number + order: Order +} + +export const findContributionMessages = async ( + options: FindContributionMessagesOptions, +): Promise<[DbContributionMessage[], number]> => { + const { contributionId, pageSize, currentPage, order } = options + return DbContributionMessage.findAndCount({ + where: { + contributionId, + }, + relations: ['user'], + order: { + createdAt: order, + }, + skip: (currentPage - 1) * pageSize, + take: pageSize, + }) +} From 1e6d4cfe4b00d265c03f09da21752520f08f52d6 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Tue, 20 Jun 2023 13:11:36 +0200 Subject: [PATCH 16/54] add admin list contribution message query --- backend/src/auth/RIGHTS.ts | 1 + .../ContributionMessageResolver.test.ts | 82 ++++++++++++++++++- .../resolver/ContributionMessageResolver.ts | 23 ++++++ .../resolver/util/findContributionMessages.ts | 11 ++- backend/src/seeds/graphql/queries.ts | 23 ++++++ 5 files changed, 137 insertions(+), 3 deletions(-) diff --git a/backend/src/auth/RIGHTS.ts b/backend/src/auth/RIGHTS.ts index b3627ff7a..772c907cb 100644 --- a/backend/src/auth/RIGHTS.ts +++ b/backend/src/auth/RIGHTS.ts @@ -53,4 +53,5 @@ export enum RIGHTS { ADMIN_CREATE_CONTRIBUTION_MESSAGE = 'ADMIN_CREATE_CONTRIBUTION_MESSAGE', DENY_CONTRIBUTION = 'DENY_CONTRIBUTION', ADMIN_OPEN_CREATIONS = 'ADMIN_OPEN_CREATIONS', + ADMIN_LIST_ALL_CONTRIBUTION_MESSAGES = 'ADMIN_LIST_ALL_CONTRIBUTION_MESSAGES', } diff --git a/backend/src/graphql/resolver/ContributionMessageResolver.test.ts b/backend/src/graphql/resolver/ContributionMessageResolver.test.ts index f3b7a636e..f80fce939 100644 --- a/backend/src/graphql/resolver/ContributionMessageResolver.test.ts +++ b/backend/src/graphql/resolver/ContributionMessageResolver.test.ts @@ -20,7 +20,7 @@ import { createContributionMessage, login, } from '@/seeds/graphql/mutations' -import { listContributionMessages } from '@/seeds/graphql/queries' +import { listContributionMessages, adminListContributionMessages } from '@/seeds/graphql/queries' import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg' import { peterLustig } from '@/seeds/users/peter-lustig' @@ -412,7 +412,7 @@ describe('ContributionMessageResolver', () => { resetToken() }) - it('returns a list of contributionmessages', async () => { + it('returns a list of contributionmessages without type MODERATOR', async () => { await expect( mutate({ mutation: listContributionMessages, @@ -422,6 +422,84 @@ describe('ContributionMessageResolver', () => { expect.objectContaining({ data: { listContributionMessages: { + count: 2, + messages: expect.arrayContaining([ + expect.objectContaining({ + id: expect.any(Number), + message: 'Admin Test', + type: 'DIALOG', + userFirstName: 'Peter', + userLastName: 'Lustig', + }), + expect.objectContaining({ + id: expect.any(Number), + message: 'User Test', + type: 'DIALOG', + userFirstName: 'Bibi', + userLastName: 'Bloxberg', + }), + ]), + }, + }, + }), + ) + }) + }) + }) + + describe('adminListContributionMessages', () => { + describe('unauthenticated', () => { + it('returns an error', async () => { + await expect( + mutate({ + mutation: adminListContributionMessages, + variables: { contributionId: 1 }, + }), + ).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError('401 Unauthorized')], + }), + ) + }) + }) + + describe('authenticated as user', () => { + it('returns an error', async () => { + await expect( + mutate({ + mutation: adminListContributionMessages, + variables: { contributionId: 1 }, + }), + ).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError('401 Unauthorized')], + }), + ) + }) + }) + + describe('authenticated', () => { + beforeAll(async () => { + await mutate({ + mutation: login, + variables: { email: 'peter@lustig.de', password: 'Aa12345_' }, + }) + }) + + afterAll(() => { + resetToken() + }) + + it('returns a list of contributionmessages with type MODERATOR', async () => { + await expect( + mutate({ + mutation: adminListContributionMessages, + variables: { contributionId: result.data.createContribution.id }, + }), + ).resolves.toEqual( + expect.objectContaining({ + data: { + adminListContributionMessages: { count: 3, messages: expect.arrayContaining([ expect.objectContaining({ diff --git a/backend/src/graphql/resolver/ContributionMessageResolver.ts b/backend/src/graphql/resolver/ContributionMessageResolver.ts index 69931467b..6e062fe6e 100644 --- a/backend/src/graphql/resolver/ContributionMessageResolver.ts +++ b/backend/src/graphql/resolver/ContributionMessageResolver.ts @@ -99,6 +99,29 @@ export class ContributionMessageResolver { } } + @Authorized([RIGHTS.ADMIN_LIST_ALL_CONTRIBUTION_MESSAGES]) + @Query(() => ContributionMessageListResult) + async adminListContributionMessages( + @Arg('contributionId', () => Int) contributionId: number, + @Args() + { currentPage = 1, pageSize = 5, order = Order.DESC }: Paginated, + ): Promise { + const [contributionMessages, count] = await findContributionMessages({ + contributionId, + currentPage, + pageSize, + order, + showModeratorType: true, + }) + + return { + count, + messages: contributionMessages.map( + (message) => new ContributionMessage(message, message.user), + ), + } + } + @Authorized([RIGHTS.ADMIN_CREATE_CONTRIBUTION_MESSAGE]) @Mutation(() => ContributionMessage) async adminCreateContributionMessage( diff --git a/backend/src/graphql/resolver/util/findContributionMessages.ts b/backend/src/graphql/resolver/util/findContributionMessages.ts index 90555cca7..06b896898 100644 --- a/backend/src/graphql/resolver/util/findContributionMessages.ts +++ b/backend/src/graphql/resolver/util/findContributionMessages.ts @@ -1,5 +1,7 @@ +import { In } from '@dbTools/typeorm' import { ContributionMessage as DbContributionMessage } from '@entity/ContributionMessage' +import { ContributionMessageType } from '@enum/ContributionMessageType' import { Order } from '@enum/Order' interface FindContributionMessagesOptions { @@ -7,15 +9,22 @@ interface FindContributionMessagesOptions { pageSize: number currentPage: number order: Order + showModeratorType?: boolean } export const findContributionMessages = async ( options: FindContributionMessagesOptions, ): Promise<[DbContributionMessage[], number]> => { - const { contributionId, pageSize, currentPage, order } = options + const { contributionId, pageSize, currentPage, order, showModeratorType } = options + + const messageTypes = [ContributionMessageType.DIALOG, ContributionMessageType.HISTORY] + + if (showModeratorType) messageTypes.push(ContributionMessageType.MODERATOR) + return DbContributionMessage.findAndCount({ where: { contributionId, + type: In(messageTypes), }, relations: ['user'], order: { diff --git a/backend/src/seeds/graphql/queries.ts b/backend/src/seeds/graphql/queries.ts index a964cdb3a..f82882f97 100644 --- a/backend/src/seeds/graphql/queries.ts +++ b/backend/src/seeds/graphql/queries.ts @@ -349,6 +349,29 @@ export const listContributionMessages = gql` } ` +export const adminListContributionMessages = gql` + query ($contributionId: Int!, $pageSize: Int = 25, $currentPage: Int = 1, $order: Order = ASC) { + adminListContributionMessages( + contributionId: $contributionId + pageSize: $pageSize + currentPage: $currentPage + order: $order + ) { + count + messages { + id + message + createdAt + updatedAt + type + userFirstName + userLastName + userId + } + } + } +` + export const user = gql` query ($identifier: String!) { user(identifier: $identifier) { From f0eae909b99118e78961f1c80751a28f356d9168 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Tue, 20 Jun 2023 13:16:35 +0200 Subject: [PATCH 17/54] fix authentication test --- .../graphql/resolver/ContributionMessageResolver.test.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/backend/src/graphql/resolver/ContributionMessageResolver.test.ts b/backend/src/graphql/resolver/ContributionMessageResolver.test.ts index f80fce939..2df996c64 100644 --- a/backend/src/graphql/resolver/ContributionMessageResolver.test.ts +++ b/backend/src/graphql/resolver/ContributionMessageResolver.test.ts @@ -464,6 +464,13 @@ describe('ContributionMessageResolver', () => { }) describe('authenticated as user', () => { + beforeAll(async () => { + await mutate({ + mutation: login, + variables: { email: 'bibi@bloxberg.de', password: 'Aa12345_' }, + }) + }) + it('returns an error', async () => { await expect( mutate({ From ba7197b2e66920a96cffb49da25e381bb4dd7b1d Mon Sep 17 00:00:00 2001 From: mahula Date: Tue, 20 Jun 2023 16:35:52 +0200 Subject: [PATCH 18/54] adaptreceive coins test to language dependency --- e2e-tests/cypress/e2e/SendCoins.feature | 28 ++++++++++++------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/e2e-tests/cypress/e2e/SendCoins.feature b/e2e-tests/cypress/e2e/SendCoins.feature index 169a120b9..ae79c4a6e 100644 --- a/e2e-tests/cypress/e2e/SendCoins.feature +++ b/e2e-tests/cypress/e2e/SendCoins.feature @@ -9,27 +9,27 @@ Feature: Send coins # | bob@baumeister.de | Aa12345_ | Bob Baumeister | # | raeuber@hotzenplotz.de | Aa12345_ | Räuber Hotzenplotz | - Scenario: Send GDD to other user - Given the user is logged in as "bob@baumeister.de" "Aa12345_" - And the user navigates to page "/send" - When the user fills the send form with "raeuber@hotzenplotz.de" "" "Some memo text" - And the user submits the send form - Then the transaction details are presented for confirmation - When the user submits the transaction by confirming - And the user navigates to page "/transactions" - Then the "" and "" are displayed on the "transactions" page + # Scenario: Send GDD to other user + # Given the user is logged in as "bob@baumeister.de" "Aa12345_" + # And the user navigates to page "/send" + # When the user fills the send form with "raeuber@hotzenplotz.de" "" "Some memo text" + # And the user submits the send form + # Then the transaction details are presented for confirmation + # When the user submits the transaction by confirming + # And the user navigates to page "/transactions" + # Then the "" and "" are displayed on the "transactions" page - Examples: - | receiverName | amount | - | Räuber Hotzenplotz | 120.50 | + # Examples: + # | receiverName | amount | + # | Räuber Hotzenplotz | 120.50 | Scenario: Receive GDD from other user Given the user is logged in as "raeuber@hotzenplotz.de" "Aa12345_" And the user receives the transaction e-mail about "" GDD from "" When the user opens the "transaction" link in the browser - Then the "" and "" are displayed on the "overview" page + Then the "" and "120.50" are displayed on the "overview" page When the user navigates to page "/transactions" - Then the "" and "" are displayed on the "transactions" page + Then the "" and "120.50" are displayed on the "transactions" page Examples: | senderName | amount | From febc18a85da5b4f48233b086ab5fc56deefada56 Mon Sep 17 00:00:00 2001 From: mahula Date: Tue, 20 Jun 2023 16:35:52 +0200 Subject: [PATCH 19/54] adaptreceive coins test to language dependency --- e2e-tests/cypress/e2e/SendCoins.feature | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/e2e-tests/cypress/e2e/SendCoins.feature b/e2e-tests/cypress/e2e/SendCoins.feature index ae79c4a6e..f9762e825 100644 --- a/e2e-tests/cypress/e2e/SendCoins.feature +++ b/e2e-tests/cypress/e2e/SendCoins.feature @@ -3,11 +3,11 @@ Feature: Send coins I want to send and receive GDD I want to see transaction details on overview and transactions pages - # Background: - # Given the following "users" are in the database: - # | email | password | name | - # | bob@baumeister.de | Aa12345_ | Bob Baumeister | - # | raeuber@hotzenplotz.de | Aa12345_ | Räuber Hotzenplotz | + Background: + Given the following "users" are in the database: + | email | password | name | + | bob@baumeister.de | Aa12345_ | Bob Baumeister | + | raeuber@hotzenplotz.de | Aa12345_ | Räuber Hotzenplotz | # Scenario: Send GDD to other user # Given the user is logged in as "bob@baumeister.de" "Aa12345_" From aed4b26f3a41ced29694183fb8334389b5910e7e Mon Sep 17 00:00:00 2001 From: mahula Date: Tue, 20 Jun 2023 16:35:52 +0200 Subject: [PATCH 20/54] adaptreceive coins test to language dependency --- e2e-tests/cypress/e2e/SendCoins.feature | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/e2e-tests/cypress/e2e/SendCoins.feature b/e2e-tests/cypress/e2e/SendCoins.feature index f9762e825..4be341615 100644 --- a/e2e-tests/cypress/e2e/SendCoins.feature +++ b/e2e-tests/cypress/e2e/SendCoins.feature @@ -9,19 +9,19 @@ Feature: Send coins | bob@baumeister.de | Aa12345_ | Bob Baumeister | | raeuber@hotzenplotz.de | Aa12345_ | Räuber Hotzenplotz | - # Scenario: Send GDD to other user - # Given the user is logged in as "bob@baumeister.de" "Aa12345_" - # And the user navigates to page "/send" - # When the user fills the send form with "raeuber@hotzenplotz.de" "" "Some memo text" - # And the user submits the send form - # Then the transaction details are presented for confirmation - # When the user submits the transaction by confirming - # And the user navigates to page "/transactions" - # Then the "" and "" are displayed on the "transactions" page + Scenario: Send GDD to other user + Given the user is logged in as "bob@baumeister.de" "Aa12345_" + And the user navigates to page "/send" + When the user fills the send form with "raeuber@hotzenplotz.de" "" "Some memo text" + And the user submits the send form + Then the transaction details are presented for confirmation + When the user submits the transaction by confirming + And the user navigates to page "/transactions" + Then the "" and "" are displayed on the "transactions" page - # Examples: - # | receiverName | amount | - # | Räuber Hotzenplotz | 120.50 | + Examples: + | receiverName | amount | + | Räuber Hotzenplotz | 120.50 | Scenario: Receive GDD from other user Given the user is logged in as "raeuber@hotzenplotz.de" "Aa12345_" From 2879cd79df9b43345b758a0ae47d1ca318ab2a72 Mon Sep 17 00:00:00 2001 From: mahula Date: Tue, 20 Jun 2023 16:35:52 +0200 Subject: [PATCH 21/54] adaptreceive coins test to language dependency --- e2e-tests/cypress/e2e/SendCoins.feature | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/e2e-tests/cypress/e2e/SendCoins.feature b/e2e-tests/cypress/e2e/SendCoins.feature index 4be341615..75049c83f 100644 --- a/e2e-tests/cypress/e2e/SendCoins.feature +++ b/e2e-tests/cypress/e2e/SendCoins.feature @@ -3,11 +3,11 @@ Feature: Send coins I want to send and receive GDD I want to see transaction details on overview and transactions pages - Background: - Given the following "users" are in the database: - | email | password | name | - | bob@baumeister.de | Aa12345_ | Bob Baumeister | - | raeuber@hotzenplotz.de | Aa12345_ | Räuber Hotzenplotz | + # Background: + # Given the following "users" are in the database: + # | email | password | name | + # | bob@baumeister.de | Aa12345_ | Bob Baumeister | + # | raeuber@hotzenplotz.de | Aa12345_ | Räuber Hotzenplotz | Scenario: Send GDD to other user Given the user is logged in as "bob@baumeister.de" "Aa12345_" From d73b12821667c829c30abb33b9d750d984df9b46 Mon Sep 17 00:00:00 2001 From: mahula Date: Mon, 26 Jun 2023 09:10:25 +0200 Subject: [PATCH 22/54] adapt e2e email step to email changes --- e2e-tests/cypress/support/step_definitions/email_steps.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/e2e-tests/cypress/support/step_definitions/email_steps.ts b/e2e-tests/cypress/support/step_definitions/email_steps.ts index 55cafd600..19a632544 100644 --- a/e2e-tests/cypress/support/step_definitions/email_steps.ts +++ b/e2e-tests/cypress/support/step_definitions/email_steps.ts @@ -60,14 +60,14 @@ And('the user receives the transaction e-mail about {string} GDD from {string}', Cypress.env('mailserverURL'), { args: { amount, senderName, userEMailSite } }, ({ amount, senderName, userEMailSite }) => { - const subject = `Gradido: ${senderName} hat dir ${amount} Gradido gesendet` + const subject = `${senderName} hat dir ${amount} Gradido gesendet` const linkPattern = /\/overview/ cy.visit('/') cy.get(userEMailSite.emailInbox).should('be.visible') cy.get(userEMailSite.emailList) .find('.email-item') - .filter(`:contains(${subject})`) + .filter(`:contains(Gradido: ${subject})`) .first() .click() From dfc1880195226c16950bf94e5c89641225d4cd92 Mon Sep 17 00:00:00 2001 From: mahula Date: Mon, 26 Jun 2023 09:51:48 +0200 Subject: [PATCH 23/54] adapt e2e email step to email changes --- e2e-tests/cypress/support/step_definitions/email_steps.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/e2e-tests/cypress/support/step_definitions/email_steps.ts b/e2e-tests/cypress/support/step_definitions/email_steps.ts index 19a632544..31141e574 100644 --- a/e2e-tests/cypress/support/step_definitions/email_steps.ts +++ b/e2e-tests/cypress/support/step_definitions/email_steps.ts @@ -61,13 +61,13 @@ And('the user receives the transaction e-mail about {string} GDD from {string}', { args: { amount, senderName, userEMailSite } }, ({ amount, senderName, userEMailSite }) => { const subject = `${senderName} hat dir ${amount} Gradido gesendet` - const linkPattern = /\/overview/ + const linkPattern = /\/transactions/ cy.visit('/') cy.get(userEMailSite.emailInbox).should('be.visible') cy.get(userEMailSite.emailList) .find('.email-item') - .filter(`:contains(Gradido: ${subject})`) + .filter(`:contains(${subject})`) .first() .click() From 3af471aebbab0138e629878de13d8780d742071a Mon Sep 17 00:00:00 2001 From: elweyn Date: Mon, 26 Jun 2023 20:00:24 +0200 Subject: [PATCH 24/54] Change btn-warning color and background color to #e1a908 --- admin/src/components/Tables/OpenCreationsTable.vue | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/admin/src/components/Tables/OpenCreationsTable.vue b/admin/src/components/Tables/OpenCreationsTable.vue index 9d93eba60..51f00a7d4 100644 --- a/admin/src/components/Tables/OpenCreationsTable.vue +++ b/admin/src/components/Tables/OpenCreationsTable.vue @@ -166,3 +166,9 @@ export default { }, } + From 9ceb5383cfea3da192d213d111900a20a35ec07f Mon Sep 17 00:00:00 2001 From: elweyn Date: Tue, 27 Jun 2023 09:14:20 +0200 Subject: [PATCH 25/54] Set cols from 12 to 6, px from 2 to 1 and remove offset. --- .../DecayInformation-Long.vue | 27 ++++++++++--------- .../TransactionRows/DurationRow.vue | 4 +-- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/frontend/src/components/DecayInformations/DecayInformation-Long.vue b/frontend/src/components/DecayInformations/DecayInformation-Long.vue index d7e943225..d4ff66af0 100644 --- a/frontend/src/components/DecayInformations/DecayInformation-Long.vue +++ b/frontend/src/components/DecayInformations/DecayInformation-Long.vue @@ -1,5 +1,5 @@