diff --git a/packages/cli/src/controller/generate-controller.spec.ts b/packages/cli/src/controller/generate-controller.spec.ts index 0647314b13..ac9d84dca7 100644 --- a/packages/cli/src/controller/generate-controller.spec.ts +++ b/packages/cli/src/controller/generate-controller.spec.ts @@ -213,11 +213,11 @@ describe('CLI codegen:generate', () => { await expect( prepareInputFragments( 'function', - 'transFerfrom(address,address,uint256)', + 'transferFrom(address,address,uint256)', functionFragments, abiName ) - ).rejects.toThrow("'transFerfrom(address' is not a valid function on Erc721"); + ).rejects.toThrow("'transferFrom(address' is not a valid function on Erc721"); await expect( prepareInputFragments( 'function', diff --git a/packages/node-core/src/indexer/test.runner.spec.ts b/packages/node-core/src/indexer/test.runner.spec.ts index d1c75aba36..eab97bf82c 100644 --- a/packages/node-core/src/indexer/test.runner.spec.ts +++ b/packages/node-core/src/indexer/test.runner.spec.ts @@ -179,4 +179,27 @@ describe('TestRunner', () => { `\t\tattribute: "timestamp":\n\t\t\texpected: "1970-01-01T00:00:01.000Z"\n\t\t\tactual: "1970-01-01T00:00:01.001Z"\n` ); }); + + it('increments error if a block fails to be fetched', async () => { + const expectedEntity = { + _name: 'Entity1', + id: '1', + attr: 'value', + }; + const testMock = { + name: 'test1', + blockHeight: 1, + handler: 'handler1', + expectedEntities: [expectedEntity], + dependentEntities: [], + }; + + apiServiceMock.fetchBlocks = jest.fn().mockRejectedValue(new Error('Failed to fetch block')); + + const indexBlock = jest.fn().mockResolvedValue(undefined); + const res = await testRunner.runTest(testMock, sandboxMock, indexBlock); + + expect(res.failedTests).toBe(2); + expect(res.failedTestSummary?.failedAttributes[0]).toContain('Failed to fetch block'); + }); }); diff --git a/packages/node-core/src/indexer/test.runner.ts b/packages/node-core/src/indexer/test.runner.ts index a0db3f07d2..c2ba21691b 100644 --- a/packages/node-core/src/indexer/test.runner.ts +++ b/packages/node-core/src/indexer/test.runner.ts @@ -36,6 +36,24 @@ export class TestRunner { @Inject('IIndexerManager') protected readonly indexerManager: IIndexerManager ) {} + private async fetchBlock(height: number): Promise> { + try { + const [block] = await this.apiService.fetchBlocks([height]); + return block; + } catch (e: any) { + logger.warn(`Test: ${test.name} field due to fetch block error`, e); + this.failedTestSummary = { + testName: test.name, + entityId: undefined, + entityName: undefined, + failedAttributes: [`Fetch Block Error:\n${e.message}`], + }; + + this.failedTests++; + throw e; + } + } + async runTest( test: SubqlTest, sandbox: TestSandbox, @@ -55,7 +73,7 @@ export class TestRunner { try { // Fetch block logger.debug('Fetching block'); - const [block] = await this.apiService.fetchBlocks([test.blockHeight]); + const block = await this.fetchBlock(test.blockHeight); await this.storeService.setBlockHeader(block.getHeader()); // Ensure a block height is set so that data is flushed correctly diff --git a/packages/node-core/src/indexer/testing.service.ts b/packages/node-core/src/indexer/testing.service.ts index ee9cbbbae7..85d127d26e 100644 --- a/packages/node-core/src/indexer/testing.service.ts +++ b/packages/node-core/src/indexer/testing.service.ts @@ -58,12 +58,7 @@ export abstract class TestingService { abstract getTestRunner(): Promise<[close: () => Promise, runner: TestRunner]>; // TestRunner will be create with a new app instance - async indexBlock( - block: IBlock, - handler: string, - indexerManager: IIndexerManager, - apiService?: IApi[]> - ): Promise { + async indexBlock(block: IBlock, handler: string, indexerManager: IIndexerManager): Promise { await indexerManager.indexBlock(block, this.getDsWithHandler(handler)); } diff --git a/packages/node/CHANGELOG.md b/packages/node/CHANGELOG.md index f566f3eaf3..edd6bdba80 100644 --- a/packages/node/CHANGELOG.md +++ b/packages/node/CHANGELOG.md @@ -5,6 +5,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +### Fixed +- Testing not updating test results correctly if fetching block fails (#2716) ## [5.10.0] - 2025-03-05 ### Changed