contensis-delivery-api
Version:
Client for retrieving content using the read-only Contensis Delivery API
985 lines (831 loc) • 40.3 kB
text/typescript
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))
]);
});
});
});