Skip to content

Commit 03439ef

Browse files
Merge pull request #162 from contentstack/feat/cs-43902-exist-query
Feat/cs 43902 exist query
2 parents 4c351e1 + 285e359 commit 03439ef

File tree

3 files changed

+89
-4
lines changed

3 files changed

+89
-4
lines changed

src/lib/query.ts

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,24 @@ export class Query extends BaseQuery {
201201
return this;
202202
}
203203

204+
/**
205+
* @method exists
206+
* @memberof Query
207+
* @description Returns the raw (JSON) query based on the filters applied on Query object.
208+
* @example
209+
* import contentstack from '@contentstack/delivery-sdk'
210+
*
211+
* const stack = contentstack.Stack({ apiKey: "apiKey", deliveryToken: "deliveryToken", environment: "environment" });
212+
* const query = stack.contentType("contentTypeUid").entry().query();
213+
* const result = await query.exists('fieldUid').find()
214+
*
215+
* @returns {Query}
216+
*/
217+
exists(key: string): Query {
218+
this._parameters[key] = { '$exists': true };
219+
return this;
220+
}
221+
204222
/**
205223
* @method notExists
206224
* @memberof Query
@@ -291,7 +309,7 @@ export class Query extends BaseQuery {
291309
*
292310
* const stack = contentstack.Stack({ apiKey: "apiKey", deliveryToken: "deliveryToken", environment: "environment" });
293311
* const query = stack.contentType('contenttype_uid').query().where('title', QueryOperation.EQUALS, 'value');
294-
* const entryQuery = await stack.contentType('contenttype_uid').query().referenceIn('reference_uid', query).find<TEntry>();
312+
* const entryQuery = await stack.contentType('contenttype_uid').query().referenceIn('reference_uid', query).find();
295313
*
296314
* @returns {Query}
297315
*/
@@ -309,7 +327,7 @@ export class Query extends BaseQuery {
309327
*
310328
* const stack = contentstack.Stack({ apiKey: "apiKey", deliveryToken: "deliveryToken", environment: "environment" });
311329
* const query = stack.contentType('contenttype_uid').query().where('title', QueryOperation.EQUALS, 'value');
312-
* const entryQuery = await stack.contentType('contenttype_uid').query().referenceNotIn('reference_uid', query).find<TEntry>();
330+
* const entryQuery = await stack.contentType('contenttype_uid').query().referenceNotIn('reference_uid', query).find();
313331
*
314332
* @returns {Query}
315333
*/
@@ -327,14 +345,28 @@ export class Query extends BaseQuery {
327345
*
328346
* const stack = contentstack.Stack({ apiKey: "apiKey", deliveryToken: "deliveryToken", environment: "environment" });
329347
* const query = stack.contentType('contenttype_uid').query().where('title', QueryOperation.EQUALS, 'value');
330-
* const entryQuery = await stack.contentType('contenttype_uid').query().tags(['tag1']).find<TEntry>();
348+
* const entryQuery = await stack.contentType('contenttype_uid').query().tags(['tag1']).find();
331349
*
332350
* @returns {Query}
333351
*/
334352
tags(values: (string | number | boolean)[]): Query {
335353
this._parameters['tags'] = values;
336354
return this;
337355
}
356+
357+
/**
358+
* @method search
359+
* @memberof Query
360+
* @description Returns the raw (JSON) query based on the filters applied on Query object.
361+
* @example
362+
* import contentstack from '@contentstack/delivery-sdk'
363+
*
364+
* const stack = contentstack.Stack({ apiKey: "apiKey", deliveryToken: "deliveryToken", environment: "environment" });
365+
* const query = stack.contentType('contenttype_uid').query().where('title', QueryOperation.EQUALS, 'value');
366+
* const entryQuery = await stack.contentType('contenttype_uid').query().search('key').find();
367+
*
368+
* @returns {Query}
369+
*/
338370
search(key: string): Query {
339371
this._queryParams['typeahead'] = key
340372
return this

test/api/entry-queryables.spec.ts

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ describe('Query Operators API test cases', () => {
2828
});
2929

3030
it('should get entries which does not match the fieldUid - notExists', async () => {
31-
const query = await makeEntries('contenttype_uid').query().notExists('multi_line').find<TEntry>()
31+
const query = await makeEntries('contenttype_uid2').query().notExists('multi_line').find<TEntry>()
3232
if (query.entries) {
3333
expect(query.entries[0]._version).toBeDefined();
3434
expect(query.entries[0].title).toBeDefined();
@@ -38,6 +38,17 @@ describe('Query Operators API test cases', () => {
3838
}
3939
});
4040

41+
it('should get entries which matches the fieldUid - exists', async () => {
42+
const query = await makeEntries('contenttype_uid').query().exists('multi_line').find<TEntry>()
43+
if (query.entries) {
44+
expect(query.entries[0]._version).toBeDefined();
45+
expect(query.entries[0].title).toBeDefined();
46+
expect(query.entries[0].uid).toBeDefined();
47+
expect(query.entries[0].created_at).toBeDefined();
48+
expect((query.entries[0] as any).multi_line).toBeDefined()
49+
}
50+
});
51+
4152
it('should return entries matching any of the conditions - or', async () => {
4253
const query1: Query = await makeEntries('contenttype_uid').query().containedIn('title', ['value']);
4354
const query2: Query = await makeEntries('contenttype_uid').query().where('title', QueryOperation.EQUALS, 'value2');
@@ -152,6 +163,30 @@ describe('Query Operators API test cases', () => {
152163
expect(query.entries[0].title).toBe('value2');
153164
}
154165
});
166+
167+
it('should sort entries in ascending order of the given fieldUID', async () => {
168+
const query = await makeEntries('contenttype_uid').query().orderByAscending('title').find<TEntry>();
169+
if (query.entries) {
170+
expect(query.entries[0]._version).toBeDefined();
171+
expect(query.entries[0].locale).toBeDefined();
172+
expect(query.entries[0].uid).toBeDefined();
173+
expect(query.entries[0].title).toBe('test');
174+
expect(query.entries[1].title).toBe('test2');
175+
expect(query.entries[2].title).toBe('value');
176+
}
177+
});
178+
179+
it('should sort entries in descending order of the given fieldUID', async () => {
180+
const query = await makeEntries('contenttype_uid').query().orderByDescending('title').find<TEntry>();
181+
if (query.entries) {
182+
expect(query.entries[0]._version).toBeDefined();
183+
expect(query.entries[0].locale).toBeDefined();
184+
expect(query.entries[0].uid).toBeDefined();
185+
expect(query.entries[0].title).toBe('value2');
186+
expect(query.entries[1].title).toBe('value');
187+
expect(query.entries[2].title).toBe('test2');
188+
}
189+
});
155190
});
156191

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

test/unit/entry-queryable.spec.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,12 @@ describe('Query Operators API test cases', () => {
3131
const query = contentType.Entry().query().notExists('fieldUID');
3232
expect(query._parameters).toStrictEqual({'fieldUID': {'$exists': false}});
3333
});
34+
it('should get entries which matches the fieldUid - exists', async () => {
35+
const query = contentType.Entry().query().exists('fieldUID');
36+
if (query) {
37+
expect(query._parameters).toEqual({'fieldUID': {'$exists': true}});
38+
}
39+
});
3440
it('should return entries matching any of the conditions - or', async () => {
3541
const query1: Query = await contentType.Entry().query().containedIn('fieldUID', ['value']);
3642
const query2: Query = await contentType.Entry().query().where('fieldUID', QueryOperation.EQUALS, 'value2');
@@ -73,4 +79,16 @@ describe('Query Operators API test cases', () => {
7379
expect(query._queryParams).toEqual({ typeahead: 'entry' });
7480
}
7581
});
82+
it('should sort entries in ascending order of the given fieldUID', async () => {
83+
const query = contentType.Entry().query().orderByAscending('fieldUid');
84+
if (query) {
85+
expect(query._queryParams).toEqual({ asc: 'fieldUid' });
86+
}
87+
});
88+
it('should sort entries in descending order of the given fieldUID', async () => {
89+
const query = contentType.Entry().query().orderByDescending('fieldUid');
90+
if (query) {
91+
expect(query._queryParams).toEqual({ desc: 'fieldUid' });
92+
}
93+
});
7694
});

0 commit comments

Comments
 (0)