From 951bf26ab549fe0035efb312718b5cf7a39f7d47 Mon Sep 17 00:00:00 2001 From: Richard Sustek Date: Mon, 31 Jul 2023 11:51:40 +0200 Subject: [PATCH] Squashed commit of the following: commit 7ee822892dd7ff6eaa27a234df12820d6f88a049 Author: Nicholas Margaritondo Date: Tue May 23 10:18:59 2023 -0500 LanguageParameter and processDefaultCodename now check for valid codename. Added automated tests for default language param overwrite --- lib/models/common/parameters.ts | 14 +++++++++-- lib/query/common/base-query.class.ts | 6 ++--- .../url/item-url-parameters.spec.ts | 25 ++++++++++++++++++- 3 files changed, 39 insertions(+), 6 deletions(-) diff --git a/lib/models/common/parameters.ts b/lib/models/common/parameters.ts index 10da153a..4deb7b01 100644 --- a/lib/models/common/parameters.ts +++ b/lib/models/common/parameters.ts @@ -109,6 +109,7 @@ export namespace Parameters { if (!element) { throw Error(`Element specified in 'OrderParameter' is null or empty`); } + } getParam(): string { @@ -148,19 +149,28 @@ export namespace Parameters { } export class LanguageParameter implements IQueryParameter { + /** * Specifies language version to fetch * @constructor * @param {string} languageCodename - Codename of the language */ + codenameValidationRegExp = new RegExp(`language=[a-zA-Z_][a-zA-Z0-9_]{0,59}$`) + languageQueryString = `language=${this.languageCodename}` constructor(public languageCodename: string) { if (!languageCodename) { throw Error(`'LanguageParameter' must specify codename of the language`); } } - getParam(): string { - return `language=${this.languageCodename}`; + + + + getParam(): string{ + if(!this.languageQueryString.match(this.codenameValidationRegExp)){ + throw Error(`Invalid language codename`) + } + else return this.languageQueryString } } } diff --git a/lib/query/common/base-query.class.ts b/lib/query/common/base-query.class.ts index 6ecb128f..20cc6292 100644 --- a/lib/query/common/base-query.class.ts +++ b/lib/query/common/base-query.class.ts @@ -1,14 +1,14 @@ import { IHeader, IQueryParameter } from '@kontent-ai/core-sdk'; import { IDeliveryClientConfig } from '../../config'; -import { IDeliveryNetworkResponse, IKontentResponse, IQueryConfig, Parameters } from '../../models'; +import { IDeliveryNetworkResponse, IKontentResponse, IQueryConfig, Parameters} from '../../models'; import { QueryService } from '../../services'; + export abstract class BaseQuery { protected parameters: IQueryParameter[] = []; protected customUrl?: string; protected abstract _queryConfig: TQueryConfig; - constructor(protected config: IDeliveryClientConfig, protected queryService: QueryService) {} /** @@ -119,7 +119,7 @@ export abstract class BaseQuery m.getParam() === 'language'); + const languageParameter = this.getParameters().find((m) => m.getParam().match(`language=[a-zA-Z_][a-zA-Z0-9_]{0,59}$`)); if (!languageParameter) { // language parameter was not specified in query, use globally defined language this.parameters.push(new Parameters.LanguageParameter(this.config.defaultLanguage)); diff --git a/test/browser/isolated-tests/url/item-url-parameters.spec.ts b/test/browser/isolated-tests/url/item-url-parameters.spec.ts index 9b686e87..012a35bc 100644 --- a/test/browser/isolated-tests/url/item-url-parameters.spec.ts +++ b/test/browser/isolated-tests/url/item-url-parameters.spec.ts @@ -2,7 +2,7 @@ import { Context, setup } from '../../setup'; describe('Item url parameters', () => { - const context = new Context(); + const context = new Context({defaultLanguage: 'default'}); setup(context); it(`includeTotalCount parameter should be set to true when used`, () => { @@ -174,5 +174,28 @@ describe('Item url parameters', () => { expect(param).toEqual('elem1[asc]'); }); + + it('defaultLanguage should set language parameter', ()=> { + const url = new URL( + context.deliveryClient.items() + .getUrl() + ); + const param = url.searchParams.get('language') + expect(param).toEqual('default') + }); + + it(`languageParameter should overwrite default language`, () => { + const url = new URL( + context.deliveryClient.items() + .languageParameter('es_ES') + .getUrl() + ); + + const param = url.searchParams.get('language') + expect(param).toEqual('es_ES') + + }); + + });