From 7df7517e2426a74eccfb6000bda44021db2484c1 Mon Sep 17 00:00:00 2001 From: Eric Lee Date: Wed, 25 Oct 2023 08:08:32 -0400 Subject: [PATCH 1/2] update processing pending/paid escrow --- .../src/modules/webhook/webhook.service.ts | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/packages/apps/reputation-oracle/server/src/modules/webhook/webhook.service.ts b/packages/apps/reputation-oracle/server/src/modules/webhook/webhook.service.ts index 020d8bfee9..20530c32f7 100644 --- a/packages/apps/reputation-oracle/server/src/modules/webhook/webhook.service.ts +++ b/packages/apps/reputation-oracle/server/src/modules/webhook/webhook.service.ts @@ -201,15 +201,19 @@ export class WebhookService { results.hash, ); - await this.webhookRepository.updateOne( - { id: webhookEntity.id }, - { - resultsUrl: results.url, - checkPassed: results.checkPassed, - status: WebhookStatus.PAID, - retriesCount: 0, - }, - ); + const balance = await escrowClient.getBalance(escrowAddress); + + if (balance.toNumber() == 0) { + await this.webhookRepository.updateOne( + { id: webhookEntity.id }, + { + resultsUrl: results.url, + checkPassed: results.checkPassed, + status: WebhookStatus.PAID, + retriesCount: 0, + }, + ); + } return true; } catch (e) { @@ -499,6 +503,8 @@ export class WebhookService { ); } + await escrowClient.complete(webhookEntity.escrowAddress); + await this.webhookRepository.updateOne( { id: webhookEntity.id, From b930e8316090953f88c744ef41dd5b285243f05d Mon Sep 17 00:00:00 2001 From: Eric Lee Date: Wed, 25 Oct 2023 12:15:49 -0400 Subject: [PATCH 2/2] fix test --- .../modules/webhook/webhook.service.spec.ts | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/packages/apps/reputation-oracle/server/src/modules/webhook/webhook.service.spec.ts b/packages/apps/reputation-oracle/server/src/modules/webhook/webhook.service.spec.ts index 8a99196a96..18bc24f247 100644 --- a/packages/apps/reputation-oracle/server/src/modules/webhook/webhook.service.spec.ts +++ b/packages/apps/reputation-oracle/server/src/modules/webhook/webhook.service.spec.ts @@ -48,6 +48,7 @@ jest.mock('@human-protocol/sdk', () => ({ getManifestUrl: jest.fn().mockResolvedValue(MOCK_FILE_URL), getResultsUrl: jest.fn().mockResolvedValue(MOCK_FILE_URL), bulkPayOut: jest.fn().mockResolvedValue(true), + getBalance: jest.fn().mockResolvedValue(BigNumber.from(10)), })), }, StorageClient: jest.fn().mockImplementation(() => ({ @@ -271,6 +272,32 @@ describe('WebhookService', () => { expect(await webhookService.processPendingCronJob()).toBe(true); }); + + it('should update the webhook entity to Paid status if the balance is zero', async () => { + webhookRepository.findOne = jest.fn().mockResolvedValue(webhookEntity); + webhookRepository.updateOne = jest.fn().mockResolvedValue(true); + + StorageClient.downloadFileFromUrl = jest + .fn() + .mockReturnValueOnce(fortuneManifest); + jest + .spyOn(webhookService, 'processFortune') + .mockResolvedValue(results as any); + + (EscrowClient.build as any).mockImplementation(() => ({ + getIntermediateResultsUrl: jest.fn().mockResolvedValue(MOCK_FILE_URL), + getManifestUrl: jest.fn().mockResolvedValue(MOCK_FILE_URL), + getResultsUrl: jest.fn().mockResolvedValue(MOCK_FILE_URL), + bulkPayOut: jest.fn().mockResolvedValue(true), + getBalance: jest.fn().mockResolvedValue(BigNumber.from(0)), + })); + + expect(await webhookService.processPendingCronJob()).toBe(true); + expect(webhookRepository.updateOne).toHaveBeenCalledWith( + { id: 1 }, + expect.objectContaining({ status: WebhookStatus.PAID }), + ); + }); }); describe('handleWebhookError', () => { @@ -486,6 +513,7 @@ describe('WebhookService', () => { getRecordingOracleAddress: jest .fn() .mockResolvedValue(MOCK_RECORDING_ORACLE_ADDRESS), + complete: jest.fn().mockResolvedValue(true), })); jest.spyOn(reputationService, 'increaseReputation'); @@ -537,6 +565,7 @@ describe('WebhookService', () => { getRecordingOracleAddress: jest .fn() .mockResolvedValue(MOCK_RECORDING_ORACLE_ADDRESS), + complete: jest.fn().mockResolvedValue(true), })); jest.spyOn(reputationService, 'increaseReputation');