Skip to content

Commit

Permalink
Merge pull request #159 referenceNotIn and tags query operator
Browse files Browse the repository at this point in the history
Feat/cs 43919 referenceNotIn and tags query operator
  • Loading branch information
harshithad0703 authored Mar 15, 2024
2 parents fc55499 + 4e5b9bb commit 2d4d577
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 4 deletions.
38 changes: 37 additions & 1 deletion src/lib/query.ts
Original file line number Diff line number Diff line change
Expand Up @@ -298,5 +298,41 @@ export class Query extends BaseQuery {
referenceIn(key: string, query: Query) {
this._parameters[key] = { '$in_query': query._parameters }
return this;
}
}

/**
* @method referenceNotIn
* @memberof Query
* @description Returns the raw (JSON) query based on the filters applied on Query object.
* @example
* import contentstack from '@contentstack/delivery-sdk'
*
* const stack = contentstack.Stack({ apiKey: "apiKey", deliveryToken: "deliveryToken", environment: "environment" });
* const query = stack.contentType('contenttype_uid').query().where('title', QueryOperation.EQUALS, 'value');
* const entryQuery = await stack.contentType('contenttype_uid').query().referenceNotIn('reference_uid', query).find<TEntry>();
*
* @returns {Query}
*/
referenceNotIn(key: string, query: Query) {
this._parameters[key] = { '$nin_query': query._parameters }
return this;
}

/**
* @method tags
* @memberof Query
* @description Returns the raw (JSON) query based on the filters applied on Query object.
* @example
* import contentstack from '@contentstack/delivery-sdk'
*
* const stack = contentstack.Stack({ apiKey: "apiKey", deliveryToken: "deliveryToken", environment: "environment" });
* const query = stack.contentType('contenttype_uid').query().where('title', QueryOperation.EQUALS, 'value');
* const entryQuery = await stack.contentType('contenttype_uid').query().tags(['tag1']).find<TEntry>();
*
* @returns {Query}
*/
tags(values: (string | number | boolean)[]): Query {
this._parameters['tags'] = values;
return this;
}
}
26 changes: 26 additions & 0 deletions test/api/entry-queryables.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,32 @@ describe('Query Operators API test cases', () => {
expect(entryQuery.entries[0].title).toBe('test');
}
});
it('should return entry for referenceNotIn query', async () => {
const query = makeEntries('contenttype_uid').query().where('title', QueryOperation.EQUALS, 'value');
const entryQuery = await makeEntries('contenttype_uid').query().referenceNotIn('reference_uid', query).find<TEntry>();

if (entryQuery.entries) {
expect(entryQuery.entries[0]._version).toBeDefined();
expect(entryQuery.entries[0].locale).toBeDefined();
expect(entryQuery.entries[0].uid).toBeDefined();
expect(entryQuery.entries[0].title).not.toBe('test');
expect(entryQuery.entries[0].title).toBe('value2');
expect(entryQuery.entries[1]._version).toBeDefined();
expect(entryQuery.entries[1].locale).toBeDefined();
expect(entryQuery.entries[1].uid).toBeDefined();
expect(entryQuery.entries[1].title).toBe('value');
}
});

it('should return entry if tags are matching', async () => {
const query = await makeEntries('contenttype_uid').query().tags(['tag1']).find<TEntry>();
if (query.entries) {
expect(query.entries[0]._version).toBeDefined();
expect(query.entries[0].locale).toBeDefined();
expect(query.entries[0].uid).toBeDefined();
expect(query.entries[0].title).toBe('value');
}
});
});

function makeEntries(contentTypeUid = ''): Entries {
Expand Down
19 changes: 16 additions & 3 deletions test/unit/entry-queryable.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,24 @@ describe('Query Operators API test cases', () => {
const query = contentType.Entry().query().equalTo('fieldUID', 'value');
expect(query._parameters).toStrictEqual({ 'fieldUID': 'value' });
});
it('should return entry for referencedIn query', async () => {
const query1 = contentType.Entry().query().containedIn('fieldUID', ['value']);
it('should return entry for referenceIn query', async () => {
const query1 = contentType.Entry().query().where('fieldUID', QueryOperation.EQUALS, 'value');
const entryQuery = await contentType.Entry().query().referenceIn('reference_uid', query1);
if (entryQuery) {
expect(entryQuery._parameters).toEqual({ reference_uid: { '$in_query': { fieldUID: { '$in': [ 'value' ] } } } });
expect(entryQuery._parameters).toEqual({ reference_uid: { '$in_query': { fieldUID: 'value' } } });
}
});
it('should return entry for referenceNotIn query', async () => {
const query1 = contentType.Entry().query().where('fieldUID', QueryOperation.EQUALS, 'value');
const entryQuery = await contentType.Entry().query().referenceNotIn('reference_uid', query1);
if (entryQuery) {
expect(entryQuery._parameters).toEqual({ reference_uid: { '$nin_query': { fieldUID: 'value' } } });
}
});
it('should return entry if tags are matching', async () => {
const query = contentType.Entry().query().tags(['tag1']);
if (query) {
expect(query._parameters).toEqual({ tags: ['tag1'] });
}
});
});

0 comments on commit 2d4d577

Please sign in to comment.