From 3f795b7dc95dbb9eb1845acd0493d35def113ec4 Mon Sep 17 00:00:00 2001 From: aahoogendoorn Date: Sun, 9 Jul 2023 12:22:18 +0200 Subject: [PATCH] fix(easy): improved the ApiGateway get() function, to now consider all props from meta. --- packages/easy/src/services/ApiGateway.ts | 12 ++---------- packages/easy/test/services/ApiGateway.test.ts | 18 +++++++++++++----- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/packages/easy/src/services/ApiGateway.ts b/packages/easy/src/services/ApiGateway.ts index fa9868ce1..c44e030a7 100644 --- a/packages/easy/src/services/ApiGateway.ts +++ b/packages/easy/src/services/ApiGateway.ts @@ -1,5 +1,5 @@ import { Api, RouteOptions } from './Api'; -import { FetchOptions, Filter, Gateway, Json, Optional, PageList, toPageList, Uri } from '../types'; +import { FetchOptions, Filter, Gateway, Json, Optional, PageList, toPageList, Uri, use } from "../types"; import { RequestOptions, toPageOptions } from '../http'; export class ApiGateway extends Gateway { @@ -8,15 +8,7 @@ export class ApiGateway extends Gateway { } get(uri: Uri, options?: RouteOptions): Promise> { - return this.api.get(uri, options).then(r => - toPageList( - r.body.data?.items, - toPageOptions(options) && { - total: r.body.data?.totalItems, - filters: r.body.data?.meta?.filters as Filter[], - } - ) - ); + return this.api.get(uri, options).then(r => use(r.body.data, d => toPageList(d?.items, {total: d?.totalItems, ...d?.meta}))); } getOne(uri: Uri, options?: RouteOptions): Promise> { diff --git a/packages/easy/test/services/ApiGateway.test.ts b/packages/easy/test/services/ApiGateway.test.ts index 159d4272c..61ac28ab5 100644 --- a/packages/easy/test/services/ApiGateway.test.ts +++ b/packages/easy/test/services/ApiGateway.test.ts @@ -26,16 +26,24 @@ describe('ApiGateway', () => { const filters = [{ field: 'A', values: [{ value: 1 }, { value: 2 }] }]; const sorts = ['alpha-asc', 'alpha-desc']; - test('get calls api correctly with options (but missing sorts)', async () => { - api.get = mock.resolve({ body: {data: { totalItems: 42, items: [{id: 1, name: 'Sander'}], meta: { filters, sorts, skip: 0, take: 250 }}}}); + test('get calls api correctly with no options but with totalItems', async () => { + api.get = mock.resolve({ body: {data: { totalItems: 42, items: [{id: 1, name: 'Sander'}]}}}); const pl = await gateway.get(DevUri.Developers, {skip: 0, take: 5}); expect(pl).toHaveLength(1); expect(pl[0].name).toBe('Sander'); expect(pl.total).toBe(42); - expect(pl.skip).toBe(0); - expect(pl.take).toBe(250); + expect(pl.filters).toBeUndefined(); + expect(pl.sorts).toBeUndefined(); + }); + + test('get calls api correctly with options', async () => { + api.get = mock.resolve({ body: {data: { totalItems: 42, items: [{id: 1, name: 'Sander'}], meta: { filters, total: 41, sorts, skip: 0, take: 250 }}}}); + const pl = await gateway.get(DevUri.Developers, {skip: 0, take: 5}); + expect(pl).toHaveLength(1); + expect(pl[0].name).toBe('Sander'); + expect(pl.total).toBe(41); expect(pl.filters).toStrictEqual(filters); - // expect(pl.sorts).toStrictEqual(sorts); + expect(pl.sorts).toStrictEqual(sorts); }); test('post calls api correctly', async () => {