separate error cases, have some basic testing for transaction links, reorder tests

This commit is contained in:
Ulf Gebhardt 2023-02-07 11:43:04 +01:00
parent f38f931418
commit 283e09ea3d
Signed by: ulfgebhardt
GPG Key ID: DA6B843E748679C9
2 changed files with 293 additions and 227 deletions

View File

@ -16,6 +16,7 @@ import {
redeemTransactionLink,
createContribution,
updateContribution,
createTransactionLink,
} from '@/seeds/graphql/mutations'
import { listTransactionLinksAdmin } from '@/seeds/graphql/queries'
import { ContributionLink as DbContributionLink } from '@entity/ContributionLink'
@ -51,6 +52,69 @@ afterAll(async () => {
})
describe('TransactionLinkResolver', () => {
describe('createTransactionLink', () => {
beforeAll(async () => {
await mutate({
mutation: login,
variables: { email: 'peter@lustig.de', password: 'Aa12345_' },
})
})
it('throws error when amount is zero', async () => {
jest.clearAllMocks()
await expect(
mutate({
mutation: createTransactionLink,
variables: {
amount: 0,
memo: 'Test',
},
}),
).resolves.toMatchObject({
errors: [new GraphQLError('Amount must be a positive number')],
})
})
it('logs the error thrown', () => {
expect(logger.error).toBeCalledWith('Amount must be a positive number', new Decimal(0))
})
it('throws error when amount is negative', async () => {
jest.clearAllMocks()
await expect(
mutate({
mutation: createTransactionLink,
variables: {
amount: -10,
memo: 'Test',
},
}),
).resolves.toMatchObject({
errors: [new GraphQLError('Amount must be a positive number')],
})
})
it('logs the error thrown', () => {
expect(logger.error).toBeCalledWith('Amount must be a positive number', new Decimal(-10))
})
it('throws error when user has not enough GDD', async () => {
jest.clearAllMocks()
await expect(
mutate({
mutation: createTransactionLink,
variables: {
amount: 1001,
memo: 'Test',
},
}),
).resolves.toMatchObject({
errors: [new GraphQLError('User has not enough GDD')],
})
})
it('logs the error thrown', () => {
expect(logger.error).toBeCalledWith('User has not enough GDD', expect.any(Number))
})
})
describe('redeemTransactionLink', () => {
describe('contributionLink', () => {
describe('input not valid', () => {
@ -408,8 +472,9 @@ describe('TransactionLinkResolver', () => {
})
})
})
})
describe('transaction links list', () => {
describe('listTransactionLinksAdmin', () => {
const variables = {
userId: 1, // dummy, may be replaced
filters: null,
@ -476,9 +541,7 @@ describe('TransactionLinkResolver', () => {
variables.userId = user.id
variables.pageSize = 25
// bibi needs GDDs
const bibisCreation = creations.find(
(creation) => creation.email === 'bibi@bloxberg.de',
)
const bibisCreation = creations.find((creation) => creation.email === 'bibi@bloxberg.de')
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
await creationFactory(testEnv, bibisCreation!)
// bibis transaktion links
@ -678,7 +741,6 @@ describe('TransactionLinkResolver', () => {
})
})
})
})
describe('transactionLinkCode', () => {
const date = new Date()

View File

@ -64,12 +64,16 @@ export class TransactionLinkResolver {
const createdDate = new Date()
const validUntil = transactionLinkExpireDate(createdDate)
if (amount.lessThanOrEqualTo(0)) {
throw new LogError('Amount must be a positive number', amount)
}
const holdAvailableAmount = amount.minus(calculateDecay(amount, createdDate, validUntil).decay)
// validate amount
const sendBalance = await calculateBalance(user.id, holdAvailableAmount.mul(-1), createdDate)
if (!sendBalance) {
throw new Error("user hasn't enough GDD or amount is < 0")
throw new LogError('User has not enough GDD', user.id)
}
const transactionLink = DbTransactionLink.create()