From 91767ddc5442226896d52e83b01824b988ac15fe Mon Sep 17 00:00:00 2001 From: Julien Date: Wed, 26 Jun 2024 17:11:16 +0200 Subject: [PATCH 1/3] feat(visitsApi): make use of limit query param Signed-off-by: Julien --- plugins/home/src/api/VisitsStorageApi.test.ts | 48 +++++++++++++++---- plugins/home/src/api/VisitsStorageApi.ts | 4 +- 2 files changed, 41 insertions(+), 11 deletions(-) diff --git a/plugins/home/src/api/VisitsStorageApi.test.ts b/plugins/home/src/api/VisitsStorageApi.test.ts index e361c624b9..5e8bc2dbfc 100644 --- a/plugins/home/src/api/VisitsStorageApi.test.ts +++ b/plugins/home/src/api/VisitsStorageApi.test.ts @@ -134,11 +134,25 @@ describe('VisitsStorageApi.create', () => { let visitsToSave: Array>; let baseDate: number; + const fillVisitsApi = () => { + baseDate = Date.now(); + // Chaining items to ensure the right setSystemTime + return visitsToSave.reduce( + (acc, visit, index) => + acc.then(() => { + jest.setSystemTime(baseDate + 360_000 * index); + return api.save({ visit }); + }), + Promise.resolve({}), + ); + }; + beforeEach(() => { api = VisitsStorageApi.create({ storageApi: MockStorageApi.create(), identityApi: mockIdentityApi, }); + visitsToSave = [ { pathname: '/catalog/default/component/playback-order-1', @@ -156,16 +170,8 @@ describe('VisitsStorageApi.create', () => { name: 'Playback Order Odd', }, ]; - baseDate = Date.now(); - // Chaining items to ensure the right setSystemTime - return visitsToSave.reduce( - (acc, visit, index) => - acc.then(() => { - jest.setSystemTime(baseDate + 360_000 * index); - return api.save({ visit }); - }), - Promise.resolve({}), - ); + + return fillVisitsApi(); }); it('retrieves visits', async () => { @@ -335,5 +341,27 @@ describe('VisitsStorageApi.create', () => { expect(visits).toHaveLength(1); expect(visits).toEqual([expect.objectContaining(visitsToSave[0])]); }); + + it('retrieves a limited set of visits according to given limit', async () => { + const visits = await api.list({ + limit: 2, + }); + expect(visitsToSave.length).toBeGreaterThan(2); + expect(visits.length).toEqual(2); + }); + + it('retrieves a default set of 8 visits', async () => { + visitsToSave = Array.from({ length: 9 }, (_, index) => ({ + pathname: `/catalog/default/component/playback-order-${index}`, + entityRef: `component:default/playback-order-${index}`, + name: `Playback Order ${index}`, + })); + + await fillVisitsApi(); + + const visits = await api.list(); + expect(visitsToSave.length).toBeGreaterThan(8); + expect(visits.length).toEqual(8); + }); }); }); diff --git a/plugins/home/src/api/VisitsStorageApi.ts b/plugins/home/src/api/VisitsStorageApi.ts index a7cd063455..ca19dcbdf1 100644 --- a/plugins/home/src/api/VisitsStorageApi.ts +++ b/plugins/home/src/api/VisitsStorageApi.ts @@ -30,6 +30,8 @@ export type VisitsStorageApiOptions = { type ArrayElement = A extends readonly (infer T)[] ? T : never; +const DEFAULT_LIST_LIMIT = 8; + /** * @public * This is an implementation of VisitsApi that relies on a StorageApi. @@ -83,7 +85,7 @@ export class VisitsStorageApi implements VisitsApi { }); }); - return visits; + return visits.slice(0, queryParams?.limit ?? DEFAULT_LIST_LIMIT); } /** From 9893bb52a48caffb0ebd188d587c8de238855dc7 Mon Sep 17 00:00:00 2001 From: Julien Date: Wed, 26 Jun 2024 17:11:40 +0200 Subject: [PATCH 2/3] chore: add changeset Signed-off-by: Julien --- .changeset/olive-walls-wave.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/olive-walls-wave.md diff --git a/.changeset/olive-walls-wave.md b/.changeset/olive-walls-wave.md new file mode 100644 index 0000000000..bc6264bbcb --- /dev/null +++ b/.changeset/olive-walls-wave.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-home': minor +--- + +**BREAKING** Implement usage of unused `limit` query param in visits API `.list()` function From 2001ff8aee8f37d80436feac89ca0500759424de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Fri, 20 Sep 2024 12:56:06 +0200 Subject: [PATCH 3/3] Update .changeset/olive-walls-wave.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .changeset/olive-walls-wave.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/olive-walls-wave.md b/.changeset/olive-walls-wave.md index bc6264bbcb..f7dc5434a6 100644 --- a/.changeset/olive-walls-wave.md +++ b/.changeset/olive-walls-wave.md @@ -2,4 +2,4 @@ '@backstage/plugin-home': minor --- -**BREAKING** Implement usage of unused `limit` query param in visits API `.list()` function +**BREAKING** Implement usage of unused `limit` query parameter in visits API `.list()` function