mirror of
https://github.com/IT4Change/gradido.git
synced 2026-03-01 12:44:43 +00:00
Merge branch 'master' into ui-text-updates
This commit is contained in:
commit
beea5ae7b1
@ -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({
|
||||
|
||||
@ -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({
|
||||
|
||||
@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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',
|
||||
|
||||
@ -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),
|
||||
}
|
||||
|
||||
@ -2,21 +2,6 @@
|
||||
<div class="clipboard-copy">
|
||||
<div v-if="canCopyLink" class="mb-5">
|
||||
<div>
|
||||
<label>{{ $t('gdd_per_link.copy-link') }}</label>
|
||||
<div
|
||||
class="copy-link-card pointer text-center gradido-border-radius p-3"
|
||||
data-test="copyLink"
|
||||
@click="copyLink"
|
||||
>
|
||||
{{ link }}
|
||||
<div>
|
||||
<BButton class="p-4 gradido-border-radius">
|
||||
<IBiLink45deg />
|
||||
</BButton>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-5">
|
||||
<label>{{ $t('gdd_per_link.copy-link-with-text') }}</label>
|
||||
<div
|
||||
class="copy-link-card pointer text-center gradido-border-radius p-3"
|
||||
@ -25,8 +10,23 @@
|
||||
>
|
||||
{{ linkText }}
|
||||
<div>
|
||||
<BButton class="p-4 gradido-border-radius">
|
||||
<IBiLink45deg />
|
||||
<BButton class="mt-1 p-4 gradido-border-radius">
|
||||
<IBiCopy />
|
||||
</BButton>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-5">
|
||||
<label>{{ $t('gdd_per_link.copy-link') }}</label>
|
||||
<div
|
||||
class="copy-link-card pointer text-center gradido-border-radius p-3"
|
||||
data-test="copyLink"
|
||||
@click="copyLink"
|
||||
>
|
||||
{{ link }}
|
||||
<div>
|
||||
<BButton class="mt-1 p-4 gradido-border-radius">
|
||||
<IBiCopy />
|
||||
</BButton>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -18,18 +18,14 @@
|
||||
<IBiThreeDotsVertical class="link-menu-opener" />
|
||||
</template>
|
||||
|
||||
<BDropdownItem v-if="validLink" class="test-copy-link" @click.stop="copyLink">
|
||||
<IBiClipboard />
|
||||
{{ $t('gdd_per_link.copy-link') }}
|
||||
</BDropdownItem>
|
||||
<BDropdownItem
|
||||
v-if="validLink"
|
||||
class="test-copy-text pt-3"
|
||||
@click.stop="copyLinkWithText"
|
||||
>
|
||||
<BDropdownItem v-if="validLink" class="test-copy-text" @click.stop="copyLinkWithText">
|
||||
<IBiClipboardPlus />
|
||||
{{ $t('gdd_per_link.copy-link-with-text') }}
|
||||
</BDropdownItem>
|
||||
<BDropdownItem v-if="validLink" class="test-copy-link pt-3" @click.stop="copyLink">
|
||||
<IBiClipboard />
|
||||
{{ $t('gdd_per_link.copy-link') }}
|
||||
</BDropdownItem>
|
||||
<BDropdownItem
|
||||
v-if="validLink"
|
||||
class="pt-3 pb-3 test-qr-code"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user