mirror of
https://github.com/IT4Change/gradido.git
synced 2026-02-06 09:56:05 +00:00
357 lines
12 KiB
TypeScript
357 lines
12 KiB
TypeScript
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
|
|
import { ApolloServerTestClient } from 'apollo-server-testing'
|
|
import { Community as DbCommunity } from '@entity/Community'
|
|
import CONFIG from '@/config'
|
|
import { User as DbUser } from '@entity/User'
|
|
import { fullName } from '@/graphql/util/fullName'
|
|
import { GraphQLError } from 'graphql'
|
|
import { cleanDB, testEnvironment } from '@test/helpers'
|
|
import { logger } from '@test/testSetup'
|
|
import { Connection } from '@dbTools/typeorm'
|
|
|
|
let mutate: ApolloServerTestClient['mutate'], con: Connection
|
|
// let query: ApolloServerTestClient['query']
|
|
|
|
let testEnv: {
|
|
mutate: ApolloServerTestClient['mutate']
|
|
query: ApolloServerTestClient['query']
|
|
con: Connection
|
|
}
|
|
|
|
CONFIG.FEDERATION_API = '1_0'
|
|
|
|
beforeAll(async () => {
|
|
testEnv = await testEnvironment(logger)
|
|
mutate = testEnv.mutate
|
|
// query = testEnv.query
|
|
con = testEnv.con
|
|
|
|
// const server = await createServer()
|
|
// con = server.con
|
|
// query = createTestClient(server.apollo).query
|
|
// mutate = createTestClient(server.apollo).mutate
|
|
// DbCommunity.clear()
|
|
// DbUser.clear()
|
|
await cleanDB()
|
|
})
|
|
|
|
afterAll(async () => {
|
|
// await cleanDB()
|
|
await con.destroy()
|
|
})
|
|
|
|
describe('SendCoinsResolver', () => {
|
|
const voteForSendCoinsMutation = `
|
|
mutation (
|
|
$communityReceiverIdentifier: String!
|
|
$userReceiverIdentifier: String!
|
|
$creationDate: String!
|
|
$amount: Decimal!
|
|
$memo: String!
|
|
$communitySenderIdentifier: String!
|
|
$userSenderIdentifier: String!
|
|
$userSenderName: String!
|
|
) {
|
|
voteForSendCoins(
|
|
communityReceiverIdentifier: $communityReceiverIdentifier
|
|
userReceiverIdentifier: $userReceiverIdentifier
|
|
creationDate: $creationDate
|
|
amount: $amount
|
|
memo: $memo
|
|
communitySenderIdentifier: $communitySenderIdentifier
|
|
userSenderIdentifier: $userSenderIdentifier
|
|
userSenderName: $userSenderName
|
|
)
|
|
}
|
|
`
|
|
const revertSendCoinsMutation = `
|
|
mutation (
|
|
$communityReceiverIdentifier: String!
|
|
$userReceiverIdentifier: String!
|
|
$creationDate: String!
|
|
$amount: Decimal!
|
|
$memo: String!
|
|
$communitySenderIdentifier: String!
|
|
$userSenderIdentifier: String!
|
|
$userSenderName: String!
|
|
) {
|
|
revertSendCoins(
|
|
communityReceiverIdentifier: $communityReceiverIdentifier
|
|
userReceiverIdentifier: $userReceiverIdentifier
|
|
creationDate: $creationDate
|
|
amount: $amount
|
|
memo: $memo
|
|
communitySenderIdentifier: $communitySenderIdentifier
|
|
userSenderIdentifier: $userSenderIdentifier
|
|
userSenderName: $userSenderName
|
|
)
|
|
}
|
|
`
|
|
|
|
describe('voteForSendCoins', () => {
|
|
let homeCom: DbCommunity
|
|
let foreignCom: DbCommunity
|
|
let sendUser: DbUser
|
|
let recipUser: DbUser
|
|
|
|
beforeEach(async () => {
|
|
await cleanDB()
|
|
homeCom = DbCommunity.create()
|
|
homeCom.foreign = false
|
|
homeCom.url = 'homeCom-url'
|
|
homeCom.name = 'homeCom-Name'
|
|
homeCom.description = 'homeCom-Description'
|
|
homeCom.creationDate = new Date()
|
|
homeCom.publicKey = Buffer.from('homeCom-publicKey')
|
|
homeCom.communityUuid = 'homeCom-UUID'
|
|
await DbCommunity.insert(homeCom)
|
|
|
|
foreignCom = DbCommunity.create()
|
|
foreignCom.foreign = true
|
|
foreignCom.url = 'foreignCom-url'
|
|
foreignCom.name = 'foreignCom-Name'
|
|
foreignCom.description = 'foreignCom-Description'
|
|
foreignCom.creationDate = new Date()
|
|
foreignCom.publicKey = Buffer.from('foreignCom-publicKey')
|
|
foreignCom.communityUuid = 'foreignCom-UUID'
|
|
await DbCommunity.insert(foreignCom)
|
|
|
|
sendUser = DbUser.create()
|
|
sendUser.alias = 'sendUser-alias'
|
|
sendUser.firstName = 'sendUser-FirstName'
|
|
sendUser.gradidoID = 'sendUser-GradidoID'
|
|
sendUser.lastName = 'sendUser-LastName'
|
|
await DbUser.insert(sendUser)
|
|
|
|
recipUser = DbUser.create()
|
|
recipUser.alias = 'recipUser-alias'
|
|
recipUser.firstName = 'recipUser-FirstName'
|
|
recipUser.gradidoID = 'recipUser-GradidoID'
|
|
recipUser.lastName = 'recipUser-LastName'
|
|
await DbUser.insert(recipUser)
|
|
})
|
|
|
|
describe('unknown recipient community', () => {
|
|
it('throws an error', async () => {
|
|
jest.clearAllMocks()
|
|
expect(
|
|
await mutate({
|
|
mutation: voteForSendCoinsMutation,
|
|
variables: {
|
|
communityReceiverIdentifier: 'invalid foreignCom',
|
|
userReceiverIdentifier: recipUser.gradidoID,
|
|
creationDate: new Date().toISOString(),
|
|
amount: 100,
|
|
memo: 'X-Com-TX memo',
|
|
communitySenderIdentifier: homeCom.communityUuid,
|
|
userSenderIdentifier: sendUser.gradidoID,
|
|
userSenderName: fullName(sendUser.firstName, sendUser.lastName),
|
|
},
|
|
}),
|
|
).toEqual(
|
|
expect.objectContaining({
|
|
errors: [new GraphQLError('voteForSendCoins with wrong communityReceiverIdentifier')],
|
|
}),
|
|
)
|
|
})
|
|
})
|
|
|
|
describe('unknown recipient user', () => {
|
|
it('throws an error', async () => {
|
|
jest.clearAllMocks()
|
|
expect(
|
|
await mutate({
|
|
mutation: voteForSendCoinsMutation,
|
|
variables: {
|
|
communityReceiverIdentifier: foreignCom.communityUuid,
|
|
userReceiverIdentifier: 'invalid recipient',
|
|
creationDate: new Date().toISOString(),
|
|
amount: 100,
|
|
memo: 'X-Com-TX memo',
|
|
communitySenderIdentifier: homeCom.communityUuid,
|
|
userSenderIdentifier: sendUser.gradidoID,
|
|
userSenderName: fullName(sendUser.firstName, sendUser.lastName),
|
|
},
|
|
}),
|
|
).toEqual(
|
|
expect.objectContaining({
|
|
errors: [
|
|
new GraphQLError(
|
|
'voteForSendCoins with unknown userReceiverIdentifier in the community=',
|
|
),
|
|
],
|
|
}),
|
|
)
|
|
})
|
|
})
|
|
|
|
describe('valid X-Com-TX voted', () => {
|
|
it('throws an error', async () => {
|
|
jest.clearAllMocks()
|
|
expect(
|
|
await mutate({
|
|
mutation: voteForSendCoinsMutation,
|
|
variables: {
|
|
communityReceiverIdentifier: foreignCom.communityUuid,
|
|
userReceiverIdentifier: recipUser.gradidoID,
|
|
creationDate: new Date().toISOString(),
|
|
amount: 100,
|
|
memo: 'X-Com-TX memo',
|
|
communitySenderIdentifier: homeCom.communityUuid,
|
|
userSenderIdentifier: sendUser.gradidoID,
|
|
userSenderName: fullName(sendUser.firstName, sendUser.lastName),
|
|
},
|
|
}),
|
|
).toEqual(
|
|
expect.objectContaining({
|
|
data: {
|
|
voteForSendCoins: 'recipUser-FirstName recipUser-LastName',
|
|
},
|
|
}),
|
|
)
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('revertSendCoins', () => {
|
|
let homeCom: DbCommunity
|
|
let foreignCom: DbCommunity
|
|
let sendUser: DbUser
|
|
let recipUser: DbUser
|
|
const creationDate = new Date()
|
|
|
|
beforeEach(async () => {
|
|
await cleanDB()
|
|
homeCom = DbCommunity.create()
|
|
homeCom.foreign = false
|
|
homeCom.url = 'homeCom-url'
|
|
homeCom.name = 'homeCom-Name'
|
|
homeCom.description = 'homeCom-Description'
|
|
homeCom.creationDate = new Date()
|
|
homeCom.publicKey = Buffer.from('homeCom-publicKey')
|
|
homeCom.communityUuid = 'homeCom-UUID'
|
|
await DbCommunity.insert(homeCom)
|
|
|
|
foreignCom = DbCommunity.create()
|
|
foreignCom.foreign = true
|
|
foreignCom.url = 'foreignCom-url'
|
|
foreignCom.name = 'foreignCom-Name'
|
|
foreignCom.description = 'foreignCom-Description'
|
|
foreignCom.creationDate = new Date()
|
|
foreignCom.publicKey = Buffer.from('foreignCom-publicKey')
|
|
foreignCom.communityUuid = 'foreignCom-UUID'
|
|
await DbCommunity.insert(foreignCom)
|
|
|
|
sendUser = DbUser.create()
|
|
sendUser.alias = 'sendUser-alias'
|
|
sendUser.firstName = 'sendUser-FirstName'
|
|
sendUser.gradidoID = 'sendUser-GradidoID'
|
|
sendUser.lastName = 'sendUser-LastName'
|
|
await DbUser.insert(sendUser)
|
|
|
|
recipUser = DbUser.create()
|
|
recipUser.alias = 'recipUser-alias'
|
|
recipUser.firstName = 'recipUser-FirstName'
|
|
recipUser.gradidoID = 'recipUser-GradidoID'
|
|
recipUser.lastName = 'recipUser-LastName'
|
|
await DbUser.insert(recipUser)
|
|
|
|
await mutate({
|
|
mutation: voteForSendCoinsMutation,
|
|
variables: {
|
|
communityReceiverIdentifier: foreignCom.communityUuid,
|
|
userReceiverIdentifier: recipUser.gradidoID,
|
|
creationDate: creationDate.toISOString(),
|
|
amount: 100,
|
|
memo: 'X-Com-TX memo',
|
|
communitySenderIdentifier: homeCom.communityUuid,
|
|
userSenderIdentifier: sendUser.gradidoID,
|
|
userSenderName: fullName(sendUser.firstName, sendUser.lastName),
|
|
},
|
|
})
|
|
})
|
|
|
|
describe('unknown recipient community', () => {
|
|
it('throws an error', async () => {
|
|
jest.clearAllMocks()
|
|
expect(
|
|
await mutate({
|
|
mutation: revertSendCoinsMutation,
|
|
variables: {
|
|
communityReceiverIdentifier: 'invalid foreignCom',
|
|
userReceiverIdentifier: recipUser.gradidoID,
|
|
creationDate: creationDate.toISOString(),
|
|
amount: 100,
|
|
memo: 'X-Com-TX memo',
|
|
communitySenderIdentifier: homeCom.communityUuid,
|
|
userSenderIdentifier: sendUser.gradidoID,
|
|
userSenderName: fullName(sendUser.firstName, sendUser.lastName),
|
|
},
|
|
}),
|
|
).toEqual(
|
|
expect.objectContaining({
|
|
errors: [new GraphQLError('revertSendCoins with wrong communityReceiverIdentifier')],
|
|
}),
|
|
)
|
|
})
|
|
})
|
|
|
|
describe('unknown recipient user', () => {
|
|
it('throws an error', async () => {
|
|
jest.clearAllMocks()
|
|
expect(
|
|
await mutate({
|
|
mutation: revertSendCoinsMutation,
|
|
variables: {
|
|
communityReceiverIdentifier: foreignCom.communityUuid,
|
|
userReceiverIdentifier: 'invalid recipient',
|
|
creationDate: creationDate.toISOString(),
|
|
amount: 100,
|
|
memo: 'X-Com-TX memo',
|
|
communitySenderIdentifier: homeCom.communityUuid,
|
|
userSenderIdentifier: sendUser.gradidoID,
|
|
userSenderName: fullName(sendUser.firstName, sendUser.lastName),
|
|
},
|
|
}),
|
|
).toEqual(
|
|
expect.objectContaining({
|
|
errors: [
|
|
new GraphQLError(
|
|
'revertSendCoins with unknown userReceiverIdentifier in the community=',
|
|
),
|
|
],
|
|
}),
|
|
)
|
|
})
|
|
})
|
|
|
|
describe('valid X-Com-TX reverted', () => {
|
|
it('throws an error', async () => {
|
|
jest.clearAllMocks()
|
|
expect(
|
|
await mutate({
|
|
mutation: revertSendCoinsMutation,
|
|
variables: {
|
|
communityReceiverIdentifier: foreignCom.communityUuid,
|
|
userReceiverIdentifier: recipUser.gradidoID,
|
|
creationDate: creationDate.toISOString(),
|
|
amount: 100,
|
|
memo: 'X-Com-TX memo',
|
|
communitySenderIdentifier: homeCom.communityUuid,
|
|
userSenderIdentifier: sendUser.gradidoID,
|
|
userSenderName: fullName(sendUser.firstName, sendUser.lastName),
|
|
},
|
|
}),
|
|
).toEqual(
|
|
expect.objectContaining({
|
|
data: {
|
|
revertSendCoins: true,
|
|
},
|
|
}),
|
|
)
|
|
})
|
|
})
|
|
})
|
|
})
|