mirror of
https://github.com/IT4Change/gradido.git
synced 2025-12-12 23:35:50 +00:00
Merge pull request #2468 from gradido/test-semaphore
feat(backend): test semaphore
This commit is contained in:
commit
82ac1ef282
2
.github/workflows/test.yml
vendored
2
.github/workflows/test.yml
vendored
@ -528,7 +528,7 @@ jobs:
|
||||
report_name: Coverage Backend
|
||||
type: lcov
|
||||
result_path: ./backend/coverage/lcov.info
|
||||
min_coverage: 74
|
||||
min_coverage: 77
|
||||
token: ${{ github.token }}
|
||||
|
||||
##########################################################################
|
||||
|
||||
190
backend/src/graphql/resolver/semaphore.test.ts
Normal file
190
backend/src/graphql/resolver/semaphore.test.ts
Normal file
@ -0,0 +1,190 @@
|
||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
|
||||
import Decimal from 'decimal.js-light'
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
import { logger } from '@test/testSetup'
|
||||
import { userFactory } from '@/seeds/factory/user'
|
||||
import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg'
|
||||
import { bobBaumeister } from '@/seeds/users/bob-baumeister'
|
||||
import { peterLustig } from '@/seeds/users/peter-lustig'
|
||||
import { creationFactory, nMonthsBefore } from '@/seeds/factory/creation'
|
||||
import { cleanDB, testEnvironment, contributionDateFormatter } from '@test/helpers'
|
||||
import {
|
||||
confirmContribution,
|
||||
createContribution,
|
||||
createTransactionLink,
|
||||
redeemTransactionLink,
|
||||
login,
|
||||
createContributionLink,
|
||||
sendCoins,
|
||||
} from '@/seeds/graphql/mutations'
|
||||
|
||||
let mutate: any, con: any
|
||||
let testEnv: any
|
||||
|
||||
beforeAll(async () => {
|
||||
testEnv = await testEnvironment()
|
||||
mutate = testEnv.mutate
|
||||
con = testEnv.con
|
||||
await cleanDB()
|
||||
})
|
||||
|
||||
afterAll(async () => {
|
||||
await cleanDB()
|
||||
await con.close()
|
||||
})
|
||||
|
||||
describe('semaphore', () => {
|
||||
let contributionLinkCode = ''
|
||||
let bobsTransactionLinkCode = ''
|
||||
let bibisTransactionLinkCode = ''
|
||||
let bibisOpenContributionId = -1
|
||||
let bobsOpenContributionId = -1
|
||||
|
||||
beforeAll(async () => {
|
||||
const now = new Date()
|
||||
await userFactory(testEnv, bibiBloxberg)
|
||||
await userFactory(testEnv, peterLustig)
|
||||
await userFactory(testEnv, bobBaumeister)
|
||||
await creationFactory(testEnv, {
|
||||
email: 'bibi@bloxberg.de',
|
||||
amount: 1000,
|
||||
memo: 'Herzlich Willkommen bei Gradido!',
|
||||
creationDate: nMonthsBefore(new Date()),
|
||||
confirmed: true,
|
||||
})
|
||||
await creationFactory(testEnv, {
|
||||
email: 'bob@baumeister.de',
|
||||
amount: 1000,
|
||||
memo: 'Herzlich Willkommen bei Gradido!',
|
||||
creationDate: nMonthsBefore(new Date()),
|
||||
confirmed: true,
|
||||
})
|
||||
await mutate({
|
||||
mutation: login,
|
||||
variables: { email: 'peter@lustig.de', password: 'Aa12345_' },
|
||||
})
|
||||
const {
|
||||
data: { createContributionLink: contributionLink },
|
||||
} = await mutate({
|
||||
mutation: createContributionLink,
|
||||
variables: {
|
||||
amount: new Decimal(200),
|
||||
name: 'Test Contribution Link',
|
||||
memo: 'Danke für deine Teilnahme an dem Test der Contribution Links',
|
||||
cycle: 'ONCE',
|
||||
validFrom: new Date(2022, 5, 18).toISOString(),
|
||||
validTo: new Date(now.getFullYear() + 1, 7, 14).toISOString(),
|
||||
maxAmountPerMonth: new Decimal(200),
|
||||
maxPerCycle: 1,
|
||||
},
|
||||
})
|
||||
contributionLinkCode = 'CL-' + contributionLink.code
|
||||
await mutate({
|
||||
mutation: login,
|
||||
variables: { email: 'bob@baumeister.de', password: 'Aa12345_' },
|
||||
})
|
||||
const {
|
||||
data: { createTransactionLink: bobsLink },
|
||||
} = await mutate({
|
||||
mutation: createTransactionLink,
|
||||
variables: {
|
||||
email: 'bob@baumeister.de',
|
||||
amount: 20,
|
||||
memo: 'Bobs Link',
|
||||
},
|
||||
})
|
||||
const {
|
||||
data: { createContribution: bobsContribution },
|
||||
} = await mutate({
|
||||
mutation: createContribution,
|
||||
variables: {
|
||||
creationDate: contributionDateFormatter(new Date()),
|
||||
amount: 200,
|
||||
memo: 'Bobs Contribution',
|
||||
},
|
||||
})
|
||||
await mutate({
|
||||
mutation: login,
|
||||
variables: { email: 'bibi@bloxberg.de', password: 'Aa12345_' },
|
||||
})
|
||||
const {
|
||||
data: { createTransactionLink: bibisLink },
|
||||
} = await mutate({
|
||||
mutation: createTransactionLink,
|
||||
variables: {
|
||||
amount: 20,
|
||||
memo: 'Bibis Link',
|
||||
},
|
||||
})
|
||||
const {
|
||||
data: { createContribution: bibisContribution },
|
||||
} = await mutate({
|
||||
mutation: createContribution,
|
||||
variables: {
|
||||
creationDate: contributionDateFormatter(new Date()),
|
||||
amount: 200,
|
||||
memo: 'Bibis Contribution',
|
||||
},
|
||||
})
|
||||
bobsTransactionLinkCode = bobsLink.code
|
||||
bibisTransactionLinkCode = bibisLink.code
|
||||
bibisOpenContributionId = bibisContribution.id
|
||||
bobsOpenContributionId = bobsContribution.id
|
||||
})
|
||||
|
||||
it('creates a lot of transactions without errors', async () => {
|
||||
await mutate({
|
||||
mutation: login,
|
||||
variables: { email: 'bibi@bloxberg.de', password: 'Aa12345_' },
|
||||
})
|
||||
const bibiRedeemContributionLink = mutate({
|
||||
mutation: redeemTransactionLink,
|
||||
variables: { code: contributionLinkCode },
|
||||
})
|
||||
const redeemBobsLink = mutate({
|
||||
mutation: redeemTransactionLink,
|
||||
variables: { code: bobsTransactionLinkCode },
|
||||
})
|
||||
const bibisTransaction = mutate({
|
||||
mutation: sendCoins,
|
||||
variables: { email: 'bob@baumeister.de', amount: '50', memo: 'Das ist für dich, Bob' },
|
||||
})
|
||||
await mutate({
|
||||
mutation: login,
|
||||
variables: { email: 'bob@baumeister.de', password: 'Aa12345_' },
|
||||
})
|
||||
const bobRedeemContributionLink = mutate({
|
||||
mutation: redeemTransactionLink,
|
||||
variables: { code: contributionLinkCode },
|
||||
})
|
||||
const redeemBibisLink = mutate({
|
||||
mutation: redeemTransactionLink,
|
||||
variables: { code: bibisTransactionLinkCode },
|
||||
})
|
||||
const bobsTransaction = mutate({
|
||||
mutation: sendCoins,
|
||||
variables: { email: 'bibi@bloxberg.de', amount: '50', memo: 'Das ist für dich, Bibi' },
|
||||
})
|
||||
await mutate({
|
||||
mutation: login,
|
||||
variables: { email: 'peter@lustig.de', password: 'Aa12345_' },
|
||||
})
|
||||
const confirmBibisContribution = mutate({
|
||||
mutation: confirmContribution,
|
||||
variables: { id: bibisOpenContributionId },
|
||||
})
|
||||
const confirmBobsContribution = mutate({
|
||||
mutation: confirmContribution,
|
||||
variables: { id: bobsOpenContributionId },
|
||||
})
|
||||
await expect(bibiRedeemContributionLink).resolves.toMatchObject({ errors: undefined })
|
||||
await expect(redeemBobsLink).resolves.toMatchObject({ errors: undefined })
|
||||
await expect(bibisTransaction).resolves.toMatchObject({ errors: undefined })
|
||||
await expect(bobRedeemContributionLink).resolves.toMatchObject({ errors: undefined })
|
||||
await expect(redeemBibisLink).resolves.toMatchObject({ errors: undefined })
|
||||
await expect(bobsTransaction).resolves.toMatchObject({ errors: undefined })
|
||||
await expect(confirmBibisContribution).resolves.toMatchObject({ errors: undefined })
|
||||
await expect(confirmBobsContribution).resolves.toMatchObject({ errors: undefined })
|
||||
})
|
||||
})
|
||||
Loading…
x
Reference in New Issue
Block a user