From 5beaa97711b4f75ca635ade08161736295ee2ae2 Mon Sep 17 00:00:00 2001 From: Claus-Peter Huebner Date: Thu, 27 Jul 2023 14:52:47 +0200 Subject: [PATCH] endless fight to synchronize testcase with async business logic --- .../resolver/TransactionResolver.test.ts | 75 +++++++++++-------- .../util/sendTransactionsToDltConnector.ts | 15 ++-- 2 files changed, 50 insertions(+), 40 deletions(-) diff --git a/backend/src/graphql/resolver/TransactionResolver.test.ts b/backend/src/graphql/resolver/TransactionResolver.test.ts index cfb55a3a3..380386795 100644 --- a/backend/src/graphql/resolver/TransactionResolver.test.ts +++ b/backend/src/graphql/resolver/TransactionResolver.test.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ -import { Connection, In, IsNull } from '@dbTools/typeorm' +import { Connection, In } from '@dbTools/typeorm' import { DltTransaction } from '@entity/DltTransaction' import { Event as DbEvent } from '@entity/Event' import { Transaction } from '@entity/Transaction' @@ -383,41 +383,50 @@ describe('send coins', () => { ) }) - it('triggers the sendTransactionsToDltConnector', async () => { - expect(logger.info).toBeCalledWith('sendTransactionsToDltConnector...') + describe('sendTransactionsToDltConnector', () => { + let transaction: Transaction[] + let dltTransactions: DltTransaction[] + beforeAll(async () => { + // Find the previous created transactions of sendCoin mutation + transaction = await Transaction.find({ + where: { memo: 'unrepeatable memo' }, + order: { balanceDate: 'ASC', id: 'ASC' }, + }) - // Find the previous created transactions of sendCoin mutation - const transaction = await Transaction.find({ - where: { memo: 'unrepeatable memo' }, - order: { balanceDate: 'ASC', id: 'ASC' }, + // and read aslong as all async created dlt-transactions are finished + do { + dltTransactions = await DltTransaction.find({ + where: { transactionId: In([transaction[0].id, transaction[1].id]) }, + // relations: ['transaction'], + // order: { createdAt: 'ASC', id: 'ASC' }, + }) + } while (transaction.length > dltTransactions.length) }) - console.log('transaction=', transaction) - // Find the exact transaction (received one is the one with user[0] as user) - const dltTransactions = await DltTransaction.find() // { - // where: { transactionId: In([transaction[0].id, transaction[1].id]) }, - // relations: ['transaction'], - // order: { createdAt: 'ASC', id: 'ASC' }, - // }) - console.log('dltTransactions=', dltTransactions) - expect(dltTransactions).toContainEqual([ - { - id: expect.any(Number), - transactionId: transaction[0].id, - messageId: null, - verified: false, - createdAt: expect.any(Date), - verifiedAt: null, - }, - { - id: expect.any(Number), - transactionId: transaction[1].id, - messageId: null, - verified: false, - createdAt: expect.any(Date), - verifiedAt: null, - }, - ]) + it('has wait till sendTransactionsToDltConnector created all dlt-transactions', () => { + expect(logger.info).toBeCalledWith('sendTransactionsToDltConnector...') + + expect(dltTransactions).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + id: expect.any(Number), + transactionId: transaction[0].id, + messageId: null, + verified: false, + createdAt: expect.any(Date), + verifiedAt: null, + }), + expect.objectContaining({ + id: expect.any(Number), + transactionId: transaction[1].id, + messageId: null, + verified: false, + createdAt: expect.any(Date), + verifiedAt: null, + }), + ]), + ) + }) }) }) diff --git a/backend/src/graphql/resolver/util/sendTransactionsToDltConnector.ts b/backend/src/graphql/resolver/util/sendTransactionsToDltConnector.ts index aaaa1b6a9..64a0c5a7b 100644 --- a/backend/src/graphql/resolver/util/sendTransactionsToDltConnector.ts +++ b/backend/src/graphql/resolver/util/sendTransactionsToDltConnector.ts @@ -62,20 +62,21 @@ export async function sendTransactionsToDltConnector(): Promise { async function createDltTransactions(): Promise { const dltqb = DltTransaction.createQueryBuilder().select('transactions_id') - const newTransactions = await Transaction.createQueryBuilder() + const newTransactions: Transaction[] = await Transaction.createQueryBuilder() .select('id') .addSelect('balance_date') .where('id NOT IN (' + dltqb.getSql() + ')') + // eslint-disable-next-line camelcase .orderBy({ balance_date: 'ASC', id: 'ASC' }) .getRawMany() - console.log('newTransactions=', newTransactions) - for(let idx = 0; idx < newTransactions.length; idx++) { + const dltTxArray: DltTransaction[] = [] + let idx = 0 + while (newTransactions.length > dltTxArray.length) { + // timing problems with for(let idx = 0; idx < newTransactions.length; idx++) { const dltTx = DltTransaction.create() - dltTx.transactionId = newTransactions[idx].id + dltTx.transactionId = newTransactions[idx++].id await DltTransaction.save(dltTx) - console.log(`dltTransaction[${idx}]=`, dltTx) + dltTxArray.push(dltTx) } - const createdDltTx = await DltTransaction.find() - console.log('createddltTx=', createdDltTx) }