diff --git a/source/common/changes/@awssolutions/cdf-assetlibrary-client/fix_assetlibrary_handle_undefined_qs_params_2024-01-24-12-52.json b/source/common/changes/@awssolutions/cdf-assetlibrary-client/fix_assetlibrary_handle_undefined_qs_params_2024-01-24-12-52.json new file mode 100644 index 000000000..4e8b2dd25 --- /dev/null +++ b/source/common/changes/@awssolutions/cdf-assetlibrary-client/fix_assetlibrary_handle_undefined_qs_params_2024-01-24-12-52.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@awssolutions/cdf-assetlibrary-client", + "comment": "don't pass count and offset if they are undefined", + "type": "none" + } + ], + "packageName": "@awssolutions/cdf-assetlibrary-client" +} \ No newline at end of file diff --git a/source/common/changes/@awssolutions/cdf-assetlibrary/fix_assetlibrary_handle_undefined_qs_params_2024-01-24-12-52.json b/source/common/changes/@awssolutions/cdf-assetlibrary/fix_assetlibrary_handle_undefined_qs_params_2024-01-24-12-52.json new file mode 100644 index 000000000..51df9536b --- /dev/null +++ b/source/common/changes/@awssolutions/cdf-assetlibrary/fix_assetlibrary_handle_undefined_qs_params_2024-01-24-12-52.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@awssolutions/cdf-assetlibrary", + "comment": "properly handle undefined string for count and offset", + "type": "none" + } + ], + "packageName": "@awssolutions/cdf-assetlibrary" +} \ No newline at end of file diff --git a/source/packages/libraries/clients/assetlibrary-client/src/client/groups.lambda.service.ts b/source/packages/libraries/clients/assetlibrary-client/src/client/groups.lambda.service.ts index cdf716566..8d1e54e3c 100644 --- a/source/packages/libraries/clients/assetlibrary-client/src/client/groups.lambda.service.ts +++ b/source/packages/libraries/clients/assetlibrary-client/src/client/groups.lambda.service.ts @@ -126,8 +126,8 @@ export class GroupsLambdaService extends GroupsServiceBase implements GroupsServ .setQueryStringParameters({ template, state, - offset: `${offset}`, - count: `${count}`, + offset: offset ? `${offset}` : undefined, + count: count ? `${count}` : undefined, }) .setHeaders(super.buildHeaders(additionalHeaders)); @@ -149,8 +149,8 @@ export class GroupsLambdaService extends GroupsServiceBase implements GroupsServ .setPath(super.groupGroupMembersRelativeUrl(groupPath)) .setQueryStringParameters({ template, - offset: `${offset}`, - count: `${count}`, + offset: offset ? `${offset}` : undefined, + count: count ? `${count}` : undefined, }) .setHeaders(super.buildHeaders(additionalHeaders)); @@ -170,8 +170,8 @@ export class GroupsLambdaService extends GroupsServiceBase implements GroupsServ .setMethod('GET') .setPath(super.groupMembershipsRelativeUrl(groupPath)) .setQueryStringParameters({ - offset: `${offset}`, - count: `${count}`, + offset: offset ? `${offset}` : undefined, + count: count ? `${count}` : undefined, }) .setHeaders(super.buildHeaders(additionalHeaders)); diff --git a/source/packages/services/assetlibrary/src/groups/groups.full.service.spec.ts b/source/packages/services/assetlibrary/src/groups/groups.full.service.spec.ts index 7522c0246..9a07a4966 100644 --- a/source/packages/services/assetlibrary/src/groups/groups.full.service.spec.ts +++ b/source/packages/services/assetlibrary/src/groups/groups.full.service.spec.ts @@ -471,6 +471,16 @@ describe('GroupsService', () => { await instance.getMembers('agrouppath', TypeCategory.Group, 'testtemplate', 'active', 1); expect(mockedDao.listRelated).toBeCalledTimes(4); + // validate undefined string + await instance.getMembers( + 'agrouppath', + TypeCategory.Group, + 'testtemplate', + 'active', + 'undefined' as any + ); + expect(mockedDao.listRelated).toBeCalledTimes(5); + // validate errors with non-number string try { const result = await instance.getMembers( @@ -485,23 +495,7 @@ describe('GroupsService', () => { expect(err.name).toEqual('ArgumentError'); expect(err.message).toMatch('Invalid offset = something'); } - expect(mockedDao.listRelated).toBeCalledTimes(4); - - // validate errors with undefined string - try { - const result = await instance.getMembers( - 'agrouppath', - TypeCategory.Group, - 'testtemplate', - 'active', - 'undefined' as any - ); - fail(`Call should trigger an error. Got ${result}`); - } catch (err) { - expect(err.name).toEqual('ArgumentError'); - expect(err.message).toMatch('Invalid offset = undefined'); - } - expect(mockedDao.listRelated).toBeCalledTimes(4); + expect(mockedDao.listRelated).toBeCalledTimes(5); // validate errors with NaN try { @@ -517,7 +511,7 @@ describe('GroupsService', () => { expect(err.name).toEqual('ArgumentError'); expect(err.message).toMatch('Invalid offset = NaN'); } - expect(mockedDao.listRelated).toBeCalledTimes(4); + expect(mockedDao.listRelated).toBeCalledTimes(5); // validate errors with -1 try { @@ -535,6 +529,6 @@ describe('GroupsService', () => { 'Expected number `offset` to be greater than or equal to 0, got -1' ); } - expect(mockedDao.listRelated).toBeCalledTimes(4); + expect(mockedDao.listRelated).toBeCalledTimes(5); }); }); diff --git a/source/packages/services/assetlibrary/src/utils/typeUtils.service.spec.ts b/source/packages/services/assetlibrary/src/utils/typeUtils.service.spec.ts index 39ffab93b..5b2f417f6 100644 --- a/source/packages/services/assetlibrary/src/utils/typeUtils.service.spec.ts +++ b/source/packages/services/assetlibrary/src/utils/typeUtils.service.spec.ts @@ -25,6 +25,7 @@ describe('typeUtils', () => { { label: 'number as number', input: 1, expected: 1 }, { label: 'number as string', input: '1', expected: 1 }, { label: 'undefined', input: undefined, expected: 0 }, + { label: 'undefined as string', input: 'undefined', expected: 0 }, ]; offsetsAndExpectedSuccesses.forEach((metadata) => { @@ -62,6 +63,7 @@ describe('typeUtils', () => { { label: 'number as number', input: 1, expected: 1 }, { label: 'number as string', input: '1', expected: 1 }, { label: 'undefined', input: undefined, expected: 500 }, // default is five hundred + { label: 'undefined as string', input: 'undefined', expected: 500 }, // default is five hundred ]; countsAndExpectedSuccess.forEach((metadata) => { diff --git a/source/packages/services/assetlibrary/src/utils/typeUtils.ts b/source/packages/services/assetlibrary/src/utils/typeUtils.ts index af349670e..da2a4c4a8 100644 --- a/source/packages/services/assetlibrary/src/utils/typeUtils.ts +++ b/source/packages/services/assetlibrary/src/utils/typeUtils.ts @@ -35,15 +35,15 @@ export class TypeUtils { * range using ow base methods instead of owCheckOptionalNumber. */ public parseAndValidateOffsetAndCount( - offset?: number, - count?: number + offset?: number | string, + count?: number | string ): { offsetAsInt: number; countAsInt: number } { // use default count and offset if omitted - if (offset === undefined) { - offset = this.DEFAULT_PAGINATION_OFFSET; + if (offset === undefined || offset === 'undefined') { + offset = this.DEFAULT_PAGINATION_OFFSET.toString(); } - if (count === undefined) { - count = this.DEFAULT_PAGINATION_COUNT; + if (count === undefined || count === 'undefined') { + count = this.DEFAULT_PAGINATION_COUNT.toString(); } // do the previous parse int (which should be a )