Skip to content

Commit 4177d5d

Browse files
Merge pull request #165 from contentstack/feat/cs-43905-less-than
Feat/cs 43905 compare query operators
2 parents 2e41ccb + 40e7ba2 commit 4177d5d

File tree

3 files changed

+132
-0
lines changed

3 files changed

+132
-0
lines changed

src/lib/query.ts

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -371,4 +371,76 @@ export class Query extends BaseQuery {
371371
this._queryParams['typeahead'] = key
372372
return this
373373
}
374+
375+
/**
376+
* @method lessThan
377+
* @memberof Query
378+
* @description Returns the raw (JSON) query based on the filters applied on Query object.
379+
* @example
380+
* import contentstack from '@contentstack/delivery-sdk'
381+
*
382+
* const stack = contentstack.Stack({ apiKey: "apiKey", deliveryToken: "deliveryToken", environment: "environment" });
383+
* const query = stack.contentType('contenttype_uid').query().where('title', QueryOperation.EQUALS, 'value');
384+
* const entryQuery = await stack.contentType('contenttype_uid').query().lessThan('fieldUid', 'value').find();
385+
*
386+
* @returns {Query}
387+
*/
388+
lessThan(key: string, value: (string | number)): Query {
389+
this._parameters[key] = { '$lt': value };
390+
return this;
391+
}
392+
393+
/**
394+
* @method lessThanOrEqualTo
395+
* @memberof Query
396+
* @description Returns the raw (JSON) query based on the filters applied on Query object.
397+
* @example
398+
* import contentstack from '@contentstack/delivery-sdk'
399+
*
400+
* const stack = contentstack.Stack({ apiKey: "apiKey", deliveryToken: "deliveryToken", environment: "environment" });
401+
* const query = stack.contentType('contenttype_uid').query().where('title', QueryOperation.EQUALS, 'value');
402+
* const entryQuery = await stack.contentType('contenttype_uid').query().lessThanOrEqualTo('fieldUid', 'value').find();
403+
*
404+
* @returns {Query}
405+
*/
406+
lessThanOrEqualTo(key: string, value: (string | number)): Query {
407+
this._parameters[key] = { '$lte': value };
408+
return this;
409+
}
410+
411+
/**
412+
* @method greaterThan
413+
* @memberof Query
414+
* @description Returns the raw (JSON) query based on the filters applied on Query object.
415+
* @example
416+
* import contentstack from '@contentstack/delivery-sdk'
417+
*
418+
* const stack = contentstack.Stack({ apiKey: "apiKey", deliveryToken: "deliveryToken", environment: "environment" });
419+
* const query = stack.contentType('contenttype_uid').query().where('title', QueryOperation.EQUALS, 'value');
420+
* const entryQuery = await stack.contentType('contenttype_uid').query().greaterThan('fieldUid', 'value').find();
421+
*
422+
* @returns {Query}
423+
*/
424+
greaterThan(key: string, value: (string | number)): Query {
425+
this._parameters[key] = { '$gt': value };
426+
return this;
427+
}
428+
429+
/**
430+
* @method greaterThanOrEqualTo
431+
* @memberof Query
432+
* @description Returns the raw (JSON) query based on the filters applied on Query object.
433+
* @example
434+
* import contentstack from '@contentstack/delivery-sdk'
435+
*
436+
* const stack = contentstack.Stack({ apiKey: "apiKey", deliveryToken: "deliveryToken", environment: "environment" });
437+
* const query = stack.contentType('contenttype_uid').query().where('title', QueryOperation.EQUALS, 'value');
438+
* const entryQuery = await stack.contentType('contenttype_uid').query().greaterThanOrEqualTo('fieldUid', 'value').find();
439+
*
440+
* @returns {Query}
441+
*/
442+
greaterThanOrEqualTo(key: string, value: (string | number)): Query {
443+
this._parameters[key] = { '$gte': value };
444+
return this;
445+
}
374446
}

