Merge branch 'master' into ui_add_login_page_imgs

This commit is contained in:
einhornimmond 2025-11-19 21:13:10 +01:00 committed by GitHub
commit 399fe1cdea
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
11 changed files with 41 additions and 36 deletions

View File

@ -947,7 +947,7 @@ describe('TransactionLinkResolver', () => {
})
describe('without any filters', () => {
it('finds 6 open transaction links and no deleted or redeemed', async () => {
it('finds 7 open transaction links and no deleted or redeemed', async () => {
await expect(
query({
query: listTransactionLinksAdmin,
@ -957,14 +957,14 @@ describe('TransactionLinkResolver', () => {
expect.objectContaining({
data: {
listTransactionLinksAdmin: {
count: 6,
count: 7,
links: expect.not.arrayContaining([
expect.objectContaining({
memo: 'Leider wollte niemand meine Gradidos zum Neujahr haben :(',
memo: 'Leider wollte niemand meine Gradidos haben :(',
createdAt: expect.any(String),
}),
expect.objectContaining({
memo: 'Da habe ich mich wohl etwas übernommen.',
memo: "Kein Trick, keine Zauberrei,\n bei Gradidio sei dabei!",
deletedAt: expect.any(String),
}),
]),
@ -976,7 +976,7 @@ describe('TransactionLinkResolver', () => {
})
describe('all filters are null', () => {
it('finds 6 open transaction links and no deleted or redeemed', async () => {
it('finds 7 open transaction links and no deleted or redeemed', async () => {
await expect(
query({
query: listTransactionLinksAdmin,
@ -993,10 +993,10 @@ describe('TransactionLinkResolver', () => {
expect.objectContaining({
data: {
listTransactionLinksAdmin: {
count: 6,
count: 7,
links: expect.not.arrayContaining([
expect.objectContaining({
memo: 'Leider wollte niemand meine Gradidos zum Neujahr haben :(',
memo: 'Leider wollte niemand meine Gradidos haben :(',
createdAt: expect.any(String),
}),
expect.objectContaining({
@ -1012,7 +1012,7 @@ describe('TransactionLinkResolver', () => {
})
describe('filter with deleted', () => {
it('finds 6 open transaction links, 1 deleted, and no redeemed', async () => {
it('finds 7 open transaction links, 1 deleted, and no redeemed', async () => {
await expect(
query({
query: listTransactionLinksAdmin,
@ -1027,10 +1027,10 @@ describe('TransactionLinkResolver', () => {
expect.objectContaining({
data: {
listTransactionLinksAdmin: {
count: 7,
count: 8,
links: expect.arrayContaining([
expect.not.objectContaining({
memo: 'Leider wollte niemand meine Gradidos zum Neujahr haben :(',
memo: 'Leider wollte niemand meine Gradidos haben :(',
createdAt: expect.any(String),
}),
expect.objectContaining({
@ -1046,7 +1046,7 @@ describe('TransactionLinkResolver', () => {
})
describe('filter by expired', () => {
it('finds 5 open transaction links, 1 expired, and no redeemed', async () => {
it('finds 6 open transaction links, 1 expired, and no redeemed', async () => {
await expect(
query({
query: listTransactionLinksAdmin,
@ -1064,7 +1064,7 @@ describe('TransactionLinkResolver', () => {
count: 7,
links: expect.arrayContaining([
expect.objectContaining({
memo: 'Leider wollte niemand meine Gradidos zum Neujahr haben :(',
memo: 'Leider wollte niemand meine Gradidos haben :(',
createdAt: expect.any(String),
}),
expect.not.objectContaining({
@ -1082,7 +1082,7 @@ describe('TransactionLinkResolver', () => {
// TODO: works not as expected, because 'redeemedAt' and 'redeemedBy' have to be added to the transaktion link factory
describe.skip('filter by redeemed', () => {
it('finds 6 open transaction links, 1 deleted, and no redeemed', async () => {
it('finds 7 open transaction links, 1 deleted, and no redeemed', async () => {
await expect(
query({
query: listTransactionLinksAdmin,
@ -1099,10 +1099,10 @@ describe('TransactionLinkResolver', () => {
expect.objectContaining({
data: {
listTransactionLinksAdmin: {
count: 6,
count: 7,
links: expect.arrayContaining([
expect.not.objectContaining({
memo: 'Leider wollte niemand meine Gradidos zum Neujahr haben :(',
memo: 'Leider wollte niemand meine Gradidos haben :(',
createdAt: expect.any(String),
}),
expect.objectContaining({

View File

@ -1040,7 +1040,7 @@ describe('UserResolver', () => {
describe('user exists in DB', () => {
beforeAll(async () => {
await userFactory(testEnv, bibiBloxberg)
await userFactory(testEnv, bobBaumeister)
})
afterAll(async () => {
@ -1050,7 +1050,7 @@ describe('UserResolver', () => {
describe('duration not expired', () => {
it('throws an error', async () => {
await expect(mutate({ mutation: forgotPassword, variables })).resolves.toEqual(
await expect(mutate({ mutation: forgotPassword, variables: { email: 'bob@baumeister.de' } })).resolves.toEqual(
expect.objectContaining({
errors: [
new GraphQLError(
@ -1067,7 +1067,7 @@ describe('UserResolver', () => {
describe('duration reset to 0', () => {
it('returns true', async () => {
CONFIG.EMAIL_CODE_REQUEST_TIME = 0
await expect(mutate({ mutation: forgotPassword, variables })).resolves.toEqual(
await expect(mutate({ mutation: forgotPassword, variables: { email: 'bob@baumeister.de' } })).resolves.toEqual(
expect.objectContaining({
data: {
forgotPassword: true,
@ -1078,9 +1078,9 @@ describe('UserResolver', () => {
it('sends reset password email', () => {
expect(sendResetPasswordEmail).toBeCalledWith({
firstName: 'Bibi',
lastName: 'Bloxberg',
email: 'bibi@bloxberg.de',
firstName: 'Bob',
lastName: 'der Baumeister',
email: 'bob@baumeister.de',
language: 'de',
resetLink: expect.any(String),
timeDurationObject: expect.objectContaining({
@ -1092,7 +1092,7 @@ describe('UserResolver', () => {
it('stores the EMAIL_FORGOT_PASSWORD event in the database', async () => {
const userConatct = await UserContact.findOneOrFail({
where: { email: 'bibi@bloxberg.de' },
where: { email: 'bob@baumeister.de' },
relations: ['user'],
})
await expect(DbEvent.find()).resolves.toContainEqual(
@ -1108,7 +1108,7 @@ describe('UserResolver', () => {
describe('request reset password again', () => {
it('throws an error', async () => {
CONFIG.EMAIL_CODE_REQUEST_TIME = emailCodeRequestTime
await expect(mutate({ mutation: forgotPassword, variables })).resolves.toEqual(
await expect(mutate({ mutation: forgotPassword, variables: { email: 'bob@baumeister.de' } })).resolves.toEqual(
expect.objectContaining({
errors: [new GraphQLError('Email already sent less than 10 minutes ago')],
}),
@ -1128,8 +1128,8 @@ describe('UserResolver', () => {
let emailContact: UserContact
beforeAll(async () => {
await userFactory(testEnv, bibiBloxberg)
emailContact = await UserContact.findOneOrFail({ where: { email: bibiBloxberg.email } })
await userFactory(testEnv, bobBaumeister)
emailContact = await UserContact.findOneOrFail({ where: { email: bobBaumeister.email } })
})
afterAll(async () => {
@ -1140,7 +1140,7 @@ describe('UserResolver', () => {
it('throws an error', async () => {
jest.clearAllMocks()
await expect(
query({ query: queryOptIn, variables: { optIn: 'not-valid' } }),
query({ query: queryOptIn, variables: { email: 'bob@baumeister.de', optIn: 'not-valid' } }),
).resolves.toEqual(
expect.objectContaining({
errors: [
@ -1161,7 +1161,7 @@ describe('UserResolver', () => {
await expect(
query({
query: queryOptIn,
variables: { optIn: emailContact.emailVerificationCode.toString() },
variables: { email: 'bob@baumeister.de', optIn: emailContact.emailVerificationCode.toString() },
}),
).resolves.toEqual(
expect.objectContaining({

View File

@ -39,7 +39,7 @@ export const transactionLinkFactory = async (
}
if (transactionLink.deletedAt) {
dbTransactionLink.deletedAt = new Date()
dbTransactionLink.deletedAt = new Date(dbTransactionLink.createdAt.getTime() + 1000)
await dbTransactionLink.save()
}
}

View File

@ -40,11 +40,15 @@ export const userFactory = async (
}
// get last changes of user from database
dbUser = await User.findOneOrFail({ where: { id }, relations: ['userRoles'] })
dbUser = await User.findOneOrFail({ where: { id }, relations: { userRoles: true, emailContact: true } })
if (user.createdAt || user.deletedAt || user.role) {
if (user.createdAt) {
dbUser.createdAt = user.createdAt
// make sure emailContact is also updated for e2e test, prevent failing when time between seeding and test run is < 1 minute
dbUser.emailContact.createdAt = user.createdAt
dbUser.emailContact.updatedAt = user.createdAt
await dbUser.emailContact.save()
}
if (user.deletedAt) {
dbUser.deletedAt = user.deletedAt

View File

@ -4,8 +4,7 @@ export const transactionLinks: TransactionLinkInterface[] = [
{
email: 'bibi@bloxberg.de',
amount: 19.99,
memo: 'Leider wollte niemand meine Gradidos zum Neujahr haben :(',
createdAt: new Date(2022, 0, 1),
memo: 'Leider wollte niemand meine Gradidos haben :(',
},
{
email: 'bibi@bloxberg.de',

View File

@ -9,4 +9,6 @@ export const bibiBloxberg: UserInterface = {
emailChecked: true,
language: 'de',
publisherId: 1234,
// move user createdAt before transaction link
createdAt: new Date(2021, 9, 17),
}

View File

@ -266,7 +266,7 @@
"expiredOn": "Abgelaufen am",
"has-account": "Du besitzt bereits ein Gradido Konto?",
"header": "Gradidos versenden per Link",
"isFree": "Gradido ist weltweit kostenfrei.",
"isFree": "Gemeinschaftsbasiert Dezentral Open Source",
"link-and-text-copied": "Der Link und deine Nachricht wurden in die Zwischenablage kopiert. Du kannst ihn jetzt in eine E-Mail oder Nachricht einfügen.",
"link-copied": "Link wurde in die Zwischenablage kopiert. Du kannst ihn jetzt in eine E-Mail oder Nachricht einfügen.",
"link-deleted": "Der Link wurde am {date} gelöscht.",

View File

@ -266,7 +266,7 @@
"expiredOn": "Expired on",
"has-account": "You already have a Gradido account?",
"header": "Send Gradidos via link",
"isFree": "Gradido is free of charge worldwide.",
"isFree": "Community-based Decentralized Open Source",
"link-and-text-copied": "The link and your message have been copied to the clipboard. You can now include it in an email or message.",
"link-copied": "Link has been copied to the clipboard. You can now paste it into an email or message.",
"link-deleted": "The link was deleted on {date}.",

View File

@ -214,7 +214,7 @@
"expiredOn": "Vencido el:",
"has-account": "Ya tienes una cuenta Gradido?",
"header": "Transferir Gradidos por medio de un enlace",
"isFree": "Gradido es gratis en todo el mundo.",
"isFree": "Comunitario Descentralizado Código abierto",
"link-and-text-copied": "El enlace y su mensaje se han copiado en el portapapeles. Ahora puedes ponerlo en un correo electrónico o mensaje.",
"link-copied": "El enlace se ha copiado en el portapapeles. Ahora puedes pegarlo en un correo electrónico o mensaje.",
"link-deleted": "El enlace se eliminó el {date}.",

View File

@ -220,7 +220,7 @@
"expiredOn": "A expiré le",
"has-account": "Vous avez déjà un compte Gradido?",
"header": "Envoyer des Gradidos via lien",
"isFree": "Gradido est gratuit mondialement.",
"isFree": "Communautaire Décentralisé Open Source",
"link-and-text-copied": "Le lien et votre message ont été copiés dans le presse-papier. Vous pouvez maintenant le joindre à un email ou à un message..",
"link-copied": "Le lien a été copié dans le presse-papier. Vous pouvez désormais le coller dans votre email ou votre message.",
"link-deleted": "Le lien a été supprimé le on {date}.",

View File

@ -214,7 +214,7 @@
"expiredOn": "Afgelopen op",
"has-account": "Heb je al een Gradido rekening?",
"header": "Gradidos per link versturen",
"isFree": "Gradido is gratis wereldwijd.",
"isFree": "Gemeenschappelijk Decentraal Open Source",
"link-and-text-copied": "De link en jouw bericht werden naar het klembord gekopieerd. Je kunt ze nu in een email of bericht invoegen.",
"link-copied": "Link werd naar het klembord gekopieerd. Je kunt deze nu in een email of bericht invoegen.",
"link-deleted": "De link werd op {date} verwijderd.",