mirror of
https://github.com/IT4Change/gradido.git
synced 2026-02-06 09:56:05 +00:00
add test for X-Com sendCoins in TransactionResolver.test
This commit is contained in:
parent
90fca336d2
commit
9ddecd95ac
@ -6,10 +6,10 @@ import { backendLogger as logger } from '@/server/logger'
|
||||
|
||||
import { SendCoinsArgs } from './model/SendCoinsArgs'
|
||||
import { SendCoinsResult } from './model/SendCoinsResult'
|
||||
import { revertSendCoins } from './query/revertSendCoins'
|
||||
import { revertSettledSendCoins } from './query/revertSettledSendCoins'
|
||||
import { settleSendCoins } from './query/settleSendCoins'
|
||||
import { voteForSendCoins } from './query/voteForSendCoins'
|
||||
import { revertSendCoins as revertSendCoinsQuery } from './query/revertSendCoins'
|
||||
import { revertSettledSendCoins as revertSettledSendCoinsQuery } from './query/revertSettledSendCoins'
|
||||
import { settleSendCoins as settleSendCoinsQuery } from './query/settleSendCoins'
|
||||
import { voteForSendCoins as voteForSendCoinsQuery } from './query/voteForSendCoins'
|
||||
|
||||
// eslint-disable-next-line camelcase
|
||||
export class SendCoinsClient {
|
||||
@ -31,16 +31,16 @@ export class SendCoinsClient {
|
||||
})
|
||||
}
|
||||
|
||||
voteForSendCoins = async (args: SendCoinsArgs): Promise<SendCoinsResult> => {
|
||||
async voteForSendCoins(args: SendCoinsArgs): Promise<SendCoinsResult> {
|
||||
logger.debug('X-Com: voteForSendCoins against endpoint=', this.endpoint)
|
||||
try {
|
||||
logger.debug(`X-Com: SendCoinsClient: voteForSendCoins with args=`, args)
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
||||
const { data } = await this.client.rawRequest(voteForSendCoins, { args })
|
||||
const { data } = await this.client.rawRequest(voteForSendCoinsQuery, { args })
|
||||
logger.debug(`X-Com: SendCoinsClient: after rawRequest...data:`, data)
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
||||
if (!data?.voteForSendCoins?.vote) {
|
||||
logger.warn('X-Com: voteForSendCoins failed with: ', data)
|
||||
logger.debug('X-Com: voteForSendCoins failed with: ', data)
|
||||
return new SendCoinsResult()
|
||||
}
|
||||
const result = new SendCoinsResult()
|
||||
@ -56,12 +56,12 @@ export class SendCoinsClient {
|
||||
}
|
||||
}
|
||||
|
||||
revertSendCoins = async (args: SendCoinsArgs): Promise<boolean> => {
|
||||
async revertSendCoins(args: SendCoinsArgs): Promise<boolean> {
|
||||
logger.debug('X-Com: revertSendCoins against endpoint=', this.endpoint)
|
||||
try {
|
||||
logger.debug(`X-Com: SendCoinsClient: revertSendCoins with args=`, args)
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
||||
const { data } = await this.client.rawRequest(revertSendCoins, { args })
|
||||
const { data } = await this.client.rawRequest(revertSendCoinsQuery, { args })
|
||||
logger.debug(`X-Com: SendCoinsClient: after revertSendCoins: data=`, data)
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
||||
if (!data?.revertSendCoins) {
|
||||
@ -81,12 +81,12 @@ export class SendCoinsClient {
|
||||
}
|
||||
}
|
||||
|
||||
settleSendCoins = async (args: SendCoinsArgs): Promise<boolean> => {
|
||||
async settleSendCoins(args: SendCoinsArgs): Promise<boolean> {
|
||||
logger.debug(`X-Com: settleSendCoins against endpoint='${this.endpoint}'...`)
|
||||
try {
|
||||
logger.debug(`X-Com: SendCoinsClient: settleSendCoins with args=`, args)
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
||||
const { data } = await this.client.rawRequest(settleSendCoins, { args })
|
||||
const { data } = await this.client.rawRequest(settleSendCoinsQuery, { args })
|
||||
logger.debug(`X-Com: SendCoinsClient: after settleSendCoins: data=`, data)
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
||||
if (!data?.settleSendCoins) {
|
||||
@ -108,12 +108,12 @@ export class SendCoinsClient {
|
||||
}
|
||||
}
|
||||
|
||||
revertSettledSendCoins = async (args: SendCoinsArgs): Promise<boolean> => {
|
||||
async revertSettledSendCoins(args: SendCoinsArgs): Promise<boolean> {
|
||||
logger.debug(`X-Com: revertSettledSendCoins against endpoint='${this.endpoint}'...`)
|
||||
try {
|
||||
logger.debug(`X-Com: SendCoinsClient: revertSettledSendCoins with args=`, args)
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
||||
const { data } = await this.client.rawRequest(revertSettledSendCoins, { args })
|
||||
const { data } = await this.client.rawRequest(revertSettledSendCoinsQuery, { args })
|
||||
logger.debug(`X-Com: SendCoinsClient: after revertSettledSendCoins: data=`, data)
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
||||
if (!data?.revertSettledSendCoins) {
|
||||
|
||||
@ -1,10 +1,14 @@
|
||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
/* eslint-disable @typescript-eslint/no-unsafe-call */
|
||||
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
||||
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
||||
/* eslint-disable @typescript-eslint/no-unsafe-return */
|
||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
||||
import { Connection, In } from '@dbTools/typeorm'
|
||||
import { Community as DbCommunity } from '@entity/Community'
|
||||
import { DltTransaction } from '@entity/DltTransaction'
|
||||
import { Event as DbEvent } from '@entity/Event'
|
||||
import { FederatedCommunity as DbFederatedCommunity } from '@entity/FederatedCommunity'
|
||||
import { Transaction } from '@entity/Transaction'
|
||||
import { User } from '@entity/User'
|
||||
import { ApolloServerTestClient } from 'apollo-server-testing'
|
||||
@ -14,6 +18,9 @@ import { cleanDB, testEnvironment } from '@test/helpers'
|
||||
import { logger } from '@test/testSetup'
|
||||
|
||||
import { EventType } from '@/event/Events'
|
||||
import { SendCoinsArgs } from '@/federation/client/1_0/model/SendCoinsArgs'
|
||||
import { SendCoinsResult } from '@/federation/client/1_0/model/SendCoinsResult'
|
||||
import { SendCoinsClient } from '@/federation/client/1_0/SendCoinsClient'
|
||||
import { userFactory } from '@/seeds/factory/user'
|
||||
import {
|
||||
confirmContribution,
|
||||
@ -27,6 +34,7 @@ import { bobBaumeister } from '@/seeds/users/bob-baumeister'
|
||||
import { garrickOllivander } from '@/seeds/users/garrick-ollivander'
|
||||
import { peterLustig } from '@/seeds/users/peter-lustig'
|
||||
import { stephenHawking } from '@/seeds/users/stephen-hawking'
|
||||
import { fullName } from '@/util/utilities'
|
||||
|
||||
let mutate: ApolloServerTestClient['mutate'], con: Connection
|
||||
let query: ApolloServerTestClient['query']
|
||||
@ -47,7 +55,7 @@ beforeAll(async () => {
|
||||
|
||||
afterAll(async () => {
|
||||
await cleanDB()
|
||||
await con.close()
|
||||
await con.destroy() // close()
|
||||
})
|
||||
|
||||
let bobData: any
|
||||
@ -59,6 +67,7 @@ let peter: User
|
||||
|
||||
let homeCom: DbCommunity
|
||||
let foreignCom: DbCommunity
|
||||
let fedForeignCom: DbFederatedCommunity
|
||||
|
||||
describe('send coins', () => {
|
||||
beforeAll(async () => {
|
||||
@ -67,7 +76,7 @@ describe('send coins', () => {
|
||||
await userFactory(testEnv, stephenHawking)
|
||||
await userFactory(testEnv, garrickOllivander)
|
||||
homeCom = DbCommunity.create()
|
||||
homeCom.communityUuid = '7f474922-b6d8-4b64-8cd0-ebf0a1d8756e'
|
||||
homeCom.communityUuid = '7f474922-b6d8-4b64-8cd0-ebf0a1d875aa'
|
||||
homeCom.creationDate = new Date('2000-01-01')
|
||||
homeCom.description = 'homeCom description'
|
||||
homeCom.foreign = false
|
||||
@ -78,14 +87,15 @@ describe('send coins', () => {
|
||||
homeCom = await DbCommunity.save(homeCom)
|
||||
|
||||
foreignCom = DbCommunity.create()
|
||||
foreignCom.communityUuid = '7f474922-b6d8-4b64-8cd0-cea0a1d8756e'
|
||||
foreignCom.communityUuid = '7f474922-b6d8-4b64-8cd0-cea0a1d875bb'
|
||||
foreignCom.creationDate = new Date('2000-06-06')
|
||||
foreignCom.description = 'homeCom description'
|
||||
foreignCom.description = 'foreignCom description'
|
||||
foreignCom.foreign = true
|
||||
foreignCom.name = 'foreignCom name'
|
||||
foreignCom.privateKey = Buffer.from('foreignCom privateKey')
|
||||
foreignCom.publicKey = Buffer.from('foreignCom publicKey')
|
||||
foreignCom.url = 'foreignCom url'
|
||||
foreignCom.url = 'foreignCom_url'
|
||||
foreignCom.authenticatedAt = new Date('2000-06-12')
|
||||
foreignCom = await DbCommunity.save(foreignCom)
|
||||
|
||||
bobData = {
|
||||
@ -594,7 +604,45 @@ describe('send coins', () => {
|
||||
})
|
||||
})
|
||||
|
||||
describe.only('X-Com send coins via gradido ID', () => {
|
||||
describe('X-Com send coins via gradido ID', () => {
|
||||
beforeAll(async () => {
|
||||
fedForeignCom = DbFederatedCommunity.create()
|
||||
fedForeignCom.apiVersion = '1_0'
|
||||
fedForeignCom.foreign = true
|
||||
fedForeignCom.publicKey = Buffer.from('foreignCom publicKey')
|
||||
fedForeignCom.endPoint = 'http://foreignCom_url/api'
|
||||
fedForeignCom.lastAnnouncedAt = new Date('2000-06-09')
|
||||
fedForeignCom.verifiedAt = new Date('2000-06-10')
|
||||
fedForeignCom = await DbFederatedCommunity.save(fedForeignCom)
|
||||
|
||||
jest
|
||||
.spyOn(SendCoinsClient.prototype, 'voteForSendCoins')
|
||||
.mockImplementation(async (args: SendCoinsArgs): Promise<SendCoinsResult> => {
|
||||
// console.log('mock of voteForSendCoins...', args)
|
||||
return Promise.resolve({
|
||||
vote: true,
|
||||
recipName: fullName(peter.firstName, peter.lastName),
|
||||
recipGradidoID: args.recipientUserIdentifier,
|
||||
})
|
||||
})
|
||||
|
||||
jest
|
||||
.spyOn(SendCoinsClient.prototype, 'settleSendCoins')
|
||||
.mockImplementation(async (args: SendCoinsArgs): Promise<boolean> => {
|
||||
// console.log('mock of settleSendCoins...', args)
|
||||
return Promise.resolve(true)
|
||||
})
|
||||
|
||||
await mutate({
|
||||
mutation: login,
|
||||
variables: bobData,
|
||||
})
|
||||
})
|
||||
|
||||
afterAll(() => {
|
||||
jest.clearAllMocks()
|
||||
})
|
||||
|
||||
it('sends the coins', async () => {
|
||||
await expect(
|
||||
mutate({
|
||||
|
||||
@ -38,7 +38,7 @@ import { calculateBalance } from '@/util/validate'
|
||||
import { virtualLinkTransaction, virtualDecayTransaction } from '@/util/virtualTransactions'
|
||||
|
||||
import { BalanceResolver } from './BalanceResolver'
|
||||
import { getCommunityName, isCommunityAuthenticated, isHomeCommunity } from './util/communities'
|
||||
import { isCommunityAuthenticated, isHomeCommunity } from './util/communities'
|
||||
import { findUserByIdentifier } from './util/findUserByIdentifier'
|
||||
import { getLastTransaction } from './util/getLastTransaction'
|
||||
import { getTransactionList } from './util/getTransactionList'
|
||||
@ -258,7 +258,7 @@ export class TransactionResolver {
|
||||
const remoteUser = new User(null)
|
||||
remoteUser.gradidoID = transaction.linkedUserGradidoID
|
||||
remoteUser.firstName = transaction.linkedUserName
|
||||
remoteUser.lastName = transaction.linkedUserCommunityUuid
|
||||
remoteUser.lastName = 'GradidoID: ' + transaction.linkedUserGradidoID
|
||||
involvedRemoteUsers.push(remoteUser)
|
||||
}
|
||||
})
|
||||
@ -385,7 +385,7 @@ export class TransactionResolver {
|
||||
{ recipientCommunityIdentifier, recipientIdentifier, amount, memo }: TransactionSendArgs,
|
||||
@Ctx() context: Context,
|
||||
): Promise<boolean> {
|
||||
logger.info(
|
||||
logger.debug(
|
||||
`sendCoins(recipientCommunityIdentifier=${recipientCommunityIdentifier}, recipientIdentifier=${recipientIdentifier}, amount=${amount}, memo=${memo})`,
|
||||
)
|
||||
const homeCom = await DbCommunity.findOneOrFail({ where: { foreign: false } })
|
||||
@ -413,6 +413,7 @@ export class TransactionResolver {
|
||||
const recipCom = await DbCommunity.findOneOrFail({
|
||||
where: { communityUuid: recipientCommunityIdentifier },
|
||||
})
|
||||
logger.debug('recipient commuity: ', recipCom)
|
||||
let pendingResult: SendCoinsResult
|
||||
let committingResult: SendCoinsResult
|
||||
const creationDate = new Date()
|
||||
@ -427,7 +428,9 @@ export class TransactionResolver {
|
||||
senderUser,
|
||||
recipientIdentifier,
|
||||
)
|
||||
logger.debug('processXComPendingSendCoins result: ', pendingResult)
|
||||
if (pendingResult.vote && pendingResult.recipGradidoID) {
|
||||
logger.debug('vor processXComCommittingSendCoins... ')
|
||||
committingResult = await processXComCommittingSendCoins(
|
||||
recipCom,
|
||||
homeCom,
|
||||
@ -437,6 +440,7 @@ export class TransactionResolver {
|
||||
senderUser,
|
||||
pendingResult.recipGradidoID,
|
||||
)
|
||||
logger.debug('processXComCommittingSendCoins result: ', committingResult)
|
||||
if (!committingResult.vote) {
|
||||
logger.fatal('FATAL ERROR: on processXComCommittingSendCoins for', committingResult)
|
||||
throw new LogError(
|
||||
|
||||
@ -87,7 +87,7 @@ export async function processXComPendingSendCoins(
|
||||
args.senderUserName = fullName(sender.firstName, sender.lastName)
|
||||
logger.debug(`X-Com: ready for voteForSendCoins with args=`, args)
|
||||
voteResult = await client.voteForSendCoins(args)
|
||||
logger.debug(`X-Com: returnd from voteForSendCoins:`, voteResult)
|
||||
logger.debug(`X-Com: returned from voteForSendCoins:`, voteResult)
|
||||
if (voteResult.vote) {
|
||||
logger.debug(`X-Com: prepare pendingTransaction for sender...`)
|
||||
// writing the pending transaction on receiver-side was successfull, so now write the sender side
|
||||
@ -138,7 +138,7 @@ export async function processXComPendingSendCoins(
|
||||
}
|
||||
logger.debug(`voteForSendCoins()-1_0... successfull`)
|
||||
} else {
|
||||
logger.debug(
|
||||
logger.error(
|
||||
`X-Com: break with error on writing pendingTransaction for recipient...`,
|
||||
voteResult,
|
||||
)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user