test/api/entry-queryables.spec.ts

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,50 @@ describe('Query Operators API test cases', () => {
187187
expect(query.entries[2].title).toBe('test2');
188188
}
189189
});
190+
191+
it('should get entries which is lessThan the fieldUid and values', async () => {
192+
const query = await makeEntries('contenttype_uid').query().lessThan('created_at', '2024-03-01T05:25:30.940Z').find<TEntry>()
193+
if (query.entries) {
194+
expect(query.entries.length).toBeGreaterThan(0);
195+
expect(query.entries[0]._version).toBeDefined();
196+
expect(query.entries[0].title).toBeDefined();
197+
expect(query.entries[0].uid).toBeDefined();
198+
expect(query.entries[0].created_at).toBeDefined();
199+
}
200+
});
201+
202+
it('should get entries which is lessThanOrEqualTo the fieldUid and values', async () => {
203+
const query = await makeEntries('contenttype_uid').query().lessThanOrEqualTo('created_at', '2024-03-01T05:25:30.940Z').find<TEntry>()
204+
if (query.entries) {
205+
expect(query.entries.length).toBeGreaterThan(0);
206+
expect(query.entries[0]._version).toBeDefined();
207+
expect(query.entries[0].title).toBeDefined();
208+
expect(query.entries[0].uid).toBeDefined();
209+
expect(query.entries[0].created_at).toBeDefined();
210+
}
211+
});
212+
213+
it('should get entries which is greaterThan the fieldUid and values', async () => {
214+
const query = await makeEntries('contenttype_uid').query().greaterThan('created_at', '2024-03-01T05:25:30.940Z').find<TEntry>()
215+
if (query.entries) {
216+
expect(query.entries.length).toBeGreaterThan(0);
217+
expect(query.entries[0]._version).toBeDefined();
218+
expect(query.entries[0].title).toBeDefined();
219+
expect(query.entries[0].uid).toBeDefined();
220+
expect(query.entries[0].created_at).toBeDefined();
221+
}
222+
});
223+
224+
it('should get entries which is greaterThanOrEqualTo the fieldUid and values', async () => {
225+
const query = await makeEntries('contenttype_uid').query().greaterThanOrEqualTo('created_at', '2024-03-01T05:25:30.940Z').find<TEntry>()
226+
if (query.entries) {
227+
expect(query.entries.length).toBeGreaterThan(0);
228+
expect(query.entries[0]._version).toBeDefined();
229+
expect(query.entries[0].title).toBeDefined();
230+
expect(query.entries[0].uid).toBeDefined();
231+
expect(query.entries[0].created_at).toBeDefined();
232+
}
233+
});
190234
});
191235

192236
function makeEntries(contentTypeUid = ''): Entries {

test/unit/entry-queryable.spec.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,4 +91,20 @@ describe('Query Operators API test cases', () => {
9191
expect(query._queryParams).toEqual({ desc: 'fieldUid' });
9292
}
9393
});
94+
it('should get entries which is lessThan the fieldUid and values', async () => {
95+
const query = contentType.Entry().query().lessThan('fieldUID', 'value');
96+
expect(query._parameters).toStrictEqual({'fieldUID': {'$lt': 'value'}});
97+
});
98+
it('should get entries which is lessThanOrEqualTo the fieldUid and values', async () => {
99+
const query = contentType.Entry().query().lessThanOrEqualTo('fieldUID', 'value');
100+
expect(query._parameters).toStrictEqual({'fieldUID': {'$lte': 'value'}});
101+
});
102+
it('should get entries which is greaterThan the fieldUid and values', async () => {
103+
const query = contentType.Entry().query().greaterThan('fieldUID', 'value');
104+
expect(query._parameters).toStrictEqual({'fieldUID': {'$gt': 'value'}});
105+
});
106+
it('should get entries which is greaterThanOrEqualTo the fieldUid and values', async () => {
107+
const query = contentType.Entry().query().greaterThanOrEqualTo('fieldUID', 'value');
108+
expect(query._parameters).toStrictEqual({'fieldUID': {'$gte': 'value'}});
109+
});
94110
});

0 commit comments

Comments
 (0)