diff --git a/.changeset/great-cats-sit.md b/.changeset/great-cats-sit.md new file mode 100644 index 0000000000..abdf9cfb39 --- /dev/null +++ b/.changeset/great-cats-sit.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': patch +--- + +Fixes a bug to be able to utilize refresh keys after the entity is loaded from cache diff --git a/plugins/catalog-backend/src/modules/core/UrlReaderProcessor.test.ts b/plugins/catalog-backend/src/modules/core/UrlReaderProcessor.test.ts index ee68b2aa39..c372eb12a6 100644 --- a/plugins/catalog-backend/src/modules/core/UrlReaderProcessor.test.ts +++ b/plugins/catalog-backend/src/modules/core/UrlReaderProcessor.test.ts @@ -27,6 +27,7 @@ import { CatalogProcessorCache, CatalogProcessorEntityResult, CatalogProcessorErrorResult, + CatalogProcessorRefreshKeysResult, CatalogProcessorResult, } from '@backstage/plugin-catalog-node'; import { defaultEntityDataParser } from '../util/parse'; @@ -127,19 +128,25 @@ describe('UrlReaderProcessor', () => { mockCache.get.mockResolvedValue(cacheItem); const processor = new UrlReaderProcessor({ reader, logger }); - const generated = (await new Promise(emit => - processor.readLocation( - spec, - false, - emit, - defaultEntityDataParser, - mockCache, - ), - )) as CatalogProcessorEntityResult; + const emitted = new Array(); + await processor.readLocation( + spec, + false, + r => emitted.push(r), + defaultEntityDataParser, + mockCache, + ); + + const entity = emitted[0] as CatalogProcessorEntityResult; + const refresh = emitted[1] as CatalogProcessorRefreshKeysResult; + + expect(entity.type).toBe('entity'); + expect(entity.location).toEqual(spec); + expect(entity.entity).toEqual({ mock: 'entity' }); + + expect(refresh.type).toBe('refresh'); + expect(refresh.key).toBe('url:http://localhost/component.yaml'); - expect(generated.type).toBe('entity'); - expect(generated.location).toEqual(spec); - expect(generated.entity).toEqual({ mock: 'entity' }); expect(mockCache.get).toBeCalledWith('v1'); expect(mockCache.get).toBeCalledTimes(1); expect(mockCache.set).toBeCalledTimes(0); diff --git a/plugins/catalog-backend/src/modules/core/UrlReaderProcessor.ts b/plugins/catalog-backend/src/modules/core/UrlReaderProcessor.ts index 0ecd6d5a42..b1b1f64fdc 100644 --- a/plugins/catalog-backend/src/modules/core/UrlReaderProcessor.ts +++ b/plugins/catalog-backend/src/modules/core/UrlReaderProcessor.ts @@ -102,6 +102,7 @@ export class UrlReaderProcessor implements CatalogProcessor { for (const parseResult of cacheItem.value) { emit(parseResult); } + emit(processingResult.refresh(`${location.type}:${location.target}`)); } else if (error.name === 'NotFoundError') { if (!optional) { emit(processingResult.notFoundError(location, message));