UNPKG

contensis-delivery-api

Version:

Client for retrieving content using the read-only Contensis Delivery API

985 lines (831 loc) 40.3 kB
import * as Contensis from '../index'; import { QueryAggregations, toQuery } from 'contensis-core-api'; import fetch from 'cross-fetch'; import { ExpressionTimePrecisionEnum as TimePrecision } from 'contensis-core-api/lib/models/search/ExpressionTimePrecision'; import { FreeTextSearchOperatorTypeEnum } from 'contensis-core-api/lib/models/search/FreeTextSearchOperatorType'; import { getDefaultConfigForAccessToken, getDefaultFetchRequestForAccessToken, setDefaultSpyForAccessToken } from '../specs-utils.spec'; const Zengenti = { Contensis }; const global = window || this; global.fetch = fetch; describe('Entry Operations', function () { describe('Get entry', () => { beforeEach(() => { setDefaultSpyForAccessToken(global); Zengenti.Contensis.Client.defaultClientConfig = null; Zengenti.Contensis.Client.configure({ fetchFn: global.fetch }); }); it('Get Live Version', async () => { let client = Zengenti.Contensis.Client.create(getDefaultConfigForAccessToken()); let entry = await client.entries.get('1'); expect(global.fetch).toHaveBeenCalled(); expect((global.fetch as any).calls.mostRecent().args).toEqual([ 'http://my-website.com/api/delivery/projects/myProject/entries/1?language=en-US', getDefaultFetchRequestForAccessToken() ]); expect(entry).not.toBeNull(); }); it('Get Preview Version', async () => { let client = Zengenti.Contensis.Client.create({ projectId: 'myProject', rootUrl: 'http://my-website.com/', language: 'en-US', versionStatus: 'latest', accessToken: 'XXXXXX' }); await client.entries.get('1'); expect(global.fetch).toHaveBeenCalled(); expect((global.fetch as any).calls.mostRecent().args).toEqual([ 'http://my-website.com/api/delivery/projects/myProject/entries/1?language=en-US&versionStatus=latest', getDefaultFetchRequestForAccessToken() ]); }); it('Get Default French Version', async () => { Zengenti.Contensis.Client.configure({ projectId: 'myProject', rootUrl: 'http://my-website.com/', language: 'fr-FR', versionStatus: 'published', accessToken: 'XXXXXX' }); let client = Zengenti.Contensis.Client.create(); await client.entries.get('1'); expect(global.fetch).toHaveBeenCalled(); expect((global.fetch as any).calls.mostRecent().args).toEqual([ 'http://my-website.com/api/delivery/projects/myProject/entries/1?language=fr-FR', getDefaultFetchRequestForAccessToken() ]); }); it('Get Specified French Version', async () => { let client = Zengenti.Contensis.Client.create({ projectId: 'myProject', rootUrl: 'http://my-website.com/', language: 'fr-FR', versionStatus: 'published', accessToken: 'XXXXXX' }); await client.entries.get('1'); expect(global.fetch).toHaveBeenCalled(); expect((global.fetch as any).calls.mostRecent().args).toEqual([ 'http://my-website.com/api/delivery/projects/myProject/entries/1?language=fr-FR', getDefaultFetchRequestForAccessToken() ]); }); it('Get Live Version with all options', async () => { let client = Zengenti.Contensis.Client.create(getDefaultConfigForAccessToken()); await client.entries.get({ id: '1', language: 'de', linkDepth: 99, fields: ['title'], fieldLinkDepths: { linkField: 1 } }); expect(global.fetch).toHaveBeenCalled(); expect((global.fetch as any).calls.mostRecent().args).toEqual([ 'http://my-website.com/api/delivery/projects/myProject/entries/1?fieldLinkDepths=%7B%22linkField%22%3A1%7D&fields=title&language=de&linkDepth=99', getDefaultFetchRequestForAccessToken(), ]); }); it('Get Live Version with minimal options', async () => { let client = Zengenti.Contensis.Client.create(getDefaultConfigForAccessToken()); await client.entries.get({ id: '1', language: '', linkDepth: 0, fields: [] }); expect(global.fetch).toHaveBeenCalled(); expect((global.fetch as any).calls.mostRecent().args).toEqual([ 'http://my-website.com/api/delivery/projects/myProject/entries/1?language=en-US', getDefaultFetchRequestForAccessToken() ]); }); it('Get Live Version with no options', async () => { let client = Zengenti.Contensis.Client.create({ projectId: 'myProject', rootUrl: 'http://my-website.com/', accessToken: 'XXXXXX' }); await client.entries.get({ id: '1' }); expect(global.fetch).toHaveBeenCalled(); expect((global.fetch as any).calls.mostRecent().args).toEqual([ 'http://my-website.com/api/delivery/projects/myProject/entries/1', getDefaultFetchRequestForAccessToken() ]); }); }); describe('List entries', () => { beforeEach(() => { setDefaultSpyForAccessToken(global); Zengenti.Contensis.Client.defaultClientConfig = null; Zengenti.Contensis.Client.configure({ fetchFn: global.fetch }); }); it('List By Content Type', async () => { let client = Zengenti.Contensis.Client.create(getDefaultConfigForAccessToken()); await client.entries.list('cheese'); expect(global.fetch).toHaveBeenCalled(); expect((global.fetch as any).calls.mostRecent().args).toEqual([ 'http://my-website.com/api/delivery/projects/myProject/contentTypes/cheese/entries?language=en-US&pageIndex=0&pageSize=25', getDefaultFetchRequestForAccessToken() ]); }); it('List Live Version', async () => { let client = Zengenti.Contensis.Client.create(getDefaultConfigForAccessToken()); await client.entries.list('cheese'); expect(global.fetch).toHaveBeenCalled(); expect((global.fetch as any).calls.mostRecent().args).toEqual([ 'http://my-website.com/api/delivery/projects/myProject/contentTypes/cheese/entries?language=en-US&pageIndex=0&pageSize=25', getDefaultFetchRequestForAccessToken() ]); }); it('List Preview Version', async () => { let client = Zengenti.Contensis.Client.create(getDefaultConfigForAccessToken('latest')); await client.entries.list('cheese'); expect(global.fetch).toHaveBeenCalled(); expect((global.fetch as any).calls.mostRecent().args).toEqual([ 'http://my-website.com/api/delivery/projects/myProject/contentTypes/cheese/entries?language=en-US&pageIndex=0&pageSize=25&versionStatus=latest', getDefaultFetchRequestForAccessToken() ]); }); it('List French Version', async () => { let client = Zengenti.Contensis.Client.create({ projectId: 'myProject', rootUrl: 'http://my-website.com/', language: 'fr-FR', versionStatus: 'published', accessToken: 'XXXXXX' }); await client.entries.list('cheese'); expect(global.fetch).toHaveBeenCalled(); expect((global.fetch as any).calls.mostRecent().args).toEqual([ 'http://my-website.com/api/delivery/projects/myProject/contentTypes/cheese/entries?language=fr-FR&pageIndex=0&pageSize=25', getDefaultFetchRequestForAccessToken() ]); }); it('List with all options', async () => { let client = Zengenti.Contensis.Client.create(getDefaultConfigForAccessToken()); await client.entries.list({ contentTypeId: 'cheese', pageOptions: { pageIndex: 5, pageSize: 100 }, language: 'en-GB', linkDepth: 1, order: ['title'], fields: ['title'], fieldLinkDepths: { linkField: 1 } }); expect(global.fetch).toHaveBeenCalled(); expect((global.fetch as any).calls.mostRecent().args).toEqual([ 'http://my-website.com/api/delivery/projects/myProject/contentTypes/cheese/entries?fieldLinkDepths=%7B%22linkField%22%3A1%7D&fields=title&language=en-GB&linkDepth=1&order=title&pageIndex=5&pageSize=100', getDefaultFetchRequestForAccessToken(), ]); }); it('List with minimal options', async () => { let client = Zengenti.Contensis.Client.create(getDefaultConfigForAccessToken()); await client.entries.list({ contentTypeId: '', linkDepth: 0, language: '', order: [], fields: [], pageOptions: {} }); expect(global.fetch).toHaveBeenCalled(); expect((global.fetch as any).calls.mostRecent().args).toEqual([ 'http://my-website.com/api/delivery/projects/myProject/entries?language=en-US&pageIndex=0&pageSize=25', getDefaultFetchRequestForAccessToken() ]); }); it('List with no options', async () => { let client = Zengenti.Contensis.Client.create({ projectId: 'myProject', rootUrl: 'http://my-website.com/', accessToken: 'XXXXXX' }); await client.entries.list({}); expect(global.fetch).toHaveBeenCalled(); expect((global.fetch as any).calls.mostRecent().args).toEqual([ 'http://my-website.com/api/delivery/projects/myProject/entries?pageIndex=0&pageSize=25', getDefaultFetchRequestForAccessToken() ]); }); it('List Paging Options', async () => { let client = Zengenti.Contensis.Client.create(getDefaultConfigForAccessToken()); await client.entries.list({ contentTypeId: 'cheese', pageOptions: { pageIndex: 5, pageSize: 100 } }); expect(global.fetch).toHaveBeenCalled(); expect((global.fetch as any).calls.mostRecent().args).toEqual([ 'http://my-website.com/api/delivery/projects/myProject/contentTypes/cheese/entries?language=en-US&pageIndex=5&pageSize=100', getDefaultFetchRequestForAccessToken() ]); }); it('List Specified French Version', async () => { let client = Zengenti.Contensis.Client.create(getDefaultConfigForAccessToken()); await client.entries.list({ contentTypeId: 'cheese', language: 'fr-FR' }); expect(global.fetch).toHaveBeenCalled(); expect((global.fetch as any).calls.mostRecent().args).toEqual([ 'http://my-website.com/api/delivery/projects/myProject/contentTypes/cheese/entries?language=fr-FR&pageIndex=0&pageSize=25', getDefaultFetchRequestForAccessToken() ]); }); it('List Specified French Version with Paging Options', async () => { let client = Zengenti.Contensis.Client.create(getDefaultConfigForAccessToken()); await client.entries.list({ contentTypeId: 'cheese', language: 'fr-FR', pageOptions: { pageIndex: 5, pageSize: 100 } }); expect(global.fetch).toHaveBeenCalled(); expect((global.fetch as any).calls.mostRecent().args).toEqual([ 'http://my-website.com/api/delivery/projects/myProject/contentTypes/cheese/entries?language=fr-FR&pageIndex=5&pageSize=100', getDefaultFetchRequestForAccessToken() ]); }); it('List Specified French Version with Paging Options but no Content Type', async () => { let client = Zengenti.Contensis.Client.create(getDefaultConfigForAccessToken()); await client.entries.list({ language: 'fr-FR', pageOptions: { pageIndex: 5, pageSize: 100 } }); expect(global.fetch).toHaveBeenCalled(); expect((global.fetch as any).calls.mostRecent().args).toEqual([ 'http://my-website.com/api/delivery/projects/myProject/entries?language=fr-FR&pageIndex=5&pageSize=100', getDefaultFetchRequestForAccessToken() ]); }); }); describe('Search entries', () => { beforeEach(() => { setDefaultSpyForAccessToken(global); Zengenti.Contensis.Client.defaultClientConfig = null; Zengenti.Contensis.Client.configure({ fetchFn: global.fetch }); }); it('Do Search - simple', async () => { let client = Zengenti.Contensis.Client.create(getDefaultConfigForAccessToken()); let orderBy: any = [{ asc: 'name' }, { desc: 'brewTypeCount' }]; let where: any = [{ field: 'brewTypeCount', greaterThan: 5 }, { field: 'Origin', in: ['Peru', 'Columbia'] }]; let query = { pageIndex: 1, pageSize: 50, orderBy, where }; await client.entries.search(query as any); expect(global.fetch).toHaveBeenCalled(); let expectedQueryString = toQuery({ ...query, orderBy: JSON.stringify(orderBy), where: JSON.stringify(where) }); expect((global.fetch as any).calls.mostRecent().args).toEqual([ `http://my-website.com/api/delivery/projects/myProject/entries/search${expectedQueryString}`, getDefaultFetchRequestForAccessToken('GET', 'application/json; charset=utf-8') ]); }); it('Do Search - multiple', async () => { let client = Zengenti.Contensis.Client.create(getDefaultConfigForAccessToken()); let orderBy: any = [{ asc: 'authorName' }]; let where: any = [{ field: 'authorName', startsWith: 'W' }]; let query = { pageIndex: 1, pageSize: 50, orderBy, where }; await client.entries.search(query as any); expect(global.fetch).toHaveBeenCalled(); let expectedQueryString = toQuery({ ...query, orderBy: JSON.stringify(orderBy), where: JSON.stringify(where), }); expect((global.fetch as any).calls.mostRecent().args).toEqual([ `http://my-website.com/api/delivery/projects/myProject/entries/search${expectedQueryString}`, getDefaultFetchRequestForAccessToken('GET', 'application/json; charset=utf-8') ]); }); it('Do Search with a link depth', async () => { let client = Zengenti.Contensis.Client.create(getDefaultConfigForAccessToken()); let orderBy: any = [{ asc: 'authorName' }]; let where: any = [{ field: 'authorName', startsWith: 'W' }]; let query = { pageIndex: 1, pageSize: 50, orderBy, where }; await client.entries.search(query as any, 99); expect(global.fetch).toHaveBeenCalled(); let expectedQueryString = toQuery({ ...query, orderBy: JSON.stringify(orderBy), where: JSON.stringify(where), linkDepth: 99 }); expect((global.fetch as any).calls.mostRecent().args).toEqual([ `http://my-website.com/api/delivery/projects/myProject/entries/search${expectedQueryString}`, getDefaultFetchRequestForAccessToken('GET', 'application/json; charset=utf-8') ]); }); it('Do Search with all options', async () => { let client = Zengenti.Contensis.Client.create(getDefaultConfigForAccessToken()); let orderBy: any = [{ asc: 'authorName' }]; let where: any = [{ field: 'authorName', startsWith: 'W' }]; let fieldLinkDepths: any = { linkField: 1 }; let aggregations: any = { tags: { field: 'testField' } }; let query = { pageIndex: 1, pageSize: 50, orderBy, where, fields: ['title'], fieldLinkDepths, aggregations }; await client.entries.search(query as any, 99); let expectedQueryString = toQuery({ ...query, orderBy: JSON.stringify(orderBy), where: JSON.stringify(where), linkDepth: 99, fieldLinkDepths: JSON.stringify(fieldLinkDepths), aggregations: JSON.stringify(aggregations) }); expect(global.fetch).toHaveBeenCalled(); expect((global.fetch as any).calls.mostRecent().args).toEqual([ `http://my-website.com/api/delivery/projects/myProject/entries/search${expectedQueryString}`, getDefaultFetchRequestForAccessToken('GET', 'application/json; charset=utf-8') ]); }); it('Do Search using the default Query instance', async () => { let client = Zengenti.Contensis.Client.create(getDefaultConfigForAccessToken()); let query = new Contensis.Query(); await client.entries.search(query); expect(global.fetch).toHaveBeenCalled(); let expectedQueryString = toQuery({ pageIndex: 0, pageSize: 20, where: JSON.stringify([]) }); expect((global.fetch as any).calls.mostRecent().args).toEqual([ `http://my-website.com/api/delivery/projects/myProject/entries/search${expectedQueryString}`, getDefaultFetchRequestForAccessToken('GET', 'application/json; charset=utf-8') ]); }); it('Do Search using a Query instance', async () => { let client = Zengenti.Contensis.Client.create(getDefaultConfigForAccessToken()); let query = new Contensis.Query(Contensis.Op.startsWith('authorName', 'W')); query.orderBy = Contensis.OrderBy.asc('authorName'); query.fields = ['title']; query.pageIndex = 1; query.pageSize = 50; await client.entries.search(query, 99); let expectedQueryString = toQuery({ fields: ['title'], linkDepth: 99, pageIndex: 1, pageSize: 50, orderBy: JSON.stringify([{ asc: 'authorName' }]), where: JSON.stringify([{ field: 'authorName', startsWith: 'W' }]) }); expect(global.fetch).toHaveBeenCalled(); expect((global.fetch as any).calls.mostRecent().args).toEqual([ `http://my-website.com/api/delivery/projects/myProject/entries/search${expectedQueryString}`, getDefaultFetchRequestForAccessToken('GET', 'application/json; charset=utf-8') ]); }); it('Do Search with aggregations using a Query instance', async () => { let client = Zengenti.Contensis.Client.create(getDefaultConfigForAccessToken()); let aggregations: QueryAggregations = { tags: { field: 'testField' } }; let query = new Contensis.Query(Contensis.Op.startsWith('authorName', 'W')); query.orderBy = Contensis.OrderBy.asc('authorName'); query.fields = ['title']; query.pageIndex = 1; query.pageSize = 50; query.aggregations = aggregations; await client.entries.search(query, 99); let expectedQueryString = toQuery({ fields: ['title'], linkDepth: 99, pageIndex: 1, pageSize: 50, orderBy: JSON.stringify([{ asc: 'authorName' }]), where: JSON.stringify([{ field: 'authorName', startsWith: 'W' }]), aggregations: JSON.stringify(aggregations) }); expect(global.fetch).toHaveBeenCalled(); expect((global.fetch as any).calls.mostRecent().args).toEqual([ `http://my-website.com/api/delivery/projects/myProject/entries/search${expectedQueryString}`, getDefaultFetchRequestForAccessToken('GET', 'application/json; charset=utf-8') ]); }); it('Do Search for distanceWithin', async () => { let client = Zengenti.Contensis.Client.create(getDefaultConfigForAccessToken()); let orderBy: any = [{ asc: 'authorName' }]; let where: any = [{ field: 'authorLocation', distanceWithin: { lat: 52.377, lon: -2.749, distance: '10mi' } }]; let query = { pageIndex: 1, pageSize: 50, orderBy, where }; await client.entries.search(query as any); let expectedQueryString = toQuery({ ...query, orderBy: JSON.stringify(orderBy), where: JSON.stringify(where) }); expect(global.fetch).toHaveBeenCalled(); expect((global.fetch as any).calls.mostRecent().args).toEqual([ `http://my-website.com/api/delivery/projects/myProject/entries/search${expectedQueryString}`, getDefaultFetchRequestForAccessToken('GET', 'application/json; charset=utf-8') ]); }); it('Do Search for distanceWithin using a Query instance', async () => { let client = Zengenti.Contensis.Client.create(getDefaultConfigForAccessToken()); let query = new Contensis.Query(Contensis.Op.distanceWithin('authorLocation', 52.377, -2.749, '10mi')); query.orderBy = Contensis.OrderBy.asc('authorName'); query.fields = ['title']; query.pageIndex = 1; query.pageSize = 50; await client.entries.search(query, 99); let expectedQueryString = toQuery({ pageIndex: 1, pageSize: 50, orderBy: JSON.stringify([{ asc: 'authorName' }]), where: JSON.stringify([{ field: 'authorLocation', distanceWithin: { lat: 52.377, lon: -2.749, distance: '10mi' } }]), fields: ['title'], linkDepth: 99 }); expect(global.fetch).toHaveBeenCalled(); expect((global.fetch as any).calls.mostRecent().args).toEqual([ `http://my-website.com/api/delivery/projects/myProject/entries/search${expectedQueryString}`, getDefaultFetchRequestForAccessToken('GET', 'application/json; charset=utf-8') ]); }); it('Do Search for non-fuzzy freeText', async () => { let client = Zengenti.Contensis.Client.create(getDefaultConfigForAccessToken()); let orderBy: any = [{ asc: 'authorName' }]; let where: any = [{ field: 'authorLocation', freeText: { term: 'term1' } }]; let query = { pageIndex: 1, pageSize: 50, orderBy, where }; await client.entries.search(query as any); let expectedQueryString = toQuery({ ...query, orderBy: JSON.stringify(orderBy), where: JSON.stringify(where) }); expect(global.fetch).toHaveBeenCalled(); expect((global.fetch as any).calls.mostRecent().args).toEqual([ `http://my-website.com/api/delivery/projects/myProject/entries/search${expectedQueryString}`, getDefaultFetchRequestForAccessToken('GET', 'application/json; charset=utf-8') ]); }); it('Do Search for fuzzy freeText', async () => { let client = Zengenti.Contensis.Client.create(getDefaultConfigForAccessToken()); let orderBy: any = [{ asc: 'authorName' }]; let where: any = [{ field: 'authorLocation', freeText: { term: 'term1', fuzzy: true, operator: 'or' } }]; let query = { pageIndex: 1, pageSize: 50, orderBy, where }; await client.entries.search(query as any); let expectedQueryString = toQuery({ ...query, orderBy: JSON.stringify(orderBy), where: JSON.stringify(where) }); expect(global.fetch).toHaveBeenCalled(); expect((global.fetch as any).calls.mostRecent().args).toEqual([ `http://my-website.com/api/delivery/projects/myProject/entries/search${expectedQueryString}`, getDefaultFetchRequestForAccessToken('GET', 'application/json; charset=utf-8') ]); }); it('Do Search non-fuzzy freeText using a Query instance', async () => { let client = Zengenti.Contensis.Client.create(getDefaultConfigForAccessToken()); let query = new Contensis.Query(Contensis.Op.freeText('description', 'term1')); query.orderBy = Contensis.OrderBy.asc('description'); query.fields = ['title']; query.pageIndex = 1; query.pageSize = 50; await client.entries.search(query, 99); let expectedQueryString = toQuery({ pageIndex: 1, pageSize: 50, orderBy: JSON.stringify([{ asc: 'description' }]), where: JSON.stringify([{ field: 'description', freeText: { term: 'term1', fuzzy: false, operator: FreeTextSearchOperatorTypeEnum.And } }]), fields: ['title'], linkDepth: 99 }); expect(global.fetch).toHaveBeenCalled(); expect((global.fetch as any).calls.mostRecent().args).toEqual([ `http://my-website.com/api/delivery/projects/myProject/entries/search${expectedQueryString}`, getDefaultFetchRequestForAccessToken('GET', 'application/json; charset=utf-8') ]); }); it('Do Search for fuzzy freeText using a Query instance', async () => { let client = Zengenti.Contensis.Client.create(getDefaultConfigForAccessToken()); let query = new Contensis.Query(Contensis.Op.freeText('description', 'term1', true, FreeTextSearchOperatorTypeEnum.Or)); query.orderBy = Contensis.OrderBy.asc('description'); query.fields = ['title']; query.pageIndex = 1; query.pageSize = 50; await client.entries.search(query, 99); let expectedQueryString = toQuery({ pageIndex: 1, pageSize: 50, orderBy: JSON.stringify([{ asc: 'description' }]), where: JSON.stringify([{ field: 'description', freeText: { term: 'term1', fuzzy: true, operator: FreeTextSearchOperatorTypeEnum.Or } }]), fields: ['title'], linkDepth: 99 }); expect(global.fetch).toHaveBeenCalled(); expect((global.fetch as any).calls.mostRecent().args).toEqual([ `http://my-website.com/api/delivery/projects/myProject/entries/search${expectedQueryString}`, getDefaultFetchRequestForAccessToken('GET', 'application/json; charset=utf-8') ]); }); it('Do Search with truncated dates using a Query instance', async () => { const { Client, Query, Op } = Contensis; const client = Client.create(getDefaultConfigForAccessToken()); const query = new Query( Op.between('exactDate', new Date('2026-02-09'), new Date('2026-02-09T23:59:59.999'), 'exact'), Op.lessThan('truncatedSeconds', '2026-02-10T00:59:59.999+01:00'), // TimePrecision.Minutes), Op.greaterThanOrEqualTo('truncatedMs', '2026-02-09T00:00:00.999', TimePrecision.Seconds), Op.greaterThan('nonDate', 6) ); query.pageIndex = 1; query.pageSize = 50; await client.entries.search(query, 99); const expectedQueryString = toQuery({ pageIndex: 1, pageSize: 50, where: JSON.stringify([{ field: 'exactDate', between: ['2026-02-09T00:00:00.000Z', '2026-02-09T23:59:59.999Z'] }, { field: 'truncatedSeconds', lessThan: '2026-02-09T23:59:00.000Z' }, { field: 'truncatedMs', greaterThanOrEqualTo: '2026-02-09T00:00:00.000Z' }, { field: 'nonDate', greaterThan: 6 }]), linkDepth: 99 }); expect(global.fetch).toHaveBeenCalled(); expect((global.fetch as any).calls.mostRecent().args).toEqual([ `http://my-website.com/api/delivery/projects/myProject/entries/search${expectedQueryString}`, getDefaultFetchRequestForAccessToken('GET', 'application/json; charset=utf-8') ]); }); it('Do Search with aggregations using a ZenqlQuery instance', async () => { let client = Zengenti.Contensis.Client.create(getDefaultConfigForAccessToken()); let zenqlQuery = new Contensis.ZenqlQuery('sys.contentTypeId = plant and sys.version.created >= startOfWeek()'); let aggregations: QueryAggregations = { tags: { field: 'testField' } }; zenqlQuery.fields = ['title']; zenqlQuery.pageIndex = 1; zenqlQuery.pageSize = 50; zenqlQuery.aggregations = aggregations; await client.entries.search(zenqlQuery, 99); let expectedQueryString = toQuery({ aggregations: JSON.stringify(aggregations), fields: ['title'], linkDepth: 99, pageIndex: 1, pageSize: 50, zenql: zenqlQuery.zenql }); expect(global.fetch).toHaveBeenCalled(); expect((global.fetch as any).calls.mostRecent().args).toEqual([ `http://my-website.com/api/delivery/projects/myProject/entries${expectedQueryString}`, getDefaultFetchRequestForAccessToken('GET', 'application/json; charset=utf-8') ]); }); it('Do Search using a ZenqlQuery instance', async () => { let client = Zengenti.Contensis.Client.create(getDefaultConfigForAccessToken()); let zenqlQuery = new Contensis.ZenqlQuery('sys.contentTypeId = plant and sys.version.created >= startOfWeek()'); zenqlQuery.fields = ['title']; zenqlQuery.pageIndex = 1; zenqlQuery.pageSize = 50; await client.entries.search(zenqlQuery, 99); let expectedQueryString = toQuery({ fields: ['title'], linkDepth: 99, pageIndex: 1, pageSize: 50, zenql: zenqlQuery.zenql }); expect(global.fetch).toHaveBeenCalled(); expect((global.fetch as any).calls.mostRecent().args).toEqual([ `http://my-website.com/api/delivery/projects/myProject/entries${expectedQueryString}`, getDefaultFetchRequestForAccessToken('GET', 'application/json; charset=utf-8') ]); }); it('Do Search using a ZenqlQuery string', async () => { let client = Zengenti.Contensis.Client.create(getDefaultConfigForAccessToken()); let zenqlQueryString = 'sys.contentTypeId = plant and sys.version.created >= startOfWeek()'; await client.entries.search(zenqlQueryString, 99); let expectedQueryString = toQuery({ linkDepth: 99, pageIndex: 0, pageSize: 20, zenql: zenqlQueryString }); expect(global.fetch).toHaveBeenCalled(); expect((global.fetch as any).calls.mostRecent().args).toEqual([ `http://my-website.com/api/delivery/projects/myProject/entries${expectedQueryString}`, getDefaultFetchRequestForAccessToken('GET', 'application/json; charset=utf-8') ]); }); }); describe('Entry Operations in IE browser', function () { beforeEach(() => { setDefaultSpyForAccessToken(global); Zengenti.Contensis.Client.defaultClientConfig = null; Zengenti.Contensis.Client.configure({ fetchFn: global.fetch }); (global.document as any).documentMode = 11; }); it('Do Search using an object with all options and url = 2083', async () => { let client = Zengenti.Contensis.Client.create(getDefaultConfigForAccessToken()); let orderBy: any = [{ asc: 'authorName' }]; // use string with length = 1792 let where: any = [{ field: 'authorName', startsWith: 'nXX8OFpCGJg0OJXfKRRoOk69tWiEfnqi2y5eElXQP1ZjTo0MsozSnWSJqdAvXefl0wmmELbyRArciCS4heXVw9XvYGqKsHM0X4eOxWpP8Otz8OoRApVGiPWeL6nzxblSDcP58qh8wkgUGWPHg21WGrgduYXpvFDdKnAwF1z6YKBMv7sOaVTHowp6mpzndOqUn6caURbF3Ob4ybumG1vl8BEvfwRjpjpAuULobQLN9pt31BoosToBWLdvrkDhSeNPLzltvMIBVGOVn97zWvdsuAg4wxznEz8rLvLK48hLdN4BJ3eWYkfhfk8TbUkDt82ZQwXCmdTpqP6ODPKRc4qkglAabHjUBwOzz9QCwxp7xeupfPWgDQlHCYHsKQ5X7xsWa5hl7RWpQXoajFhZoHomyvJxN9Q3kTccqeiVjzWN6BitsqCN8Kp4NJE7qFOzXSFn01NUv1Yqb8LpoxZ0lMcy1aWtOtdOtnjBLncS6iFR4IVuogl2Z8eJ7aDCdubM7OODjwtQqUSqnZGmsraC8WTxsmXDLIsTz4w2paulihOl2jaxtIRCO4TKGUX9m5MOHa1YPqJYQ8ettJj120uek2fk8bMAg9ykT0TDsmfzy33yfc6rz0nuBK40FGLJefNsYF7iTbLS5QAKiErSlRmTTCtGNK8pVxDpbNOoovXS4KcpSGmVxSotUvhBKDHuQy5ise8RQgCKyD67Z8FiAboqgo0nUe7nNNdL6Gmwesa5JISPVxkcgcWddYvX28TsjE5aLGZX7B8luxlQpRZ0xXBhkyCVobWPTu1W2ZltbpxcK8tdkrYaOGZXpGOTfeXChw11eccepN3MsJDBaghvfeSUgu6sEcpwy3kORPIYxhVaC1UI4r6xRRu8aXMDDTQQW7JhPIXKfQgoEbjxSVp9nHMCQDZpqBK0Z8bejfjnavlTS90ZNVPuDrqL0XEWcbg6d5ARJUl6VWWLJzktH5Jp1WuQoPrl5lb0mXm5bhW61EXK2LLmGPCafkksGsDjSqOOgD5eIttQvwuA1b9Czbs7Zzlub3sbHJ00e0hsoZwx2cJVWbP5PBRDwGtcj25fnY0s8FcSO59669R7gShdTR5jfWtk5VKKnTimosZ4bRscGL8if1Wx0Mvapbl3AubcOJm03HngzgHgjLUpM1UrPAyCn8kxwdx6ROw9e02ssMgAkoh9B9mecXFgl9TqxlG5jSbXQtvNiLWzSUnqeugCXcl2O6fhpnKCNpIW6PoAI1mbwBK5qxumQMKqKix964TOiCWfWUNnOBkcXVPVzzqPA1yLNn87KgVuODm9VpZnnoHSbnAzeLGb7vTZb1ITOP8MNnAPWrvlqvypjMtkLLtZg2r7nGEHLMD76ELxzKC3Zg269m3EW47wPKam9HuWMGjqnD0BghH5zlnRRxHVNgg5JZI5URcgGa6LfXh4zymO2xqSql1YAltvO7lHaIEnF2edze6KvEFJj1smsn57AWsEqs85zYg6MxkctOcQ0lxqv6s9y7Z7pcWbU0k8pmccUm3EDUideWwDnoftuUwIGVfnJrpZn7ihhVzEOB8ojbuGrO41mHZNa8tSlXz6cfg2LXRrRgWRFBMdkswg73HmVaDuvbF2LkwFjoPweHuh62uQb88gOg2Hbbip9212Mnx9gzed81bIRS5yvODYk50LJ7o9zkv3WPGIekAnMJgDVCBsekNxnR3XR0jMCLZx4t73Hm93vb7T8uzyylrbJz2BWyk1EpZ22uynFyIitDpAYHe483oeYwhfKfJPdKjaYsYZAM1ZKdfwK5o0vaRW' }]; let aggregations: QueryAggregations = { tags: { field: 'testField' } }; let query = { pageIndex: 1, pageSize: 50, orderBy, where, fields: ['title'], aggregations }; await client.entries.search(query as any, 99); let expectedQueryString = toQuery({ ...query, aggregations: JSON.stringify(aggregations), orderBy: JSON.stringify(orderBy), where: JSON.stringify(where), linkDepth: 99 }); expect(global.fetch).toHaveBeenCalled(); expect((global.fetch as any).calls.mostRecent().args).toEqual([ `http://my-website.com/api/delivery/projects/myProject/entries/search${expectedQueryString}`, getDefaultFetchRequestForAccessToken('GET', 'application/json; charset=utf-8') ]); }); it('Do Search using an object with all options and url > 2083', async () => { let client = Zengenti.Contensis.Client.create(getDefaultConfigForAccessToken()); let orderBy: any = [{ asc: 'authorName' }]; // use string with length = 1793 let where: any = [{ field: 'authorName', startsWith: '1nXX8OFpCGJg0OJXfKRRoOk69tWiEfnqi2y5eElXQP1ZjTo0MsozSnWSJqdAvXefl0wmmELbyRArciCS4heXVw9XvYGqKsHM0X4eOxWpP8Otz8OoRApVGiPWeL6nzxblSDcP58qh8wkgUGWPHg21WGrgduYXpvFDdKnAwF1z6YKBMv7sOaVTHowp6mpzndOqUn6caURbF3Ob4ybumG1vl8BEvfwRjpjpAuULobQLN9pt31BoosToBWLdvrkDhSeNPLzltvMIBVGOVn97zWvdsuAg4wxznEz8rLvLK48hLdN4BJ3eWYkfhfk8TbUkDt82ZQwXCmdTpqP6ODPKRc4qkglAabHjUBwOzz9QCwxp7xeupfPWgDQlHCYHsKQ5X7xsWa5hl7RWpQXoajFhZoHomyvJxN9Q3kTccqeiVjzWN6BitsqCN8Kp4NJE7qFOzXSFn01NUv1Yqb8LpoxZ0lMcy1aWtOtdOtnjBLncS6iFR4IVuogl2Z8eJ7aDCdubM7OODjwtQqUSqnZGmsraC8WTxsmXDLIsTz4w2paulihOl2jaxtIRCO4TKGUX9m5MOHa1YPqJYQ8ettJj120uek2fk8bMAg9ykT0TDsmfzy33yfc6rz0nuBK40FGLJefNsYF7iTbLS5QAKiErSlRmTTCtGNK8pVxDpbNOoovXS4KcpSGmVxSotUvhBKDHuQy5ise8RQgCKyD67Z8FiAboqgo0nUe7nNNdL6Gmwesa5JISPVxkcgcWddYvX28TsjE5aLGZX7B8luxlQpRZ0xXBhkyCVobWPTu1W2ZltbpxcK8tdkrYaOGZXpGOTfeXChw11eccepN3MsJDBaghvfeSUgu6sEcpwy3kORPIYxhVaC1UI4r6xRRu8aXMDDTQQW7JhPIXKfQgoEbjxSVp9nHMCQDZpqBK0Z8bejfjnavlTS90ZNVPuDrqL0XEWcbg6d5ARJUl6VWWLJzktH5Jp1WuQoPrl5lb0mXm5bhW61EXK2LLmGPCafkksGsDjSqOOgD5eIttQvwuA1b9Czbs7Zzlub3sbHJ00e0hsoZwx2cJVWbP5PBRDwGtcj25fnY0s8FcSO59669R7gShdTR5jfWtk5VKKnTimosZ4bRscGL8if1Wx0Mvapbl3AubcOJm03HngzgHgjLUpM1UrPAyCn8kxwdx6ROw9e02ssMgAkoh9B9mecXFgl9TqxlG5jSbXQtvNiLWzSUnqeugCXcl2O6fhpnKCNpIW6PoAI1mbwBK5qxumQMKqKix964TOiCWfWUNnOBkcXVPVzzqPA1yLNn87KgVuODm9VpZnnoHSbnAzeLGb7vTZb1ITOP8MNnAPWrvlqvypjMtkLLtZg2r7nGEHLMD76ELxzKC3Zg269m3EW47wPKam9HuWMGjqnD0BghH5zlnRRxHVNgg5JZI5URcgGa6LfXh4zymO2xqSql1YAltvO7lHaIEnF2edze6KvEFJj1smsn57AWsEqs85zYg6MxkctOcQ0lxqv6s9y7Z7pcWbU0k8pmccUm3EDUideWwDnoftuUwIGVfnJrpZn7ihhVzEOB8ojbuGrO41mHZNa8tSlXz6cfg2LXRrRgWRFBMdkswg73HmVaDuvbF2LkwFjoPweHuh62uQb88gOg2Hbbip9212Mnx9gzed81bIRS5yvODYk50LJ7o9zkv3WPGIekAnMJgDVCBsekNxnR3XR0jMCLZx4t73Hm93vb7T8uzyylrbJz2BWyk1EpZ22uynFyIitDpAYHe483oeYwhfKfJPdKjaYsYZAM1ZKdfwK5o0vaRW' }]; let aggregations: QueryAggregations = { tags: { field: 'testField' } }; let query = { pageIndex: 1, pageSize: 50, orderBy, where, fields: ['title'], fieldLinkDepths: { linkField: 1 }, aggregations, }; await client.entries.search(query as any, 99); let expectedQueryString = toQuery({ fieldLinkDepths: JSON.stringify(query.fieldLinkDepths), linkDepth: 99 }); delete query.fieldLinkDepths; // we don't want this in the POST body expect(global.fetch).toHaveBeenCalled(); expect((global.fetch as any).calls.mostRecent().args).toEqual([ `http://my-website.com/api/delivery/projects/myProject/entries/search${expectedQueryString}`, getDefaultFetchRequestForAccessToken('POST', 'application/json; charset=utf-8', false, JSON.stringify(query)) ]); }); it('Do Search using a Query instance and url = 2083', async () => { let client = Zengenti.Contensis.Client.create(getDefaultConfigForAccessToken()); // use string with length = 1792 const startsWithText = 'nXX8OFpCGJg0OJXfKRRoOk69tWiEfnqi2y5eElXQP1ZjTo0MsozSnWSJqdAvXefl0wmmELbyRArciCS4heXVw9XvYGqKsHM0X4eOxWpP8Otz8OoRApVGiPWeL6nzxblSDcP58qh8wkgUGWPHg21WGrgduYXpvFDdKnAwF1z6YKBMv7sOaVTHowp6mpzndOqUn6caURbF3Ob4ybumG1vl8BEvfwRjpjpAuULobQLN9pt31BoosToBWLdvrkDhSeNPLzltvMIBVGOVn97zWvdsuAg4wxznEz8rLvLK48hLdN4BJ3eWYkfhfk8TbUkDt82ZQwXCmdTpqP6ODPKRc4qkglAabHjUBwOzz9QCwxp7xeupfPWgDQlHCYHsKQ5X7xsWa5hl7RWpQXoajFhZoHomyvJxN9Q3kTccqeiVjzWN6BitsqCN8Kp4NJE7qFOzXSFn01NUv1Yqb8LpoxZ0lMcy1aWtOtdOtnjBLncS6iFR4IVuogl2Z8eJ7aDCdubM7OODjwtQqUSqnZGmsraC8WTxsmXDLIsTz4w2paulihOl2jaxtIRCO4TKGUX9m5MOHa1YPqJYQ8ettJj120uek2fk8bMAg9ykT0TDsmfzy33yfc6rz0nuBK40FGLJefNsYF7iTbLS5QAKiErSlRmTTCtGNK8pVxDpbNOoovXS4KcpSGmVxSotUvhBKDHuQy5ise8RQgCKyD67Z8FiAboqgo0nUe7nNNdL6Gmwesa5JISPVxkcgcWddYvX28TsjE5aLGZX7B8luxlQpRZ0xXBhkyCVobWPTu1W2ZltbpxcK8tdkrYaOGZXpGOTfeXChw11eccepN3MsJDBaghvfeSUgu6sEcpwy3kORPIYxhVaC1UI4r6xRRu8aXMDDTQQW7JhPIXKfQgoEbjxSVp9nHMCQDZpqBK0Z8bejfjnavlTS90ZNVPuDrqL0XEWcbg6d5ARJUl6VWWLJzktH5Jp1WuQoPrl5lb0mXm5bhW61EXK2LLmGPCafkksGsDjSqOOgD5eIttQvwuA1b9Czbs7Zzlub3sbHJ00e0hsoZwx2cJVWbP5PBRDwGtcj25fnY0s8FcSO59669R7gShdTR5jfWtk5VKKnTimosZ4bRscGL8if1Wx0Mvapbl3AubcOJm03HngzgHgjLUpM1UrPAyCn8kxwdx6ROw9e02ssMgAkoh9B9mecXFgl9TqxlG5jSbXQtvNiLWzSUnqeugCXcl2O6fhpnKCNpIW6PoAI1mbwBK5qxumQMKqKix964TOiCWfWUNnOBkcXVPVzzqPA1yLNn87KgVuODm9VpZnnoHSbnAzeLGb7vTZb1ITOP8MNnAPWrvlqvypjMtkLLtZg2r7nGEHLMD76ELxzKC3Zg269m3EW47wPKam9HuWMGjqnD0BghH5zlnRRxHVNgg5JZI5URcgGa6LfXh4zymO2xqSql1YAltvO7lHaIEnF2edze6KvEFJj1smsn57AWsEqs85zYg6MxkctOcQ0lxqv6s9y7Z7pcWbU0k8pmccUm3EDUideWwDnoftuUwIGVfnJrpZn7ihhVzEOB8ojbuGrO41mHZNa8tSlXz6cfg2LXRrRgWRFBMdkswg73HmVaDuvbF2LkwFjoPweHuh62uQb88gOg2Hbbip9212Mnx9gzed81bIRS5yvODYk50LJ7o9zkv3WPGIekAnMJgDVCBsekNxnR3XR0jMCLZx4t73Hm93vb7T8uzyylrbJz2BWyk1EpZ22uynFyIitDpAYHe483oeYwhfKfJPdKjaYsYZAM1ZKdfwK5o0vaRW'; let query = new Contensis.Query(Contensis.Op.startsWith('authorName', startsWithText)); let aggregations: QueryAggregations = { tags: { field: 'testField' } }; query.orderBy = Contensis.OrderBy.asc('authorName'); query.fields = ['title']; query.pageIndex = 1; query.pageSize = 50; query.aggregations = aggregations; await client.entries.search(query, 99); let expectedQueryString = toQuery({ aggregations: JSON.stringify(aggregations), fields: ['title'], linkDepth: 99, pageIndex: 1, pageSize: 50, where: JSON.stringify([{ field: 'authorName', startsWith: startsWithText }]), orderBy: JSON.stringify([{ asc: 'authorName' }]) }); expect(global.fetch).toHaveBeenCalled(); expect((global.fetch as any).calls.mostRecent().args).toEqual([ `http://my-website.com/api/delivery/projects/myProject/entries/search${expectedQueryString}`, getDefaultFetchRequestForAccessToken('GET', 'application/json; charset=utf-8') ]); }); it('Do Search using a Query instance and url > 2083', async () => { let client = Zengenti.Contensis.Client.create(getDefaultConfigForAccessToken()); // use string with length = 1793 const startsWithText = '1nXX8OFpCGJg0OJXfKRRoOk69tWiEfnqi2y5eElXQP1ZjTo0MsozSnWSJqdAvXefl0wmmELbyRArciCS4heXVw9XvYGqKsHM0X4eOxWpP8Otz8OoRApVGiPWeL6nzxblSDcP58qh8wkgUGWPHg21WGrgduYXpvFDdKnAwF1z6YKBMv7sOaVTHowp6mpzndOqUn6caURbF3Ob4ybumG1vl8BEvfwRjpjpAuULobQLN9pt31BoosToBWLdvrkDhSeNPLzltvMIBVGOVn97zWvdsuAg4wxznEz8rLvLK48hLdN4BJ3eWYkfhfk8TbUkDt82ZQwXCmdTpqP6ODPKRc4qkglAabHjUBwOzz9QCwxp7xeupfPWgDQlHCYHsKQ5X7xsWa5hl7RWpQXoajFhZoHomyvJxN9Q3kTccqeiVjzWN6BitsqCN8Kp4NJE7qFOzXSFn01NUv1Yqb8LpoxZ0lMcy1aWtOtdOtnjBLncS6iFR4IVuogl2Z8eJ7aDCdubM7OODjwtQqUSqnZGmsraC8WTxsmXDLIsTz4w2paulihOl2jaxtIRCO4TKGUX9m5MOHa1YPqJYQ8ettJj120uek2fk8bMAg9ykT0TDsmfzy33yfc6rz0nuBK40FGLJefNsYF7iTbLS5QAKiErSlRmTTCtGNK8pVxDpbNOoovXS4KcpSGmVxSotUvhBKDHuQy5ise8RQgCKyD67Z8FiAboqgo0nUe7nNNdL6Gmwesa5JISPVxkcgcWddYvX28TsjE5aLGZX7B8luxlQpRZ0xXBhkyCVobWPTu1W2ZltbpxcK8tdkrYaOGZXpGOTfeXChw11eccepN3MsJDBaghvfeSUgu6sEcpwy3kORPIYxhVaC1UI4r6xRRu8aXMDDTQQW7JhPIXKfQgoEbjxSVp9nHMCQDZpqBK0Z8bejfjnavlTS90ZNVPuDrqL0XEWcbg6d5ARJUl6VWWLJzktH5Jp1WuQoPrl5lb0mXm5bhW61EXK2LLmGPCafkksGsDjSqOOgD5eIttQvwuA1b9Czbs7Zzlub3sbHJ00e0hsoZwx2cJVWbP5PBRDwGtcj25fnY0s8FcSO59669R7gShdTR5jfWtk5VKKnTimosZ4bRscGL8if1Wx0Mvapbl3AubcOJm03HngzgHgjLUpM1UrPAyCn8kxwdx6ROw9e02ssMgAkoh9B9mecXFgl9TqxlG5jSbXQtvNiLWzSUnqeugCXcl2O6fhpnKCNpIW6PoAI1mbwBK5qxumQMKqKix964TOiCWfWUNnOBkcXVPVzzqPA1yLNn87KgVuODm9VpZnnoHSbnAzeLGb7vTZb1ITOP8MNnAPWrvlqvypjMtkLLtZg2r7nGEHLMD76ELxzKC3Zg269m3EW47wPKam9HuWMGjqnD0BghH5zlnRRxHVNgg5JZI5URcgGa6LfXh4zymO2xqSql1YAltvO7lHaIEnF2edze6KvEFJj1smsn57AWsEqs85zYg6MxkctOcQ0lxqv6s9y7Z7pcWbU0k8pmccUm3EDUideWwDnoftuUwIGVfnJrpZn7ihhVzEOB8ojbuGrO41mHZNa8tSlXz6cfg2LXRrRgWRFBMdkswg73HmVaDuvbF2LkwFjoPweHuh62uQb88gOg2Hbbip9212Mnx9gzed81bIRS5yvODYk50LJ7o9zkv3WPGIekAnMJgDVCBsekNxnR3XR0jMCLZx4t73Hm93vb7T8uzyylrbJz2BWyk1EpZ22uynFyIitDpAYHe483oeYwhfKfJPdKjaYsYZAM1ZKdfwK5o0vaRW'; let query = new Contensis.Query(Contensis.Op.startsWith('authorName', startsWithText)); query.orderBy = Contensis.OrderBy.asc('authorName'); query.fields = ['title']; query.pageIndex = 1; query.pageSize = 50; query.aggregations = { tags: { field: 'testField' } }; await client.entries.search(query, 99); expect(global.fetch).toHaveBeenCalled(); expect((global.fetch as any).calls.mostRecent().args).toEqual([ `http://my-website.com/api/delivery/projects/myProject/entries/search?linkDepth=99`, getDefaultFetchRequestForAccessToken('POST', 'application/json; charset=utf-8', false, JSON.stringify(query)) ]); }); }); });