From c7393b05ae76bee2bdc46959460855aa3219bf77 Mon Sep 17 00:00:00 2001 From: "harshitha.d" Date: Thu, 20 Mar 2025 15:45:07 +0530 Subject: [PATCH 1/9] feat: add Jest configuration for testing environment and reporting --- jest.js.config.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 jest.js.config.js diff --git a/jest.js.config.js b/jest.js.config.js new file mode 100644 index 00000000..26212a05 --- /dev/null +++ b/jest.js.config.js @@ -0,0 +1,21 @@ +module.exports = { + testEnvironment: "node", + testMatch: ["**/test/**/*.js"], + testPathIgnorePatterns: [ + "/node_modules/", + "/test/index.js", + "/test/config.js", + "/test/sync_config.js", + "/test/.*/utils.js", + "/test/sync/", + ], + reporters: ["default", ["jest-html-reporters", + { + "filename": "tap-html.html", + "expand": true, + "inlineSource": true, + "includeFailureMsg": true, // Includes error messages in JSON + "includeConsoleLog": true + } + ]], +}; \ No newline at end of file From 6dddf32f13fdac9483fa38eebf0f416da0975d71 Mon Sep 17 00:00:00 2001 From: "harshitha.d" Date: Thu, 20 Mar 2025 15:46:21 +0530 Subject: [PATCH 2/9] refactor: improve test summary reporting in sanity-report.js --- sanity-report.js | 66 ++++++++++++++++++++++++++++-------------------- 1 file changed, 38 insertions(+), 28 deletions(-) diff --git a/sanity-report.js b/sanity-report.js index 38810001..9a664f4d 100644 --- a/sanity-report.js +++ b/sanity-report.js @@ -2,42 +2,52 @@ const fs = require('fs'); const { App } = require('@slack/bolt'); const { JSDOM } = require("jsdom"); const dotenv = require('dotenv') +const path = require("path"); + dotenv.config() -const tapHtmlContent = fs.readFileSync('./tap-html.html', 'utf8'); -const report = `./tap-html.html` -const dom = new JSDOM(tapHtmlContent); -const $ = require("jquery")(dom.window); +const data = fs.readFileSync(path.join(__dirname, 'tap-html.html'), 'utf8'); +const dom = new JSDOM(data); +const report = './tap-html.html' +const textarea = dom.window.document.querySelector("#jest-html-reports-result-data"); +const testResults = JSON.parse(textarea.textContent.trim()); -const totalTime = $('.nav a:nth-child(1)').text().trim().replace('Total Time', ''); -const totalCount = $('.nav a:nth-child(2)').text().trim().replace('Total Count', ''); -const totalPass = $('.nav a:nth-child(3)').text().trim().replace('Total Pass', ''); -const totalFail = $('.nav a:nth-child(4)').text().trim().replace('Total Fail', ''); -const totalSkip = $('.nav a:nth-child(5)').text().trim().replace('Total Skip', ''); -const totalTodo = $('.nav a:nth-child(6)').text().trim().replace('Total Todo', ''); +const startTime = testResults.startTime; +const endTime = Math.max(...testResults.testResults.map(t => t.perfStats.end)); +const totalSeconds = (endTime - startTime) / 1000; +const minutes = Math.floor(totalSeconds / 60); +const seconds = (totalSeconds % 60).toFixed(2); +const duration = `${minutes}m ${seconds}s`; -const milliseconds = parseInt(totalTime.replace(/\D/g, ''), 10); -const totalSeconds = Math.floor(milliseconds / 1000); -const durationInMinutes = Math.floor(totalSeconds / 60); -const durationInSeconds = totalSeconds % 60; +const summary = { + totalSuites: testResults.numTotalTestSuites, + passedSuites: testResults.numPassedTestSuites, + failedSuites: testResults.numFailedTestSuites, + totalTests: testResults.numTotalTests, + passedTests: testResults.numPassedTests, + failedTests: testResults.numFailedTests, + skippedTests: testResults.numPendingTests + testResults.numTodoTests, + pendingTests: testResults.numPendingTests, + duration: duration, +}; -console.log('Total Test Suits:', '9') -console.log('Total Tests:', totalCount); -console.log('Total Pass:', totalPass); -console.log('Total Fail:', totalFail); -console.log('Total Skip:', totalSkip); -console.log('Total Pending:', totalTodo); -console.log('Total Duration:', `${durationInMinutes}m`,`${durationInSeconds.toFixed(2)}s`); +console.log('Total Test Suits:', summary.totalSuites) +console.log('Total Tests:', summary.totalTests); +console.log('Total Pass:', summary.passedTests); +console.log('Total Fail:', summary.failedTests); +console.log('Total Skip:', summary.skippedTests); +console.log('Total Pending:', summary.pendingTests); +console.log('Total Duration:', summary.duration); const slackMessage = ` *Test Summary of JS Delivery SDK* -• Total Test Suits: *9* -• Total Tests: *${totalCount}* -• Total Pass:: *${totalPass}* -• Total Fail: *${totalFail}* -• Total Skip:: *${totalSkip}* -• Total Pending: *${totalTodo}* -• Total Duration: *${durationInMinutes}m ${durationInSeconds}s* +• Total Test Suits: *${summary.totalSuites}* +• Total Tests: *${summary.totalTests}* +• Total Pass:: *${summary.passedTests}* +• Total Fail: *${summary.failedTests}* +• Total Skip:: *${summary.skippedTests}* +• Total Pending: *${summary.pendingTests}* +• Total Duration: *${duration}* ` const app = new App({ From 6fa302fd8db36cfa775223b7190b2fb937011a4e Mon Sep 17 00:00:00 2001 From: "harshitha.d" Date: Thu, 20 Mar 2025 15:47:06 +0530 Subject: [PATCH 3/9] refactor: update tests to use jest and improve readability --- test/asset/find-result-wrapper.js | 1417 +++++----- test/asset/find.js | 1489 +++++------ test/asset/image-transformation.js | 221 +- test/asset/spread.js | 136 +- test/entry/find-result-wrapper.js | 2032 +++++++------- test/entry/find.js | 3356 ++++++++++++------------ test/entry/findone-result-wrapper.js | 1810 +++++++------ test/entry/findone.js | 1772 +++++++------ test/entry/spread.js | 403 +-- test/live-preview/live-preview-test.js | 135 +- 10 files changed, 6553 insertions(+), 6218 deletions(-) diff --git a/test/asset/find-result-wrapper.js b/test/asset/find-result-wrapper.js index bfcf8ad1..5662dd38 100755 --- a/test/asset/find-result-wrapper.js +++ b/test/asset/find-result-wrapper.js @@ -2,786 +2,653 @@ /* * Module Dependencies. */ -var test = require('tape'); -var Contentstack = require('../../dist/node/contentstack.js'); -var init = require('../config.js'); -var Utils = require('../entry/utils.js'); - -var Stack; -/* - * Initalise the Contentstack Instance - * */ -test('Initalise the Contentstack Stack Instance', function(TC) { - setTimeout(function() { - Stack = Contentstack.Stack(init.stack); - Stack.setHost(init.host); - TC.end(); - }, 1000); -}); - - -test('default .find() no fallback', function(assert) { - var _in = ['ja-jp'] - Stack.Assets().Query().language('ja-jp').toJSON().find() - .then((assets) => { - assert.ok(assets[0].length, 'Assets present in the resultset'); - assert.notok(assets[1], 'Count should not be present'); - if (assets && assets.length && assets[0].length) { - var _assets = assets[0].every(function(asset) { - return (_in.indexOf(asset['publish_details']['locale']) != -1); - }); - assert.equal(_assets, true, "Publish content fallback"); - } - assert.end(); - }).catch((error) => { - assert.fail("asset default .find() fallback catch", error.toString()); - assert.end(); - }) -}) -test('default .find() fallback', function(assert) { - var _in = ['ja-jp', 'en-us'] - Stack.Assets().Query().language('ja-jp').includeFallback().toJSON().find() - .then((assets) => { - assert.ok(assets[0].length, 'Assets present in the resultset'); - assert.notok(assets[1], 'Count should not be present'); - if (assets && assets.length && assets[0].length) { - var _assets = assets[0].every(function(asset) { - return (_in.indexOf(asset['publish_details']['locale']) != -1); - }); - assert.equal(_assets, true, "Publish content fallback"); - } - assert.end(); - }).catch((error) => { - assert.fail("asset default .find() fallback catch", error.toString()); - assert.end(); - }) -}) -test('default .find()', function(assert) { - var Query = Stack.Assets().Query(), - field = 'updated_at'; - Query - .toJSON() - .find() - .then(function success(assets) { - assert.ok(assets[0].length, 'assets present in the resultset'); - assert.ok(!assets[1], 'Count should not present in the result'); - if (assets && assets.length && assets[0].length) { - var prev = assets[0][0][field]; - var _assets = assets[0].every(function(asset) { - prev = asset[field]; - return (asset.updated_at <= prev); - }); - assert.equal(_assets, true, "default sorting of descending 'updated_at'"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail("default .find()"); - assert.end(); - }); -}); - -/*! - * SORTING - * !*/ -test('.ascending()', function(assert) { - var Query = Stack.Assets().Query(), - field = 'updated_at'; - - Query - .ascending(field) - .toJSON() - .find() - .then(function success(assets) { - assert.ok(assets[0].length, 'assets present in the resultset'); - if (assets && assets.length && assets[0].length) { - var prev = assets[0][0][field]; - var _assets = assets[0].every(function(asset) { - prev = asset[field]; - return (asset[field] >= prev); - }); - assert.equal(_assets, true, "assets sorted ascending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".ascending()"); - assert.end(); - }); -}); - -test('.descending()', function(assert) { - var Query = Stack.Assets().Query(), - field = 'created_at'; - - Query - .descending(field) - .toJSON() - .find() - .then(function success(assets) { - assert.ok(assets[0].length, 'assets present in the resultset'); - if (assets && assets.length && assets[0].length) { - var prev = assets[0][0][field]; - var _assets = assets[0].every(function(asset) { - prev = asset[field]; - return (asset[field] >= prev); - }); - assert.equal(_assets, true, "assets sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".descending()"); - assert.end(); - }); -}); - - -/*! - * COMPARISION - * !*/ -test('.lessThan()', function(assert) { - var Query = Stack.Assets().Query(), - value = 5122, - field = 'updated_at'; - Query - .lessThan('file_size', value) - .language('en-us') - .toJSON() - .find() - .then(function success(assets) { - // assert.ok("assets" in result, 'assets key present in the resultset'); - assert.ok(assets[0].length, 'assets present in the resultset'); - assert.equal(assets[0].length, 1, 'one asset present in the resultset') - if (assets && assets.length && assets[0].length) { - var prev = assets[0][0][field]; - var _assets = true; - _assets = assets[0].slice(1).every(function(asset) { - var flag = (asset[field] < value); - prev = asset[field]; - return flag; - }); - assert.equal(_assets, true, "assets sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".lessThan()"); - assert.end(); - }); -}); - -test('.lessThanOrEqualTo()', function(assert) { - var Query = Stack.Assets().Query(), - field = 'updated_at', - value = 5122; - Query - .language('en-us') - .lessThanOrEqualTo('file_size', value) - .toJSON() - .find() - .then(function success(assets) { - assert.ok(assets[0].length, 'assets present in the resultset'); - assert.equal(assets[0].length, 2, 'two assets present in the resultset'); - if (assets && assets.length && assets[0].length) { - var prev = assets[0][0][field]; - var _assets = assets[0].every(function(asset) { - var flag = (asset[field] <= prev); - prev = asset[field]; - return flag; - }); - assert.equal(_assets, true, "assets sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".lessThanOrEqualTo()"); - assert.end(); - }); -}); - -test('.greaterThan()', function(assert) { - var Query = Stack.Assets().Query(), - field = 'file_size', - value = 5122; - - Query - .greaterThan('file_size', value) - .ascending(field) - .toJSON() - .find() - .then(function success(assets) { - assert.ok(assets[0].length, 'assets present in the resultset'); - assert.equal(assets[0].length, 3, 'three assets present in the resultset'); - if (assets && assets.length && assets[0].length) { - var prev = assets[0][0][field]; - var _assets = assets[0].slice(1).every(function(asset) { - var flag = (asset[field] > value); - prev = asset[field]; - return flag; - }); - assert.equal(_assets, true, "assets sorted ascending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".greaterThan()"); - assert.end(); - }); -}); - -test('.greaterThanOrEqualTo()', function(assert) { - var Query = Stack.Assets().Query(), - field = 'file_size', - value = 5122; - - Query - .greaterThanOrEqualTo('file_size', value) - .descending(field) - .toJSON() - .find() - .then(function success(assets) { - assert.ok(assets[0].length, 'assets present in the resultset'); - assert.equal(assets[0].length, 4, 'four assets present in the resultset'); - if (assets && assets.length && assets[0].length) { - var prev = assets[0][0][field]; - var _assets = assets[0].every(function(asset) { - var flag = (asset[field] >= value); - prev = asset[field]; - return flag; - }); - assert.equal(_assets, true, "assets sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".greaterThanOrEqualTo()"); - assert.end(); - }); -}); - -test('.notEqualTo()', function(assert) { - var Query = Stack.Assets().Query(), - field = 'file_size', - value = 5122; - - Query - .language('en-us') - .notEqualTo('file_size', value) - .descending(field) - .toJSON() - .find() - .then(function success(assets) { - assert.ok(assets[0].length, 'assets present in the resultset'); - assert.equal(assets[0].length, 4, 'four assets present in the resultset'); - if (assets && assets.length && assets[0].length) { - var prev = assets[0][0][field]; - var _assets = assets[0].every(function(asset) { - var flag = (asset[field] != value); - prev = asset[field]; - return flag; - }); - assert.equal(_assets, true, "assets sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".notEqualTo()"); - assert.end(); - }); -}); - -/*! - * Array/Subset - * !*/ - -test('.containedIn()', function(assert) { - var Query = Stack.Assets().Query(), - _in = ["image1", "image2"], - field = 'updated_at'; - - Query - .containedIn('title', _in) - .toJSON() - .find() - .then(function success(assets) { - assert.ok(assets[0].length, 'assets present in the resultset'); - assert.equal(assets[0].length, 2, 'two assets present in the resultset'); - if (assets && assets.length && assets[0].length) { - var _assets = assets[0].every(function(asset) { - return (_in.indexOf(asset['title']) != -1); - }); - assert.equal(_assets, true, "assets sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".containedIn()"); - assert.end(); - }); -}); - -test('.notContainedIn()', function(assert) { - var Query = Stack.Assets().Query(), - _in = ["sourceddd1", "sourceddddd2"]; - - Query - .notContainedIn('title', _in) - .toJSON() - .find() - .then(function success(assets) { - assert.ok(assets[0].length, 'No asset present in the resultset'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".notContainedIn()"); - assert.end(); - }); -}); - - -/*! - *Element(exists) - * !*/ - -test('.exists()', function(assert) { - var Query = Stack.Assets().Query(), - queryField = "is_dir", - field = 'updated_at'; - - Query - .language('en-us') - .exists(queryField) - .toJSON() - .find() - .then(function success(assets) { - assert.ok(assets[0].length, 'assets should not be present in the resultset'); - assert.equal(assets[0].length, 5, 'five assets present in the resultset'); - if (assets && assets.length && assets[0].length) { - var prev = assets[0][0][field]; - var _assets = assets[0].every(function(asset) { - var flag = (asset[field] <= prev); - prev = asset[field]; - return flag; - }); - assert.equal(_assets, true, "assets sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".exists()"); - assert.end(); - }); -}); - -test('.notExists()', function(assert) { - var Query = Stack.Assets().Query(), - queryField = "is_dir", - field = 'updated_at'; - - Query - .notExists(queryField) - .toJSON() - .find() - .then(function success(assets) { - assert.notok(assets[0].length, 'No asset present in the resultset'); - if (assets && assets.length && assets[0].length) { - var prev = assets[0][0][field]; - var _assets = assets[0].every(function(asset) { - return (asset[field] <= prev); - }); - assert.equal(_assets, true, "assets sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".notExists()"); - assert.end(); - }); -}); - - -// Pagination -test('.skip()', function(assert) { - var Query = Stack.Assets().Query(), - field = 'updated_at'; - - Query - .toJSON() - .find() - .then(function success(allassets) { - // assert.ok("assets" in allassets, 'assets key present in the resultset'); - Stack - .Assets() - .Query() - .skip(1) - .toJSON() - .find() - .then(function success(assets) { - // assert.ok("assets" in result, 'assets key present in the resultset'); - assert.ok((assets[0].length >= 2), '2 or more assets present in the resultset'); - assert.deepEqual(allassets[0].slice(1), assets[0], 'All elements matched.'); - if (assets && assets.length && assets[0].length) { - allassets[0] = allassets[0].slice(1); - var prev = assets[0][0][field]; - var _assets = assets[0].every(function(asset) { - var flag = (asset[field] <= prev); - prev = asset[field]; - return flag; - }); - assert.equal(_assets, true, "assets sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(""); - assert.end(); - }); - }, function error(err) { - console.error("error :", err); - assert.fail("skip()"); - assert.end(); - }); -}); - -test('.limit()', function(assert) { - var Query = Stack.Assets().Query(), - field = 'updated_at'; - - Query - .toJSON() - .find() - .then(function success(allassets) { - // assert.ok("assets" in allassets, 'assets key present in the resultset'); - Stack - .Assets() - .Query() - .limit(2) - .toJSON() - .find() - .then(function success(assets) { - // assert.ok("assets" in result, 'assets key present in the resultset'); - assert.ok(assets[0].length, 'assets present in the resultset'); - assert.deepEqual(allassets[0].slice(0, 2), assets[0], 'All elements matched.'); - if (assets && assets.length && assets[0].length) { - var prev = assets[0][0][field]; - var _assets = assets[0].every(function(asset) { - var flag = (asset[field] <= prev); - prev = asset[field]; - return flag; - }); - assert.equal(_assets, true, "assets sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".limit()"); - assert.end(); - }); - }, function error(err) { - console.error("error :", err); - assert.fail(".limit()"); - assert.end(); - }); -}); - -test('.count()', function(assert) { - var Query = Stack.Assets().Query(); - - Query - .count() - .toJSON() - .find() - .then(function success(assets) { - assert.ok(assets[0], 'assets count present in the resultset'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".count()"); - assert.end(); - }); -}); - - - -// Logical -test('.or() - Query Objects', function(assert) { - var Query1 = Stack.Assets().Query().containedIn('title', ['image1', 'image2']); - var Query2 = Stack.Assets().Query().where('is_dir', true); - var Query = Stack.Assets().Query(); - - Query - .or(Query1, Query2) - .toJSON() - .find() - .then(function success(assets) { - assert.ok(assets[0].length, 'assets present in the resultset'); - if (assets && assets.length && assets[0].length) { - var _assets = assets[0].every(function(asset) { - return (~(asset.title === 'image1' || asset.is_dir === true)); - }); - assert.ok(_assets, '$OR condition satisfied'); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".or() - Query Objects"); - assert.end(); - }); -}); - -test('.and() - Query Objects', function(assert) { - var Query1 = Stack.Assets().Query().where('title', 'image1'); - var Query2 = Stack.Assets().Query().where('is_dir', true); - var Query = Stack.Assets().Query(); - - Query - .and(Query1, Query2) - .toJSON() - .find() - .then(function success(assets) { - assert.notok(assets[0].length, 'asset not present in the resultset'); - if (assets && assets.length && assets[0].length) { - var _assets = assets[0].every(function(asset) { - return (~(asset.title === 'image1' && asset.is_dir === true)); - }); - assert.ok(_assets, '$AND condition satisfied'); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".and() - Query Objects"); - assert.end(); - }); -}); - -test('.and() - Raw queries', function(assert) { - var Query1 = Stack.Assets().Query().where('title', 'image1'); - var Query2 = Stack.Assets().Query().where('is_dir', true); - var Query = Stack.Assets().Query(); - - Query - .and(Query1, Query2) - .toJSON() - .find() - .then(function success(assets) { - assert.notok(assets[0].length, 'asset not present in the resultset'); - if (assets && assets.length && assets[0].length) { - var _assets = assets[0].every(function(asset) { - return ((asset.title === 'image1' && asset.is_dir === true)); - }); - assert.ok(_assets, '$AND condition satisfied'); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".and() - Raw queries"); - assert.end(); - }); -}); - - -// Custom query -test('.query() - Raw query', function(assert) { - var Query = Stack.Assets().Query(); - - Query - .query({ "$or": [{ "title": "image1" }, { "is_dir": "true" }] }) - .toJSON() - .find() - .then(function success(assets) { - assert.ok(assets[0].length, 'assets present in the resultset'); - assert.equal(assets[0].length, 1, 'one asset present in resultset'); - if (assets && assets.length && assets[0].length) { - var _assets = assets[0].every(function(asset) { - return (asset.title === 'image1' || asset.is_dir === true) - }); - assert.ok(_assets, '$OR condition satisfied'); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".query() - Raw query"); - assert.end(); - }); -}); - -test('Non reference .tags() ', function(assert) { - var Query = Stack.Assets().Query(), - tags = ["asset3"]; - - Query - .tags(tags) - .toJSON() - .find() - .then(function success(assets) { - assert.ok((assets.length >= 1), '1 or more asset/assets present in the resultset'); - if (assets && assets.length && assets[0].length) { - assert.equal(assets[0].length, 0, 'Non refernce tags count should be zero'); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".tags()"); - assert.end(); - }); -}); - -// tags -test('.tags()', function(assert) { - var Query = Stack.Assets().Query(), - field = 'tags', - tags = ["asset1", "asset2"]; - - Query - .tags(tags) - .toJSON() - .find() - .then(function success(assets) { - assert.ok((assets.length >= 1), '1 or more asset/assets present in the resultset'); - if (assets && assets.length && assets[0].length) { - var _assets = assets[0].every(function(asset) { - return (Utils.arrayPresentInArray(tags, asset[field])); - }); - assert.equal(_assets, true, 'Tags specified are found in result set'); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".tags()"); - assert.end(); +const Contentstack = require('../../dist/node/contentstack.js'); +const init = require('../config.js'); +const Utils = require('../entry/utils.js'); + +let Stack; + +describe("Contentstack Asset Tests", () => { + // Initialize the Contentstack Stack Instance + beforeAll(() => { + return new Promise((resolve) => { + Stack = Contentstack.Stack(init.stack); + Stack.setHost(init.host); + setTimeout(resolve, 1000); + }); + }); + + test('default .find() No fallback', async () => { + const _in = ['ja-jp']; + + try { + const assets = await Stack.Assets().Query().language('ja-jp').toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + expect(assets[1]).toBeFalsy(); + + if (assets && assets.length && assets[0].length) { + const _assets = assets[0].every((asset) => { + return (_in.indexOf(asset['publish_details']['locale']) !== -1); }); -}); - - -// search -test('.search()', function(assert) { - var Query = Stack.Assets().Query(); - - Query - .search('image1') - .toJSON() - .find() - .then(function success(assets) { - assert.ok(assets[0].length, '1 or more asset present in the resultset'); - assert.equal(assets[0].length, 1, '1 asset present in resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail(".search()"); - assert.end(); + expect(_assets).toBe(true); + } + } catch (error) { + console.error("Error:", error); + fail("asset default .find() fallback catch: " + error.toString()); + } + }); + + test('default .find() fallback', async () => { + const _in = ['ja-jp', 'en-us']; + try { + const assets = await Stack.Assets().Query().language('ja-jp').includeFallback().toJSON().find(); + expect(assets[0].length).toBeTruthy(); + expect(assets[1]).toBeFalsy(); + + if (assets && assets.length && assets[0].length) { + const _assets = assets[0].every((asset) => { + return (_in.indexOf(asset['publish_details']['locale']) !== -1); }); -}); - -// regex -test('.regex()', function(assert) { - var Query = Stack.Assets().Query(), - field = 'title', - regex = { - pattern: '^image', - options: 'i' - }, - regexpObj = new RegExp(regex.pattern, regex.options); - - Query - .language('en-us') - .regex(field, regex.pattern, regex.options) - .toJSON() - .find() - .then(function success(assets) { - assert.ok((assets.length >= 1), '1 or more asset/assets present in the resultset'); - assert.equal(assets[0].length, 5, '5 assets present in resultset'); - var flag = assets[0].every(function(asset) { - return regexpObj.test(asset[field]); - }); - assert.ok(flag, "regexp satisfied for all the assets in the resultset"); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail(".regex()"); - assert.end(); + expect(_assets).toBe(true); + } + } catch (error) { + console.error("Error:", error); + fail("asset default .find() fallback catch: " + error.toString()); + } + }); + + test('default .find()', async () => { + const Query = Stack.Assets().Query(); + const field = 'updated_at'; + try { + const assets = await Query.toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + expect(assets[1]).toBeFalsy(); + + if (assets && assets.length && assets[0].length) { + let prev = assets[0][0][field]; + const _assets = assets[0].every((asset) => { + prev = asset[field]; + return (asset[field] <= prev); }); -}); - - - -// includeCount -test('.includeCount()', function(assert) { - var Query = Stack.Assets().Query(); - - Query - .includeCount() - .toJSON() - .find() - .then(function success(assets) { - // assert.ok("assets" in result, 'assets key present in the resultset'); - assert.ok(assets[0].length, 'assets present in the resultset'); - assert.ok(assets[1], 'Count present in the resultset'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".includeCount()"); - assert.end(); + expect(_assets).toBe(true); + } + } catch (err) { + console.error("Error:", err); + fail("asset default .find()"); + } + }); + + describe("sorting", () => { + test('.ascending()', async () => { + const Query = Stack.Assets().Query(); + const field = 'updated_at';try { + const assets = await Query.ascending(field).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + let prev = assets[0][0][field]; + const _assets = assets[0].every((asset) => { + prev = asset[field]; + return (asset[field] >= prev); + }); + expect(_assets).toBe(true); + } + } catch (err) { + console.error("Error:", err); + fail(".ascending()"); + } + }); + + test('.descending()', async () => { + const Query = Stack.Assets().Query(); + const field = 'created_at'; + try { + const assets = await Query.descending(field).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + let prev = assets[0][0][field]; + const _assets = assets[0].every((asset) => { + const flag = (asset[field] <= prev); + prev = asset[field]; + return flag; + }); + expect(_assets).toBe(true); + } + } catch (err) { + console.error("Error:", err); + fail(".descending()"); + } + }); + }); + + test('.addParam()', async () => { + const Query = Stack.Assets().Query(); + + try { + const assets = await Query.addParam('include_dimension', 'true').toJSON().find(); + expect(assets[0][0].hasOwnProperty('dimension')).toBeTruthy(); + } catch (err) { + console.error("Error:", err); + fail(".addParam()"); + } + }); + + describe("comparison", () => { + test('.lessThan()', async () => { + const Query = Stack.Assets().Query(); + const field = 'file_size'; + const value = 5122; + try { + const assets = await Query.lessThan('file_size', value).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + let prev = assets[0][0][field]; + const _assets = assets[0].slice(1).every((asset) => { + const flag = (asset[field] < value); + prev = asset[field]; + return flag; + }); + expect(_assets).toBe(true); + } + } catch (err) { + console.error("Error:", err); + fail(".lessThan()"); + } + }); + + test('.lessThanOrEqualTo()', async () => { + const Query = Stack.Assets().Query(); + const field = 'updated_at'; + try { + const assets = await Query.lessThanOrEqualTo('file_size', 5122).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + let prev = assets[0][0][field]; + const _assets = assets[0].every((asset) => { + const flag = (asset[field] <= prev); + prev = asset[field]; + return flag; + }); + expect(_assets).toBe(true); + } + } catch (err) { + console.error("Error:", err); + fail(".lessThanOrEqualTo()"); + } + }); + + test('.greaterThan()', async () => { + const Query = Stack.Assets().Query(); + const field = 'file_size'; + const value = 5122; + try { + const assets = await Query.greaterThan('file_size', value).ascending(field).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + let prev = assets[0][0][field]; + const _assets = assets[0].slice(1).every((asset) => { + const flag = (asset[field] > value); + prev = asset[field]; + return flag; + }); + expect(_assets).toBe(true); + } + } catch (err) { + fail(".greaterThan()"); + } + }); + + test('.greaterThanOrEqualTo()', async () => { + const Query = Stack.Assets().Query(); + const field = 'file_size'; + const value = 5122; + try { + const assets = await Query.greaterThanOrEqualTo('file_size', 5122).descending(field).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + let prev = assets[0][0][field]; + const _assets = assets[0].every((asset) => { + const flag = (asset[field] >= value); + prev = asset[field]; + return flag; + }); + expect(_assets).toBe(true); + } + } catch (err) { + console.error("Error:", err); + fail(".greaterThanOrEqualTo()"); + } + }); + + test('.notEqualTo()', async () => { + const Query = Stack.Assets().Query(); + const field = 'file_size'; + const value = 5122; + try { + const assets = await Query.notEqualTo('file_size', value).descending(field).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + let prev = assets[0][0][field]; + const _assets = assets[0].every((asset) => { + const flag = (asset[field] != value); + prev = asset[field]; + return flag; + }); + expect(_assets).toBe(true); + } + } catch (err) { + console.error("Error:", err); + fail(".notEqualTo()"); + } + }); + + test('.where()', async () => { + const Query = Stack.Assets().Query(); + try { + const assets = await Query.where('title', "image1").toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + expect(assets[0].length).toBe(1); + } catch (err) { + console.error("Error:", err); + fail(".where()"); + } + }); + + test('.equalTo() compare boolean value (true)', async () => { + const Query = Stack.Assets().Query(); + try { + const assets = await Query.language('en-us').equalTo('is_dir', false).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + expect(assets[0].length).toBe(5); + } catch (err) { + console.error("Error:", err); + fail(".where()"); + } + }); + + test('.equalTo() compare boolean value (false)', async () => { + const Query = Stack.Assets().Query(); + try { + const assets = await Query.equalTo('is_dir', true).toJSON().find(); + + expect(assets[0].length).toBeFalsy(); + expect(assets[0].length).toBe(0); + } catch (err) { + console.error("Error:", err); + fail(".where() boolean value having false"); + } + }); + }); + + describe("Array/Subset Tests", () => { + test('.containedIn()', async () => { + const Query = Stack.Assets().Query(); + const _in = ["image1", "image2"]; + const field = 'updated_at'; + try { + const assets = await Query.containedIn('title', _in).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + const _assets = assets[0].every((asset) => { + return (_in.indexOf(asset['title']) != -1); + }); + expect(_assets).toBe(true); + } + } catch (err) { + console.error("Error:", err); + fail(".containedIn()"); + } + }); + + test('.notContainedIn()', async () => { + const Query = Stack.Assets().Query(); + const _in = ["image1", "image2"]; + try { + const assets = await Query.notContainedIn('title', _in).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + } catch (err) { + console.error("Error:", err); + fail(".notContainedIn()"); + } + }); + }); + + describe("Element Existence Tests", () => { + test('.exists()', async () => { + const Query = Stack.Assets().Query(); + const queryField = "is_dir"; + const field = 'updated_at'; + try { + const assets = await Query.exists(queryField).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + let prev = assets[0][0][field]; + const _assets = assets[0].every((asset) => { + const flag = (asset[field] <= prev); + prev = asset[field]; + return flag; + }); + expect(_assets).toBe(true); + } + } catch (err) { + console.error("Error:", err); + fail(".exists()"); + } + }); + + test('.notExists()', async () => { + const Query = Stack.Assets().Query(); + const queryField = "is_dir"; + const field = 'updated_at'; + try { + const assets = await Query.notExists(queryField).toJSON().find(); + + expect(assets[0].length).toBeFalsy(); + + if (assets && assets.length && assets[0].length) { + let prev = assets[0][0][field]; + const _assets = assets[0].every((asset) => { + return (asset[field] <= prev); + }); + expect(_assets).toBe(true); + } + } catch (err) { + console.error("Error:", err); + fail(".notExists()"); + } + }); + }); + + describe("Pagination Tests", () => { + test('.skip()', async () => { + const Query = Stack.Assets().Query(); + const field = 'updated_at'; + try { + const allassets = await Query.toJSON().find(); + const assets = await Stack.Assets().Query().skip(1).toJSON().find(); + + expect(assets[0].length >= 2).toBeTruthy(); + expect(allassets[0].slice(1)).toEqual(assets[0]); + + if (assets && assets.length && assets[0].length) { + let prev = assets[0][0][field]; + const _assets = assets[0].every((asset) => { + const flag = (asset[field] <= prev); + prev = asset[field]; + return flag; + }); + expect(_assets).toBe(true); + } + } catch (err) { + console.error("Error:", err); + fail(".skip()"); + } + }); + + test('.limit()', async () => { + const Query = Stack.Assets().Query(); + const field = 'updated_at'; + try { + const allassets = await Query.toJSON().find(); + const assets = await Stack.Assets().Query().limit(2).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + expect(allassets[0].slice(0, 2)).toEqual(assets[0]); + + if (assets && assets.length && assets[0] && assets[0].length) { + let prev = assets[0][0][field]; + const _assets = assets[0].every((asset) => { + const flag = (asset[field] <= prev); + prev = asset[field]; + return flag; + }); + expect(_assets).toBe(true); + } + } catch (err) { + console.error("Error:", err); + fail(".limit()"); + } + }); + + test('.count()', async () => { + const Query = Stack.Assets().Query(); + try { + const count = await Query.count().toJSON().find(); + expect(count).toBeTruthy(); + } catch (err) { + console.error("Error:", err); + fail(".count()"); + } + }); + }); + + describe("Logical Operators Tests", () => { + test('.or() - Query Objects', async () => { + const Query1 = Stack.Assets().Query().where('title', 'image1'); + const Query2 = Stack.Assets().Query().where('is_dir', true); + const Query = Stack.Assets().Query(); + try { + const assets = await Query.or(Query1, Query2).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + const _assets = assets[0].every((asset) => { + return (~(asset.title === 'source1' || asset.is_dir === true)); + }); + expect(_assets).toBeTruthy(); + } + } catch (err) { + console.error("Error:", err); + fail(".or() - Query Objects"); + } + }); + + test('.and() - Query Objects', async () => { + const Query1 = Stack.Assets().Query().where('title', 'image1'); + const Query2 = Stack.Assets().Query().where('is_dir', true); + const Query = Stack.Assets().Query(); + try { + const assets = await Query.and(Query1, Query2).toJSON().find(); + + expect(assets[0].length).toBeFalsy(); + + if (assets && assets.length && assets[0].length) { + const _assets = assets[0].every((asset) => { + return (~(asset.title === 'image1' && asset.is_dir === true)); + }); + expect(_assets).toBeTruthy(); + } + } catch (err) { + console.error("Error:", err); + fail(".and() - Query Objects"); + } + }); + + test('.query() - Raw query', async () => { + const Query = Stack.Assets().Query(); + try { + const assets = await Query.query({ "$or": [{ "title": "image2" }, { "is_dir": "true" }] }).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + const _assets = assets[0].every((asset) => { + return (asset.title === 'image2' || asset.is_dir === false) + }); + expect(_assets).toBeTruthy(); + } + } catch (err) { + console.error("Error:", err); + fail(".query() - Raw query"); + } + }); + }); + + describe("Tags Tests", () => { + test('.tags() - empty results', async () => { + const Query = Stack.Assets().Query(); + const tags = ["asset3"]; + try { + const assets = await Query.tags(tags).toJSON().find(); + + expect(assets.length >= 1).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + expect(assets[0].length).toBe(0); + } + } catch (err) { + console.error("Error:", err); + fail(".tags()"); + } + }); + + test('.tags() - with results', async () => { + const Query = Stack.Assets().Query(); + const field = 'tags'; + const tags = ["asset1", "asset2"]; + try { + const assets = await Query.tags(tags).toJSON().find(); + + expect(assets.length >= 1).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + const _assets = assets[0].every((asset) => { + return (Utils.arrayPresentInArray(tags, asset[field])); + }); + expect(_assets).toBe(true); + } + } catch (err) { + console.error("Error:", err); + fail(".tags()"); + } + }); + }); + + describe("Search Tests", () => { + test('.search()', async () => { + const Query = Stack.Assets().Query(); + try { + const assets = await Query.toJSON().search('image1').find(); + expect(assets[0].length).toBeTruthy(); + } catch (err) { + console.error("Error:", err); + fail(".search()"); + } + }); + + test('.regex()', async () => { + const Query = Stack.Assets().Query(); + const field = 'title'; + const regex = { + pattern: '^image', + options: 'i' + }; + const regexpObj = new RegExp(regex.pattern, regex.options); + try { + const assets = await Query.regex(field, regex.pattern, regex.options).toJSON().find(); + + expect(assets.length >= 1).toBeTruthy(); + + const flag = assets[0].every((asset) => { + return regexpObj.test(asset[field]); }); -}); - -// only -test('.only() - Single String Parameter', function(assert) { - var Query = Stack.Assets().Query(); - - Query - .only('title') - .toJSON() - .find() - .then(function success(assets) { - var flag = assets[0].every(function(asset) { - return (asset && Object.keys(asset).length === 5 && "title" in asset && "uid" in asset && 'url' in asset); - }); - assert.ok(flag, 'assets with the field title in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail(".only() - Single String Parameter"); - assert.end(); + expect(flag).toBeTruthy(); + } catch (err) { + console.error("Error:", err); + fail(".regex()"); + } + }); + }); + + describe("Include Options", () => { + test('.includeCount()', async () => { + const Query = Stack.Assets().Query(); + try { + const assets = await Query.includeCount().toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + expect(assets[1]).toBeTruthy(); + } catch (err) { + console.error("Error:", err); + fail(".includeCount()"); + } + }); + }); + + describe("Field Projections", () => { + test('.only() - Single String Parameter', async () => { + const Query = Stack.Assets().Query(); + try { + const assets = await Query.only('title').toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + + const flag = assets[0].every((asset) => { + return (asset && Object.keys(asset).length === 5 && "title" in asset && "uid" in asset && 'url' in asset); }); -}); - -test('.only() - Multiple String Parameter', function(assert) { - var Query = Stack.Assets().Query(); - - Query - .only('BASE', 'title') - .toJSON() - .find() - .then(function success(assets) { - var flag = assets[0].every(function(asset) { - return (asset && Object.keys(asset).length === 5 && "title" in asset && "uid" in asset && 'url' in asset); - }); - assert.ok(flag, 'assets with the field title in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail(".only() - Multiple String Parameter"); - assert.end(); + expect(flag).toBeTruthy(); + } catch (err) { + console.error("Error:", err); + fail(".only() - Single String Parameter"); + } + }); + + test('.only() - Multiple String Parameter', async () => { + const Query = Stack.Assets().Query(); + try { + const assets = await Query.only('BASE', 'title').toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + + const flag = assets[0].every((asset) => { + return (asset && Object.keys(asset).length === 5 && "title" in asset && "uid" in asset && 'url' in asset); }); -}); - -test('.only() - Array Parameter', function(assert) { - var Query = Stack.Assets().Query(); - - Query - .only(['title', 'filename']) - .toJSON() - .find() - .then(function success(assets) { - var flag = assets[0].every(function(asset) { - return (asset && Object.keys(asset).length === 5 && "title" in asset && "filename" in asset && "uid" in asset && 'url' in asset); - }); - assert.ok(flag, 'assets with the field title,url in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail(".only() - Array Parameter"); - assert.end(); + expect(flag).toBeTruthy(); + } catch (err) { + console.error("Error:", err); + fail(".only() - Multiple String Parameter"); + } + }); + + test('.only() - Array Parameter', async () => { + const Query = Stack.Assets().Query(); + try { + const assets = await Query.only(['title', 'filename']).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + + const flag = assets[0].every((asset) => { + return (asset && Object.keys(asset).length === 5 && "title" in asset && "filename" in asset && "uid" in asset && "url" in asset); }); + expect(flag).toBeTruthy(); + } catch (err) { + console.error("Error:", err); + fail(".only() - Array Parameter"); + } + }); + }); }); \ No newline at end of file diff --git a/test/asset/find.js b/test/asset/find.js index 3acca3e9..5758917f 100755 --- a/test/asset/find.js +++ b/test/asset/find.js @@ -2,816 +2,691 @@ /* * Module Dependencies. */ -var test = require('tape'); -var Contentstack = require('../../dist/node/contentstack.js'); -var init = require('../config.js'); -var Utils = require('../entry/utils.js') -var Stack; -/* - * Initalise the Contentstack Instance - * */ -test('Initalise the Contentstack Stack Instance', function(TC) { - setTimeout(function() { - Stack = Contentstack.Stack(init.stack); - Stack.setHost(init.host); - TC.end(); - }, 1000); -}); - - -test('default .find() No fallback', function(assert) { - var _in = ['ja-jp'] - Stack.Assets().Query().language('ja-jp').toJSON().find() - .then((assets) => { - assert.ok(assets[0].length, 'Assets present in the resultset'); - assert.notok(assets[1], 'Count should not be present'); - if (assets && assets.length && assets[0].length) { - var _assets = assets[0].every(function(asset) { - return (_in.indexOf(asset['publish_details']['locale']) != -1); - }); - assert.equal(_assets, true, "Publish content fallback" ); - } - assert.end(); - }).catch((error) => { - assert.fail("asset default .find() fallback catch", error.toString()); - assert.end(); - }) -}) - -test('default .find() fallback', function(assert) { - var _in = ['ja-jp', 'en-us'] - Stack.Assets().Query().language('ja-jp').includeFallback().toJSON().find() - .then((assets) => { - assert.ok(assets[0].length, 'Assets present in the resultset'); - assert.notok(assets[1], 'Count should not be present'); - if (assets && assets.length && assets[0].length) { - var _assets = assets[0].every(function(asset) { - return (_in.indexOf(asset['publish_details']['locale']) != -1); - }); - assert.equal(_assets, true, "Publish content fallback" ); - } - assert.end(); - }).catch((error) => { - assert.fail("asset default .find() fallback catch", error.toString()); - assert.end(); - }) -}) - -test('default .find()', function(assert) { - var Query = Stack.Assets().Query(), - field = 'updated_at'; - Query - .toJSON() - .find() - .then(function success(assets) { - assert.ok(assets[0].length, 'Assets present in the resultset'); - assert.notok(assets[1], 'Count should not be present'); - if (assets && assets.length && assets[0].length) { - var prev = assets[0][0][field]; - var _assets = assets[0].every(function(asset) { - prev = asset[field]; - return (asset[field] <= prev); - }); - assert.equal(_assets, true, "default sorting of descending 'updated_at'"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail("asset default .find()"); - assert.end(); - }); -}); - -/*! - * SORTING - * !*/ -test('.ascending()', function(assert) { - var Query = Stack.Assets().Query(), - field = 'updated_at'; - - Query - .ascending(field) - .toJSON() - .find() - .then(function success(assets) { - assert.ok(assets[0].length, 'assets present in the resultset'); - if (assets && assets.length && assets[0].length) { - var prev = assets[0][0][field]; - var _assets = assets[0].every(function(asset) { - prev = asset[field]; - return (asset[field] >= prev); - }); - assert.equal(_assets, true, "assets sorted ascending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".ascending()"); - assert.end(); - }); -}); - -test('.descending()', function(assert) { - var Query = Stack.Assets().Query(), - field = 'created_at'; - Query - .descending(field) - .toJSON() - .find() - .then(function success(assets) { - assert.ok(assets[0].length, 'assets present in the resultset'); - if (assets && assets.length && assets[0].length) { - var prev = assets[0][0][field]; - var _assets = assets[0].every(function(asset) { - var flag = (asset[field] <= prev); - prev = asset[field]; - return flag; - }); - assert.equal(_assets, true, "assets sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".descending()"); - assert.end(); - }); -}); - -// addparam -test('.addParam()', function(assert) { - var Query = Stack.Assets().Query(); - Query - .addParam('include_dimension', 'true') - .toJSON() - .find() - .then(function success(assets) { - assert.ok(assets[0][0].hasOwnProperty('dimension'), 'dimension present in the resultset'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".addParam()"); - assert.end(); - }); -}); - - -/*! - * COMPARISION - * !*/ -test('.lessThan()', function(assert) { - var Query = Stack.Assets().Query(), - field = 'file_size', - value = 5122; - Query - .lessThan('file_size', value) - .toJSON() - .find() - .then(function success(assets) { - assert.ok(assets[0].length, 1, '1 asset present in the resultset'); - if (assets && assets.length && assets[0].length) { - var prev = assets[0][0][field]; - var _assets = assets[0].slice(1).every(function(asset) { - var flag = (asset[field] < value); - prev = asset[field]; - return flag; - }); - assert.equal(_assets, true, "assets sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error('Error : ', err); - assert.fail(".lessThan()"); - assert.end(); - }); -}); - -test('.lessThanOrEqualTo()', function(assert) { - var Query = Stack.Assets().Query(), - field = 'updated_at'; - Query - .lessThanOrEqualTo('file_size', 5122) - .toJSON() - .find() - .then(function success(assets) { - assert.ok(assets[0].length, 2, 'two assets present in the resultset'); - if (assets && assets.length && assets[0].length) { - var prev = assets[0][0][field]; - var _assets = assets[0].every(function(asset) { - var flag = (asset[field] <= prev); - prev = asset[field]; - return flag; - }); - assert.equal(_assets, true, "assets sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".lessThanOrEqualTo()"); - assert.end(); - }).catch(function(err) { - console.log("error is this: ", err); - }); -}); - -test('.greaterThan()', function(assert) { - var Query = Stack.Assets().Query(), - field = 'file_size', - value = 5122; - - Query - .greaterThan('file_size', value) - .ascending(field) - .toJSON() - .find() - .then(function success(assets) { - assert.ok(assets[0].length, 3, 'three assets present in the resultset'); - if (assets && assets.length && assets[0].length) { - var prev = assets[0][0][field]; - var _assets = assets[0].slice(1).every(function(asset) { - var flag = (asset[field] > value); - prev = asset[field]; - return flag; - }); - assert.equal(_assets, true, "assets sorted ascending on '" + field + "' field"); - } - assert.end(); - }, function error() { - assert.fail(".greaterThan()"); - assert.end(); - }); -}); - -test('.greaterThanOrEqualTo()', function(assert) { - var Query = Stack.Assets().Query(), - field = 'file_size', - value = 5122; - - Query - .greaterThanOrEqualTo('file_size', 5122) - .descending(field) - .toJSON() - .find() - .then(function success(assets) { - assert.ok(assets[0].length, 4, 'four assets present in the resultset'); - if (assets && assets.length && assets[0].length) { - var prev = assets[0][0][field]; - var _assets = assets[0].every(function(asset) { - var flag = (asset[field] >= value); - prev = asset[field]; - return flag; - }); - assert.equal(_assets, true, "assets sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".greaterThanOrEqualTo()"); - assert.end(); - }); -}); - -test('.notEqualTo()', function(assert) { - var Query = Stack.Assets().Query(), - field = 'file_size', - value = 5122; - - Query - .notEqualTo('file_size', value) - .descending(field) - .toJSON() - .find() - .then(function success(assets) { - assert.ok(assets[0].length, 'assets present in the resultset'); - if (assets && assets.length && assets[0].length) { - var prev = assets[0][0][field]; - var _assets = assets[0].every(function(asset) { - var flag = (asset[field] != value); - prev = asset[field]; - return flag; - }); - assert.equal(_assets, true, "assets sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".notEqualTo()"); - assert.end(); - }); -}); - -test('.where()', function(assert) { - var Query = Stack.Assets().Query(); - Query - .where('title', "image1") - .toJSON() - .find() - .then(function success(assets) { - assert.ok(assets[0].length, 'assets present in the resultset'); - assert.equal(assets[0].length, 1, 'one asset present in the resultset'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".where()"); - assert.end(); - }); -}); - - -test('.equalTo() compare boolean value (true)', function(assert) { - var Query = Stack.Assets().Query(); - - Query - .language('en-us') - .equalTo('is_dir', false) - .toJSON() - .find() - .then(function success(assets) { - assert.ok(assets[0].length, 'assets present in the resultset'); - assert.equal(assets[0].length, 5, ' five asset present in the resultset'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".where()"); - assert.end(); - }); -}); - -test('.equalTo() compare boolean value (false)', function(assert) { - var Query = Stack.Assets().Query(); - Query - .equalTo('is_dir', true) - .toJSON() - .find() - .then(function success(assets) { - assert.notok(assets[0].length, 'assets not present in the resultset'); - assert.equal(assets[0].length, 0, ' three assets present in the resultset'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".where() boolean value having false"); - assert.end(); - }); -}); - -/*! - * Array/Subset - * !*/ - -test('.containedIn()', function(assert) { - var Query = Stack.Assets().Query(), - _in = ["image1", "image2"], - field = 'updated_at'; - - Query - .containedIn('title', _in) - .toJSON() - .find() - .then(function success(assets) { - assert.ok(assets[0].length, 'assets present in the resultset'); - assert.ok(assets[0].length, 2, 'two assets present in the resultset'); - if (assets && assets.length && assets[0].length) { - var _assets = assets[0].every(function(asset) { - return (_in.indexOf(asset['title']) != -1); - }); - assert.equal(_assets, true, "assets sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".containedIn()"); - assert.end(); - }); -}); - -test('.notContainedIn()', function(assert) { - var Query = Stack.Assets().Query(), - _in = ["image1", "image2"]; - - Query - .notContainedIn('title', _in) - .toJSON() - .find() - .then(function success(assets) { - assert.ok(assets[0].length, ' Assets present in the resultset'); - assert.ok(assets[0].length, 3, 'three assets present in the resultset'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".notContainedIn()"); - assert.end(); - }); -}); - - -/*! - *Element(exists) - * !*/ - -test('.exists()', function(assert) { - var Query = Stack.Assets().Query(), - queryField = "is_dir", - field = 'updated_at'; - - Query - .exists(queryField) - .toJSON() - .find() - .then(function success(assets) { - assert.ok(assets[0].length, 'assets present in the resultset'); - if (assets && assets.length && assets[0].length) { - var prev = assets[0][0][field]; - var _assets = assets[0].every(function(asset) { - var flag = (asset[field] <= prev); - prev = asset[field]; - return flag; - }); - assert.equal(_assets, true, "assets sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".exists()"); - assert.end(); - }); -}); - -test('.notExists()', function(assert) { - var Query = Stack.Assets().Query(), - queryField = "is_dir", - field = 'updated_at'; - - Query - .notExists(queryField) - .toJSON() - .find() - .then(function success(assets) { - assert.notok(assets[0].length, 'No asset present in the resultset'); - if (assets && assets.length && assets[0].length) { - var prev = assets[0][0][field]; - var _assets = assets[0].every(function(asset) { - return (asset[field] <= prev); - }); - assert.equal(_assets, true, "assets sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".notExists()"); - assert.end(); - }); -}); - - -// Pagination -test('.skip()', function(assert) { - var Query = Stack.Assets().Query(), - field = 'updated_at'; - - Query - .toJSON() - .find() - .then(function success(allassets) { - Stack - .Assets() - .Query() - .skip(1) - .toJSON() - .find() - .then(function success(assets) { - assert.ok((assets[0].length >= 2), '2 or more assets present in the resultset'); - assert.deepEqual(allassets[0].slice(1), assets[0], 'All elements matched.'); - if (assets && assets.length && assets[0].length) { - var prev = assets[0][0][field]; - var _assets = assets[0].every(function(asset) { - var flag = (asset[field] <= prev); - prev = asset[field]; - return flag; - }); - assert.equal(_assets, true, "assets sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".skip()"); - assert.end(); - }); - }, function error(err) { - console.error("error :", err); - assert.fail(".skip()"); - assert.end(); - }); -}); - -test('.limit()', function(assert) { - var Query = Stack.Assets().Query(), - field = 'updated_at'; - - Query - .toJSON() - .find() - .then(function success(allassets) { - Stack - .Assets() - .Query() - .limit(2) - .toJSON() - .find() - .then(function success(assets) { - assert.ok(assets[0].length, 'assets present in the resultset'); - assert.deepEqual(allassets[0].slice(0, 2), assets[0], 'All elements matched.'); - if (assets && assets.length && assets[0] && assets[0].length) { - var prev = assets[0][0][field]; - var _assets = assets[0].every(function(asset) { - var flag = (asset[field] <= prev); - prev = asset[field]; - return flag; - }); - assert.equal(_assets, true, "assets sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".limit()"); - assert.end(); - }); - }, function error(err) { - console.error("error :", err); - assert.fail(".limit()"); - assert.end(); - }); -}); - -test('.count()', function(assert) { - var Query = Stack.Assets().Query(); - - Query - .count() - .toJSON() - .find() - .then(function success(count) { - // assert.ok("assets" in result, 'assets key present in the resultset'); - assert.ok(count, 'assets present in the resultset'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".count()"); - assert.end(); - }); -}); - - -// Logical -test('.or() - Query Objects', function(assert) { - var Query1 = Stack.Assets().Query().where('title', 'image1'); - var Query2 = Stack.Assets().Query().where('is_dir', true); - var Query = Stack.Assets().Query(); - - Query - .or(Query1, Query2) - .toJSON() - .find() - .then(function success(assets) { - assert.ok(assets[0].length, 'assets present in the resultset'); - assert.ok(assets[0].length, 1, 'one asset present in the resultset'); - if (assets && assets.length && assets[0].length) { - var _assets = assets[0].every(function(asset) { - return (~(asset.title === 'source1' || asset.is_dir === true)); - }); - assert.ok(_assets, '$OR condition satisfied'); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".or() - Query Objects"); - assert.end(); - }); -}); - -test('.and() - Query Objects', function(assert) { - var Query1 = Stack.Assets().Query().where('title', 'image1'); - var Query2 = Stack.Assets().Query().where('is_dir', true); - var Query = Stack.Assets().Query(); - - Query - .and(Query1, Query2) - .toJSON() - .find() - .then(function success(assets) { - assert.notok(assets[0].length, ' asset not present in the resultset'); - if (assets && assets.length && assets[0].length) { - // console.log("\n\n\n\n",JSON.stringify(assets)); - var _assets = assets[0].every(function(asset) { - return (~(asset.title === 'image1' && asset.is_dir === true)); - }); - assert.ok(_assets, '$AND condition satisfied'); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".and() - Query Objects"); - assert.end(); - }); -}); - -// Custom query -test('.query() - Raw query', function(assert) { - var Query = Stack.Assets().Query(); - - Query - .query({ "$or": [{ "title": "image2" }, { "is_dir": "true" }] }) - .toJSON() - .find() - .then(function success(assets) { - assert.ok(assets[0].length, 'assets present in the resultset'); - assert.ok(assets[0].length, 1, 'one asset present in the resultset'); - if (assets && assets.length && assets[0].length) { - var _assets = assets[0].every(function(asset) { - return (asset.title === 'image2' || asset.is_dir === false) - }); - assert.ok(_assets, '$OR condition satisfied'); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".query() - Raw query"); - assert.end(); - }); -}); - - -test('.tags()', function(assert) { - var Query = Stack.Assets().Query(), - tags = ["asset3"]; - - Query - .tags(tags) - .toJSON() - .find() - .then(function success(assets) { - assert.ok((assets.length >= 1), '1 or more asset/assets present in the resultset'); - if (assets && assets.length && assets[0].length) { - assert.equal(assets[0].length, 0, 'Non refernce tags count should be zero'); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".tags()"); - assert.end(); - }); -}); -// tags -test('.tags()', function(assert) { - var Query = Stack.Assets().Query(), - field = 'tags', - tags = ["asset1", "asset2"]; - - Query - .tags(tags) - .toJSON() - .find() - .then(function success(assets) { - assert.ok((assets.length >= 1), '1 or more asset/assets present in the resultset'); - if (assets && assets.length && assets[0].length) { - var _assets = assets[0].every(function(asset) { - return (Utils.arrayPresentInArray(tags, asset[field])); - }); - assert.equal(_assets, true, 'Tags specified are found in result set'); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".tags()"); - assert.end(); - }); -}); - - -// search -test('.search()', function(assert) { - var Query = Stack.Assets().Query(); - Query - .toJSON() - .search('image1') - .find() - .then(function success(assets) { - assert.ok(assets[0].length, '1 asset present in the resultset'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".search()"); - assert.end(); - }); -}); - -// regex -test('.regex()', function(assert) { - var Query = Stack.Assets().Query(), - field = 'title', - regex = { - pattern: '^image', - options: 'i' - }, - regexpObj = new RegExp(regex.pattern, regex.options); - - Query - .regex(field, regex.pattern, regex.options) - .toJSON() - .find() - .then(function success(assets) { - assert.ok((assets.length >= 1), '1 or more asset/assets present in the resultset'); - var flag = assets[0].every(function(asset) { - return regexpObj.test(asset[field]); - }); - assert.ok(flag, "regexp satisfied for all the assets in the resultset"); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".regex()"); - assert.end(); +const Contentstack = require('../../dist/node/contentstack.js'); +const init = require('../config.js'); +const Utils = require('../entry/utils.js'); + +let Stack; + +describe("Contentstack Asset Tests", () => { + // Initialize the Contentstack Stack Instance + beforeAll(() => { + return new Promise((resolve) => { + Stack = Contentstack.Stack(init.stack); + Stack.setHost(init.host); + setTimeout(resolve, 1000); + }); + }); + + describe("Language and Fallback Tests", () => { + test('default .find() No fallback', async () => { + const _in = ['ja-jp']; + + try { + const assets = await Stack.Assets().Query().language('ja-jp').toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + expect(assets[1]).toBeFalsy(); + + if (assets && assets.length && assets[0].length) { + const _assets = assets[0].every((asset) => { + return (_in.indexOf(asset['publish_details']['locale']) !== -1); + }); + expect(_assets).toBe(true); + } + } catch (error) { + console.error("Error:", error); + fail("asset default .find() fallback catch: " + error.toString()); + } + }); + + test('default .find() fallback', async () => { + const _in = ['ja-jp', 'en-us']; + + try { + const assets = await Stack.Assets().Query().language('ja-jp').includeFallback().toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + expect(assets[1]).toBeFalsy(); + + if (assets && assets.length && assets[0].length) { + const _assets = assets[0].every((asset) => { + return (_in.indexOf(asset['publish_details']['locale']) !== -1); + }); + expect(_assets).toBe(true); + } + } catch (error) { + console.error("Error:", error); + fail("asset default .find() fallback catch: " + error.toString()); + } + }); + }); + + test('default .find()', async () => { + const Query = Stack.Assets().Query(); + const field = 'updated_at'; + + try { + const assets = await Query.toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + expect(assets[1]).toBeFalsy(); + + if (assets && assets.length && assets[0].length) { + let prev = assets[0][0][field]; + const _assets = assets[0].every((asset) => { + const flag = (asset[field] <= prev); + prev = asset[field]; + return flag; }); -}); - - -// includeCount -test('.includeCount()', function(assert) { - var Query = Stack.Assets().Query(); - - Query - .includeCount() - .toJSON() - .find() - .then(function success(assets) { - assert.ok(assets[0].length, 'assets present in the resultset'); - assert.ok(assets[1], 'Count present in the resultset'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".includeCount()"); - assert.end(); + expect(_assets).toBe(true); + } + } catch (err) { + console.error("Error:", err); + fail("asset default .find()"); + } + }); + + describe("Sorting", () => { + test('.ascending()', async () => { + const Query = Stack.Assets().Query(); + const field = 'updated_at'; + + try { + const assets = await Query.ascending(field).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + let prev = assets[0][0][field]; + const _assets = assets[0].every((asset) => { + const flag = (asset[field] >= prev); + prev = asset[field]; + return flag; + }); + expect(_assets).toBe(true); + } + } catch (err) { + console.error("Error:", err); + fail(".ascending()"); + } + }); + + test('.descending()', async () => { + const Query = Stack.Assets().Query(); + const field = 'created_at'; + + try { + const assets = await Query.descending(field).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + let prev = assets[0][0][field]; + const _assets = assets[0].every((asset) => { + const flag = (asset[field] <= prev); + prev = asset[field]; + return flag; + }); + expect(_assets).toBe(true); + } + } catch (err) { + console.error("Error:", err); + fail(".descending()"); + } + }); + }); + + describe("Params", () => { + test('.addParam()', async () => { + const Query = Stack.Assets().Query(); + + try { + const assets = await Query.addParam('include_dimension', 'true').toJSON().find(); + expect(assets[0][0].hasOwnProperty('dimension')).toBeTruthy(); + } catch (err) { + console.error("Error:", err); + fail(".addParam()"); + } + }); + }); + + describe("Comparison", () => { + test('.lessThan()', async () => { + const Query = Stack.Assets().Query(); + const field = 'file_size'; + const value = 5122; + + try { + const assets = await Query.lessThan('file_size', value).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + let prev = assets[0][0][field]; + const _assets = assets[0].slice(1).every((asset) => { + const flag = (asset[field] < value); + prev = asset[field]; + return flag; + }); + expect(_assets).toBe(true); + } + } catch (err) { + console.error("Error:", err); + fail(".lessThan()"); + } + }); + + test('.lessThanOrEqualTo()', async () => { + const Query = Stack.Assets().Query(); + const field = 'updated_at'; + + try { + const assets = await Query.lessThanOrEqualTo('file_size', 5122).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + let prev = assets[0][0][field]; + const _assets = assets[0].every((asset) => { + const flag = (asset[field] <= prev); + prev = asset[field]; + return flag; + }); + expect(_assets).toBe(true); + } + } catch (err) { + console.error("Error:", err); + fail(".lessThanOrEqualTo()"); + } + }); + + test('.greaterThan()', async () => { + const Query = Stack.Assets().Query(); + const field = 'file_size'; + const value = 5122; + + try { + const assets = await Query.greaterThan('file_size', value).ascending(field).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + let prev = assets[0][0][field]; + const _assets = assets[0].slice(1).every((asset) => { + const flag = (asset[field] > value); + prev = asset[field]; + return flag; + }); + expect(_assets).toBe(true); + } + } catch (err) { + fail(".greaterThan()"); + } + }); + + test('.greaterThanOrEqualTo()', async () => { + const Query = Stack.Assets().Query(); + const field = 'file_size'; + const value = 5122; + + try { + const assets = await Query.greaterThanOrEqualTo('file_size', value).descending(field).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + let prev = assets[0][0][field]; + const _assets = assets[0].every((asset) => { + const flag = (asset[field] >= value); + prev = asset[field]; + return flag; + }); + expect(_assets).toBe(true); + } + } catch (err) { + console.error("Error:", err); + fail(".greaterThanOrEqualTo()"); + } + }); + + test('.notEqualTo()', async () => { + const Query = Stack.Assets().Query(); + const field = 'file_size'; + const value = 5122; + + try { + const assets = await Query.notEqualTo('file_size', value).descending(field).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + let prev = assets[0][0][field]; + const _assets = assets[0].every((asset) => { + const flag = (asset[field] != value); + prev = asset[field]; + return flag; + }); + expect(_assets).toBe(true); + } + } catch (err) { + console.error("Error:", err); + fail(".notEqualTo()"); + } + }); + + test('.where()', async () => { + const Query = Stack.Assets().Query(); + + try { + const assets = await Query.where('title', "image1").toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + expect(assets[0].length).toBe(1); + } catch (err) { + console.error("Error:", err); + fail(".where()"); + } + }); + + test('.equalTo() compare boolean value (true)', async () => { + const Query = Stack.Assets().Query(); + + try { + const assets = await Query.language('en-us').equalTo('is_dir', false).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + expect(assets[0].length).toBe(5); + } catch (err) { + console.error("Error:", err); + fail(".where()"); + } + }); + + test('.equalTo() compare boolean value (false)', async () => { + const Query = Stack.Assets().Query(); + + try { + const assets = await Query.equalTo('is_dir', true).toJSON().find(); + + expect(assets[0].length).toBeFalsy(); + expect(assets[0].length).toBe(0); + } catch (err) { + console.error("Error:", err); + fail(".where() boolean value having false"); + } + }); + }); + + describe("Array/Subset Tests", () => { + test('.containedIn()', async () => { + const Query = Stack.Assets().Query(); + const _in = ["image1", "image2"]; + const field = 'updated_at'; + + try { + const assets = await Query.containedIn('title', _in).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + const _assets = assets[0].every((asset) => { + return (_in.indexOf(asset['title']) != -1); + }); + expect(_assets).toBe(true); + } + } catch (err) { + console.error("Error:", err); + fail(".containedIn()"); + } + }); + + test('.notContainedIn()', async () => { + const Query = Stack.Assets().Query(); + const _in = ["image1", "image2"]; + + try { + const assets = await Query.notContainedIn('title', _in).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + } catch (err) { + console.error("Error:", err); + fail(".notContainedIn()"); + } + }); + }); + + describe("Element Existence Tests", () => { + test('.exists()', async () => { + const Query = Stack.Assets().Query(); + const queryField = "is_dir"; + const field = 'updated_at'; + + try { + const assets = await Query.exists(queryField).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + let prev = assets[0][0][field]; + const _assets = assets[0].every((asset) => { + const flag = (asset[field] <= prev); + prev = asset[field]; + return flag; + }); + expect(_assets).toBe(true); + } + } catch (err) { + console.error("Error:", err); + fail(".exists()"); + } + }); + + test('.notExists()', async () => { + const Query = Stack.Assets().Query(); + const queryField = "is_dir"; + const field = 'updated_at'; + + try { + const assets = await Query.notExists(queryField).toJSON().find(); + + expect(assets[0].length).toBeFalsy(); + + if (assets && assets.length && assets[0].length) { + let prev = assets[0][0][field]; + const _assets = assets[0].every((asset) => { + return (asset[field] <= prev); + }); + expect(_assets).toBe(true); + } + } catch (err) { + console.error("Error:", err); + fail(".notExists()"); + } + }); + }); + + describe("Pagination Tests", () => { + test('.skip()', async () => { + const Query = Stack.Assets().Query(); + const field = 'updated_at'; + + try { + const allassets = await Query.toJSON().find(); + const assets = await Stack.Assets().Query().skip(1).toJSON().find(); + + expect(assets[0].length >= 2).toBeTruthy(); + expect(allassets[0].slice(1)).toEqual(assets[0]); + + if (assets && assets.length && assets[0].length) { + let prev = assets[0][0][field]; + const _assets = assets[0].every((asset) => { + const flag = (asset[field] <= prev); + prev = asset[field]; + return flag; + }); + expect(_assets).toBe(true); + } + } catch (err) { + console.error("Error:", err); + fail(".skip()"); + } + }); + + test('.limit()', async () => { + const Query = Stack.Assets().Query(); + const field = 'updated_at'; + + try { + const allassets = await Query.toJSON().find(); + const assets = await Stack.Assets().Query().limit(2).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + expect(allassets[0].slice(0, 2)).toEqual(assets[0]); + + if (assets && assets.length && assets[0] && assets[0].length) { + let prev = assets[0][0][field]; + const _assets = assets[0].every((asset) => { + const flag = (asset[field] <= prev); + prev = asset[field]; + return flag; + }); + expect(_assets).toBe(true); + } + } catch (err) { + console.error("Error:", err); + fail(".limit()"); + } + }); + + test('.count()', async () => { + const Query = Stack.Assets().Query(); + + try { + const count = await Query.count().toJSON().find(); + expect(count).toBeTruthy(); + } catch (err) { + console.error("Error:", err); + fail(".count()"); + } + }); + }); + + describe("Logical Operators Tests", () => { + test('.or() - Query Objects', async () => { + const Query1 = Stack.Assets().Query().where('title', 'image1'); + const Query2 = Stack.Assets().Query().where('is_dir', true); + const Query = Stack.Assets().Query(); + + try { + const assets = await Query.or(Query1, Query2).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + const _assets = assets[0].every((asset) => { + return (~(asset.title === 'source1' || asset.is_dir === true)); + }); + expect(_assets).toBeTruthy(); + } + } catch (err) { + console.error("Error:", err); + fail(".or() - Query Objects"); + } + }); + + test('.and() - Query Objects', async () => { + const Query1 = Stack.Assets().Query().where('title', 'image1'); + const Query2 = Stack.Assets().Query().where('is_dir', true); + const Query = Stack.Assets().Query(); + + try { + const assets = await Query.and(Query1, Query2).toJSON().find(); + + expect(assets[0].length).toBeFalsy(); + + if (assets && assets.length && assets[0].length) { + const _assets = assets[0].every((asset) => { + return (~(asset.title === 'image1' && asset.is_dir === true)); + }); + expect(_assets).toBeTruthy(); + } + } catch (err) { + console.error("Error:", err); + fail(".and() - Query Objects"); + } + }); + + test('.query() - Raw query', async () => { + const Query = Stack.Assets().Query(); + + try { + const assets = await Query.query({ "$or": [{ "title": "image2" }, { "is_dir": "true" }] }).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + const _assets = assets[0].every((asset) => { + return (asset.title === 'image2' || asset.is_dir === false); + }); + expect(_assets).toBeTruthy(); + } + } catch (err) { + console.error("Error:", err); + fail(".query() - Raw query"); + } + }); + }); + + describe("Tags Tests", () => { + test('.tags() - empty results', async () => { + const Query = Stack.Assets().Query(); + const tags = ["asset3"]; + + try { + const assets = await Query.tags(tags).toJSON().find(); + + expect(assets.length >= 1).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + expect(assets[0].length).toBe(0); + } + } catch (err) { + console.error("Error:", err); + fail(".tags()"); + } + }); + + test('.tags() - with results', async () => { + const Query = Stack.Assets().Query(); + const field = 'tags'; + const tags = ["asset1", "asset2"]; + + try { + const assets = await Query.tags(tags).toJSON().find(); + + expect(assets.length >= 1).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + const _assets = assets[0].every((asset) => { + return (Utils.arrayPresentInArray(tags, asset[field])); + }); + expect(_assets).toBe(true); + } + } catch (err) { + console.error("Error:", err); + fail(".tags()"); + } + }); + }); + + describe("Search Tests", () => { + test('.search()', async () => { + const Query = Stack.Assets().Query(); + + try { + const assets = await Query.toJSON().search('image1').find(); + expect(assets[0].length).toBeTruthy(); + } catch (err) { + console.error("Error:", err); + fail(".search()"); + } + }); + + test('.regex()', async () => { + const Query = Stack.Assets().Query(); + const field = 'title'; + const regex = { + pattern: '^image', + options: 'i' + }; + const regexpObj = new RegExp(regex.pattern, regex.options); + + try { + const assets = await Query.regex(field, regex.pattern, regex.options).toJSON().find(); + + expect(assets.length >= 1).toBeTruthy(); + + const flag = assets[0].every((asset) => { + return regexpObj.test(asset[field]); }); -}); - - -// only -test('.only() - Single String Parameter', function(assert) { - var Query = Stack.Assets().Query(); - - Query - .only('title') - .toJSON() - .find() - .then(function success(assets) { - assert.ok(assets[0].length, 'assets present in the resultset'); - var flag = assets[0].every(function(asset) { - return (asset && Object.keys(asset).length === 5 && "title" in asset && "uid" in asset && 'url' in asset); - }); - assert.ok(flag, 'assets with the field title in the resultset'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".only() - Single String Parameter"); - assert.end(); + expect(flag).toBeTruthy(); + } catch (err) { + console.error("Error:", err); + fail(".regex()"); + } + }); + }); + + describe("Include Options", () => { + test('.includeCount()', async () => { + const Query = Stack.Assets().Query(); + + try { + const assets = await Query.includeCount().toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + expect(assets[1]).toBeTruthy(); + } catch (err) { + console.error("Error:", err); + fail(".includeCount()"); + } + }); + }); + + describe("Field Projections", () => { + test('.only() - Single String Parameter', async () => { + const Query = Stack.Assets().Query(); + + try { + const assets = await Query.only('title').toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + + const flag = assets[0].every((asset) => { + return (asset && Object.keys(asset).length === 5 && "title" in asset && "uid" in asset && 'url' in asset); }); -}); - -test('.only() - Multiple String Parameter', function(assert) { - var Query = Stack.Assets().Query(); - - Query - .only('BASE', 'title') - .toJSON() - .find() - .then(function success(assets) { - assert.ok(assets[0].length, 'assets present in the resultset'); - var flag = assets[0].every(function(asset) { - return (asset && Object.keys(asset).length === 5 && "title" in asset && "uid" in asset && 'url' in asset); - }); - assert.ok(flag, 'assets with the field title in the resultset'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".only() - Multiple String Parameter"); - assert.end(); + expect(flag).toBeTruthy(); + } catch (err) { + console.error("Error:", err); + fail(".only() - Single String Parameter"); + } + }); + + test('.only() - Multiple String Parameter', async () => { + const Query = Stack.Assets().Query(); + + try { + const assets = await Query.only('BASE', 'title').toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + + const flag = assets[0].every((asset) => { + return (asset && Object.keys(asset).length === 5 && "title" in asset && "uid" in asset && 'url' in asset); }); -}); - -test('.only() - Array Parameter', function(assert) { - var Query = Stack.Assets().Query(); - - Query - .only(['title', 'filename']) - .toJSON() - .find() - .then(function success(assets) { - assert.ok(assets[0].length, 'assets present in the resultset'); - var flag = assets[0].every(function(asset) { - return (asset && Object.keys(asset).length === 5 && "title" in asset && "filename" in asset && "uid" in asset && "url" in asset); - }); - assert.ok(flag, 'assets with the field title,filename in the resultset'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".only() - Array Parameter"); - assert.end(); + expect(flag).toBeTruthy(); + } catch (err) { + console.error("Error:", err); + fail(".only() - Multiple String Parameter"); + } + }); + + test('.only() - Array Parameter', async () => { + const Query = Stack.Assets().Query(); + + try { + const assets = await Query.only(['title', 'filename']).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + + const flag = assets[0].every((asset) => { + return (asset && Object.keys(asset).length === 5 && "title" in asset && "filename" in asset && "uid" in asset && "url" in asset); }); + expect(flag).toBeTruthy(); + } catch (err) { + console.error("Error:", err); + fail(".only() - Array Parameter"); + } + }); + }); }); \ No newline at end of file diff --git a/test/asset/image-transformation.js b/test/asset/image-transformation.js index bb761cae..87ac2861 100755 --- a/test/asset/image-transformation.js +++ b/test/asset/image-transformation.js @@ -2,7 +2,6 @@ /* * Module Dependencies. */ -const test = require('tape'); const Contentstack = require('../../dist/node/contentstack.js'); const init = require('./../config.js'); const Utils = require('./../entry/utils.js'); @@ -11,91 +10,145 @@ const Regexp = new RegExp('\\\?', 'g'); let Stack; let Asset; -/* - * Initalise the Contentstack Instance - * */ -test('Initalise the Contentstack Stack Instance', function(TC) { - setTimeout(function() { - Stack = Contentstack.Stack(init.stack); - Stack.setHost(init.host); - TC.end(); - }, 1000); -}); - -test('Get All Assets', function(assert) { - Stack - .Assets() - .Query() - .toJSON() - .find() - .then(function success(assets) { - assert.ok(assets[0].length, 'Assets present in the resultset'); - Asset = assets[0][0]; - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail("asset default .find()"); - assert.end(); - }); -}); - -test('Valid URL: single parameter testing', function(assert) { + +describe('Image Transformation Tests', () => { + // Setup - runs before all tests + beforeAll(done => { + Stack = Contentstack.Stack(init.stack); + Stack.setHost(init.host); + setTimeout(done, 1000); + }); + + // Get assets for testing + describe('Get All Assets', () => { + beforeAll(async () => { + try { + const assets = await Stack.Assets().Query().toJSON().find(); + Asset = assets[0][0]; + } catch (error) { + console.error("error:", error); + throw new Error("Failed to get assets"); + } + }); + + test('Should have assets in the resultset', () => { + expect(Asset).toBeDefined(); + }); + }); + + describe('Valid URL: single parameter testing', () => { + let Image; const Params = { - quality: 50 - } - const URL = Asset['url']; - const Image = Stack.imageTransform(URL, Params); - console.log("URL : ", Image, Image.match(Regexp)); - assert.ok((Image.match(Regexp).length === 1), "Valid URL is generated"); - for (var key in Params) { - assert.ok((Image.indexOf('?' + key + '=' + Params[key]) !== -1), "Supplied parameter " + key + " found"); - } - assert.ok((Image.match(Regexp).length === 1), "Valid URL is generated"); - assert.end(); -}); - -test('Valid URL: multiple parameter testing', function(assert) { + quality: 50 + }; + + beforeAll(() => { + const URL = Asset['url']; + Image = Stack.imageTransform(URL, Params); + }); + + test('Should generate valid URL', () => { + expect(Image.match(Regexp).length).toBe(1); + }); + + test('Should include quality parameter', () => { + expect(Image.includes('?quality=50')).toBe(true); + }); + + test('Should verify URL is valid again', () => { + expect(Image.match(Regexp).length).toBe(1); + }); + }); + + describe('Valid URL: multiple parameter testing', () => { + let Image; const Params = { - quality: 50, - auto: 'webp', - format: 'jpg' - } - const URL = Asset['url']; - const Image = Stack.imageTransform(URL, Params); - assert.ok((Image.match(Regexp).length === 1), "Valid URL is generated"); - for (var key in Params) { - assert.ok((Image.indexOf(key + '=' + Params[key]) !== -1), "Supplied parameter " + key + " found"); - } - assert.ok((Image.match(Regexp).length === 1), "Valid URL is generated"); - assert.end(); -}); - -test('Invalid URL: single parameter testing', function(assert) { + quality: 50, + auto: 'webp', + format: 'jpg' + }; + + beforeAll(() => { + const URL = Asset['url']; + Image = Stack.imageTransform(URL, Params); + }); + + test('Should generate valid URL', () => { + expect(Image.match(Regexp).length).toBe(1); + }); + + test('Should include quality parameter', () => { + expect(Image.includes('quality=50')).toBe(true); + }); + + test('Should include auto parameter', () => { + expect(Image.includes('auto=webp')).toBe(true); + }); + + test('Should include format parameter', () => { + expect(Image.includes('format=jpg')).toBe(true); + }); + + test('Should verify URL is valid again', () => { + expect(Image.match(Regexp).length).toBe(1); + }); + }); + + describe('Invalid URL: single parameter testing', () => { + let Image; const Params = { - quality: 50 - } - const URL = Asset['url'] + '?'; - const Image = Stack.imageTransform(URL, Params); - assert.ok((Image.match(Regexp).length === 1), "Valid URL is generated"); - for (var key in Params) { - assert.ok((Image.indexOf(key + '=' + Params[key]) !== -1), "Supplied parameter " + key + " found"); - } - assert.ok((Image.match(Regexp).length === 1), "Valid URL is generated"); - assert.end(); -}); - -test('Invalid URL: multiple parameter testing', function(assert) { + quality: 50 + }; + + beforeAll(() => { + const URL = Asset['url'] + '?'; + Image = Stack.imageTransform(URL, Params); + }); + + test('Should generate valid URL', () => { + expect(Image.match(Regexp).length).toBe(1); + }); + + test('Should include quality parameter', () => { + expect(Image.includes('quality=50')).toBe(true); + }); + + test('Should verify URL is valid again', () => { + expect(Image.match(Regexp).length).toBe(1); + }); + }); + + describe('Invalid URL: multiple parameter testing', () => { + let Image; const Params = { - quality: 50, - auto: 'webp', - format: 'jpg' - } - const URL = Asset['url'] + '?'; - const Image = Stack.imageTransform(URL, Params); - assert.ok((Image.match(Regexp).length === 1), "Valid URL is generated"); - for (var key in Params) { - assert.ok((Image.indexOf(key + '=' + Params[key]) !== -1), "Supplied parameter " + key + " found"); - } - assert.ok((Image.match(Regexp).length === 1), "Valid URL is generated"); - assert.end(); + quality: 50, + auto: 'webp', + format: 'jpg' + }; + + beforeAll(() => { + const URL = Asset['url'] + '?'; + Image = Stack.imageTransform(URL, Params); + }); + + test('Should generate valid URL', () => { + expect(Image.match(Regexp).length).toBe(1); + }); + + test('Should include quality parameter', () => { + expect(Image.includes('quality=50')).toBe(true); + }); + + test('Should include auto parameter', () => { + expect(Image.includes('auto=webp')).toBe(true); + }); + + test('Should include format parameter', () => { + expect(Image.includes('format=jpg')).toBe(true); + }); + + test('Should verify URL is valid again', () => { + expect(Image.match(Regexp).length).toBe(1); + }); + }); }); \ No newline at end of file diff --git a/test/asset/spread.js b/test/asset/spread.js index a41067b8..e494eae2 100755 --- a/test/asset/spread.js +++ b/test/asset/spread.js @@ -5,91 +5,75 @@ /* * Module Dependencies. */ -var test = require('tape'); -var Contentstack = require('../../dist/node/contentstack.js'); -var init = require('../config.js'); +const Contentstack = require('../../dist/node/contentstack.js'); +const init = require('../config.js'); -var Stack; -/* - * Initalise the Contentstack Instance - * */ -test('Initalise the Contentstack Stack Instance', function(TC) { - setTimeout(function() { - Stack = Contentstack.Stack(init.stack); - Stack.setHost(init.host); - TC.end(); - }, 1000); -}); +let Stack; +describe("Contentstack Asset Tests", () => { + // Initialize the Contentstack Stack Instance + beforeAll(() => { + return new Promise((resolve) => { + Stack = Contentstack.Stack(init.stack); + Stack.setHost(init.host); + setTimeout(resolve, 1000); + }); + }); -test('assets as first argument', function(assert) { - var Query = Stack.Assets().Query(), - field = 'updated_at'; + test('assets as first argument', async () => { + const Query = Stack.Assets().Query(); + const field = 'updated_at'; - Query + try { + const result = await Query .limit(1) .toJSON() - .find() - .spread(function success(assets) { - assert.ok(assets.length, 'assets exists as first parameter'); - if (assets && assets.length) { - var prev = assets[0][field]; - var _assets = assets.every(function(asset) { - prev = asset[field]; - return (asset[field] <= prev); - }); - assert.equal(_assets, true, "default sorting of descending 'updated_at'"); - } - assert.end(); - }, function error(err) { - assert.end(); - }); -}); - -test('with assets and count argument', function(assert) { - var Query = Stack.Assets().Query(), - field = 'updated_at'; - Query - .includeCount() - .toJSON() - .find() - .spread(function success(assets, count) { - assert.ok(assets.length, 'assets exists as first parameter'); - assert.ok(count, 'Count exists as second parameter'); - if (assets && assets.length) { - var prev = assets[0][field]; - var _assets = assets.every(function(asset) { - prev = asset[field]; - return (asset[field] <= prev); - }); - assert.equal(_assets, true, "default sorting of descending 'updated_at'"); - } - assert.end(); - }, function error(err) { - assert.end(); + .find(); + + const assets = result[0]; // Using array destructuring + + expect(assets.length).toBeTruthy(); + + if (assets && assets.length) { + let prev = assets[0][field]; + const _assets = assets.every((asset) => { + prev = asset[field]; + return (asset[field] <= prev); }); -}); + expect(_assets).toBe(true); + } + } catch (err) { + console.error("Error:", err); + fail("assets as first argument test failed"); + } + }); -test('with assets and count argument', function(assert) { - var Query = Stack.Assets().Query(), - field = 'updated_at'; - Query + test('with assets and count argument', async () => { + const Query = Stack.Assets().Query(); + const field = 'updated_at'; + + try { + const result = await Query .includeCount() .toJSON() - .find() - .spread(function success(assets, count) { - assert.ok(assets.length, 'assets exists as first parameter'); - assert.ok(count, 'Count exists as second parameter'); - if (assets && assets.length) { - var prev = assets[0][field]; - var _assets = assets.every(function(asset) { - prev = asset[field]; - return (asset[field] <= prev); - }); - assert.equal(_assets, true, "default sorting of descending 'updated_at'"); - } - assert.end(); - }, function error(err) { - assert.end(); + .find(); + + const [assets, count] = result; // Using array destructuring + + expect(assets.length).toBeTruthy(); + expect(count).toBeTruthy(); + + if (assets && assets.length) { + let prev = assets[0][field]; + const _assets = assets.every((asset) => { + prev = asset[field]; + return (asset[field] <= prev); }); + expect(_assets).toBe(true); + } + } catch (err) { + console.error("Error:", err); + fail("with assets and count argument test failed"); + } + }); }); \ No newline at end of file diff --git a/test/entry/find-result-wrapper.js b/test/entry/find-result-wrapper.js index c6b553f2..531358a7 100755 --- a/test/entry/find-result-wrapper.js +++ b/test/entry/find-result-wrapper.js @@ -1,1130 +1,1038 @@ -'use strict'; +"use strict"; /* * Module Dependencies. */ -const test = require('tape'); -const Contentstack = require('../../dist/node/contentstack.js'); -const init = require('../config.js'); -const Utils = require('./utils.js'); +const Contentstack = require("../../dist/node/contentstack.js"); +const init = require("../config.js"); +const Utils = require("./utils.js"); const contentTypes = init.contentTypes; let Stack; -/* - * Initalise the Contentstack Instance - * */ -test('Initalise the Contentstack Stack Instance', function(TC) { - setTimeout(function() { - console.log(init.stack) - Stack = Contentstack.Stack(init.stack); - Stack.setHost(init.host); - TC.end(); - }, 1000); -}); - -test('default .find()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - field = 'updated_at'; - Query - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.ok(!entries[1], 'Count should not present in the result'); - if (entries && entries.length && entries[0].length) { - var prev = entries[0][0][field]; - var _entries = entries[0].every(function(entry) { - prev = entry[field]; - return (entry.updated_at <= prev); - }); - assert.equal(_entries, true, "default sorting of descending 'updated_at'"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail("default .find()"); - assert.end(); +let error = null; + +describe("ContentStack SDK Tests", () => { + // Initialize the Contentstack Stack Instance + beforeAll(() => { + return new Promise((resolve) => { + Stack = Contentstack.Stack(init.stack); + Stack.setHost(init.host); + setTimeout(resolve, 1000); + }); + }); + + test("default .find()", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + const field = "updated_at"; + + try { + const entries = await Query.toJSON().find(); + + expect(entries[0].length).toBeTruthy(); + expect(entries[1]).toBeFalsy(); + + if (entries && entries.length && entries[0].length) { + let prev = entries[0][0][field]; + const _entries = entries[0].every(function (entry) { + prev = entry[field]; + return entry.updated_at <= prev; }); -}); + expect(_entries).toBe(true); + } + } catch (err) { + console.error("error:", err); + fail("default .find()"); + } + }); -/*! - * SORTING - * !*/ -test('.ascending()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - field = 'updated_at'; - - Query - .ascending(field) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - assert.ok(entries[0].length, 'Entries present in the resultset'); - if (entries && entries.length && entries[0].length) { - var prev = entries[0][0][field]; - var _entries = entries[0].every(function(entry) { - prev = entry[field]; - return (entry[field] >= prev); - }); - assert.equal(_entries, true, "entries sorted ascending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".ascending()"); - assert.end(); - }); -}); + describe("sorting", () => { + test(".ascending()", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + const field = "updated_at"; -test('.descending()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - field = 'created_at'; - - Query - .descending(field) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - assert.ok(entries[0].length, 'Entries present in the resultset'); - if (entries && entries.length && entries[0].length) { - var prev = entries[0][0][field]; - var _entries = entries[0].every(function(entry) { - prev = entry[field]; - return (entry[field] >= prev); - }); - assert.equal(_entries, true, "entries sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".descending()"); - assert.end(); - }); -}); + try { + const entries = await Query.ascending(field).toJSON().find(); + expect(entries[0].length).toBeTruthy(); -/*! - * COMPARISION - * !*/ -test('.lessThan()', function(assert) { - var Query = Stack.ContentType(contentTypes.numbers_content_type).Query(), - value = 11, - field = 'updated_at'; - Query - .lessThan('num_field', value) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - assert.ok(entries[0].length, '1 Entry present in the resultset'); - if (entries && entries.length && entries[0].length) { - var prev = entries[0][0][field]; - var _entries = true; - _entries = entries[0].slice(1).every(function(entry) { - var flag = (entry[field] < value); - prev = entry[field]; - return flag; - }); - assert.equal(_entries, true, "entries sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".lessThan()"); - assert.end(); - }); -}); + if (entries && entries.length && entries[0].length) { + let prev = entries[0][0][field]; + const _entries = entries[0].every(function (entry) { + prev = entry[field]; + return entry[field] >= prev; + }); + expect(_entries).toBe(true); + } + } catch (err) { + console.error("error:", err); + fail(".ascending()"); + } + }); -test('.lessThanOrEqualTo()', function(assert) { - var Query = Stack.ContentType(contentTypes.numbers_content_type).Query(), - field = 'updated_at', - value = 11; - Query - .lessThanOrEqualTo('num_field', value) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - assert.ok(entries[0].length, 'Entries present in the resultset'); - if (entries && entries.length && entries[0].length) { - var prev = entries[0][0][field]; - var _entries = entries[0].every(function(entry) { - var flag = (entry[field] <= prev); - prev = entry[field]; - return flag; - }); - assert.equal(_entries, true, "entries sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".lessThanOrEqualTo()"); - assert.end(); - }); -}); + test(".descending()", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + const field = "created_at"; -test('.greaterThan()', function(assert) { - var Query = Stack.ContentType(contentTypes.numbers_content_type).Query(), - field = 'num_field', - value = 11; - - Query - .greaterThan('num_field', value) - .ascending(field) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - assert.ok(entries[0].length, 'Entries present in the resultset'); - if (entries && entries.length && entries[0].length) { - var prev = entries[0][0][field]; - var _entries = entries[0].slice(1).every(function(entry) { - var flag = (entry[field] > value); - prev = entry[field]; - return flag; - }); - assert.equal(_entries, true, "entries sorted ascending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".greaterThan()"); - assert.end(); - }); -}); + try { + const entries = await Query.descending(field).toJSON().find(); -test('.greaterThanOrEqualTo()', function(assert) { - var Query = Stack.ContentType(contentTypes.numbers_content_type).Query(), - field = 'num_field', - value = 11; - - Query - .greaterThanOrEqualTo('num_field', value) - .descending(field) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - assert.ok(entries[0].length, 'Entries present in the resultset'); - if (entries && entries.length && entries[0].length) { - var prev = entries[0][0][field]; - var _entries = entries[0].every(function(entry) { - var flag = (entry[field] >= value); - prev = entry[field]; - return flag; - }); - assert.equal(_entries, true, "entries sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".greaterThanOrEqualTo()"); - assert.end(); - }); -}); + expect(entries[0].length).toBeTruthy(); -test('.notEqualTo()', function(assert) { - var Query = Stack.ContentType(contentTypes.numbers_content_type).Query(), - field = 'num_field', - value = 6; - - Query - .notEqualTo('num_field', value) - .descending(field) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - assert.ok(entries[0].length, 'Entries present in the resultset'); - if (entries && entries.length && entries[0].length) { - var prev = entries[0][0][field]; - var _entries = entries[0].every(function(entry) { - var flag = (entry[field] != value); - prev = entry[field]; - return flag; - }); - assert.equal(_entries, true, "entries sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".notEqualTo()"); - assert.end(); - }); -}); + if (entries && entries.length && entries[0].length) { + let prev = entries[0][0][field]; + const _entries = entries[0].every(function (entry) { + prev = entry[field]; + return entry[field] >= prev; + }); + expect(_entries).toBe(true); + } + } catch (err) { + console.error("error:", err); + fail(".descending()"); + } + }); + }); + + describe("comparison", () => { + test(".lessThan()", async () => { + const Query = Stack.ContentType( + contentTypes.numbers_content_type + ).Query(); + const value = 11; + const field = "updated_at"; + + try { + const entries = await Query.lessThan("num_field", value) + .toJSON() + .find(); + + expect(entries[0].length).toBeTruthy(); -/*! - * Array/Subset - * !*/ - -test('.containedIn()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - _in = ["source1", "source2"], - field = 'updated_at'; - - Query - .containedIn('title', _in) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - assert.ok(entries[0].length, 'Entries present in the resultset'); - if (entries && entries.length && entries[0].length) { - var _entries = entries[0].every(function(entry) { - return (_in.indexOf(entry['title']) != -1); - }); - assert.equal(_entries, true, "entries sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".containedIn()"); - assert.end(); - }); -}); + if (entries && entries.length && entries[0].length) { + let prev = entries[0][0][field]; + const _entries = entries[0].slice(1).every(function (entry) { + const flag = entry[field] < value; + prev = entry[field]; + return flag; + }); + expect(_entries).toBe(true); + } + } catch (err) { + console.error("error:", err); + fail(".lessThan()"); + } + }); + + test(".lessThanOrEqualTo()", async () => { + const Query = Stack.ContentType( + contentTypes.numbers_content_type + ).Query(); + const field = "updated_at"; + const value = 11; + + try { + const entries = await Query.lessThanOrEqualTo("num_field", value) + .toJSON() + .find(); + + expect(entries[0].length).toBeTruthy(); -test('.notContainedIn()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - _in = ["sourceddd1", "sourceddddd2"]; - - Query - .notContainedIn('title', _in) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - assert.ok(entries[0].length, 'No Entry present in the resultset'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".notContainedIn()"); - assert.end(); - }); -}); + if (entries && entries.length && entries[0].length) { + let prev = entries[0][0][field]; + const _entries = entries[0].every(function (entry) { + const flag = entry[field] <= prev; + prev = entry[field]; + return flag; + }); + expect(_entries).toBe(true); + } + } catch (err) { + console.error("error:", err); + fail(".lessThanOrEqualTo()"); + } + }); + + test(".greaterThan()", async () => { + const Query = Stack.ContentType( + contentTypes.numbers_content_type + ).Query(); + const field = "num_field"; + const value = 11; + + try { + const entries = await Query.greaterThan("num_field", value) + .ascending(field) + .toJSON() + .find(); + + expect(entries[0].length).toBeTruthy(); + if (entries && entries.length && entries[0].length) { + let prev = entries[0][0][field]; + const _entries = entries[0].slice(1).every(function (entry) { + const flag = entry[field] > value; + prev = entry[field]; + return flag; + }); + expect(_entries).toBe(true); + } + } catch (err) { + console.error("error:", err); + fail(".greaterThan()"); + } + }); + + test(".greaterThanOrEqualTo()", async () => { + const Query = Stack.ContentType( + contentTypes.numbers_content_type + ).Query(); + const field = "num_field"; + const value = 11; + + try { + const entries = await Query.greaterThanOrEqualTo("num_field", value) + .descending(field) + .toJSON() + .find(); + + expect(entries[0].length).toBeTruthy(); -/*! - *Element(exists) - * !*/ - -test('.exists()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - queryField = "boolean", - field = 'updated_at'; - - Query - .exists(queryField) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - assert.ok(entries[0].length, 'Entries should not be present in the resultset'); - if (entries && entries.length && entries[0].length) { - var prev = entries[0][0][field]; - var _entries = entries[0].every(function(entry) { - var flag = (entry[field] <= prev); - prev = entry[field]; - return flag; - }); - assert.equal(_entries, true, "entries sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".exists()"); - assert.end(); - }); -}); + if (entries && entries.length && entries[0].length) { + let prev = entries[0][0][field]; + const _entries = entries[0].every(function (entry) { + const flag = entry[field] >= value; + prev = entry[field]; + return flag; + }); + expect(_entries).toBe(true); + } + } catch (err) { + console.error("error:", err); + fail(".greaterThanOrEqualTo()"); + } + }); + + test(".notEqualTo()", async () => { + const Query = Stack.ContentType( + contentTypes.numbers_content_type + ).Query(); + const field = "num_field"; + const value = 6; + + try { + const entries = await Query.notEqualTo("num_field", value) + .descending(field) + .toJSON() + .find(); + + expect(entries[0].length).toBeTruthy(); -test('.notExists()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - queryField = "isspecial", - field = 'updated_at'; - - Query - .notExists(queryField) - .toJSON() - .find() - .then(function success(entries) { - assert.ok("entries" in entries, 'Entries key present in the resultset'); - //assert.notok(entries[0].length, 'No entry present in the resultset'); - if (entries && entries.length && entries[0].length) { - var prev = entries[0][0][field]; - var _entries = entries[0].every(function(entry) { - return (entry[field] <= prev); - }); - assert.equal(_entries, true, "entries sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".notExists()"); - assert.end(); - }); -}); + if (entries && entries.length && entries[0].length) { + let prev = entries[0][0][field]; + const _entries = entries[0].every(function (entry) { + const flag = entry[field] != value; + prev = entry[field]; + return flag; + }); + expect(_entries).toBe(true); + } + } catch (err) { + console.error("error:", err); + fail(".notEqualTo()"); + } + }); + }); + describe("array/subset", () => { + test(".containedIn()", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + const _in = ["source1", "source2"]; + const field = "updated_at"; -// Pagination -test('.skip()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - field = 'updated_at'; - - Query - .toJSON() - .find() - .then(function success(allEntries) { - // assert.ok("entries" in allEntries, 'Entries key present in the resultset'); - Stack - .ContentType(contentTypes.source) - .Query() - .skip(1) - .toJSON() - .find() - .then(function result(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - assert.ok((entries[0].length >= 2), '2 or more Entries present in the resultset'); - assert.deepEqual(allEntries[0].slice(1), entries[0], 'All elements matched.'); - if (entries && entries.length && entries[0].length) { - allEntries[0] = allEntries[0].slice(1); - var prev = entries[0][0][field]; - var _entries = entries[0].every(function(entry) { - var flag = (entry[field] <= prev); - prev = entry[field]; - return flag; - }); - assert.equal(_entries, true, "entries sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(""); - assert.end(); - }); - }, function error(err) { - console.error("error :", err); - assert.fail("skip()"); - assert.end(); - }); -}); + try { + const entries = await Query.containedIn("title", _in).toJSON().find(); -test('.limit()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - field = 'updated_at'; - - Query - .toJSON() - .find() - .then(function success(allEntries) { - // assert.ok("entries" in allEntries, 'Entries key present in the resultset'); - Stack - .ContentType(contentTypes.source) - .Query() - .limit(2) - .toJSON() - .find() - .then(function result(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.deepEqual(allEntries[0].slice(0, 2), entries[0], 'All elements matched.'); - if (entries && entries.length && entries[0].length) { - var prev = entries[0][0][field]; - var _entries = entries[0].every(function(entry) { - var flag = (entry[field] <= prev); - prev = entry[field]; - return flag; - }); - assert.equal(_entries, true, "entries sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".limit()"); - assert.end(); - }); - }, function error(err) { - console.error("error :", err); - assert.fail(".limit()"); - assert.end(); - }); -}); + expect(entries[0].length).toBeTruthy(); -test('.count()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .count() - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - assert.ok(entries[0], 'Entries present in the resultset'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".count()"); - assert.end(); - }); -}); + if (entries && entries.length && entries[0].length) { + const _entries = entries[0].every(function (entry) { + return _in.indexOf(entry["title"]) != -1; + }); + expect(_entries).toBe(true); + } + } catch (err) { + console.error("error:", err); + fail(".containedIn()"); + } + }); + + test(".notContainedIn()", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + const _in = ["sourceddd1", "sourceddddd2"]; + + try { + const entries = await Query.notContainedIn("title", _in) + .toJSON() + .find(); + + expect(entries[0].length).toBeTruthy(); + } catch (err) { + console.error("error:", err); + fail(".notContainedIn()"); + } + }); + }); + + describe("exists", () => { + test(".exists()", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + const queryField = "boolean"; + const field = "updated_at"; + + try { + const entries = await Query.exists(queryField).toJSON().find(); + + expect(entries[0].length).toBeTruthy(); + if (entries && entries.length && entries[0].length) { + let prev = entries[0][0][field]; + const _entries = entries[0].every(function (entry) { + const flag = entry[field] <= prev; + prev = entry[field]; + return flag; + }); + expect(_entries).toBe(true); + } + } catch (err) { + console.error("error:", err); + fail(".exists()"); + } + }); + test(".notExists()", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + const queryField = "isspecial"; + const field = "updated_at"; -// Logical -test('.or() - Query Objects', function(assert) { - var Query1 = Stack.ContentType(contentTypes.source).Query().containedIn('title', ['source1', 'source2']); - var Query2 = Stack.ContentType(contentTypes.source).Query().where('boolean', true); - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .or(Query1, Query2) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - assert.ok(entries[0].length, 'Entries present in the resultset'); - if (entries && entries.length && entries[0].length) { - var _entries = entries[0].every(function(entry) { - return (~(entry.title === 'source1' || entry.boolean === true)); - }); - assert.ok(_entries, '$OR condition satisfied'); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".or() - Query Objects"); - assert.end(); - }); -}); + try { + const entries = await Query.notExists(queryField).toJSON().find(); -test('.and() - Query Objects', function(assert) { - var Query1 = Stack.ContentType(contentTypes.source).Query().where('title', 'source1'); - var Query2 = Stack.ContentType(contentTypes.source).Query().where('boolean', true); - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .and(Query1, Query2) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - assert.ok(entries[0].length, '1 Entry present in the resultset'); - if (entries && entries.length && entries[0].length) { - var _entries = entries[0].every(function(entry) { - return (~(entry.title === 'source1' || entry.boolean === true)); - }); - assert.ok(_entries, '$AND condition satisfied'); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".and() - Query Objects"); - assert.end(); - }); -}); + expect("entries" in entries).toBeTruthy(); -test('.and() - Raw queries', function(assert) { - var Query1 = Stack.ContentType(contentTypes.source).Query().where('title', 'source1'); - var Query2 = Stack.ContentType(contentTypes.source).Query().where('boolean', true); - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .and(Query1, Query2) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - assert.ok(entries[0].length, '1 Entry present in the resultset'); - if (entries && entries.length && entries[0].length) { - var _entries = entries[0].every(function(entry) { - return (~(entry.title === 'source1' || entry.boolean === true)); - }); - assert.ok(_entries, '$AND condition satisfied'); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".and() - Raw queries"); - assert.end(); - }); -}); + if (entries && entries.length && entries[0].length) { + let prev = entries[0][0][field]; + const _entries = entries[0].every(function (entry) { + return entry[field] <= prev; + }); + expect(_entries).toBe(true); + } + } catch (err) { + console.error("error:", err); + fail(".notExists()"); + } + }); + }); + + describe("pagination", () => { + test(".skip()", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + const field = "updated_at"; + + try { + const allEntries = await Query.toJSON().find(); + + const entries = await Stack.ContentType(contentTypes.source) + .Query() + .skip(1) + .toJSON() + .find(); + + expect(entries[0].length).toBeGreaterThanOrEqual(2); + expect(allEntries[0].slice(1)).toEqual(entries[0]); + if (entries && entries.length && entries[0].length) { + allEntries[0] = allEntries[0].slice(1); + let prev = entries[0][0][field]; + const _entries = entries[0].every(function (entry) { + const flag = entry[field] <= prev; + prev = entry[field]; + return flag; + }); + expect(_entries).toBe(true); + } + } catch (err) { + console.error("error:", err); + fail(".skip()"); + } + }); -// Custom query -test('.query() - Raw query', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .query({ "$or": [{ "title": "source1" }, { "boolean": "true" }] }) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - assert.ok(entries[0].length, 'Entries present in the resultset'); - if (entries && entries.length && entries[0].length) { - var _entries = entries[0].every(function(entry) { - return (entry.title === 'source1' || entry.boolean === true) - }); - assert.ok(_entries, '$OR condition satisfied'); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".query() - Raw query"); - assert.end(); - }); -}); + test(".limit()", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + const field = "updated_at"; + try { + const allEntries = await Query.toJSON().find(); -// tags -test('.tags()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - field = 'tags', - tags = ["tag1", "tag2"]; - - Query - .tags(tags) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - assert.ok((entries.length >= 1), '1 or more Entry/Entries present in the resultset'); - if (entries && entries.length && entries[0].length) { - var _entries = entries[0].every(function(entry) { - return (Utils.arrayPresentInArray(tags, entry[field])); - }); - assert.equal(_entries, true, 'Tags specified are found in result set'); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".tags()"); - assert.end(); - }); -}); + const entries = await Stack.ContentType(contentTypes.source) + .Query() + .limit(2) + .toJSON() + .find(); + expect(entries[0].length).toBeTruthy(); + expect(allEntries[0].slice(0, 2)).toEqual(entries[0]); -// search -test('.search()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .search('source1') - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - assert.ok(entries[0].length, '1 or more Entry present in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail(".search()"); - assert.end(); - }); -}); + if (entries && entries.length && entries[0].length) { + let prev = entries[0][0][field]; + const _entries = entries[0].every(function (entry) { + const flag = entry[field] <= prev; + prev = entry[field]; + return flag; + }); + expect(_entries).toBe(true); + } + } catch (err) { + console.error("error:", err); + fail(".limit()"); + } + }); + + test(".count()", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + + try { + const entries = await Query.count().toJSON().find(); + + expect(entries[0]).toBeTruthy(); + } catch (err) { + console.error("error:", err); + fail(".count()"); + } + }); + }); + + describe("logical", () => { + test(".or() - Query Objects", async () => { + const Query1 = Stack.ContentType(contentTypes.source) + .Query() + .containedIn("title", ["source1", "source2"]); + const Query2 = Stack.ContentType(contentTypes.source) + .Query() + .where("boolean", true); + const Query = Stack.ContentType(contentTypes.source).Query(); + + try { + const entries = await Query.or(Query1, Query2).toJSON().find(); + + expect(entries[0].length).toBeTruthy(); -// regex -test('.regex()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - field = 'title', - regex = { - pattern: '^source', - options: 'i' - }, - regexpObj = new RegExp(regex.pattern, regex.options); - - Query - .regex(field, regex.pattern, regex.options) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - assert.ok((entries.length >= 1), '1 or more Entry/Entries present in the resultset'); - var flag = entries[0].every(function(entry) { - return regexpObj.test(entry[field]); - }); - assert.ok(flag, "regexp satisfied for all the entries in the resultset"); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail(".regex()"); - assert.end(); - }); -}); + if (entries && entries.length && entries[0].length) { + const _entries = entries[0].every(function (entry) { + return ~(entry.title === "source1" || entry.boolean === true); + }); + expect(_entries).toBeTruthy(); + } + } catch (err) { + console.error("error:", err); + fail(".or() - Query Objects"); + } + }); + + test(".and() - Query Objects", async () => { + const Query1 = Stack.ContentType(contentTypes.source) + .Query() + .where("title", "source1"); + const Query2 = Stack.ContentType(contentTypes.source) + .Query() + .where("boolean", true); + const Query = Stack.ContentType(contentTypes.source).Query(); + + try { + const entries = await Query.and(Query1, Query2).toJSON().find(); + + expect(entries[0].length).toBeTruthy(); + if (entries && entries.length && entries[0].length) { + const _entries = entries[0].every(function (entry) { + return ~(entry.title === "source1" || entry.boolean === true); + }); + expect(_entries).toBeTruthy(); + } + } catch (err) { + console.error("error:", err); + fail(".and() - Query Objects"); + } + }); + + test(".and() - Raw queries", async () => { + const Query1 = Stack.ContentType(contentTypes.source) + .Query() + .where("title", "source1"); + const Query2 = Stack.ContentType(contentTypes.source) + .Query() + .where("boolean", true); + const Query = Stack.ContentType(contentTypes.source).Query(); + + try { + const entries = await Query.and(Query1, Query2).toJSON().find(); + + expect(entries[0].length).toBeTruthy(); -test('find: without fallback', function(assert) { - var _in = ['ja-jp'] - Stack.ContentType(contentTypes.source).Query().language('ja-jp') - .toJSON() - .find() - .then((entries) => { - assert.ok(entries[0].length, 'Entries present in the resultset'); if (entries && entries.length && entries[0].length) { - var _entries = entries[0].every(function(entry) { - return (_in.indexOf(entry['publish_details']['locale']) != -1); - }); - assert.equal(_entries, true, "Publish content fallback"); + const _entries = entries[0].every(function (entry) { + return ~(entry.title === "source1" || entry.boolean === true); + }); + expect(_entries).toBeTruthy(); } - assert.end(); - }).catch((error) => { - assert.fail("Entries default .find() fallback catch", error.toString()); - assert.end(); - }) -}) - -test('find: fallback', function(assert) { - var _in = ['ja-jp', 'en-us'] - Stack.ContentType(contentTypes.source).Query().language('ja-jp') - .includeFallback() - .toJSON() - .find() - .then((entries) => { - assert.ok(entries[0].length, 'Entries present in the resultset'); + } catch (err) { + console.error("error:", err); + fail(".and() - Raw queries"); + } + }); + }); + + describe("custom query", () => { + test(".query() - Raw query", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + + try { + const entries = await Query.query({ + $or: [{ title: "source1" }, { boolean: "true" }], + }) + .toJSON() + .find(); + + expect(entries[0].length).toBeTruthy(); + if (entries && entries.length && entries[0].length) { - var _entries = entries[0].every(function(entry) { - return (_in.indexOf(entry['publish_details']['locale']) != -1); - }); - assert.equal(_entries, true, "Publish content fallback"); + const _entries = entries[0].every(function (entry) { + return entry.title === "source1" || entry.boolean === true; + }); + expect(_entries).toBeTruthy(); } - assert.end(); - }).catch((error) => { - assert.fail("Entries default .find() fallback catch", error.toString()); - assert.end(); - }) -}) - -// includeReference -test('.includeReference() - String', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeReference('reference') - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - var flag = entries[0].every(function(entry) { - return (entry && entry['reference'] && typeof entry['reference'] === 'object'); - }); - assert.equal(flag, true, 'all the present reference are included'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail(".includeReference() - String"); - assert.end(); - }); -}); + } catch (err) { + console.error("error:", err); + fail(".query() - Raw query"); + } + }); + }); -test('.includeReference() - Array', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeReference(['reference', 'other_reference']) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - var flag = entries[0].every(function(entry) { - return (entry && entry['reference'] && typeof entry['reference'] === 'object' && entry['other_reference'] && typeof entry['other_reference'] === 'object'); - }); - assert.equal(flag, true, 'all the present reference are included'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail(".includeReference() - Array"); - assert.end(); - }); -}); + describe("tags", () => { + test(".tags()", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + const field = "tags"; + const tags = ["tag1", "tag2"]; -// includeCount -test('.includeCount()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeCount() - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.ok(entries[1], 'Count present in the resultset'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".includeCount()"); - assert.end(); - }); -}); + try { + const entries = await Query.tags(tags).toJSON().find(); + + expect(entries.length).toBeGreaterThanOrEqual(1); -// includeSchema -test('.includeSchema()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeSchema() - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.ok(entries[1].length, 'Schema present in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail(".includeSchema()"); - assert.end(); + if (entries && entries.length && entries[0].length) { + const _entries = entries[0].every(function (entry) { + return Utils.arrayPresentInArray(tags, entry[field]); + }); + expect(_entries).toBe(true); + } + } catch (err) { + console.error("error:", err); + fail(".tags()"); + } + }); + }); + + describe("search", () => { + test(".search()", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + + try { + const entries = await Query.search("source1").toJSON().find(); + + expect(entries[0].length).toBeTruthy(); + } catch (err) { + console.error("Error:", err); + fail(".search()"); + } + }); + }); + + describe("regex", () => { + test(".regex()", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + const field = "title"; + const regex = { + pattern: "^source", + options: "i", + }; + const regexpObj = new RegExp(regex.pattern, regex.options); + + try { + const entries = await Query.regex(field, regex.pattern, regex.options) + .toJSON() + .find(); + + expect(entries.length).toBeGreaterThanOrEqual(1); + + const flag = entries[0].every(function (entry) { + return regexpObj.test(entry[field]); }); -}); + expect(flag).toBeTruthy(); + } catch (err) { + console.error("Error:", err); + fail(".regex()"); + } + }); + }); + + describe("locale and fallback", () => { + test("find: without fallback", async () => { + const _in = ["ja-jp"]; + + try { + const entries = await Stack.ContentType(contentTypes.source) + .Query() + .language("ja-jp") + .toJSON() + .find(); + + expect(entries[0].length).toBeTruthy(); + if (entries && entries.length && entries[0].length) { + const _entries = entries[0].every(function (entry) { + return _in.indexOf(entry["publish_details"]["locale"]) != -1; + }); + expect(_entries).toBe(true); + } + } catch (error) { + fail("Entries default .find() fallback catch: " + error.toString()); + } + }); -// includeCount && includeSchema -test('.includeCount() and .includeSchema()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeCount() - .includeSchema() - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.ok(entries[1].length, 'Schema present in the resultset'); - assert.ok(entries[2], 'Count present in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail(".includeSchema()"); - assert.end(); - }); -}); + test("find: fallback", async () => { + const _in = ["ja-jp", "en-us"]; -// includeContentType -test('.includeContentType()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeContentType() - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - //assert.equal(Utils.isEntriesPublished(entries[0], Stack.environment_uid, 'en-us'), true, "Entries present in the resultset are published."); - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.ok(entries[1], 'ContentType present in the resultset'); - assert.ok(entries[1]['title'], 'ContentType title exists'); - assert.ok((entries[1]['uid'] === contentTypes.source), 'ContentType uid is same as requested'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".includeContentType()"); - assert.end(); - }); -}); + try { + const entries = await Stack.ContentType(contentTypes.source) + .Query() + .language("ja-jp") + .includeFallback() + .toJSON() + .find(); -// includeCount && includeContentType -test('.includeCount() and .includeContentType()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeCount() - .includeContentType() - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - //assert.equal(Utils.isEntriesPublished(entries[0], Stack.environment_uid, 'en-us'), true, "Entries present in the resultset are published."); - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.ok(entries[1], 'ContentType present in the resultset'); - assert.ok(entries[1]['title'], 'ContentType title exists'); - assert.ok((entries[1]['uid'] === contentTypes.source), 'ContentType uid is same as requested'); - assert.ok(entries[2], 'Count present in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail(".includeCount && includeContentType"); - assert.end(); - }); -}); + expect(entries[0].length).toBeTruthy(); -// includeSchema && includeContentType -test('.includeSchema() and .includeContentType()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeSchema() - .includeContentType() - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - //assert.equal(Utils.isEntriesPublished(entries[0], Stack.environment_uid, 'en-us'), true, "Entries present in the resultset are published."); - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.ok(entries[1], 'ContentType present in the resultset'); - assert.ok(entries[1]['title'], 'ContentType title exists'); - assert.ok((entries[1]['uid'] === contentTypes.source), 'ContentType uid is same as requested'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail(".includeCount && includeContentType"); - assert.end(); + if (entries && entries.length && entries[0].length) { + const _entries = entries[0].every(function (entry) { + return _in.indexOf(entry["publish_details"]["locale"]) != -1; + }); + expect(_entries).toBe(true); + } + } catch (error) { + fail("Entries default .find() fallback catch: " + error.toString()); + } + }); + }); + + describe("include reference", () => { + test(".includeReference() - String", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + + try { + const entries = await Query.includeReference("reference") + .toJSON() + .find(); + + const flag = entries[0].every(function (entry) { + return ( + entry && + entry["reference"] && + typeof entry["reference"] === "object" + ); }); -}); - -// includeCount, includeSchema && includeContentType -test('.includeSchema() and .includeContentType()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeCount() - .includeSchema() - .includeContentType() - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - //assert.equal(Utils.isEntriesPublished(entries[0], Stack.environment_uid, 'en-us'), true, "Entries present in the resultset are published."); - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.ok(entries[1], 'ContentType present in the resultset'); - assert.ok(entries[1]['title'], 'ContentType title exists'); - assert.ok((entries[1]['uid'] === contentTypes.source), 'ContentType uid is same as requested'); - assert.ok(entries[2], 'Count present in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail(".includeCount && includeContentType"); - assert.end(); + expect(flag).toBe(true); + } catch (err) { + console.error("Error:", err); + fail(".includeReference() - String"); + } + }); + + test(".includeReference() - Array", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + + try { + const entries = await Query.includeReference([ + "reference", + "other_reference", + ]) + .toJSON() + .find(); + + const flag = entries[0].every(function (entry) { + return ( + entry && + entry["reference"] && + typeof entry["reference"] === "object" && + entry["other_reference"] && + typeof entry["other_reference"] === "object" + ); }); -}); - - -// only -test('.only() - Single String Parameter', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .only('title') - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - var flag = entries[0].every(function(entry) { - return (entry && Object.keys(entry).length === 2 && "title" in entry && "uid" in entry); - }); - assert.ok(flag, 'entries with the field title in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail(".only() - Single String Parameter"); - assert.end(); + expect(flag).toBe(true); + } catch (err) { + console.error("Error:", err); + fail(".includeReference() - Array"); + } + }); + }); + + describe("include count and schema", () => { + test(".includeCount()", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + + try { + const entries = await Query.includeCount().toJSON().find(); + + expect(entries[0].length).toBeTruthy(); + expect(entries[1]).toBeTruthy(); + } catch (err) { + console.error("error:", err); + fail(".includeCount()"); + } + }); + + test(".includeSchema()", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + + try { + const entries = await Query.includeSchema().toJSON().find(); + + expect(entries[0].length).toBeTruthy(); + expect(entries[1].length).toBeTruthy(); + } catch (err) { + console.error("Error:", err); + fail(".includeSchema()"); + } + }); + + test(".includeCount() and .includeSchema()", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + + try { + const entries = await Query.includeCount() + .includeSchema() + .toJSON() + .find(); + + expect(entries[0].length).toBeTruthy(); + expect(entries[1].length).toBeTruthy(); + expect(entries[2]).toBeTruthy(); + } catch (err) { + console.error("Error:", err); + fail(".includeSchema()"); + } + }); + }); + + describe("include contenttypes", () => { + test(".includeContentType()", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + + try { + const entries = await Query.includeContentType().toJSON().find(); + + expect(entries[0].length).toBeTruthy(); + expect(entries[1]).toBeTruthy(); + expect(entries[1]["title"]).toBeTruthy(); + expect(entries[1]["uid"]).toBe(contentTypes.source); + } catch (err) { + console.error("error:", err); + fail(".includeContentType()"); + } + }); + + test(".includeCount() and .includeContentType()", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + + try { + const entries = await Query.includeCount() + .includeContentType() + .toJSON() + .find(); + + expect(entries[0].length).toBeTruthy(); + expect(entries[1]).toBeTruthy(); + expect(entries[1]["title"]).toBeTruthy(); + expect(entries[1]["uid"]).toBe(contentTypes.source); + expect(entries[2]).toBeTruthy(); + } catch (err) { + console.error("Error:", err); + fail(".includeCount && includeContentType"); + } + }); + + test(".includeSchema() and .includeContentType()", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + + try { + const entries = await Query.includeSchema() + .includeContentType() + .toJSON() + .find(); + + expect(entries[0].length).toBeTruthy(); + expect(entries[1]).toBeTruthy(); + expect(entries[1]["title"]).toBeTruthy(); + expect(entries[1]["uid"]).toBe(contentTypes.source); + } catch (err) { + console.error("Error:", err); + fail(".includeCount && includeContentType"); + } + }); + + test(".includeCount(), .includeSchema() and .includeContentType()", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + + try { + const entries = await Query.includeCount() + .includeSchema() + .includeContentType() + .toJSON() + .find(); + + expect(entries[0].length).toBeTruthy(); + expect(entries[1]).toBeTruthy(); + expect(entries[1]["title"]).toBeTruthy(); + expect(entries[1]["uid"]).toBe(contentTypes.source); + expect(entries[2]).toBeTruthy(); + } catch (err) { + console.error("Error:", err); + fail(".includeCount && includeContentType"); + } + }); + }); + + describe("field projections", () => { + test(".only() - Single String Parameter", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + + try { + const entries = await Query.only("title").toJSON().find(); + + const flag = entries[0].every(function (entry) { + return ( + entry && + Object.keys(entry).length === 2 && + "title" in entry && + "uid" in entry + ); }); -}); - -test('.only() - Multiple String Parameter', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .only('BASE', 'title') - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - var flag = entries[0].every(function(entry) { - return (entry && Object.keys(entry).length === 2 && "title" in entry && "uid" in entry); - }); - assert.ok(flag, 'entries with the field title in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail(".only() - Multiple String Parameter"); - assert.end(); + expect(flag).toBeTruthy(); + } catch (err) { + console.error("Error:", err); + fail(".only() - Single String Parameter"); + } + }); + + test(".only() - Multiple String Parameter", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + + try { + const entries = await Query.only("BASE", "title").toJSON().find(); + + const flag = entries[0].every(function (entry) { + return ( + entry && + Object.keys(entry).length === 2 && + "title" in entry && + "uid" in entry + ); }); -}); - -test('.only() - Array Parameter', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .only(['title', 'url']) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - var flag = entries[0].every(function(entry) { - return (entry && Object.keys(entry).length === 3 && "title" in entry && "url" in entry && "uid" in entry); - }); - assert.ok(flag, 'entries with the field title,url in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail(".only() - Array Parameter"); - assert.end(); + expect(flag).toBeTruthy(); + } catch (err) { + console.error("Error:", err); + fail(".only() - Multiple String Parameter"); + } + }); + + test(".only() - Array Parameter", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + + try { + const entries = await Query.only(["title", "url"]).toJSON().find(); + + const flag = entries[0].every(function (entry) { + return ( + entry && + Object.keys(entry).length === 3 && + "title" in entry && + "url" in entry && + "uid" in entry + ); }); -}); - -test('.only() - For the reference - String', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeReference('reference') - .only('BASE', ['reference']) - .only('reference', 'title') - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail(".only() - For the reference - String"); - assert.end(); + expect(flag).toBeTruthy(); + } catch (err) { + console.error("Error:", err); + fail(".only() - Array Parameter"); + } + }); + + test(".only() - For the reference - String", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + + try { + const entries = await Query.includeReference("reference") + .only("BASE", ["reference"]) + .only("reference", "title") + .toJSON() + .find(); + + expect(entries).toBeTruthy(); + } catch (err) { + console.error("Error:", err); + fail(".only() - For the reference - String"); + } + }); + + test(".only() - For the reference - Array", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + + try { + const entries = await Query.includeReference("reference") + .only("BASE", ["reference"]) + .only("reference", ["title"]) + .toJSON() + .find(); + + expect(entries).toBeTruthy(); + } catch (err) { + console.error("Error:", err); + fail(".only() - For the reference - Array"); + } + }); + + test(".except() - Single String Parameter", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + + try { + const entries = await Query.except("title").toJSON().find(); + + const flag = entries[0].every(function (entry) { + return entry && !("title" in entry); }); -}); + expect(flag).toBeTruthy(); + } catch (err) { + console.error("Error:", err); + fail(".except() - Single String Parameter"); + } + }); -test('.only() - For the reference - Array', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeReference('reference') - .only('BASE', ['reference']) - .only('reference', ['title']) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail(".only() - For the reference - Array"); - assert.end(); - }); -}); + test(".except() - Multiple String Parameter", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); -// except -test('.except() - Single String Parameter', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .except('title') - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - var flag = entries[0].every(function(entry) { - return (entry && !("title" in entry)); - }); - assert.ok(flag, 'entries without the field title in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail(".except() - Single String Parameter"); - assert.end(); - }); -}); + try { + const entries = await Query.except("BASE", "title").toJSON().find(); -test('.except() - Multiple String Parameter', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .except('BASE', 'title') - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - var flag = entries[0].every(function(entry) { - return (entry && !("title" in entry)); - }); - assert.ok(flag, 'entries without the field title, url in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail(".except() - Multiple String Parameter"); - assert.end(); + const flag = entries[0].every(function (entry) { + return entry && !("title" in entry); }); -}); + expect(flag).toBeTruthy(); + } catch (err) { + console.error("Error:", err); + fail(".except() - Multiple String Parameter"); + } + }); -test('.except() - Array of String Parameter', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .except(['title', 'file']) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - var flag = entries[0].every(function(entry) { - return (entry && !("title" in entry) && !("file" in entry)); - }); - assert.ok(flag, 'entries without the field title, file in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail(".except() - Array of String Parameter"); - assert.end(); - }); -}); + test(".except() - Array of String Parameter", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + + try { + const entries = await Query.except(["title", "file"]).toJSON().find(); -test('.except() - For the reference - String', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeReference('reference') - .only('BASE', ['reference']) - .except('reference', 'title') - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - var flag = entries[0].every(function(entry) { - var _flag; - if (entry && entry['reference'] && typeof entry['reference'] === 'object') { - _flag = true; - _flag = entry.reference.every(function(reference) { - return (reference && !("title" in reference)); - }); - } else { - _flag = false; - } - return (_flag && entry && Object.keys(entry).length === 2 && "reference" in entry && "uid" in entry); + const flag = entries[0].every(function (entry) { + return entry && !("title" in entry) && !("file" in entry); + }); + expect(flag).toBeTruthy(); + } catch (err) { + console.error("Error:", err); + fail(".except() - Array of String Parameter"); + } + }); + test(".except() - For the reference - String", async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + + const entries = await Query.includeReference("reference") + .only("BASE", ["reference"]) + .except("reference", "title") + .toJSON() + .find(); + + const flag = entries[0].every((entry) => { + let _flag; + if ( + entry && + entry["reference"] && + typeof entry["reference"] === "object" + ) { + _flag = true; + _flag = entry.reference.every((reference) => { + return reference && !("title" in reference); }); - assert.ok(flag, 'entries withthe field reference without title field in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail(".except() - For the reference - String"); - assert.end(); + } else { + _flag = false; + } + return ( + _flag && + entry && + Object.keys(entry).length === 2 && + "reference" in entry && + "uid" in entry + ); }); -}); -test('.except() - For the reference - Array', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeReference('reference') - .only('BASE', ['reference']) - .except('reference', ['title']) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - var flag = entries[0].every(function(entry) { - var _flag; - if (entry && entry['reference'] && typeof entry['reference'] === 'object') { - _flag = true; - _flag = entry.reference.every(function(reference) { - return (reference && !("title" in reference)); - }); - } else { - _flag = false; - } - return (_flag && entry && Object.keys(entry).length === 2 && "reference" in entry && "uid" in entry); + expect(flag).toBeTruthy(); + } catch (err) { + console.error("Error:", err); + fail(".except() - For the reference - String"); + } + }); + + test(".except() - For the reference - Array", async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + + const entries = await Query.includeReference("reference") + .only("BASE", ["reference"]) + .except("reference", ["title"]) + .toJSON() + .find(); + + const flag = entries[0].every((entry) => { + let _flag; + if ( + entry && + entry["reference"] && + typeof entry["reference"] === "object" + ) { + _flag = true; + _flag = entry.reference.every((reference) => { + return reference && !("title" in reference); }); - assert.ok(flag, 'entries with the field reference without title field in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail(".except() - For the reference - Array"); - assert.end(); + } else { + _flag = false; + } + return ( + _flag && + entry && + Object.keys(entry).length === 2 && + "reference" in entry && + "uid" in entry + ); }); -}); \ No newline at end of file + + expect(flag).toBeTruthy(); + } catch (err) { + console.error("Error:", err); + fail(".except() - For the reference - Array"); + } + }); + }); +}); diff --git a/test/entry/find.js b/test/entry/find.js index 7c4c2c57..081c80b7 100755 --- a/test/entry/find.js +++ b/test/entry/find.js @@ -1,1676 +1,1714 @@ -'use strict'; +"use strict"; /* * Module Dependencies. */ -const test = require('tape'); -const Contentstack = require('../../dist/node/contentstack.js'); -const init = require('../config.js'); -const Utils = require('./utils.js'); +const Contentstack = require("../../dist/node/contentstack.js"); +const init = require("../config.js"); +const Utils = require("./utils.js"); const contentTypes = init.contentTypes; let Stack; -/* - * Initalise the Contentstack Instance - * */ -test('Initalise the Contentstack Stack Instance', function(TC) { - setTimeout(function() { - Stack = Contentstack.Stack(init.stack); - Stack.setHost(init.host); - TC.end(); - }, 1000); -}); - -test('early_access in stack initialization', function (t) { - const stack = Contentstack.Stack({ ...init.stack, early_access: ['newCDA', 'taxonomy'] }); - t.equal(stack.headers['x-header-ea'], 'newCDA,taxonomy', 'Early access headers should be added'); - t.end(); -}); - -test('default .find()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - field = 'updated_at'; - Query - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - // assert.equal(Utils.isEntriesPublished(entries[0], Stack.environment_uid, 'en-us'), true, "Entries present in the resultset are published."); - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.notok(entries[1], 'Count should not be present'); - if (entries && entries.length && entries[0].length) { - var prev = entries[0][0][field]; - var _entries = entries[0].every(function(entry) { - prev = entry[field]; - return (entry[field] <= prev); - }); - assert.equal(_entries, true, "default sorting of descending 'updated_at'"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail("default .find()"); - assert.end(); - }); -}); - -/*! - * SORTING - * !*/ -test('.ascending()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - field = 'updated_at'; - - Query - .ascending(field) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - // assert.equal(Utils.isEntriesPublished(entries[0], Stack.environment_uid, 'en-us'), true, "Entries present in the resultset are published."); - assert.ok(entries[0].length, 'Entries present in the resultset'); - if (entries && entries.length && entries[0].length) { - var prev = entries[0][0][field]; - var _entries = entries[0].every(function(entry) { - prev = entry[field]; - return (entry[field] >= prev); - }); - assert.equal(_entries, true, "entries sorted ascending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".ascending()"); - assert.end(); - }); -}); - -test('.descending()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - field = 'created_at'; - - Query - .descending(field) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - // assert.equal(Utils.isEntriesPublished(entries[0], Stack.environment_uid, 'en-us'), true, "Entries present in the resultset are published."); - assert.ok(entries[0].length, 'Entries present in the resultset'); - if (entries && entries.length && entries[0].length) { - var prev = entries[0][0][field]; - var _entries = entries[0].every(function(entry) { - var flag = (entry[field] <= prev); - prev = entry[field]; - return flag; - }); - assert.equal(_entries, true, "entries sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".descending()"); - assert.end(); - }); -}); - - -// addparam -test('.addParam()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .addParam('include_count', 'true') - .toJSON() - .find() - .then(function success(entries) { - assert.ok(entries[0].length, 'Entries length present in the resultset'); - assert.ok(entries[1], 'count present in the resultset'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".addParam()"); - assert.end(); - }); -}); - - -/*! - * COMPARISION - * !*/ -test('.lessThan()', function(assert) { - var Query = Stack.ContentType(contentTypes.numbers_content_type).Query(), - field = 'num_field', - value = 11; - Query - .lessThan('num_field', value) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - // assert.equal(Utils.isEntriesPublished(entries[0], Stack.environment_uid, 'en-us'), true, "Entries present in the resultset are published."); - assert.ok(entries[0].length, '1 Entry present in the resultset'); - if (entries && entries.length && entries[0].length) { - var prev = entries[0][0][field]; - var _entries = entries[0].slice(1).every(function(entry) { - var flag = (entry[field] < value); - prev = entry[field]; - return flag; - }); - assert.equal(_entries, true, "entries sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error('Error : ', err); - assert.fail(".lessThan()"); - assert.end(); - }); -}); - -test('.lessThanOrEqualTo()', function(assert) { - var Query = Stack.ContentType(contentTypes.numbers_content_type).Query(), - field = 'updated_at', - value = 11; - - Query - .lessThanOrEqualTo('num_field', value) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - // assert.equal(Utils.isEntriesPublished(entries[0], Stack.environment_uid, 'en-us'), true, "Entries present in the resultset are published."); - assert.ok(entries[0].length, 'Entries present in the resultset'); - if (entries && entries.length && entries[0].length) { - var prev = entries[0][0][field]; - var _entries = entries[0].every(function(entry) { - var flag = (entry[field] <= prev); - prev = entry[field]; - return flag; - }); - assert.equal(_entries, true, "entries sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".lessThanOrEqualTo()"); - assert.end(); - }); -}); - -test('.greaterThan()', function(assert) { - var Query = Stack.ContentType(contentTypes.numbers_content_type).Query(), - field = 'num_field', - value = 11; - - Query - .greaterThan('num_field', value) - .ascending(field) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - // assert.equal(Utils.isEntriesPublished(entries[0], Stack.environment_uid, 'en-us'), true, "Entries present in the resultset are published."); - assert.ok(entries[0].length, 'Entries present in the resultset'); - if (entries && entries.length && entries[0].length) { - var prev = entries[0][0][field]; - var _entries = entries[0].slice(1).every(function(entry) { - var flag = (entry[field] > value); - prev = entry[field]; - return flag; - }); - assert.equal(_entries, true, "entries sorted ascending on '" + field + "' field"); - } - assert.end(); - }, function error() { - assert.fail(".greaterThan()"); - assert.end(); - }); -}); - -test('.greaterThanOrEqualTo()', function(assert) { - var Query = Stack.ContentType(contentTypes.numbers_content_type).Query(), - field = 'num_field', - value = 11; - - Query - .greaterThanOrEqualTo('num_field', value) - .descending(field) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - // assert.equal(Utils.isEntriesPublished(entries[0], Stack.environment_uid, 'en-us'), true, "Entries present in the resultset are published."); - assert.ok(entries[0].length, 'Entries present in the resultset'); - if (entries && entries.length && entries[0].length) { - var prev = entries[0][0][field]; - var _entries = entries[0].every(function(entry) { - var flag = (entry[field] >= value); - prev = entry[field]; - return flag; - }); - assert.equal(_entries, true, "entries sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".greaterThanOrEqualTo()"); - assert.end(); - }); -}); - -test('.notEqualTo()', function(assert) { - var Query = Stack.ContentType(contentTypes.numbers_content_type).Query(), - field = 'num_field', - value = 6; - - Query - .notEqualTo('num_field', value) - .descending(field) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - // assert.equal(Utils.isEntriesPublished(entries[0], Stack.environment_uid, 'en-us'), true, "Entries present in the resultset are published."); - assert.ok(entries[0].length, 'Entries present in the resultset'); - if (entries && entries.length && entries[0].length) { - var prev = entries[0][0][field]; - var _entries = entries[0].every(function(entry) { - var flag = (entry[field] != value); - prev = entry[field]; - return flag; - }); - assert.equal(_entries, true, "entries sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".notEqualTo()"); - assert.end(); - }); -}); - -test('.where() compare boolean value (true)', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .where('boolean', true) - .toJSON() - .find() - .then(function success(entries) { - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.equal(entries[0].length, 4, 'two entries present in the resultset'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".where()"); - assert.end(); - }); -}); - -test('.where() compare boolean value (false)', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - Query - .where('boolean', false) - .toJSON() - .find() - .then(function success(entries) { - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.equal(entries[0].length, 3, ' three entries present in the resultset'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".where() boolean value having false"); - assert.end(); - }); -}); - -test('.where()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .where('title', '') - .toJSON() - .find() - .then(function success(entries) { - assert.equal(entries[0].length, 0, ' zero entry present in the resultset'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".equalTo compare boolean value (true)"); - assert.end(); - }); -}); - -test('.equalTo() compare boolean value (true)', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .equalTo('boolean', true) - .toJSON() - .find() - .then(function success(entries) { - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.equal(entries[0].length, 4, ' four entries present in the resultset'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".where()"); - assert.end(); - }); -}); - -test('.equalTo() compare boolean value (false)', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - Query - .equalTo('boolean', false) - .toJSON() - .find() - .then(function success(entries) { - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.equal(entries[0].length, 3, ' three entries present in the resultset'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".where() boolean value having false"); - assert.end(); - }); -}); - -// /*! -// * Array/Subset -// * !*/ - -test('.containedIn()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - _in = ["source1", "source2"], - field = 'updated_at'; - - Query - .containedIn('title', _in) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - // assert.equal(Utils.isEntriesPublished(entries[0], Stack.environment_uid, 'en-us'), true, "Entries present in the resultset are published."); - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.ok(entries[0].length, 2, 'two entries present in the resultset'); - if (entries && entries.length && entries[0].length) { - var _entries = entries[0].every(function(entry) { - return (_in.indexOf(entry['title']) != -1); - }); - assert.equal(_entries, true, "entries sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".containedIn()"); - assert.end(); - }); -}); - -test('.notContainedIn()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - _in = ["source1", "source2"]; - - Query - .notContainedIn('title', _in) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - assert.ok(entries[0].length, 'No Entry present in the resultset'); - assert.ok(entries[0].length, 3, 'three Entries present in the resultset'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".notContainedIn()"); - assert.end(); - }); -}); - - -/*! - *Element(exists) - * !*/ - -test('.exists()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - queryField = "boolean", - field = 'updated_at'; - - Query - .exists(queryField) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - // assert.equal(Utils.isEntriesPublished(entries[0], Stack.environment_uid, 'en-us'), true, "Entries present in the resultset are published."); - assert.ok(entries[0].length, 'Entries present in the resultset'); - if (entries && entries.length && entries[0].length) { - var prev = entries[0][0][field]; - var _entries = entries[0].every(function(entry) { - var flag = (entry[field] <= prev); - prev = entry[field]; - return flag; - }); - assert.equal(_entries, true, "entries sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".exists()"); - assert.end(); - }); -}); - -test('.notExists()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - queryField = "isspecial", - field = 'updated_at'; - - Query - .notExists(queryField) - .toJSON() - .find() - .then(function success(entries) { - assert.ok("entries" in entries, 'Entries key present in the resultset'); - //assert.notok(entries[0].length, 'No entry present in the resultset'); - if (entries && entries.length && entries[0].length) { - var prev = entries[0][0][field]; - var _entries = entries[0].every(function(entry) { - return (entry[field] <= prev); - }); - assert.equal(_entries, true, "entries sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".notExists()"); - assert.end(); - }); -}); - - -// Pagination -test('.skip()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - field = 'updated_at'; - - Query - .toJSON() - .find() - .then(function success(allEntries) { - //assert.equal(Utils.isEntriesPublished(allEntries[0], Stack.environment_uid, 'en-us'), true, "Entries present in the resultset are published."); - // assert.ok("entries" in allEntries, 'Entries key present in the resultset'); - Stack - .ContentType(contentTypes.source) - .Query() - .skip(1) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - //assert.equal(Utils.isEntriesPublished(entries[0], Stack.environment_uid, 'en-us'), true, "Entries present in the resultset are published."); - assert.ok((entries[0].length >= 2), '2 or more Entries present in the resultset'); - assert.deepEqual(allEntries[0].slice(1), entries[0], 'All elements matched.'); - if (entries && entries.length && entries[0].length) { - var prev = entries[0][0][field]; - var _entries = entries[0].every(function(entry) { - var flag = (entry[field] <= prev); - prev = entry[field]; - return flag; - }); - assert.equal(_entries, true, "entries sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".skip()"); - assert.end(); - }); - }, function error(err) { - console.error("error :", err); - assert.fail(".skip()"); - assert.end(); - }); -}); - -test('.limit()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - field = 'updated_at'; - - Query - .toJSON() - .find() - .then(function success(allEntries) { - //assert.equal(Utils.isEntriesPublished(allEntries[0], Stack.environment_uid, 'en-us'), true, "Entries present in the resultset are published."); - // assert.ok("entries" in allEntries, 'Entries key present in the resultset'); - Stack - .ContentType(contentTypes.source) - .Query() - .limit(2) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - //assert.equal(Utils.isEntriesPublished(entries[0], Stack.environment_uid, 'en-us'), true, "Entries present in the resultset are published."); - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.deepEqual(allEntries[0].slice(0, 2), entries[0], 'All elements matched.'); - if (entries && entries.length && entries[0] && entries[0].length) { - var prev = entries[0][0][field]; - var _entries = entries[0].every(function(entry) { - var flag = (entry[field] <= prev); - prev = entry[field]; - return flag; - }); - assert.equal(_entries, true, "entries sorted descending on '" + field + "' field"); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".limit()"); - assert.end(); - }); - }, function error(err) { - console.error("error :", err); - assert.fail(".limit()"); - assert.end(); - }); -}); - -test('.count()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .count() - .toJSON() - .find() - .then(function success(count) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - assert.ok(count, 'Entries present in the resultset'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".count()"); - assert.end(); - }); -}); - - -// Logical -test('.or() - Query Objects', function(assert) { - var Query1 = Stack.ContentType(contentTypes.source).Query().where('title', 'source2'); - var Query2 = Stack.ContentType(contentTypes.source).Query().where('boolean', true); - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .or(Query1, Query2) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - // assert.equal(Utils.isEntriesPublished(entries[0], Stack.environment_uid, 'en-us'), true, "Entries present in the resultset are published."); - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.ok(entries[0].length, 2, 'two entries present in the resultset'); - if (entries && entries.length && entries[0].length) { - var _entries = entries[0].every(function(entry) { - return (~(entry.title === 'source1' || entry.boolean === true)); - }); - assert.ok(_entries, '$OR condition satisfied'); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".or() - Query Objects"); - assert.end(); - }); -}); - -test('.and() - Query Objects', function(assert) { - var Query1 = Stack.ContentType(contentTypes.source).Query().where('title', 'source1'); - var Query2 = Stack.ContentType(contentTypes.source).Query().where('boolean', true); - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .and(Query1, Query2) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - // assert.equal(Utils.isEntriesPublished(entries[0], Stack.environment_uid, 'en-us'), true, "Entries present in the resultset are published."); - assert.ok(entries[0].length, '1 Entry present in the resultset'); - if (entries && entries.length && entries[0].length) { - // console.log("\n\n\n\n",JSON.stringify(entries)); - var _entries = entries[0].every(function(entry) { - return (~(entry.title === 'source1' || entry.boolean === true)); - }); - assert.ok(_entries, '$AND condition satisfied'); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".and() - Query Objects"); - assert.end(); - }); -}); - -// Custom query -test('.query() - Raw query', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .query({ "$or": [{ "title": "source2" }, { "boolean": "true" }] }) - .toJSON() - .find() - .then(function success(entries) { - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.ok(entries[0].length, 2, 'two entries present in the resultset'); - if (entries && entries.length && entries[0].length) { - var _entries = entries[0].every(function(entry) { - return (entry.title === 'source2' || entry.boolean === false) - }); - assert.ok(_entries, '$OR condition satisfied'); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".query() - Raw query"); - assert.end(); - }); -}); - - -// tags -test('.tags()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - field = 'tags', - tags = ["tag1", "tag2"]; - - Query - .tags(tags) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - // assert.equal(Utils.isEntriesPublished(entries[0], Stack.environment_uid, 'en-us'), true, "Entries present in the resultset are published."); - assert.ok((entries.length >= 1), '1 or more Entry/Entries present in the resultset'); - if (entries && entries.length && entries[0].length) { - var _entries = entries[0].every(function(entry) { - return (Utils.arrayPresentInArray(tags, entry[field])); - }); - assert.equal(_entries, true, 'Tags specified are found in result set'); - } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".tags()"); - assert.end(); - }); -}); - - -// search -test('.search()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - Query - .toJSON() - .search('source2') - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - //assert.equal(Utils.isEntriesPublished(entries[0], Stack.environment_uid, 'en-us'), true, "Entries present in the resultset are published."); - assert.ok(entries[0].length, '1 Entry present in the resultset'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".search()"); - assert.end(); - }); -}); - -// regex -test('.regex()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - field = 'title', - regex = { - pattern: '^source', - options: 'i' - }, - regexpObj = new RegExp(regex.pattern, regex.options); - - Query - .regex(field, regex.pattern, regex.options) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - //assert.equal(Utils.isEntriesPublished(entries[0], Stack.environment_uid, 'en-us'), true, "Entries present in the resultset are published."); - assert.ok((entries.length >= 1), '1 or more Entry/Entries present in the resultset'); - var flag = entries[0].every(function(entry) { - return regexpObj.test(entry[field]); - }); - assert.ok(flag, "regexp satisfied for all the entries in the resultset"); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".regex()"); - assert.end(); - }); -}); - -// inlcudeEmbeddedItems -test('.inlcudeEmbeddedItems()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeEmbeddedItems() - .toJSON() - .find() - .then(function success(entries) { - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".inlcudeEmbeddedItems()"); - assert.end(); - }); -}); - -test('find: without fallback', function(assert) { - var _in = ['ja-jp'] - Stack.ContentType(contentTypes.source).Query().language('ja-jp') - .toJSON() - .find() - .then((entries) => { - assert.ok(entries[0].length, 'Entries present in the resultset'); + +describe("ContentStack SDK Tests", () => { + // Setup - Initialize the Contentstack Stack Instance + beforeAll((done) => { + Stack = Contentstack.Stack(init.stack); + Stack.setHost(init.host); + setTimeout(done, 1000); + }); + + describe("Stack Initialization", () => { + test("early_access in stack initialization should add headers", () => { + const stack = Contentstack.Stack({ + ...init.stack, + early_access: ["newCDA", "taxonomy"], + }); + expect(stack.headers["x-header-ea"]).toBe("newCDA,taxonomy"); + }); + }); + + describe("Default Find", () => { + let entries + const field = "updated_at"; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.toJSON().find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + + test("Count should not be present", () => { + expect(entries[1]).toBeFalsy(); + }); + + test("Entries should be sorted by default in descending order of updated_at", () => { + if (entries && entries.length && entries[0].length > 1) { + let prev = entries[0][0][field]; + const sortedCorrectly = entries[0].slice(1).every((entry) => { + const isValid = entry[field] <= prev; + prev = entry[field]; + return isValid; + }); + expect(sortedCorrectly).toBe(true); + } + }); + }); + + describe("Sorting", () => { + describe(".ascending()", () => { + let entries; + const field = "updated_at"; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.ascending(field).toJSON().find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + + test("Entries should be sorted in ascending order", () => { + if (entries && entries.length && entries[0].length > 1) { + let prev = entries[0][0][field]; + const sortedCorrectly = entries[0].slice(1).every((entry) => { + const isValid = entry[field] >= prev; + prev = entry[field]; + return isValid; + }); + expect(sortedCorrectly).toBe(true); + } + }); + }); + + describe(".descending()", () => { + let entries; + const field = "created_at"; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.descending(field).toJSON().find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + + test("Entries should be sorted in descending order", () => { + if (entries && entries.length && entries[0].length > 1) { + let prev = entries[0][0][field]; + const sortedCorrectly = entries[0].slice(1).every((entry) => { + const isValid = entry[field] <= prev; + prev = entry[field]; + return isValid; + }); + expect(sortedCorrectly).toBe(true); + } + }); + }); + }); + + describe("Parameters", () => { + describe(".addParam()", () => { + let entries; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.addParam("include_count", "true") + .toJSON() + .find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + + test("Count should be present", () => { + expect(entries[1]).toBeTruthy(); + }); + }); + }); + + describe("Comparison", () => { + describe(".lessThan()", () => { + let entries; + const field = "num_field"; + const value = 11; + + test("Should return entry in the resultset", async () => { + try { + const Query = Stack.ContentType( + contentTypes.numbers_content_type + ).Query(); + + const result = await Query.lessThan("num_field", value) + .toJSON() + .find(); + + entries = result; + expect(entries[0].length).toBeTruthy(); + } catch (err) { + fail("Query.lessThan failed"); + } + }); + + test("All entries should have num_field less than specified value", () => { if (entries && entries.length && entries[0].length) { - var _entries = entries[0].every(function(entry) { - return (_in.indexOf(entry['publish_details']['locale']) != -1); - }); - assert.equal(_entries, true, "Publish content fallback"); + const allLessThan = entries[0].every((entry) => entry[field] < value); + expect(allLessThan).toBe(true); + } + }); + }); + + describe(".lessThanOrEqualTo()", () => { + let entries; + const field = "num_field"; + const value = 11; + + beforeAll(async () => { + try { + const Query = Stack.ContentType( + contentTypes.numbers_content_type + ).Query(); + entries = await Query.lessThanOrEqualTo("num_field", value) + .toJSON() + .find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + + test("All entries should have num_field less than or equal to specified value", () => { + const allLessThanOrEqual = entries[0].every( + (entry) => entry[field] <= value + ); + expect(allLessThanOrEqual).toBe(true); + }); + + test("Entries should be sorted in descending order by default", () => { + const updatedAtField = "updated_at"; + if (entries && entries.length && entries[0].length > 1) { + let prev = entries[0][0][updatedAtField]; + const sortedCorrectly = entries[0].slice(1).every((entry) => { + const isValid = entry[updatedAtField] <= prev; + prev = entry[updatedAtField]; + return isValid; + }); + expect(sortedCorrectly).toBe(true); + } + }); + }); + + describe(".greaterThan()", () => { + let entries; + const field = "num_field"; + const value = 11; + + beforeAll(async () => { + try { + const Query = Stack.ContentType( + contentTypes.numbers_content_type + ).Query(); + entries = await Query.greaterThan("num_field", value) + .ascending(field) + .toJSON() + .find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + + test("All entries should have num_field greater than specified value", () => { + const allGreaterThan = entries[0].every( + (entry) => entry[field] > value + ); + expect(allGreaterThan).toBe(true); + }); + + test("Entries should be sorted in ascending order", () => { + if (entries && entries.length && entries[0].length > 1) { + let prev = entries[0][0][field]; + const sortedCorrectly = entries[0].slice(1).every((entry) => { + const isValid = entry[field] >= prev; + prev = entry[field]; + return isValid; + }); + expect(sortedCorrectly).toBe(true); + } + }); + }); + + describe(".greaterThanOrEqualTo()", () => { + let entries; + const field = "num_field"; + const value = 11; + + beforeAll(async () => { + try { + const Query = Stack.ContentType( + contentTypes.numbers_content_type + ).Query(); + entries = await Query.greaterThanOrEqualTo("num_field", value) + .descending(field) + .toJSON() + .find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + + test("All entries should have num_field greater than or equal to specified value", () => { + const allGreaterThanOrEqual = entries[0].every( + (entry) => entry[field] >= value + ); + expect(allGreaterThanOrEqual).toBe(true); + }); + + test("Entries should be sorted in descending order", () => { + if (entries && entries.length && entries[0].length > 1) { + let prev = entries[0][0][field]; + const sortedCorrectly = entries[0].slice(1).every((entry) => { + const isValid = entry[field] <= prev; + prev = entry[field]; + return isValid; + }); + expect(sortedCorrectly).toBe(true); } - assert.end(); - }).catch((error) => { - assert.fail("Entries default .find() fallback catch", error.toString()); - assert.end(); - }) -}) - -test('find: fallback', function(assert) { - var _in = ['ja-jp', 'en-us'] - Stack.ContentType(contentTypes.source).Query().language('ja-jp') - .includeFallback() - .toJSON() - .find() - .then((entries) => { - assert.ok(entries[0].length, 'Entries present in the resultset'); + }); + }); + + describe(".notEqualTo()", () => { + let entries; + const field = "num_field"; + const value = 6; + + beforeAll(async () => { + try { + const Query = Stack.ContentType( + contentTypes.numbers_content_type + ).Query(); + entries = await Query.notEqualTo("num_field", value) + .descending(field) + .toJSON() + .find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + + test("All entries should have num_field not equal to specified value", () => { + const allNotEqual = entries[0].every((entry) => entry[field] !== value); + expect(allNotEqual).toBe(true); + }); + + test("Entries should be sorted in descending order", () => { + if (entries && entries.length && entries[0].length > 1) { + let prev = entries[0][0][field]; + const sortedCorrectly = entries[0].slice(1).every((entry) => { + const isValid = entry[field] <= prev; + prev = entry[field]; + return isValid; + }); + expect(sortedCorrectly).toBe(true); + } + }); + }); + + describe(".where() with boolean value (true)", () => { + let entries; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.where("boolean", true).toJSON().find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + + test("Should return four entries in the resultset", () => { + expect(entries[0].length).toBe(4); + }); + + test("All entries should have boolean field set to true", () => { + const allTrue = entries[0].every((entry) => entry.boolean === true); + expect(allTrue).toBe(true); + }); + }); + + describe(".where() with boolean value (false)", () => { + let entries; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.where("boolean", false).toJSON().find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + + test("Should return three entries in the resultset", () => { + expect(entries[0].length).toBe(3); + }); + + test("All entries should have boolean field set to false", () => { + const allFalse = entries[0].every((entry) => entry.boolean === false); + expect(allFalse).toBe(true); + }); + }); + + describe(".where() with empty string", () => { + let entries; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.where("title", "").toJSON().find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return zero entries in the resultset", () => { + expect(entries[0].length).toBe(0); + }); + }); + describe(".tags()", () => { + let entries; + const field = "tags"; + const tags = ["tag1", "tag2"]; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.tags(tags).toJSON().find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return one or more entries in the resultset", () => { + expect(entries.length).toBeGreaterThanOrEqual(1); + }); + + test("All entries should have at least one of the specified tags", () => { if (entries && entries.length && entries[0].length) { - var _entries = entries[0].every(function(entry) { - return (_in.indexOf(entry['publish_details']['locale']) != -1); - }); - assert.equal(_entries, true, "Publish content fallback"); + const allHaveTags = entries[0].every((entry) => + Utils.arrayPresentInArray(tags, entry[field]) + ); + expect(allHaveTags).toBe(true); + } else { + // Skip this test if no entries were found + console.log("No entries found to check tags"); } - assert.end(); - }).catch((error) => { - assert.fail("Entries default .find() fallback catch", error.toString()); - assert.end(); - }) -}) - -// includeContentType -test('.includeContentType()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeContentType() - .toJSON() - .find() - .then(function success(entries) { - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.ok(entries[1]['schema'], 'ContentType present in the resultset'); - assert.ok(entries[1]['title'], 'ContentType title exists'); - assert.ok((entries[1]['uid'] === contentTypes.source), 'ContentType uid is same as requested'); - for(var i=0; i { + describe(".containedIn()", () => { + let entries; + const _in = ["source1", "source2"]; + const field = "title"; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.containedIn("title", _in).toJSON().find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + + test("Should return two entries in the resultset", () => { + expect(entries[0].length).toBe(2); + }); + + test("All entries should have title field contained in the specified values", () => { + if (entries && entries.length && entries[0].length) { + const allContained = entries[0].every((entry) => + _in.includes(entry[field]) + ); + expect(allContained).toBe(true); + } + }); + }); + + describe(".notContainedIn()", () => { + let entries; + const _in = ["source1", "source2"]; + const field = "title"; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.notContainedIn("title", _in).toJSON().find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + + test("Should return three entries in the resultset", () => { + expect(entries[0].length).toBe(5); + }); + + test("All entries should have title field not contained in the specified values", () => { + if (entries && entries.length && entries[0].length) { + const allNotContained = entries[0].every( + (entry) => !_in.includes(entry[field]) + ); + expect(allNotContained).toBe(true); + } + }); + }); + test(".exists() should return entries with the specified field", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + const queryField = "boolean"; + const field = "updated_at"; + + try { + const entries = await Query.exists(queryField).toJSON().find(); + + // Check if entries are returned + expect(entries[0].length).toBeTruthy(); + + // Verify sorting order (descending on updated_at) + if (entries && entries.length && entries[0].length) { + let prev = entries[0][0][field]; + const _entries = entries[0].every(function (entry) { + const flag = entry[field] <= prev; + prev = entry[field]; + return flag; + }); + expect(_entries).toBe(true); + } + } catch (err) { + console.error("error:", err); + fail(".exists() test failed"); + } + }); + + test(".notExists() should return entries without the specified field", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + const queryField = "isspecial"; + const field = "updated_at"; + + try { + const entries = await Query.notExists(queryField).toJSON().find(); + + // Check if entries are returned + expect("entries" in entries).toBeTruthy(); + + // Verify sorting order if entries exist + if (entries && entries.length && entries[0].length) { + let prev = entries[0][0][field]; + const _entries = entries[0].every(function (entry) { + return entry[field] <= prev; + }); + expect(_entries).toBe(true); + } + } catch (err) { + console.error("error:", err); + fail(".notExists() test failed"); + } + }); + }); + + describe("Pagination Tests", () => { + describe(".skip()", () => { + let allEntries; + let skippedEntries; + const field = "updated_at"; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + allEntries = await Query.toJSON().find(); + + const SkipQuery = Stack.ContentType(contentTypes.source).Query(); + skippedEntries = await SkipQuery.skip(1).toJSON().find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("All entries should be present in the resultset", () => { + expect(allEntries[0].length).toBeTruthy(); + }); + + test("Skipped entries should be present in the resultset", () => { + expect(skippedEntries[0].length).toBeGreaterThanOrEqual(2); + }); + + test("Skipped entries should match all entries with first skipped", () => { + expect(skippedEntries[0]).toEqual(allEntries[0].slice(1)); + }); + + test("Skipped entries should maintain sorting order", () => { + if ( + skippedEntries && + skippedEntries.length && + skippedEntries[0].length > 1 + ) { + let prev = skippedEntries[0][0][field]; + const sortedCorrectly = skippedEntries[0].slice(1).every((entry) => { + const isValid = entry[field] <= prev; + prev = entry[field]; + return isValid; + }); + expect(sortedCorrectly).toBe(true); + } + }); + }); + + describe(".limit()", () => { + let allEntries; + let limitedEntries; + const field = "updated_at"; + const limitNumber = 2; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + allEntries = await Query.toJSON().find(); + + const LimitQuery = Stack.ContentType(contentTypes.source).Query(); + limitedEntries = await LimitQuery.limit(limitNumber).toJSON().find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("All entries should be present in the resultset", () => { + expect(allEntries[0].length).toBeTruthy(); + }); + + test("Limited entries should be present in the resultset", () => { + expect(limitedEntries[0].length).toBeTruthy(); + }); + + test("Limited entries should match first N entries from all entries", () => { + expect(limitedEntries[0]).toEqual(allEntries[0].slice(0, limitNumber)); + }); + + test("Limited entries should maintain sorting order", () => { + if ( + limitedEntries && + limitedEntries.length && + limitedEntries[0].length > 1 + ) { + let prev = limitedEntries[0][0][field]; + const sortedCorrectly = limitedEntries[0].slice(1).every((entry) => { + const isValid = entry[field] <= prev; + prev = entry[field]; + return isValid; + }); + expect(sortedCorrectly).toBe(true); + } + }); + }); + + describe(".count()", () => { + let count; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + count = await Query.count().toJSON().find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Entries present in the resultset", () => { + expect(count).toBeTruthy(); + }); + }); + }); + + describe("Logical Operations", () => { + describe(".or() - Query Objects", () => { + let entries; + + beforeAll(async () => { + try { + const Query1 = Stack.ContentType(contentTypes.source) + .Query() + .where("title", "source2"); + const Query2 = Stack.ContentType(contentTypes.source) + .Query() + .where("boolean", true); + const Query = Stack.ContentType(contentTypes.source).Query(); + + entries = await Query.or(Query1, Query2).toJSON().find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + + test("Should return 1 entries in the resultset", () => { + expect(entries[0].length).toBe(5); + }); + + test("All entries should satisfy the OR condition", () => { + if (entries && entries.length && entries[0].length) { + let _entries = entries[0].every(function (entry) { + return ~(entry.title === "source1" || entry.boolean === true); + }); + expect(_entries).toBe(true); + } + }); + }); + + describe(".and() - Query Objects", () => { + let entries; + + beforeAll(async () => { + try { + const Query1 = Stack.ContentType(contentTypes.source) + .Query() + .where("title", "source1"); + const Query2 = Stack.ContentType(contentTypes.source) + .Query() + .where("boolean", true); + const Query = Stack.ContentType(contentTypes.source).Query(); + + entries = await Query.and(Query1, Query2).toJSON().find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return one entry in the resultset", () => { + expect(entries[0].length).toBe(1); + }); + + test("All entries should satisfy the AND condition", () => { + if (entries && entries.length && entries[0].length) { + const allMatchCondition = entries[0].every( + (entry) => entry.title === "source1" && entry.boolean === true + ); + expect(allMatchCondition).toBe(true); + } + }); + }); + + describe(".query() - Raw query", () => { + let entries; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.query({ + $or: [{ title: "source2" }, { boolean: "true" }], + }) + .toJSON() + .find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + + test("Should return two entries in the resultset", () => { + expect(entries[0].length).toBe(1); + }); + + test("All entries should satisfy the OR condition", () => { + if (entries && entries.length && entries[0].length) { + const allMatchCondition = entries[0].every( + (entry) => entry.title === "source2" || entry.boolean === false + ); + expect(allMatchCondition).toBe(true); + } + }); + }); + + describe("Search Tests", () => { + describe(".search()", () => { + let entries; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.toJSON().search("source2").find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + }); + }); + + describe("Including Additional Data Tests", () => { + describe(".includeCount() and .includeContentType()", () => { + let entries; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.includeCount() + .includeContentType() + .toJSON() + .find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + + test("ContentType should be present in the resultset", () => { + expect(entries[1]).toBeTruthy(); + }); + + test("ContentType title should exist", () => { + expect(entries[1].title).toBeDefined(); + }); + + test("ContentType uid should match requested content type", () => { + expect(entries[1].uid).toBe(contentTypes.source); + }); + + test("Count should be present in the resultset", () => { + expect(entries[2]).toBeTruthy(); + }); + }); + + describe(".includeEmbeddedItems()", () => { + let entries; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.includeEmbeddedItems().toJSON().find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + }); + + describe(".includeSchema() and .includeContentType()", () => { + let entries; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.includeSchema() + .includeContentType() + .toJSON() + .find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + + test("ContentType should be present in the resultset", () => { + expect(entries[1]).toBeTruthy(); + }); + + test("ContentType title should exist", () => { + expect(entries[1].title).toBeDefined(); + }); + + test("ContentType uid should match requested content type", () => { + expect(entries[1].uid).toBe(contentTypes.source); + }); + }); + + describe(".includeCount(), .includeSchema() and .includeContentType()", () => { + let entries; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.includeCount() + .includeSchema() + .includeContentType() + .toJSON() + .find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + + test("ContentType should be present in the resultset", () => { + expect(entries[1]).toBeTruthy(); + }); + + test("ContentType title should exist", () => { + expect(entries[1].title).toBeDefined(); + }); + + test("ContentType uid should match requested content type", () => { + expect(entries[1].uid).toBe(contentTypes.source); + }); + + test("Count should be present in the resultset", () => { + expect(entries[2]).toBeTruthy(); + }); + }); + }); + + describe("Localization Tests", () => { + describe("find: without fallback", () => { + let entries; + const _in = ["ja-jp"]; + + beforeAll(async () => { + try { + entries = await Stack.ContentType(contentTypes.source) + .Query() + .language("ja-jp") + .toJSON() + .find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + + test("All entries should have the correct locale", () => { + if (entries && entries[0].length) { + const allHaveCorrectLocale = entries[0].every((entry) => + _in.includes(entry.publish_details.locale) + ); + expect(allHaveCorrectLocale).toBe(true); + } + }); + }); + + describe("find: with fallback", () => { + let entries; + const _in = ["ja-jp", "en-us"]; + + beforeAll(async () => { + try { + entries = await Stack.ContentType(contentTypes.source) + .Query() + .language("ja-jp") + .includeFallback() + .toJSON() + .find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + + test("All entries should have locale from the allowed fallback list", () => { + if (entries && entries[0].length) { + const allHaveCorrectLocale = entries[0].every((entry) => + _in.includes(entry.publish_details.locale) + ); + expect(allHaveCorrectLocale).toBe(true); + } + }); + }); + }); + + describe("Global Field Tests", () => { + describe(".getContentTypes()", () => { + let entries; + + beforeAll(async () => { + try { + entries = await Stack.getContentTypes({ + include_global_field_schema: true, }); - assert.equal(flag, true, 'all the present reference are included'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".includeReference() - Array"); - assert.end(); - }); -}); - -// includeCount -test('.includeCount()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeCount() - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - //assert.equal(Utils.isEntriesPublished(entries[0], Stack.environment_uid, 'en-us'), true, "Entries present in the resultset are published."); - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.ok(entries[1], 'Count present in the resultset'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".includeCount()"); - assert.end(); - }); -}); - -// includeSchema -test('.includeSchema()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeSchema() - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - //assert.equal(Utils.isEntriesPublished(entries[0], Stack.environment_uid, 'en-us'), true, "Entries present in the resultset are published."); - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.ok(entries[1], 'Schema present in the resultset'); - for(var i=0; i { + for (var i = 0; i < entries.content_types[0].schema.length; i++) { + if ( + entries.content_types[0].schema[i].data_type === "global_field" + ) { + expect(entries[1]["schema"][i]["schema"]).toBeDefined(); } - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".includeSchema()"); - assert.end(); - }); -}); - -// includeReferenceContenttypeUid with an object -test('.includeReferenceContenttypeUid()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeSchema() - .includeReferenceContentTypeUID() - .toJSON() - .find() - .then(function success(entries) { - for(var i=0; i { + describe(".only() - Single String Parameter", () => { + let entries; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.only("title").toJSON().find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + + test("All entries should contain only title and uid fields", () => { + const allHaveCorrectFields = entries[0].every( + (entry) => + Object.keys(entry).length === 2 && + "title" in entry && + "uid" in entry + ); + expect(allHaveCorrectFields).toBe(true); + }); + }); + + describe(".only() - Multiple String Parameter", () => { + let entries; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.only("BASE", "title").toJSON().find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + + test("All entries should contain only title and uid fields", () => { + const allHaveCorrectFields = entries[0].every( + (entry) => + Object.keys(entry).length === 2 && + "title" in entry && + "uid" in entry + ); + expect(allHaveCorrectFields).toBe(true); + }); + }); + + describe(".only() - Array Parameter", () => { + let entries; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.only(["title", "url"]).toJSON().find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + + test("All entries should contain only title, url, and uid fields", () => { + const allHaveCorrectFields = entries[0].every( + (entry) => + Object.keys(entry).length === 3 && + "title" in entry && + "url" in entry && + "uid" in entry + ); + expect(allHaveCorrectFields).toBe(true); + }); + }); + + describe(".only() - For the reference - String", () => { + let entries; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.includeReference("reference") + .only("BASE", ["reference"]) + .only("reference", "title") + .toJSON() + .find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + + test("All entries should contain reference field", () => { + const allHaveReference = entries[0].every( + (entry) => "reference" in entry + ); + expect(allHaveReference).toBe(true); + }); + }); + + describe(".only() - For the reference - Array", () => { + let entries; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.includeReference("reference") + .only("BASE", ["reference"]) + .only("reference", ["title"]) + .toJSON() + .find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + + test("All entries should contain reference field", () => { + const allHaveReference = entries[0].every( + (entry) => "reference" in entry + ); + expect(allHaveReference).toBe(true); + }); + }); + }); + + describe("Field Exclusion Tests", () => { + describe(".except() - Single String Parameter", () => { + let entries; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.except("title").toJSON().find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + + test("All entries should not have title field", () => { + const allExcluded = entries[0].every( + (entry) => entry && !("title" in entry) + ); + expect(allExcluded).toBe(true); + }); + }); + + describe(".except() - Multiple String Parameter", () => { + let entries; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.except("BASE", "title").toJSON().find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + + test("All entries should not have title field", () => { + const allExcluded = entries[0].every( + (entry) => entry && !("title" in entry) + ); + expect(allExcluded).toBe(true); + }); + }); + + describe(".except() - Array of String Parameter", () => { + let entries; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.except(["title", "file"]).toJSON().find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + + test("All entries should not have title and file fields", () => { + const allExcluded = entries[0].every( + (entry) => entry && !("title" in entry) && !("file" in entry) + ); + expect(allExcluded).toBe(true); + }); + }); + + describe(".except() - For the reference - String", () => { + let entries; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.includeReference("reference") + .only("BASE", ["reference"]) + .except("reference", "title") + .toJSON() + .find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + + test("All entries should have reference field", () => { + const allHaveReference = entries[0].every( + (entry) => entry && "reference" in entry + ); + expect(allHaveReference).toBe(true); + }); + + test("All entries should have uid field", () => { + const allHaveUID = entries[0].every( + (entry) => entry && "uid" in entry + ); + expect(allHaveUID).toBe(true); + }); + + test("All references should not have title field", () => { + let allReferencesExcluded = true; + + entries[0].forEach((entry) => { + if ( + entry && + entry.reference && + typeof entry.reference === "object" + ) { + entry.reference.forEach((reference) => { + if (reference && "title" in reference) { + allReferencesExcluded = false; } + }); } - }, function error(err) { - console.error("error :", err); - assert.fail(".includeSchema()"); - assert.end(); - }); -}); - - -// includeReferenceContenttypeUid with string -test('.includeReferenceContenttypeUid()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeSchema() - .includeReferenceContentTypeUID() - .toJSON() - .find() - .then(function success(entries) { - for(var i=0; i { + let entries; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.includeReference("reference") + .only("BASE", ["reference"]) + .except("reference", ["title"]) + .toJSON() + .find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + + test("All entries should have reference field", () => { + const allHaveReference = entries[0].every( + (entry) => entry && "reference" in entry + ); + expect(allHaveReference).toBe(true); + }); + + test("All entries should have uid field", () => { + const allHaveUID = entries[0].every( + (entry) => entry && "uid" in entry + ); + expect(allHaveUID).toBe(true); + }); + + test("All references should not have title field", () => { + let allReferencesExcluded = true; + + entries[0].forEach((entry) => { + if ( + entry && + entry.reference && + typeof entry.reference === "object" + ) { + entry.reference.forEach((reference) => { + if (reference && "title" in reference) { + allReferencesExcluded = false; } + }); } - }, function error(err) { - console.error("error :", err); - assert.fail(".includeReferenceContenttypeUid()"); - assert.end(); - }); -}); - -// includeCount && includeSchema -test('.includeCount() and .includeSchema()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeCount() - .includeSchema() - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - //assert.equal(Utils.isEntriesPublished(entries[0], Stack.environment_uid, 'en-us'), true, "Entries present in the resultset are published."); - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.ok(entries[1].length, 'Schema present in the resultset'); - assert.ok(entries[2], 'Count present in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail(".includeSchema()"); - assert.end(); - }); -}); - -// includeContentType -test('.includeContentType()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeContentType() - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - //assert.equal(Utils.isEntriesPublished(entries[0], Stack.environment_uid, 'en-us'), true, "Entries present in the resultset are published."); - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.ok(entries[1], 'ContentType present in the resultset'); - assert.ok(entries[1]['title'], 'ContentType title exists'); - assert.ok((entries[1]['uid'] === contentTypes.source), 'ContentType uid is same as requested'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".includeContentType()"); - assert.end(); - }); -}); - -// includeCount && includeContentType -test('.includeCount() and .includeContentType()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeCount() - .includeContentType() - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - //assert.equal(Utils.isEntriesPublished(entries[0], Stack.environment_uid, 'en-us'), true, "Entries present in the resultset are published."); - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.ok(entries[1], 'ContentType present in the resultset'); - assert.ok(entries[1]['title'], 'ContentType title exists'); - assert.ok((entries[1]['uid'] === contentTypes.source), 'ContentType uid is same as requested'); - assert.ok(entries[2], 'Count present in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail(".includeCount && includeContentType"); - assert.end(); - }); -}); - -// includeSchema && includeContentType -test('.includeSchema() and .includeContentType()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeSchema() - .includeContentType() - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - //assert.equal(Utils.isEntriesPublished(entries[0], Stack.environment_uid, 'en-us'), true, "Entries present in the resultset are published."); - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.ok(entries[1], 'ContentType present in the resultset'); - assert.ok(entries[1]['title'], 'ContentType title exists'); - assert.ok((entries[1]['uid'] === contentTypes.source), 'ContentType uid is same as requested'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail(".includeCount && includeContentType"); - assert.end(); - }); -}); - -// includeCount, includeSchema && includeContentType -test('.includeSchema() and .includeContentType()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeCount() - .includeSchema() - .includeContentType() - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - //assert.equal(Utils.isEntriesPublished(entries[0], Stack.environment_uid, 'en-us'), true, "Entries present in the resultset are published."); - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.ok(entries[1], 'ContentType present in the resultset'); - assert.ok(entries[1]['title'], 'ContentType title exists'); - assert.ok((entries[1]['uid'] === contentTypes.source), 'ContentType uid is same as requested'); - assert.ok(entries[2], 'Count present in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail(".includeCount && includeContentType"); - assert.end(); - }); -}); - -// only -test('.only() - Single String Parameter', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .only('title') - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - var flag = entries[0].every(function(entry) { - return (entry && Object.keys(entry).length === 2 && "title" in entry && "uid" in entry); - }); - assert.ok(flag, 'entries with the field title in the resultset'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".only() - Single String Parameter"); - assert.end(); - }); -}); - -test('.only() - Multiple String Parameter', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .only('BASE', 'title') - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - var flag = entries[0].every(function(entry) { - return (entry && Object.keys(entry).length === 2 && "title" in entry && "uid" in entry); - }); - assert.ok(flag, 'entries with the field title in the resultset'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".only() - Multiple String Parameter"); - assert.end(); - }); -}); - -test('.only() - Array Parameter', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .only(['title', 'url']) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - var flag = entries[0].every(function(entry) { - return (entry && Object.keys(entry).length === 3 && "title" in entry && "url" in entry && "uid" in entry); - }); - assert.ok(flag, 'entries with the field title,url in the resultset'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".only() - Array Parameter"); - assert.end(); - }); -}); - -test('.only() - For the reference - String', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeReference('reference') - .only('BASE', ['reference']) - .only('reference', 'title') - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".only() - For the reference - String"); - assert.end(); - }); -}); - -test('.only() - For the reference - Array', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeReference('reference') - .only('BASE', ['reference']) - .only('reference', ['title']) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".only() - For the reference - Array"); - assert.end(); - }); -}); - -// except -test('.except() - Single String Parameter', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .except('title') - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - var flag = entries[0].every(function(entry) { - return (entry && !("title" in entry)); - }); - assert.ok(flag, 'entries without the field title in the resultset'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".except() - Single String Parameter"); - assert.end(); - }); -}); - -test('.except() - Multiple String Parameter', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .except('BASE', 'title') - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - var flag = entries[0].every(function(entry) { - return (entry && !("title" in entry)); - }); - assert.ok(flag, 'entries without the field title, url in the resultset'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".except() - Multiple String Parameter"); - assert.end(); - }); -}); - -test('.except() - Array of String Parameter', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .except(['title', 'file']) - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - var flag = entries[0].every(function(entry) { - return (entry && !("title" in entry) && !("file" in entry)); - }); - assert.ok(flag, 'entries without the field title, file in the resultset'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".except() - Array of String Parameter"); - assert.end(); - }); -}); - -test('.except() - For the reference - String', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeReference('reference') - .only('BASE', ['reference']) - .except('reference', 'title') - .toJSON() - .find() - .then(function success(entries) { - // assert.ok("entries" in result, 'Entries key present in the resultset'); - var flag = entries[0].every(function(entry) { - var _flag; - if (entry && entry['reference'] && typeof entry['reference'] === 'object') { - _flag = true; - _flag = entry.reference.every(function(reference) { - return (reference && !("title" in reference)); - }); - } else { - _flag = true; - } - return (_flag && entry && (Object.keys(entry).length === 3 || Object.keys(entry).length === 2) && "reference" in entry && "uid" in entry); - }); - assert.ok(flag, 'entries with the field reference without title field in the resultset'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".except() - For the reference - String"); - assert.end(); - }); -}); - -test('.except() - For the reference - Array', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeReference('reference') - .only('BASE', ['reference']) - .except('reference', ['title']) - .toJSON() - .find() - .then(function success(entries) { - - // assert.ok("entries" in result, 'Entries key present in the resultset'); - var flag = entries[0].every(function(entry) { - var _flag; - - if (entry && entry['reference'] && typeof entry['reference'] === 'object') { - _flag = true; - _flag = entry.reference.every(function(reference) { - return (reference && !("title" in reference)); - }); - } else { - _flag = true; - } - return (_flag && entry && (Object.keys(entry).length === 3 || Object.keys(entry).length === 2) && "reference" in entry && "uid" in entry); - }); - assert.ok(flag, 'entries with the field reference without title field in the resultset'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail(".except() - For the reference - Array"); - assert.end(); - }); -}); - -// Taxonomies Endpoint -test('Taxonomies Endpoint: Get Entries With One Term', function(assert) { - let Query = Stack.Taxonomies(); - Query - .where('taxonomies.one', 'term_one') - .toJSON() - .find() - .then(entries => { - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.end(); - }, err => { - console.error("error :", err); - assert.fail("Taxonomies Endpoint: Get Entries With One Term"); - assert.end(); - }) -}); - -test('Taxonomies Endpoint: Get Entries With Any Term ($in)', function(assert) { - let Query = Stack.Taxonomies(); - Query - .containedIn('taxonomies.one', ['term_one', 'term_two']) - .toJSON() - .find() - .then(entries => { - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.end(); - }, err => { - console.error("error :", err); - assert.fail("Taxonomies Endpoint: Get Entries With Any Term ($in)"); - assert.end(); - }) -}) - -test('Taxonomies Endpoint: Get Entries With Any Term ($or)', function(assert) { - let Query = Stack.Taxonomies(); - let Query1 = Stack.Taxonomies().where('taxonomies.one', 'term_one'); - let Query2 = Stack.Taxonomies().where('taxonomies.two', 'term_two'); - Query - .or(Query1, Query2) - .toJSON() - .find() - .then(entries => { - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.end(); - }, err => { - console.error("error :", err); - assert.fail("Taxonomies Endpoint: Get Entries With Any Term ($or)"); - assert.end(); - }) -}) - -test('Taxonomies Endpoint: Get Entries With All Terms ($and)', function(assert) { - let Query1 = Stack.Taxonomies().where('taxonomies.one', 'term_one'); - let Query2 = Stack.Taxonomies().where('taxonomies.two', 'term_two'); - let Query = Stack.Taxonomies(); - Query - .and(Query1, Query2) - .toJSON() - .find() - .then(entries => { - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.end(); - }, err => { - console.error("error :", err); - assert.fail("Taxonomies Endpoint: Get Entries With All Terms ($and)"); - assert.end(); - }) -}) - -test('Taxonomies Endpoint: Get Entries With Any Taxonomy Terms ($exists)', function(assert) { - let Query = Stack.Taxonomies(); - Query - .exists('taxonomies.one') - .toJSON() - .find() - .then(entries => { - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.end(); - }, err => { - console.error("error :", err); - assert.fail("Taxonomies Endpoint: Get Entries With Any Taxonomy Terms ($exists)"); - assert.end(); - }) -}) - -test('Taxonomies Endpoint: Get Entries With Taxonomy Terms and Also Matching Its Children Term ($eq_below, level)', function(assert) { - let Query = Stack.Taxonomies(); - Query - .equalAndBelow('taxonomies.one', 'term_one') - .toJSON() - .find() - .then(entries => { - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.end(); - }, err => { - console.error("error :", err); - assert.fail("Taxonomies Endpoint: Get Entries With Taxonomy Terms and Also Matching Its Children Term ($eq_below, level)"); - assert.end(); - }) -}) - -test('Taxonomies Endpoint: Get Entries With Taxonomy Terms Children\'s and Excluding the term itself ($below, level)', function(assert) { - let Query = Stack.Taxonomies(); - Query - .below('taxonomies.one', 'term_one') - .toJSON() - .find() - .then(entries => { - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.end(); - }, err => { - console.error("error :", err); - assert.fail("Taxonomies Endpoint: Get Entries With Taxonomy Terms Children\'s and Excluding the term itself ($below, level)"); - assert.end(); - }) -}) - -test('Taxonomies Endpoint: Get Entries With Taxonomy Terms and Also Matching Its Parent Term ($eq_above, level)', function(assert) { - let Query = Stack.Taxonomies(); - Query - .equalAndAbove('taxonomies.one', 'term_one') - .toJSON() - .find() - .then(entries => { - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.end(); - }, err => { - console.error("error :", err); - assert.fail("Taxonomies Endpoint: Get Entries With Taxonomy Terms and Also Matching Its Parent Term ($eq_above, level)"); - assert.end(); - }) -}) - -test('Taxonomies Endpoint: Get Entries With Taxonomy Terms Parent and Excluding the term itself ($above, level)', function(assert) { - let Query = Stack.Taxonomies(); - Query - .above('taxonomies.one', 'term_one_child') - .toJSON() - .find() - .then(entries => { - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.end(); - }, err => { - console.error("error :", err); - assert.fail("Taxonomies Endpoint: Get Entries With Taxonomy Terms Parent and Excluding the term itself ($above, level)"); - assert.end(); - }) -}) - -//Content Type end point -test('CT Taxonomies Query: Get Entries With One Term', function(assert) { - let Query = Stack.ContentType('source').Query(); - Query - .where('taxonomies.one', 'term_one') - .toJSON() - .find() - .then(entries => { - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.end(); - }, err => { - console.error("error :", err); - assert.fail("CT Taxonomies Query: Get Entries With One Term"); - assert.end(); - }) -}); - -test('CT Taxonomies Query: Get Entries With Any Term ($in)', function(assert) { - let Query = Stack.ContentType('source').Query(); - Query - .containedIn('taxonomies.one', ['term_one', 'term_two']) - .toJSON() - .find() - .then(entries => { - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.end(); - }, err => { - console.error("error :", err); - assert.fail("CT Taxonomies Query: Get Entries With Any Term ($in)"); - assert.end(); - }) -}) - -test('CT Taxonomies Query: Get Entries With Any Term ($or)', function(assert) { - let Query = Stack.ContentType('source').Query(); - let Query1 = Stack.ContentType('source').Query().where('taxonomies.one', 'term_one'); - let Query2 = Stack.ContentType('source').Query().where('taxonomies.two', 'term_two'); - Query - .or(Query1, Query2) - .toJSON() - .find() - .then(entries => { - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.end(); - }, err => { - console.error("error :", err); - assert.fail("CT Taxonomies Query: Get Entries With Any Term ($or)"); - assert.end(); - }) -}) - -test('CT Taxonomies Query: Get Entries With All Terms ($and)', function(assert) { - let Query1 = Stack.ContentType('source').Query().where('taxonomies.one', 'term_one'); - let Query2 = Stack.ContentType('source').Query().where('taxonomies.two', 'term_two'); - let Query = Stack.ContentType('source').Query(); - Query - .and(Query1, Query2) - .toJSON() - .find() - .then(entries => { - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.end(); - }, err => { - console.error("error :", err); - assert.fail("CT Taxonomies Query: Get Entries With All Terms ($and)"); - assert.end(); - }) -}) - -test('CT Taxonomies Query: Get Entries With Any Taxonomy Terms ($exists)', function(assert) { - let Query = Stack.ContentType('source').Query(); - Query - .exists('taxonomies.one') - .toJSON() - .find() - .then(entries => { - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.end(); - }, err => { - console.error("error :", err); - assert.fail("CT Taxonomies Query: Get Entries With Any Taxonomy Terms ($exists)"); - assert.end(); - }) -}) - -test('CT Taxonomies Query: Get Entries With Taxonomy Terms and Also Matching Its Children Term ($eq_below, level)', function(assert) { - let Query = Stack.ContentType('source').Query(); - Query - .equalAndBelow('taxonomies.one', 'term_one') - .toJSON() - .find() - .then(entries => { - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.end(); - }, err => { - console.error("error :", err); - assert.fail("CT Taxonomies Query: Get Entries With Taxonomy Terms and Also Matching Its Children Term ($eq_below, level)"); - assert.end(); - }) -}) - -test('CT Taxonomies Query: Get Entries With Taxonomy Terms Children\'s and Excluding the term itself ($below, level)', function(assert) { - let Query = Stack.ContentType('source').Query(); - Query - .below('taxonomies.one', 'term_one') - .toJSON() - .find() - .then(entries => { - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.end(); - }, err => { - console.error("error :", err); - assert.fail("CT Taxonomies Query: Get Entries With Taxonomy Terms Children\'s and Excluding the term itself ($below, level)"); - assert.end(); - }) -}) - -test('CT Taxonomies Query: Get Entries With Taxonomy Terms and Also Matching Its Parent Term ($eq_above, level)', function(assert) { - let Query = Stack.ContentType('source').Query(); - Query - .equalAndAbove('taxonomies.one', 'term_one') - .toJSON() - .find() - .then(entries => { - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.end(); - }, err => { - console.error("error :", err); - assert.fail("CT Taxonomies Query: Get Entries With Taxonomy Terms and Also Matching Its Parent Term ($eq_above, level)"); - assert.end(); - }) -}) - -test('CT Taxonomies Query: Get Entries With Taxonomy Terms Parent and Excluding the term itself ($above, level)', function(assert) { - let Query = Stack.ContentType('source').Query(); - Query - .above('taxonomies.one', 'term_one_child') - .toJSON() - .find() - .then(entries => { - assert.ok(entries[0].length, 'Entries present in the resultset'); - assert.end(); - }, err => { - console.error("error :", err); - assert.fail("CT Taxonomies Query: Get Entries With Taxonomy Terms Parent and Excluding the term itself ($above, level)"); - assert.end(); - }) -}) -test('Variants in entry', function (assert) { - let Query = Stack.ContentType('source').Query(); - Query - .variants(['variant_entry_1', 'variant_entry_2']) - .toJSON() - .find() - .then(entries => { - assert.ok(entries[0].length, 'Variant entries present in the resultset'); - assert.end(); - }, err => { - console.error("error :", err); - assert.fail("Variant Entries are not present in the CT"); - assert.end(); - }) + }); + + expect(allReferencesExcluded).toBe(true); + }); + }); + }); + + describe("Taxonomies Endpoint Tests", () => { + describe("Get Entries With One Term", () => { + let entries; + + beforeAll(async () => { + try { + const Query = Stack.Taxonomies(); + entries = await Query.where("taxonomies.one", "term_one") + .toJSON() + .find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + }); + + describe("Get Entries With Any Term ($in)", () => { + let entries; + + beforeAll(async () => { + try { + const Query = Stack.Taxonomies(); + entries = await Query.containedIn("taxonomies.one", [ + "term_one", + "term_two", + ]) + .toJSON() + .find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + }); + + describe("Get Entries With Any Term ($or)", () => { + let entries; + + beforeAll(async () => { + try { + const Query1 = Stack.Taxonomies().where( + "taxonomies.one", + "term_one" + ); + const Query2 = Stack.Taxonomies().where( + "taxonomies.two", + "term_two" + ); + const Query = Stack.Taxonomies(); + + entries = await Query.or(Query1, Query2).toJSON().find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + }); + + describe("Get Entries With All Terms ($and)", () => { + let entries; + + beforeAll(async () => { + try { + const Query1 = Stack.Taxonomies().where( + "taxonomies.one", + "term_one" + ); + const Query2 = Stack.Taxonomies().where( + "taxonomies.two", + "term_two" + ); + const Query = Stack.Taxonomies(); + + entries = await Query.and(Query1, Query2).toJSON().find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + }); + + describe("Get Entries With Any Taxonomy Terms ($exists)", () => { + let entries; + + beforeAll(async () => { + try { + const Query = Stack.Taxonomies(); + entries = await Query.exists("taxonomies.one").toJSON().find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + }); + }); + + describe("Content Type Taxonomies Query Tests", () => { + describe("Get Entries With One Term", () => { + let entries; + + beforeAll(async () => { + try { + const Query = Stack.ContentType("source").Query(); + entries = await Query.where("taxonomies.one", "term_one") + .toJSON() + .find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + }); + + describe("Get Entries With Any Term ($in)", () => { + let entries; + + beforeAll(async () => { + try { + const Query = Stack.ContentType("source").Query(); + entries = await Query.containedIn("taxonomies.one", [ + "term_one", + "term_two", + ]) + .toJSON() + .find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + }); + + describe("Get Entries With Any Term ($or)", () => { + let entries; + + beforeAll(async () => { + try { + const Query1 = Stack.ContentType("source") + .Query() + .where("taxonomies.one", "term_one"); + const Query2 = Stack.ContentType("source") + .Query() + .where("taxonomies.two", "term_two"); + const Query = Stack.ContentType("source").Query(); + + entries = await Query.or(Query1, Query2).toJSON().find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + }); + + describe("Get Entries With All Terms ($and)", () => { + let entries; + + beforeAll(async () => { + try { + const Query1 = Stack.ContentType("source") + .Query() + .where("taxonomies.one", "term_one"); + const Query2 = Stack.ContentType("source") + .Query() + .where("taxonomies.two", "term_two"); + const Query = Stack.ContentType("source").Query(); + + entries = await Query.and(Query1, Query2).toJSON().find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + }); + + describe("Get Entries With Any Taxonomy Terms ($exists)", () => { + let entries; + + beforeAll(async () => { + try { + const Query = Stack.ContentType("source").Query(); + entries = await Query.exists("taxonomies.one").toJSON().find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + }); + + describe("Get Entries With Taxonomy Terms and Also Matching Its Children Term ($eq_below, level)", () => { + let entries; + + beforeAll(async () => { + try { + const Query = Stack.ContentType("source").Query(); + entries = await Query.equalAndBelow("taxonomies.one", "term_one") + .toJSON() + .find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + }); + + describe("Get Entries With Taxonomy Terms Children's and Excluding the term itself ($below, level)", () => { + let entries; + + beforeAll(async () => { + try { + const Query = Stack.ContentType("source").Query(); + entries = await Query.below("taxonomies.one", "term_one") + .toJSON() + .find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + }); + + describe("Get Entries With Taxonomy Terms and Also Matching Its Parent Term ($eq_above, level)", () => { + let entries; + + beforeAll(async () => { + try { + const Query = Stack.ContentType("source").Query(); + entries = await Query.equalAndAbove("taxonomies.one", "term_one") + .toJSON() + .find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + }); + + describe("Get Entries With Taxonomy Terms Parent and Excluding the term itself ($above, level)", () => { + let entries; + + beforeAll(async () => { + try { + const Query = Stack.ContentType("source").Query(); + entries = await Query.above("taxonomies.one", "term_one_child") + .toJSON() + .find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + }); + }); + describe("Variants Tests", () => { + describe("Variants in entry", () => { + let entries; + + beforeAll(async () => { + try { + const Query = Stack.ContentType("source").Query(); + entries = await Query.variants([ + "variant_entry_1", + "variant_entry_2", + ]) + .toJSON() + .find(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test("Should return variant entries in the resultset", () => { + expect(entries[0].length).toBeTruthy(); + }); + }); + }); + }); }); \ No newline at end of file diff --git a/test/entry/findone-result-wrapper.js b/test/entry/findone-result-wrapper.js index 1ff2171a..8f638951 100755 --- a/test/entry/findone-result-wrapper.js +++ b/test/entry/findone-result-wrapper.js @@ -2,7 +2,6 @@ /* * Module Dependencies. */ -const test = require('tape'); const Contentstack = require('../../dist/node/contentstack.js'); const Utils = require('./utils.js'); const init = require('../config.js'); @@ -10,769 +9,1056 @@ const init = require('../config.js'); const contentTypes = init.contentTypes; let Stack; -/* - * Initalise the Contentstack Instance - * */ -test('Initalise the Contentstack Stack Instance', function(TC) { - setTimeout(function() { - Stack = Contentstack.Stack(init.stack); - Stack.setHost(init.host); - TC.end(); - }, 1000); -}); - -test('findOne: default .findOne()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - Query - .toJSON() - .findOne() - .then(function success(entry) { - assert.ok((entry && entry['uid'] && entry['locale'] && entry['publish_details']), 'Entry should have uid, publish_details, locale.'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: default .findOne()"); - assert.end(); - }); -}); - -/*! - * SORTING - * !*/ -test('findOne: .ascending()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - field = 'updated_at'; - - Query - .ascending(field) - .toJSON() - .findOne() - .then(function success(entry) { - assert.ok((entry && entry['uid'] && entry['locale'] && entry['publish_details']), 'Entry should have uid, publish_details, locale.'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .ascending()"); - assert.end(); - }); -}); - -test('findOne: .descending()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - field = 'created_at'; - - Query - .descending(field) - .toJSON() - .findOne() - .then(function success(entry) { - assert.ok((entry && entry['uid'] && entry['locale'] && entry['publish_details']), 'Entry should have uid, publish_details, locale.'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .descending()"); - assert.end(); - }); -}); - - -/*! - * COMPARISION - * !*/ -test('findOne: .lessThan()', function(assert) { - var Query = Stack.ContentType(contentTypes.numbers_content_type).Query(), - field = 'num_field', - value = 11; - Query - .lessThan(field, value) - .toJSON() - .findOne() - .then(function success(entry) { - assert.ok((entry && entry[field] < value), 'Entry num_field having value less than ' + value + '.'); - assert.ok((entry && entry['uid'] && entry['locale'] && entry['publish_details']), 'Entry should have uid, publish_details, locale.'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .lessThan()"); - assert.end(); - }); -}); - -test('findOne: .lessThanOrEqualTo()', function(assert) { - var Query = Stack.ContentType(contentTypes.numbers_content_type).Query(), - field = 'num_field', - value = 11; - Query - .lessThanOrEqualTo(field, value) - .toJSON() - .findOne() - .then(function success(entry) { - assert.ok((entry && entry[field] <= value), 'Entry num_field having value less than or equal to ' + value + '.'); - assert.ok((entry && entry['uid'] && entry['locale'] && entry['publish_details']), 'Entry should have uid, publish_details, locale.'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .lessThanOrEqualTo()"); - assert.end(); - }); -}); - -test('findOne: .greaterThan()', function(assert) { - var Query = Stack.ContentType(contentTypes.numbers_content_type).Query(), - field = 'num_field', - value = 6; - - Query - .greaterThan(field, value) - .ascending(field) - .toJSON() - .findOne() - .then(function success(entry) { - assert.ok((entry && entry[field] > value), 'Entry num_field having value greater than ' + value + '.'); - assert.ok((entry && entry['uid'] && entry['locale'] && entry['publish_details']), 'Entry should have uid, publish_details, locale.'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .greaterThan()"); - assert.end(); - }); -}); - -test('findOne: .greaterThanOrEqualTo()', function(assert) { - var Query = Stack.ContentType(contentTypes.numbers_content_type).Query(), - field = 'num_field', - value = 11; - - Query - .greaterThanOrEqualTo(field, value) - .descending(field) - .toJSON() - .findOne() - .then(function success(entry) { - assert.ok((entry && entry[field] >= value), 'Entry num_field having value greater than ' + value + '.'); - assert.ok((entry && entry['uid'] && entry['locale'] && entry['publish_details']), 'Entry should have uid, publish_details, locale.'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .greaterThanOrEqualTo()"); - assert.end(); - }); -}); - -test('findOne: .notEqualTo()', function(assert) { - var Query = Stack.ContentType(contentTypes.numbers_content_type).Query(), - field = 'num_field', - value = 6; - - Query - .notEqualTo(field, value) - .descending(field) - .toJSON() - .findOne() - .then(function success(entry) { - assert.ok((entry && entry[field] !== value), 'Entry num_field having value is not equal to ' + value + '.'); - assert.ok((entry && entry['uid'] && entry['locale'] && entry['publish_details']), 'Entry should have uid, publish_details, locale.'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .notEqualTo()"); - assert.end(); - }); -}); - - -/*! - * Array/Subset - * !*/ - -test('findOne: .containedIn()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - _in = ["source1", "source2"]; - - Query - .containedIn('title', _in) - .toJSON() - .findOne() - .then(function success(entry) { - assert.ok((entry && entry['title'] && ~_in.indexOf(entry['title'])), 'Entry title exists from the available options ' + _in.join(', ') + '.'); - assert.ok((entry && entry['uid'] && entry['locale'] && entry['publish_details']), 'Entry should have uid, publish_details, locale.'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .containedIn()"); - assert.end(); - }); -}); - -test('findOne: .notContainedIn()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - _in = ["source1"]; - - Query - .notContainedIn('title', _in) - .toJSON() - .findOne() - .then(function success(entry) { - assert.ok((entry && entry['title'] && _in.indexOf(entry['title']) === -1), 'Entry title not exists from the available options ' + _in.join(', ') + '.'); - assert.ok((entry && entry['uid'] && entry['locale'] && entry['publish_details']), 'Entry should have uid, publish_details, locale.'); - assert.end(); - }, function error(err) { - console.error("findOne: .notContainedIn() :", err); - assert.deepEqual(err, { error_code: 141, error_message: 'The requested entry doesn\'t exist.' }, "No entry found"); - assert.end(); - }); -}); - - -/*! - *Element(exists) - * !*/ - -test('findOne: .exists()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - queryField = "boolean"; - - Query - .exists(queryField) - .toJSON() - .findOne() - .then(function success(entry) { - assert.ok((entry && typeof entry[queryField] !== 'undefined'), 'Entry having the ' + queryField + '.'); - assert.ok((entry && entry['uid'] && entry['locale'] && entry['publish_details']), 'Entry should have uid, publish_details, locale.'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .exists()"); - assert.end(); - }); -}); - -test('findOne: .notExists()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - queryField = "isspecial"; - - Query - .notExists(queryField) - .toJSON() - .findOne() - .then(function success(entry) { - assert.ok((entry && typeof entry[queryField] === 'undefined'), 'Entry having the ' + queryField + '.'); - assert.ok((entry && entry['uid'] && entry['locale'] && entry['publish_details']), 'Entry should have uid, publish_details, locale.'); - assert.end(); - }, function error(err) { - console.error("findOne: .notExists():", err); - assert.deepEqual(err, { error_code: 141, error_message: 'The requested entry doesn\'t exist.' }, "No entry found"); - assert.end(); - }); -}); - - -// Pagination -test('findOne: .skip()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .toJSON() - .find() - .then(function success(allEntries) { - assert.ok(allEntries.length, 'entry key present in the resultset'); - Stack - .ContentType(contentTypes.source) - .Query() - .skip(1) - .toJSON() - .findOne() - .then(function result(entry) { - assert.deepEqual(allEntries[0][1], entry, 'Element matched.'); - assert.end(); - }, function error(err) { - console.error("error :", err); - assert.fail("findOne: .skip()"); - assert.end(); - }); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .skip()"); - assert.end(); - }); -}); - - - -// Logical -test('findOne: .or() - Query Objects', function(assert) { - var Query1 = Stack.ContentType(contentTypes.source).Query().containedIn('title', ['source1']); - var Query2 = Stack.ContentType(contentTypes.source).Query().where('boolean', 'false'); - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .or(Query1, Query2) - .toJSON() - .findOne() - .then(function success(entry) { - assert.ok((entry && entry['uid'] && entry['locale'] && entry['publish_details']), 'Entry should have uid, publish_details, locale.'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .or() - Query Objects"); - assert.end(); - }); -}); - -test('findOne: .and() - Query Objects', function(assert) { - var Query1 = Stack.ContentType(contentTypes.source).Query().containedIn('title', ['source1']); - var Query2 = Stack.ContentType(contentTypes.source).Query().where('boolean', true); - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .and(Query1, Query2) - .toJSON() - .findOne() - .then(function success(entry) { - assert.ok(entry && entry.uid && entry.locale && entry.publish_details, 'Entry should have uid, publish_details, locale.'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .and() - Query Objects"); - assert.end(); - }); -}); - - - -// Custom query -test('findOne: .query() - Raw query', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .query({ "$or": [{ "title": "source1" }, { "boolean": "false" }] }) - .toJSON() - .findOne() - .then(function success(entry) { - assert.ok(entry && entry.uid && entry.locale && entry.publish_details, 'Entry should have uid, publish_details, locale.'); - assert.ok(~(entry.title === 'source1' || entry.boolean === true), '$OR condition satisfied'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .query() - Raw query"); - assert.end(); - }); -}); - - -// tags -test('findOne: .tags()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - tags = ["tag1", "tag2"]; - - Query - .tags(tags) - .toJSON() - .findOne() - .then(function success(entry) { - assert.ok(entry && entry.uid && entry.locale && entry.publish_details, 'Entry should have uid, publish_details, locale.'); - assert.equal((Utils.arrayPresentInArray(tags, entry.tags) > 0), true, 'Tags specified are found in result set'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .tags()"); - assert.end(); - }); -}); - - -// search -test('findOne: .search()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .search('source1') - .toJSON() - .findOne() - .then(function success(entry) { - assert.ok(entry && entry.uid && entry.locale && entry.publish_details, 'Entry should have uid, publish_details, locale.'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .search()"); - assert.end(); - }); -}); - - -// search -test('findOne: .regex()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - field = 'title', - regex = { - pattern: '^source', - options: 'i' - }; - - Query - .regex(field, regex.pattern, regex.options) - .toJSON() - .findOne() - .then(function success(entry) { - assert.ok(entry && entry.uid && entry.locale && entry.publish_details, 'Entry should have uid, publish_details, locale.'); - assert.ok((new RegExp(regex.pattern, regex.options).test(entry[field])), "regexp satisfied"); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .regex()"); - assert.end(); - }); -}); - - -test('findOne: without fallback', function(assert) { - var _in = ['ja-jp'] - Stack.ContentType(contentTypes.source).Query().language('ja-jp') - .toJSON() - .findOne() - .then((entry) => { - var _entries = (_in.indexOf(entry['publish_details']['locale']) != -1); - assert.equal(_entries, true, "Publish content fallback"); - assert.end(); - }).catch((error) => { - assert.fail("Entries default .find() fallback catch", error.toString()); - assert.end(); - }) -}) - -test('findOne: fallback', function(assert) { - var _in = ['ja-jp', 'en-us'] - Stack.ContentType(contentTypes.source).Query().language('ja-jp') - .includeFallback() - .toJSON() - .findOne() - .then((entry) => { - var _entries = (_in.indexOf(entry['publish_details']['locale']) != -1); - assert.equal(_entries, true, "Publish content fallback"); - assert.end(); - }).catch((error) => { - assert.fail("Entries default .find() fallback catch", error.toString()); - assert.end(); - }) -}) - -// includeReference -test('findOne: .includeReference() - String', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeReference('reference') - .toJSON() - .findOne() - .then(function success(entry) { - assert.equal((entry && entry['reference'] && typeof entry['reference'] === 'object'), true, 'all the present reference are included'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .includeReference() - String"); - assert.end(); - }); -}); - -test('findOne: .includeReference() - Array', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeReference(['reference', 'other_reference']) - .toJSON() - .findOne() - .then(function success(entry) { - assert.equal((entry && entry.reference && typeof entry.reference === 'object' && entry.other_reference && typeof entry.other_reference === 'object'), true, 'all the present reference and other reference are included'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .includeReference() - Array"); - assert.end(); - }); -}); - - -// includeSchema -test('findOne: .includeSchema()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeSchema() - .toJSON() - .findOne() - .then(function success(entry, schema) { - // console.log("result : ", Object.keys(result || {})); - assert.ok(entry, 'entry present in the resultset'); - //assert.ok(schema, 'Schema is not present in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .includeSchema()"); - assert.end(); - }); -}); - -// includeContentType -test('findOne: .includeContentType()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeContentType() - .toJSON() - .findOne() - .then(function success(entry, contentType) { - // console.log("result : ", entry, contentType); - assert.ok(entry, 'entry present in the resultset'); - assert.ok((typeof contentType === "undefined"), 'ContentType is not present.'); - // assert.ok((contentType.uid === "source"), 'ContentType is title matched.'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .includeContentType()"); - assert.end(); - }); -}); - -// includeSchema & includeContentType -test('findOne: includeSchema & .includeContentType()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeSchema() - .includeContentType() - .toJSON() - .findOne() - .then(function success(entry, contentType) { - // console.log("result : ", entry, contentType); - assert.ok(entry, 'entry present in the resultset'); - assert.ok((typeof contentType === "undefined"), 'ContentType is not present.'); - // assert.ok((contentType.uid === "source"), 'ContentType is title matched.'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: includeSchema & .includeContentType()"); - assert.end(); - }); -}); - -// only -test('findOne: .only() - Single String Parameter', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .only('title') - .toJSON() - .findOne() - .then(function success(entry) { - var flag = (entry && Object.keys(entry).length === 2 && "title" in entry && "uid" in entry); - assert.ok(flag, 'entry with the field title in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .only() - Single String Parameter"); - assert.end(); - }); -}); - -test('findOne: .only() - Multiple String Parameter', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .only('BASE', 'title') - .toJSON() - .findOne() - .then(function success(entry) { - var flag = (entry && Object.keys(entry).length === 2 && "title" in entry && "uid" in entry); - assert.ok(flag, 'entry with the field title in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .only() - Multiple String Parameter"); - assert.end(); + +describe('FindOne Tests', () => { + // Setup - Initialize the Contentstack Stack Instance + beforeAll((done) => { + Stack = Contentstack.Stack(init.stack); + Stack.setHost(init.host); + setTimeout(done, 1000); + }); + + describe('Default FindOne', () => { + let entry; + let error = null; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry with uid, locale, publish_details', () => { + expect(entry).toBeDefined(); + expect(entry['uid']).toBeDefined(); + expect(entry['locale']).toBeDefined(); + expect(entry['publish_details']).toBeDefined(); + }); + }); + + // SORTING TESTS + describe('Sorting', () => { + describe('Ascending', () => { + let entry; + let error = null; + const field = 'updated_at'; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.ascending(field).toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry with uid, locale, publish_details', () => { + expect(entry).toBeDefined(); + expect(entry['uid']).toBeDefined(); + expect(entry['locale']).toBeDefined(); + expect(entry['publish_details']).toBeDefined(); + }); + }); + + describe('Descending', () => { + let entry; + let error = null; + const field = 'created_at'; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.descending(field).toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry with uid, locale, publish_details', () => { + expect(entry).toBeDefined(); + expect(entry['uid']).toBeDefined(); + expect(entry['locale']).toBeDefined(); + expect(entry['publish_details']).toBeDefined(); + }); + }); + }); + + // COMPARISON TESTS + describe('Comparison', () => { + describe('lessThan', () => { + let entry; + let error = null; + const field = 'num_field'; + const value = 11; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.numbers_content_type).Query(); + entry = await Query.lessThan(field, value).toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry with uid, locale, publish_details', () => { + expect(entry).toBeDefined(); + expect(entry['uid']).toBeDefined(); + expect(entry['locale']).toBeDefined(); + expect(entry['publish_details']).toBeDefined(); + }); + + test('num_field should be less than specified value', () => { + expect(entry[field]).toBeLessThan(value); + }); + }); + + describe('lessThanOrEqualTo', () => { + let entry; + let error = null; + const field = 'num_field'; + const value = 11; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.numbers_content_type).Query(); + entry = await Query.lessThanOrEqualTo(field, value).toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + test('Should return an entry with uid, locale, publish_details', () => { + expect(entry).toBeDefined(); + expect(entry['uid']).toBeDefined(); + expect(entry['locale']).toBeDefined(); + expect(entry['publish_details']).toBeDefined(); + }); + test('num_field should be less than or equal to specified value', () => { + expect(entry[field]).toBeLessThanOrEqual(value); + }); + }); + + describe('greaterThan', () => { + let entry; + let error = null; + const field = 'num_field'; + const value = 6; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.numbers_content_type).Query(); + entry = await Query.greaterThan(field, value).ascending(field).toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry with uid, locale, publish_details', () => { + expect(entry).toBeDefined(); + expect(entry['uid']).toBeDefined(); + expect(entry['locale']).toBeDefined(); + expect(entry['publish_details']).toBeDefined(); + }); + + test('num_field should be greater than specified value', () => { + expect(entry[field]).toBeGreaterThan(value); + }); + }); + + describe('greaterThanOrEqualTo', () => { + let entry; + let error = null; + const field = 'num_field'; + const value = 11; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.numbers_content_type).Query(); + entry = await Query.greaterThanOrEqualTo(field, value).descending(field).toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry with uid, locale, publish_details', () => { + expect(entry).toBeDefined(); + expect(entry['uid']).toBeDefined(); + expect(entry['locale']).toBeDefined(); + expect(entry['publish_details']).toBeDefined(); + }); + + test('num_field should be greater than or equal to specified value', () => { + expect(entry[field]).toBeGreaterThanOrEqual(value); + }); + }); + + describe('notEqualTo', () => { + let entry; + let error = null; + const field = 'num_field'; + const value = 6; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.numbers_content_type).Query(); + entry = await Query.notEqualTo(field, value).descending(field).toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('num_field should not be equal to specified value', () => { + expect(entry[field]).not.toBe(value); + }); + + test('Should return an entry with uid, locale, publish_details', () => { + expect(entry).toBeDefined(); + expect(entry['uid']).toBeDefined(); + expect(entry['locale']).toBeDefined(); + expect(entry['publish_details']).toBeDefined(); + }); + }); + }); + + // ARRAY/SUBSET TESTS + describe('Array/Subset', () => { + describe('containedIn', () => { + let entry; + let error = null; + const _in = ["source1", "source2"]; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.containedIn('title', _in).toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Entry title should be in the specified values', () => { + expect(_in).toContain(entry.title); + }); + + test('Should return an entry with uid, locale, publish_details', () => { + expect(entry).toBeDefined(); + expect(entry['uid']).toBeDefined(); + expect(entry['locale']).toBeDefined(); + expect(entry['publish_details']).toBeDefined(); + }); + }); + + describe('notContainedIn', () => { + let entry; + let error = null; + const _in = ["source1"]; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.notContainedIn('title', _in).toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should either return an entry with matching criteria or an expected error', () => { + if (entry) { + expect(entry.title).toBeDefined(); + expect(_in).not.toContain(entry.title); + } else { + expect(error).toEqual({ + error_code: 141, + error_message: 'The requested entry doesn\'t exist.' + }); + } + }); + + test('If entry exists, it should have uid', () => { + if (entry) { + expect(entry.uid).toBeDefined(); + } + }); + + test('If entry exists, it should have locale', () => { + if (entry) { + expect(entry.locale).toBeDefined(); + } + }); + + test('If entry exists, it should have publish_details', () => { + if (entry) { + expect(entry.publish_details).toBeDefined(); + } + }); + }); + }); + + // ELEMENT EXISTS TESTS + describe('Element Existence', () => { + describe('exists', () => { + let entry; + let error = null; + const queryField = "boolean"; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.exists(queryField).toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Entry should have the queried field', () => { + expect(typeof entry[queryField]).not.toBe('undefined'); + }); + + test('Should return an entry with uid, locale, publish_details', () => { + expect(entry).toBeDefined(); + expect(entry['uid']).toBeDefined(); + expect(entry['locale']).toBeDefined(); + expect(entry['publish_details']).toBeDefined(); + }); + }); + + describe('notExists', () => { + let entry; + let error = null; + const queryField = "isspecial"; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.notExists(queryField).toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should handle either success or error case', () => { + if (entry) { + expect(typeof entry[queryField]).toBe('undefined'); + } else { + expect(error).toEqual({ + error_code: 141, + error_message: 'The requested entry doesn\'t exist.' + }); + } + }); + + test('If entry exists, it should have uid', () => { + if (entry) { + expect(entry.uid).toBeDefined(); + } + }); + + test('If entry exists, it should have locale', () => { + if (entry) { + expect(entry.locale).toBeDefined(); + } + }); + + test('If entry exists, it should have publish_details', () => { + if (entry) { + expect(entry.publish_details).toBeDefined(); + } + }); + }); + }); + describe('Pagination', () => { + describe('skip', () => { + let allEntries; + let skippedEntry; + let error = null; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + allEntries = await Query.toJSON().find(); + + const skipQuery = Stack.ContentType(contentTypes.source).Query(); + skippedEntry = await skipQuery.skip(1).toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should have entries in the result set', () => { + expect(allEntries.length).toBeTruthy(); + }); + + test('Should get correct skipped entry', () => { + expect(skippedEntry).toEqual(allEntries[0][1]); + }); + }); + }); + + describe('Logical Operations', () => { + describe('OR Query Objects', () => { + let entry; + let error = null; + + beforeAll(async () => { + try { + const Query1 = Stack.ContentType(contentTypes.source).Query().containedIn('title', ['source1']); + const Query2 = Stack.ContentType(contentTypes.source).Query().where('boolean', 'false'); + const Query = Stack.ContentType(contentTypes.source).Query(); + + entry = await Query.or(Query1, Query2).toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry with uid, locale, publish_details', () => { + expect(entry).toBeDefined(); + expect(entry['uid']).toBeDefined(); + expect(entry['locale']).toBeDefined(); + expect(entry['publish_details']).toBeDefined(); + }); + }); + + describe('AND Query Objects', () => { + let entry; + let error = null; + + beforeAll(async () => { + try { + const Query1 = Stack.ContentType(contentTypes.source).Query().containedIn('title', ['source1']); + const Query2 = Stack.ContentType(contentTypes.source).Query().where('boolean', true); + const Query = Stack.ContentType(contentTypes.source).Query(); + + entry = await Query.and(Query1, Query2).toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry with uid, locale, publish_details', () => { + expect(entry).toBeDefined(); + expect(entry['uid']).toBeDefined(); + expect(entry['locale']).toBeDefined(); + expect(entry['publish_details']).toBeDefined(); + }); + }); + + describe('Raw Query', () => { + let entry; + let error = null; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query + .query({ "$or": [{ "title": "source1" }, { "boolean": "false" }] }) + .toJSON() + .findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Entry should satisfy OR condition', () => { + expect(entry.title === 'source1' || entry.boolean === false).toBeTruthy(); + }); + + test('Should return an entry with uid, locale, publish_details', () => { + expect(entry).toBeDefined(); + expect(entry['uid']).toBeDefined(); + expect(entry['locale']).toBeDefined(); + expect(entry['publish_details']).toBeDefined(); + }); + }); + }); + + describe('Tags', () => { + let entry; + let error = null; + const tags = ["tag1", "tag2"]; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.tags(tags).toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Tags specified should be found in the result', () => { + expect(Utils.arrayPresentInArray(tags, entry.tags) > 0).toBe(true); + }); + + test('Should return an entry with uid, locale, publish_details', () => { + expect(entry).toBeDefined(); + expect(entry['uid']).toBeDefined(); + expect(entry['locale']).toBeDefined(); + expect(entry['publish_details']).toBeDefined(); + }); + }); + + describe('Search', () => { + let entry; + let error = null; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.search('source1').toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry with uid, locale, publish_details', () => { + expect(entry).toBeDefined(); + expect(entry['uid']).toBeDefined(); + expect(entry['locale']).toBeDefined(); + expect(entry['publish_details']).toBeDefined(); + }); + }); + + describe('Regex', () => { + let entry; + let error = null; + const field = 'title'; + const regex = { + pattern: '^source', + options: 'i' + }; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.regex(field, regex.pattern, regex.options).toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Entry field should match the regex pattern', () => { + const regExp = new RegExp(regex.pattern, regex.options); + expect(regExp.test(entry[field])).toBe(true); + }); + + test('Should return an entry with uid, locale, publish_details', () => { + expect(entry).toBeDefined(); + expect(entry['uid']).toBeDefined(); + expect(entry['locale']).toBeDefined(); + expect(entry['publish_details']).toBeDefined(); + }); + }); + + describe('Localization', () => { + describe('Without Fallback', () => { + let entry; + let error = null; + const _in = ['ja-jp']; + + beforeAll(async () => { + try { + entry = await Stack.ContentType(contentTypes.source) + .Query() + .language('ja-jp') + .toJSON() + .findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('Entry should have correct locale in publish_details', () => { + expect(_in).toContain(entry.publish_details.locale); + }); + }); + + describe('With Fallback', () => { + let entry; + let error = null; + const _in = ['ja-jp', 'en-us']; + + beforeAll(async () => { + try { + entry = await Stack.ContentType(contentTypes.source) + .Query() + .language('ja-jp') + .includeFallback() + .toJSON() + .findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('Entry should have locale from allowed fallback list', () => { + expect(_in).toContain(entry.publish_details.locale); + }); + }); + }); + describe('Including References', () => { + describe('includeReference - String', () => { + let entry; + let error = null; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.includeReference('reference').toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('All present references should be included as objects', () => { + expect(entry && entry['reference'] && typeof entry['reference'] === 'object').toBe(true); + }); + }); + + describe('includeReference - Array', () => { + let entry; + let error = null; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.includeReference(['reference', 'other_reference']).toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('All present references should be included as objects', () => { + const condition = ( + entry && + entry['reference'] && + typeof entry['reference'] === 'object' && + entry.other_reference && + typeof entry.other_reference === 'object' + ); + expect(condition).toBe(true); + }); + }); + }); + + describe('Including Schema', () => { + let entry; + let error = null; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.includeSchema().toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + }); + + describe('Including ContentType', () => { + let entry; + let contentType; + let error = null; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + [entry, contentType] = await new Promise((resolve, reject) => { + Query.includeContentType() + .toJSON() + .findOne() + .then((entry, contentType) => resolve([entry, contentType]), reject); }); -}); - -test('findOne: .only() - Array Parameter', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .only(['title', 'url']) - .toJSON() - .findOne() - .then(function success(entry) { - var flag = (entry && Object.keys(entry).length === 3 && "title" in entry && "uid" in entry && "url" in entry); - assert.ok(flag, 'entry with the field title,url in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .only() - Array Parameter"); - assert.end(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('ContentType should not be present', () => { + expect(typeof contentType).toBe("undefined"); + }); + }); + + describe('Including Schema and ContentType', () => { + let entry; + let contentType; + let error = null; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + [entry, contentType] = await new Promise((resolve, reject) => { + Query.includeSchema() + .includeContentType() + .toJSON() + .findOne() + .then((entry, contentType) => resolve([entry, contentType]), reject); }); -}); - -test('findOne: .only() - For the reference - String', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeReference('reference') - .only('BASE', 'reference') - .only('reference', 'title') - .toJSON() - .findOne() - .then(function success(entry) { - var flag = false; - if (entry && entry['reference'] && typeof entry['reference'] === 'object') { - flag = entry['reference'].every(function(reference) { - return (reference && "title" in reference && "uid" in reference); - }); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('ContentType should not be present', () => { + expect(typeof contentType).toBe("undefined"); + }); + }); + + describe('Field Selection - Only', () => { + describe('only - Single String Parameter', () => { + let entry; + let error = null; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.only('title').toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('Entry should only contain title and uid fields', () => { + expect(Object.keys(entry).length).toBe(2); + expect(entry).toHaveProperty('title'); + expect(entry).toHaveProperty('uid'); + }); + }); + + describe('only - Multiple String Parameters', () => { + let entry; + let error = null; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.only('BASE', 'title').toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('Entry should only contain title and uid fields', () => { + expect(Object.keys(entry).length).toBe(2); + expect(entry).toHaveProperty('title'); + expect(entry).toHaveProperty('uid'); + }); + }); + + describe('only - Array Parameter', () => { + let entry; + let error = null; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.only(['title', 'url']).toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('Entry should contain title, url, and uid fields', () => { + expect(Object.keys(entry).length).toBe(3); + expect(entry).toHaveProperty('title'); + expect(entry).toHaveProperty('url'); + expect(entry).toHaveProperty('uid'); + }); + }); + + describe('only - For reference - String', () => { + let entry; + let error = null; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query + .includeReference('reference') + .only('BASE', 'reference') + .only('reference', 'title') + .toJSON() + .findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('Reference fields should be properly filtered', () => { + let hasProperReferences = false; + if (entry && entry['reference'] && typeof entry['reference'] === 'object') { + hasProperReferences = entry['reference'].every(ref => + ref && "title" in ref && "uid" in ref); + } else { + hasProperReferences = true; // No references or empty references is valid + } + expect(hasProperReferences).toBe(true); + }); + }); + + describe('only - For reference - Array', () => { + let entry; + let error = null; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query + .includeReference('reference') + .only('BASE', ['reference']) + .only('reference', ['title']) + .toJSON() + .findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('References should have only specified fields', () => { + let hasProperReferences = false; + if (entry && entry['reference']) { + if (Array.isArray(entry['reference'])) { + if (entry['reference'].length === 0) { + hasProperReferences = true; } else { - flag = true + hasProperReferences = entry['reference'].every(ref => + ref && "title" in ref && "uid" in ref); } - assert.equal(flag, true, 'Entry has the reference with only paramteres.'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .only() - For the reference - String"); - assert.end(); - }); -}); - -test('findOne: .only() - For the reference - Array', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeReference('reference') - .only('BASE', ['reference']) - .only('reference', ['title']) - .toJSON() - .findOne() - .then(function success(entry) { - var flag = false; - if (entry && entry['reference']) { - if (entry['reference'].length) { - if (entry['reference'].length === 0){ - flag = true - } else { - flag = entry['reference'].every(function(reference) { - return (reference && "title" in reference && "uid" in reference); - }); - } - } else { - flag = true - } - } else { - flag = true - } - assert.equal(flag, true, 'Entry do not have the reference with only paramteres.'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .only() - For the reference - Array"); - assert.end(); - }); -}); - -// except -test('findOne: .except() - Single String Parameter', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .except('title') - .toJSON() - .findOne() - .then(function success(entry) { - var flag = (entry && !("title" in entry)); - assert.ok(flag, 'entry without the field title in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .except() - Single String Parameter"); - assert.end(); - }); -}); - -test('findOne: .except() - Multiple String Parameter', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .except('BASE', 'title') - .toJSON() - .findOne() - .then(function success(entry) { - var flag = (entry && !("title" in entry)); - assert.ok(flag, 'entry without the field title, url in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .except() - Multiple String Parameter"); - assert.end(); - }); -}); - -test('findOne: .except() - Array of String Parameter', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .except(['title', 'url']) - .toJSON() - .findOne() - .then(function success(entry) { - var flag = (entry && !("title" in entry) && !("url" in entry)); - assert.ok(flag, 'entry without the field title, url in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail(""); - assert.end(); - }); -}); - -test('findOne: .except() - For the reference - String', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeReference('reference') - .only('BASE', 'reference') - .except('reference', 'title') - .toJSON() - .findOne() - .then(function success(entry) { - var flag = false; - if (entry && entry['reference'] && typeof entry['reference'] === 'object') { - flag = entry['reference'].every(function(reference) { - return (reference && !("title" in reference)); - }); - } - assert.ok(flag, 'entry with the field reference without title field in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .except() - For the reference - String"); - assert.end(); - }); -}); - -test('findOne: .except() - For the reference - Array', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeReference('reference') - .only('BASE', ['reference']) - .except('reference', ['title']) - .toJSON() - .findOne() - .then(function success(entry) { - var flag = false; - if (entry && entry['reference'] && typeof entry['reference'] === 'object') { - flag = entry['reference'].every(function(reference) { - return (reference && !("title" in reference)); - }); - } - assert.ok(flag, 'entry with the field reference without title field in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .except() - For the reference - Array"); - assert.end(); - }); + } else { + hasProperReferences = true; + } + } else { + hasProperReferences = true; + } + expect(hasProperReferences).toBe(true); + }); + }); + }); + + describe('Field Selection - Except', () => { + describe('except - Single String Parameter', () => { + let entry; + let error = null; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.except('title').toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('Entry should not contain the excluded field', () => { + expect(entry).not.toHaveProperty('title'); + }); + }); + + describe('except - Multiple String Parameters', () => { + let entry; + let error = null; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.except('BASE', 'title').toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('Entry should not contain the excluded field', () => { + expect(entry).not.toHaveProperty('title'); + }); + }); + + describe('except - Array of String Parameters', () => { + let entry; + let error = null; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.except(['title', 'url']).toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('Entry should not contain the first excluded field', () => { + expect(entry).not.toHaveProperty('title'); + }); + + test('Entry should not contain the second excluded field', () => { + expect(entry).not.toHaveProperty('url'); + }); + }); + + describe('except - For the reference - String', () => { + let entry; + let error = null; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query + .includeReference('reference') + .only('BASE', 'reference') + .except('reference', 'title') + .toJSON() + .findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('References should not contain the excluded field', () => { + let hasProperExclusions = false; + if (entry && entry['reference'] && typeof entry['reference'] === 'object') { + hasProperExclusions = entry['reference'].every(ref => + ref && !("title" in ref)); + } else { + // No references is valid for this test + hasProperExclusions = true; + } + expect(hasProperExclusions).toBe(true); + }); + }); + + describe('except - For the reference - Array', () => { + let entry; + let error = null; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query + .includeReference('reference') + .only('BASE', ['reference']) + .except('reference', ['title']) + .toJSON() + .findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('References should not contain the excluded field', () => { + let hasProperExclusions = false; + if (entry && entry['reference'] && typeof entry['reference'] === 'object') { + hasProperExclusions = entry['reference'].every(ref => + ref && !("title" in ref)); + } else { + hasProperExclusions = true; + } + expect(hasProperExclusions).toBe(true); + }); + }); + }); }); \ No newline at end of file diff --git a/test/entry/findone.js b/test/entry/findone.js index 130d336e..53f649e3 100755 --- a/test/entry/findone.js +++ b/test/entry/findone.js @@ -2,7 +2,6 @@ /* * Module Dependencies. */ -const test = require('tape'); const Contentstack = require('../../dist/node/contentstack.js'); const Utils = require('./utils.js'); const init = require('../config.js'); @@ -10,768 +9,1017 @@ const init = require('../config.js'); const contentTypes = init.contentTypes; let Stack; -/* - * Initalise the Contentstack Instance - * */ -test('Initalise the Contentstack Stack Instance', function(TC) { - setTimeout(function() { - Stack = Contentstack.Stack(init.stack); - Stack.setHost(init.host); - TC.end(); - }, 1000); -}); - -test('findOne: default .toJSON().findOne()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - Query - .toJSON().findOne() - .then(function success(entry) { - assert.ok((entry && entry.uid && entry.locale && entry.publish_details), 'Entry should have publish_details, uid, locale.'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: default .toJSON().findOne()"); - assert.end(); - }); -}); - -/*! - * SORTING - * !*/ -test('findOne: .ascending()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - field = 'created_at'; - - Query - .ascending(field) - .toJSON().findOne() - .then(function success(entry) { - assert.ok((entry && entry.uid && entry.locale && entry.publish_details), 'Entry should have publish_details, uid, locale.'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .ascending()"); - assert.end(); - }); -}); - -test('findOne: .descending()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - field = 'created_at'; - - Query - .descending(field) - .toJSON().findOne() - .then(function success(entry) { - assert.ok((entry && entry.uid && entry.locale && entry.publish_details), 'Entry should have publish_details, uid, locale.'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .descending()"); - assert.end(); - }); -}); - - -/*! - * COMPARISION - * !*/ -test('findOne: .lessThan()', function(assert) { - var Query = Stack.ContentType(contentTypes.numbers_content_type).Query(), - value = 11; - Query - .lessThan('num_field', value) - .toJSON().findOne() - .then(function success(entry) { - assert.ok((entry && entry.num_field < value), 'Entry num_field having value less than ' + value + '.'); - assert.ok((entry && entry.uid && entry.locale && entry.publish_details), 'Entry should have publish_details, uid, locale.'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .lessThan()"); - assert.end(); - }); -}); - -test('findOne: .lessThanOrEqualTo()', function(assert) { - var Query = Stack.ContentType(contentTypes.numbers_content_type).Query(), - value = 11; - Query - .lessThanOrEqualTo('num_field', value) - .toJSON().findOne() - .then(function success(entry) { - assert.ok((entry && entry.num_field <= value), 'Entry num_field having value less than or equal to ' + value + '.'); - assert.ok((entry && entry.uid && entry.locale && entry.publish_details), 'Entry should have publish_details, uid, locale.'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .lessThanOrEqualTo()"); - assert.end(); - }); -}); - -test('findOne: .greaterThan()', function(assert) { - var Query = Stack.ContentType(contentTypes.numbers_content_type).Query(), - field = 'num_field', - value = 11; - - Query - .greaterThan('num_field', value) - .ascending(field) - .toJSON().findOne() - .then(function success(entry) { - assert.ok((entry && entry[field] > value), 'Entry num_field having value greater than ' + value + '.'); - assert.ok((entry && entry.uid && entry.locale && entry.publish_details), 'Entry should have publish_details, uid, locale.'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .greaterThan()"); - assert.end(); - }); -}); - -test('findOne: .greaterThanOrEqualTo()', function(assert) { - var Query = Stack.ContentType(contentTypes.numbers_content_type).Query(), - field = 'num_field', - value = 11; - - Query - .greaterThanOrEqualTo('num_field', value) - .descending(field) - .toJSON().findOne() - .then(function success(entry) { - assert.ok((entry && entry[field] >= value), 'Entry num_field having value greater than ' + value + '.'); - assert.ok((entry && entry.uid && entry.locale && entry.publish_details), 'Entry should have publish_details, uid, locale.'); - assert.end(); - }, function error(err) { - console.error("Error : ", err); - assert.fail("findOne: .greaterThanOrEqualTo()"); - assert.end(); - }); -}); - -test('findOne: .notEqualTo()', function(assert) { - var Query = Stack.ContentType(contentTypes.numbers_content_type).Query(), - field = 'num_field', - value = 6; - - Query - .notEqualTo('num_field', value) - .descending(field) - .toJSON().findOne() - .then(function success(entry) { - assert.ok((entry && entry[field] !== value), 'Entry num_field having value is not equal to ' + value + '.'); - assert.ok((entry && entry.uid && entry.locale && entry.publish_details), 'Entry should have publish_details, uid, locale.'); - assert.end(); - }, function error(err) { - console.error("Error : ", err); - assert.fail("findOne: .notEqualTo()"); - assert.end(); - }); -}); - - -/*! - * Array/Subset - * !*/ - -test('findOne: .containedIn()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - _in = ["source1", "source2"]; - - Query - .containedIn('title', _in) - .toJSON().findOne() - .then(function success(entry) { - assert.ok((entry && entry.title && ~_in.indexOf(entry.title)), 'Entry title exists from the available options ' + _in.join(', ') + '.'); - assert.ok((entry && entry.uid && entry.locale && entry.publish_details), 'Entry should have publish_details, uid, locale.'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .containedIn()"); - assert.end(); - }); -}); - -test('findOne: .notContainedIn()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - _in = ["source1", "source2", "source3", "source4"]; - - Query - .notContainedIn('title', _in) - .toJSON().findOne() - .then(function success(entry) { - assert.ok((entry && entry.title && _in.indexOf(entry.title) === -1), 'Entry title not exists from the available options ' + _in.join(', ') + '.'); - assert.ok((entry && entry.uid && entry.locale && entry.publish_details), 'Entry should have publish_details, uid, locale.'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.deepEqual(err, { error_code: 141, error_message: 'The requested entry doesn\'t exist.' }, "No entry found"); - assert.end(); - }); -}); - - -/*! - *Element(exists) - * !*/ - -test('findOne: .exists()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - queryField = "boolean"; - - Query - .exists(queryField) - .toJSON().findOne() - .then(function success(entry) { - assert.ok((entry && typeof entry[queryField] !== 'undefined'), 'Entry having the ' + queryField + '.'); - assert.ok((entry && entry.uid && entry.locale && entry.publish_details), 'Entry should have publish_details, uid, locale.'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .exists()"); - assert.end(); - }); -}); - -test('findOne: .notExists()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - queryField = "isspecial"; - - Query - .notExists(queryField) - .toJSON().findOne() - .then(function success(entry) { - assert.ok((entry && typeof entry[queryField] === 'undefined'), 'Entry having the ' + queryField + '.'); - assert.ok((entry && entry.uid && entry.locale && entry.publish_details), 'Entry should have publish_details, uid, locale.'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.deepEqual(err, { error_code: 141, error_message: 'The requested entry doesn\'t exist.' }, "No entry found"); - assert.end(); - }); -}); - - -// Pagination -test('findOne: .skip()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .toJSON().find() - .then(function success(allEntries) { - assert.ok(allEntries.length, 'entry key present in the resultset'); - Stack - .ContentType(contentTypes.source) - .Query() - .skip(1) - .toJSON().findOne() - .then(function result(entry) { - assert.deepEqual(allEntries[0][1], entry, 'Element matched.'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .skip()"); - assert.end(); - }); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .skip()"); - assert.end(); - }); -}); - -// Logical -test('findOne: .or() - Query Objects', function(assert) { - var Query1 = Stack.ContentType(contentTypes.source).Query().containedIn('title', ['source1', 'source2']); - var Query2 = Stack.ContentType(contentTypes.source).Query().where('boolean', true); - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .or(Query1, Query2) - .toJSON().findOne() - .then(function success(entry) { - assert.ok((entry && (~(entry.title === 'source1' || entry.boolean === true))), 'Entry satisfies the $OR condition'); - assert.ok((entry && entry.uid && entry.locale && entry.publish_details), 'Entry should have publish_details, uid, locale.'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .or() - Query Objects"); - assert.end(); - }); -}); - -test('findOne: .and() - Query Objects', function(assert) { - var Query1 = Stack.ContentType(contentTypes.source).Query().where('title', 'source1'); - var Query2 = Stack.ContentType(contentTypes.source).Query().where('boolean', true); - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .and(Query1, Query2) - .toJSON().findOne() - .then(function success(entry) { - assert.ok(~(entry.title === 'source1' && entry.boolean === true), 'Entry satisfies the $AND operation.'); - assert.ok((entry && entry.uid && entry.locale && entry.publish_details), 'Entry should have publish_details, uid, locale.'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .and() - Query Objects"); - assert.end(); - }); -}); - -// Custom query -test('findOne: .query() - Raw query', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .query({ "$or": [{ "title": "source1" }, { "boolean": "false" }] }) - .toJSON().findOne() - .then(function success(entry) { - assert.ok((entry && entry.uid && entry.locale && entry.publish_details), 'Entry should have publish_details, uid, locale.'); - assert.ok(~(entry.title === 'source1' || entry.boolean === true), '$OR condition satisfied'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .query() - Raw query"); - assert.end(); - }); -}); - - -// tags -test('findOne: .tags()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - tags = ["tag1", "tag2"]; - - Query - .tags(tags) - .toJSON().findOne() - .then(function success(entry) { - assert.ok((entry && entry.uid && entry.locale && entry.publish_details), 'Entry should have publish_details, uid, locale.'); - assert.equal((Utils.arrayPresentInArray(tags, entry.tags) > 0), true, 'Tags specified are found in result set'); - assert.end(); - }, function error(err) { - console.error("Error :",err); - assert.fail("findOne: .tags()"); - assert.end(); - }); -}); - - -//search -test('findOne: .search()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .search('source1') - .toJSON().findOne() - .then(function success(entry) { - assert.ok((entry && entry.uid && entry.locale && entry.publish_details), 'Entry should have publish_details, uid, locale.'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .search()"); - assert.end(); - }); -}); - - -// search -test('findOne: .regex()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - field = 'title', - regex = { - pattern: '^source', - options: 'i' - }; - - Query - .regex(field, regex.pattern, regex.options) - .toJSON().findOne() - .then(function success(entry) { - assert.ok((entry && entry.uid && entry.locale && entry.publish_details), 'Entry should have publish_details, uid, locale.'); - assert.ok((new RegExp(regex.pattern, regex.options).test(entry[field])), "regexp satisfied"); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .regex()"); - assert.end(); - }); -}); - -test('findOne: without fallback', function(assert) { - var _in = ['ja-jp'] - Stack.ContentType(contentTypes.source).Query().language('ja-jp') - .toJSON() - .findOne() - .then((entry) => { - var _entries = (_in.indexOf(entry['publish_details']['locale']) != -1); - assert.equal(_entries, true, "Publish content fallback"); - assert.end(); - }).catch((error) => { - assert.fail("Entries default .find() fallback catch", error.toString()); - assert.end(); - }) -}) - -test('findOne: fallback', function(assert) { - var _in = ['ja-jp', 'en-us'] - Stack.ContentType(contentTypes.source).Query().language('ja-jp') - .toJSON() - .includeFallback() - .findOne() - .then((entry) => { - var _entries = (_in.indexOf(entry['publish_details']['locale']) != -1); - assert.equal(_entries, true, "Publish content fallback"); - assert.end(); - }).catch((error) => { - assert.fail("Entries default .find() fallback catch", error.toString()); - assert.end(); - }) -}) - -// includeReference -test('findOne: .includeReference() - String', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeReference('reference') - .toJSON().findOne() - .then(function success(entry) { - assert.equal((entry && entry.reference && typeof entry.reference === 'object'), true, 'all the present reference are included'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .includeReference() - String"); - assert.end(); - }); -}); - -test('findOne: .includeReference() - Array', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeReference(['reference', 'other_reference']) - .toJSON().findOne() - .then(function success(entry) { - assert.equal((entry && entry.reference && typeof entry.reference === 'object' && entry.other_reference && typeof entry.other_reference === 'object'), true, 'all the present reference and other reference are included'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .includeReference() - Array"); - assert.end(); - }); -}); - - -// includeSchema -test('findOne: .includeSchema()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeSchema() - .toJSON() - .findOne() - .then(function success(entry) { - // console.log("result : ", Object.keys(result || {})); - assert.ok(entry, 'Entry present in the resultset'); - //assert.ok(entry.length, 'Schema key present in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .includeSchema()"); - assert.end(); - }); -}); - -// includeContentType -test('findOne: .includeContentType()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeContentType() - .toJSON() - .findOne() - .then(function success(entry, contentType) { - // console.log("result : ", entry, contentType); - assert.ok(entry, 'entry present in the resultset'); - assert.ok((typeof contentType === "undefined"), 'ContentType is not present.'); - // assert.ok((contentType.uid === "source"), 'ContentType is title matched.'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .includeContentType()"); - assert.end(); - }); -}); - -// includeSchema & includeContentType -test('findOne: includeSchema & .includeContentType()', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeSchema() - .includeContentType() - .toJSON() - .findOne() - .then(function success(entry, contentType) { - // console.log("result : ", entry, contentType); - assert.ok(entry, 'entry present in the resultset'); - assert.ok((typeof contentType === "undefined"), 'ContentType is not present.'); - // assert.ok((contentType.uid === "source"), 'ContentType is title matched.'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: includeSchema & .includeContentType()"); - assert.end(); - }); -}); - -// only -test('findOne: .only() - Single String Parameter', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .only('title') - .toJSON().findOne() - .then(function success(entry) { - var flag = (entry && Object.keys(entry).length === 2 && "title" in entry && "uid" in entry); - assert.ok(flag, 'entry with the field title in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .only() - Single String Parameter"); - assert.end(); - }); -}); - -test('findOne: .only() - Multiple String Parameter', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .only('BASE', 'title') - .toJSON().findOne() - .then(function success(entry) { - var flag = (entry && Object.keys(entry).length === 2 && "title" in entry && "uid" in entry); - assert.ok(flag, 'entry with the field title in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .only() - Multiple String Parameter"); - assert.end(); - }); -}); - -test('findOne: .only() - Array Parameter', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .only(['title', 'url']) - .toJSON().findOne() - .then(function success(entry) { - var flag = (entry && Object.keys(entry).length === 3 && "title" in entry && "url" in entry && "uid" in entry); - assert.ok(flag, 'entry with the field title,url in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .only() - Array Parameter"); - assert.end(); + +describe('FindOne Tests', () => { + // Setup - Initialize the Contentstack Stack Instance + beforeAll((done) => { + Stack = Contentstack.Stack(init.stack); + Stack.setHost(init.host); + setTimeout(done, 1000); + }); + + describe('Default FindOne', () => { + let entry; + let error = null; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('Entry should have uid', () => { + expect(entry.uid).toBeDefined(); + }); + + test('Entry should have locale', () => { + expect(entry.locale).toBeDefined(); + }); + + test('Entry should have publish_details', () => { + expect(entry.publish_details).toBeDefined(); + }); + }); + + describe('Sorting', () => { + describe('Ascending', () => { + let entry; + let error = null; + const field = 'created_at'; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.ascending(field).toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('Entry should have uid', () => { + expect(entry.uid).toBeDefined(); + }); + + test('Entry should have locale', () => { + expect(entry.locale).toBeDefined(); + }); + + test('Entry should have publish_details', () => { + expect(entry.publish_details).toBeDefined(); + }); + }); + + describe('Descending', () => { + let entry; + let error = null; + const field = 'created_at'; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.descending(field).toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('Entry should have uid', () => { + expect(entry.uid).toBeDefined(); + }); + + test('Entry should have locale', () => { + expect(entry.locale).toBeDefined(); + }); + + test('Entry should have publish_details', () => { + expect(entry.publish_details).toBeDefined(); + }); + }); + }); + + describe('Comparison', () => { + describe('lessThan', () => { + let entry; + let error = null; + const value = 11; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.numbers_content_type).Query(); + entry = await Query.lessThan('num_field', value).toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('num_field should be less than specified value', () => { + expect(entry.num_field).toBeLessThan(value); + }); + + test('Entry should have uid', () => { + expect(entry.uid).toBeDefined(); + }); + + test('Entry should have locale', () => { + expect(entry.locale).toBeDefined(); + }); + + test('Entry should have publish_details', () => { + expect(entry.publish_details).toBeDefined(); + }); + }); + + describe('lessThanOrEqualTo', () => { + let entry; + let error = null; + const value = 11; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.numbers_content_type).Query(); + entry = await Query.lessThanOrEqualTo('num_field', value).toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('num_field should be less than or equal to specified value', () => { + expect(entry.num_field).toBeLessThanOrEqual(value); + }); + + test('Entry should have uid', () => { + expect(entry.uid).toBeDefined(); + }); + + test('Entry should have locale', () => { + expect(entry.locale).toBeDefined(); + }); + + test('Entry should have publish_details', () => { + expect(entry.publish_details).toBeDefined(); + }); + }); + + }); + + describe('Array/Subset', () => { + describe('containedIn', () => { + let entry; + let error = null; + const _in = ["source1", "source2"]; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.containedIn('title', _in).toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('Entry title should be in the specified values', () => { + expect(_in).toContain(entry.title); + }); + + test('Entry should have uid', () => { + expect(entry.uid).toBeDefined(); + }); + + test('Entry should have locale', () => { + expect(entry.locale).toBeDefined(); + }); + + test('Entry should have publish_details', () => { + expect(entry.publish_details).toBeDefined(); + }); + }); + + describe('notContainedIn', () => { + let entry; + let error = null; + const _in = ["source1", "source2", "source3", "source4"]; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.notContainedIn('title', _in).toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should either return an entry or an expected error', () => { + if (entry) { + expect(entry).toBeDefined(); + expect(_in).not.toContain(entry.title); + expect(entry.uid).toBeDefined(); + expect(entry.locale).toBeDefined(); + expect(entry.publish_details).toBeDefined(); + } else { + expect(error).toEqual({ + error_code: 141, + error_message: 'The requested entry doesn\'t exist.' + }); + } + }); + }); + }); + + describe('Element Existence', () => { + describe('exists', () => { + let entry; + let error = null; + const queryField = "boolean"; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.exists(queryField).toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('Entry should have the queried field', () => { + expect(typeof entry[queryField]).not.toBe('undefined'); + }); + + test('Entry should have uid', () => { + expect(entry.uid).toBeDefined(); + }); + + test('Entry should have locale', () => { + expect(entry.locale).toBeDefined(); + }); + + test('Entry should have publish_details', () => { + expect(entry.publish_details).toBeDefined(); + }); + }); + + describe('notExists', () => { + let entry; + let error = null; + const queryField = "isspecial"; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.notExists(queryField).toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should either have entry without field or proper error', () => { + if (entry) { + expect(typeof entry[queryField]).toBe('undefined'); + expect(entry.uid).toBeDefined(); + expect(entry.locale).toBeDefined(); + expect(entry.publish_details).toBeDefined(); + } else { + expect(error).toEqual({ + error_code: 141, + error_message: 'The requested entry doesn\'t exist.' + }); + } + }); + }); + }); + + describe('Pagination', () => { + describe('skip', () => { + let allEntries; + let skippedEntry; + let error = null; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + allEntries = await Query.toJSON().find(); + + const SkipQuery = Stack.ContentType(contentTypes.source).Query(); + skippedEntry = await SkipQuery.skip(1).toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should have entries in the result set', () => { + expect(allEntries.length).toBeTruthy(); + }); + + test('Should get correct skipped entry', () => { + expect(skippedEntry).toEqual(allEntries[0][1]); + }); + }); + }); + + describe('Logical Operations', () => { + describe('OR Query Objects', () => { + let entry; + let error = null; + + beforeAll(async () => { + try { + const Query1 = Stack.ContentType(contentTypes.source).Query().containedIn('title', ['source1', 'source2']); + const Query2 = Stack.ContentType(contentTypes.source).Query().where('boolean', true); + const Query = Stack.ContentType(contentTypes.source).Query(); + + entry = await Query.or(Query1, Query2).toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('Entry should satisfy the OR condition', () => { + const condition = (entry.title === 'source1' || + entry.title === 'source2' || + entry.boolean === true); + expect(condition).toBeTruthy(); + }); + + test('Entry should have uid', () => { + expect(entry.uid).toBeDefined(); + }); + + test('Entry should have locale', () => { + expect(entry.locale).toBeDefined(); + }); + + test('Entry should have publish_details', () => { + expect(entry.publish_details).toBeDefined(); + }); + }); + + describe('AND Query Objects', () => { + let entry; + let error = null; + + beforeAll(async () => { + try { + const Query1 = Stack.ContentType(contentTypes.source).Query().where('title', 'source1'); + const Query2 = Stack.ContentType(contentTypes.source).Query().where('boolean', true); + const Query = Stack.ContentType(contentTypes.source).Query(); + + entry = await Query.and(Query1, Query2).toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('Entry should satisfy the AND condition', () => { + const condition = (entry.title === 'source1' && entry.boolean === true); + expect(condition).toBeTruthy(); + }); + + test('Entry should have uid', () => { + expect(entry.uid).toBeDefined(); + }); + + test('Entry should have locale', () => { + expect(entry.locale).toBeDefined(); + }); + + test('Entry should have publish_details', () => { + expect(entry.publish_details).toBeDefined(); + }); + }); + + describe('Raw Query', () => { + let entry; + let error = null; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query + .query({ "$or": [{ "title": "source1" }, { "boolean": "false" }] }) + .toJSON() + .findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('Entry should satisfy the OR condition in raw query', () => { + const condition = (entry.title === 'source1' || entry.boolean === false); + expect(condition).toBeTruthy(); + }); + + test('Entry should have uid', () => { + expect(entry.uid).toBeDefined(); + }); + + test('Entry should have locale', () => { + expect(entry.locale).toBeDefined(); + }); + + test('Entry should have publish_details', () => { + expect(entry.publish_details).toBeDefined(); + }); + }); + }); + + describe('Localization', () => { + describe('Without Fallback', () => { + let entry; + let error = null; + const _in = ['ja-jp']; + + beforeAll(async () => { + try { + entry = await Stack.ContentType(contentTypes.source) + .Query() + .language('ja-jp') + .toJSON() + .findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('Entry should have correct locale in publish_details', () => { + expect(_in).toContain(entry.publish_details.locale); + }); + }); + + describe('With Fallback', () => { + let entry; + let error = null; + const _in = ['ja-jp', 'en-us']; + + beforeAll(async () => { + try { + entry = await Stack.ContentType(contentTypes.source) + .Query() + .language('ja-jp') + .includeFallback() + .toJSON() + .findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('Entry should have locale from allowed fallback list', () => { + expect(_in).toContain(entry.publish_details.locale); + }); + }); + }); + describe('Including References', () => { + describe('includeReference - String', () => { + let entry; + let error = null; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.includeReference('reference').toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('All present references should be included as objects', () => { + expect(entry && entry.reference && typeof entry.reference === 'object').toBe(true); + }); + }); + + describe('includeReference - Array', () => { + let entry; + let error = null; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.includeReference(['reference', 'other_reference']).toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('All present references should be included as objects', () => { + const condition = ( + entry && + entry.reference && + typeof entry.reference === 'object' && + entry.other_reference && + typeof entry.other_reference === 'object' + ); + expect(condition).toBe(true); + }); + }); + }); + + describe('Including Schema', () => { + let entry; + let error = null; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.includeSchema().toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + }); + + describe('Including ContentType', () => { + let entry; + let contentType; + let error = null; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + [entry, contentType] = await new Promise((resolve, reject) => { + Query.includeContentType() + .toJSON() + .findOne() + .then((entry, contentType) => resolve([entry, contentType]), reject); }); -}); - -test('findOne: .only() - For the reference - String', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeReference('reference') - .only('BASE', 'reference') - .only('reference', 'title') - .toJSON().findOne() - .then(function success(entry) { - var flag = false; - if (entry && entry['reference'] && typeof entry['reference'] === 'object') { - flag = entry.reference.every(function(reference) { - return (reference && "title" in reference && "uid" in reference); - }); - } else { - flag = true - } - assert.equal(flag, true, 'Entry has the reference with only paramteres.'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .only() - For the reference - String"); - assert.end(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('ContentType should not be present', () => { + expect(typeof contentType).toBe("undefined"); + }); + }); + + describe('Including Schema and ContentType', () => { + let entry; + let contentType; + let error = null; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + [entry, contentType] = await new Promise((resolve, reject) => { + Query.includeSchema() + .includeContentType() + .toJSON() + .findOne() + .then((entry, contentType) => resolve([entry, contentType]), reject); }); -}); - -test('findOne: .only() - For the reference - Array', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeReference('reference') - .only('BASE', ['reference']) - .only('reference', ['title']) - .toJSON().findOne() - .then(function success(entry) { - var flag = false; - if (entry && entry['reference']) { - if (entry['reference'].length) { - if (entry['reference'].length === 0){ - flag = true - } else { - flag = entry.reference.every(function(reference) { - return (reference && "title" in reference && "uid" in reference); - }); - } - }else { - flag = true - } + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('ContentType should not be present', () => { + expect(typeof contentType).toBe("undefined"); + }); + }); + + describe('Field Selection - Only', () => { + describe('only - Single String Parameter', () => { + let entry; + let error = null; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.only('title').toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('Entry should only contain title and uid fields', () => { + expect(Object.keys(entry).length).toBe(2); + expect(entry).toHaveProperty('title'); + expect(entry).toHaveProperty('uid'); + }); + }); + + describe('only - Multiple String Parameters', () => { + let entry; + let error = null; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.only('BASE', 'title').toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('Entry should only contain title and uid fields', () => { + expect(Object.keys(entry).length).toBe(2); + expect(entry).toHaveProperty('title'); + expect(entry).toHaveProperty('uid'); + }); + }); + + describe('only - Array Parameter', () => { + let entry; + let error = null; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.only(['title', 'url']).toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('Entry should contain title, url, and uid fields', () => { + expect(Object.keys(entry).length).toBe(3); + expect(entry).toHaveProperty('title'); + expect(entry).toHaveProperty('url'); + expect(entry).toHaveProperty('uid'); + }); + }); + + describe('only - For reference - String', () => { + let entry; + let error = null; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query + .includeReference('reference') + .only('BASE', 'reference') + .only('reference', 'title') + .toJSON() + .findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('References should have only specified fields', () => { + let flag = false; + if (entry && entry['reference'] && typeof entry['reference'] === 'object') { + flag = entry.reference.every(reference => + reference && "title" in reference && "uid" in reference); + } else { + flag = true; + } + expect(flag).toBe(true); + }); + }); + + describe('only - For reference - Array', () => { + let entry; + let error = null; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query + .includeReference('reference') + .only('BASE', ['reference']) + .only('reference', ['title']) + .toJSON() + .findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('References should have only specified fields', () => { + let flag = false; + if (entry && entry['reference']) { + if (entry['reference'].length) { + if (entry['reference'].length === 0) { + flag = true; } else { - flag = true + flag = entry.reference.every(reference => + reference && "title" in reference && "uid" in reference); } - assert.equal(flag, true, 'Entry has the reference with only paramteres.'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .only() - For the reference - Array"); - assert.end(); - }); -}); - -// except -test('findOne: .except() - Single String Parameter', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .except('title') - .toJSON().findOne() - .then(function success(entry) { - var flag = (entry && !("title" in entry)); - assert.ok(flag, 'entry without the field title in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .except() - Single String Parameter"); - assert.end(); - }); -}); - -test('findOne: .except() - Multiple String Parameter', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .except('BASE', 'title') - .toJSON().findOne() - .then(function success(entry) { - var flag = (entry && !("title" in entry)); - assert.ok(flag, 'entry without the field title in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .except() - Multiple String Parameter"); - assert.end(); - }); -}); - -test('findOne: .except() - Array of String Parameter', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .except(['title', 'file']) - .toJSON().findOne() - .then(function success(entry) { - var flag = (entry && !("title" in entry) && !("file" in entry)); - assert.ok(flag, 'entry without the field title, file in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .except() - Array of String Parameter"); - assert.end(); - }); -}); - -test('findOne: .except() - For the reference - String', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeReference('reference') - .only('BASE', 'reference') - .except('reference', 'title') - .toJSON().findOne() - .then(function success(entry) { - var flag = false; - if (entry && entry['reference'] && typeof entry['reference'] === 'object') { - flag = entry.reference.every(function(reference) { - return (reference && !("title" in reference)); - }); - } - assert.ok(flag, 'entry with the field reference without title field in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .except() - For the reference - String"); - assert.end(); - }); -}); - -test('findOne: .except() - For the reference - Array', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .includeReference('reference') - .only('BASE', ['reference']) - .except('reference', ['title']) - .toJSON().findOne() - .then(function success(entry) { - var flag = false; - if (entry && entry['reference'] && typeof entry['reference'] === 'object') { - flag = entry.reference.every(function(reference) { - return (reference && !("title" in reference)); - }); - } - assert.ok(flag, 'entry with the field reference without title field in the resultset'); - assert.end(); - }, function error(err) { - console.error("Error :", err); - assert.fail("findOne: .except() - For the reference - Array"); - assert.end(); - }); -}); -/*! - * HTTP Error Handling - * !*/ - -test('findOne: should handle 422 Unprocessable Entity error', function(assert) { - const Query = Stack.ContentType("invalid_content_type").Query(); - - Query - .toJSON() - .findOne() - .then(function success() { - assert.fail("Expected 422 error but got a successful response."); - assert.end(); - }, function error(err) { - assert.equal(err.http_code, 422, 'Should return HTTP status 422.'); - assert.ok(err.http_message, 'Unprocessable Entity'); - assert.end(); - }); -}); - -test('findOne: should handle 412 Unauthorized error', function(assert) { - Stack.headers = { authorization: 'InvalidAPIKey' }; // Simulating an invalid API key - const Query = Stack.ContentType(contentTypes.source).Query(); - - Query - .toJSON() - .findOne() - .then(function success() { - assert.fail("Expected 412 error but got a successful response."); - assert.end(); - }, function error(err) { - assert.equal(err.http_code, 412, 'Should return HTTP status 412.'); - assert.ok(err.http_message, 'Precondition Failed.'); - assert.end(); - }); -}); + } else { + flag = true; + } + } else { + flag = true; + } + expect(flag).toBe(true); + }); + }); + }); + + describe('Field Selection - Except', () => { + describe('except - Single String Parameter', () => { + let entry; + let error = null; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.except('title').toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('Entry should not contain the title field', () => { + expect(entry).not.toHaveProperty('title'); + }); + }); + + describe('except - Multiple String Parameters', () => { + let entry; + let error = null; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.except('BASE', 'title').toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('Entry should not contain the title field', () => { + expect(entry).not.toHaveProperty('title'); + }); + }); + + describe('except - Array Parameter', () => { + let entry; + let error = null; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.except(['title', 'file']).toJSON().findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('Entry should not contain the title field', () => { + expect(entry).not.toHaveProperty('title'); + }); + + test('Entry should not contain the file field', () => { + expect(entry).not.toHaveProperty('file'); + }); + }); + + describe('except - For reference - String', () => { + let entry; + let error = null; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query + .includeReference('reference') + .only('BASE', 'reference') + .except('reference', 'title') + .toJSON() + .findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('References should not contain the specified field', () => { + let flag = false; + if (entry && entry['reference'] && typeof entry['reference'] === 'object') { + flag = entry.reference.every(reference => + reference && !("title" in reference)); + } + expect(flag).toBeTruthy(); + }); + }); + + describe('except - For reference - Array', () => { + let entry; + let error = null; + + beforeAll(async () => { + try { + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query + .includeReference('reference') + .only('BASE', ['reference']) + .except('reference', ['title']) + .toJSON() + .findOne(); + } catch (err) { + error = err; + console.error("Error:", err); + } + }); + + test('Should return an entry', () => { + expect(entry).toBeDefined(); + }); + + test('References should not contain the specified field', () => { + let flag = false; + if (entry && entry['reference'] && typeof entry['reference'] === 'object') { + flag = entry.reference.every(reference => + reference && !("title" in reference)); + } + expect(flag).toBeTruthy(); + }); + }); + }); + + describe('HTTP Error Handling', () => { + describe('422 Unprocessable Entity Error', () => { + let success = false; + let error = null; + + beforeAll(async () => { + try { + const Query = Stack.ContentType("invalid_content_type").Query(); + await Query.toJSON().findOne(); + success = true; + } catch (err) { + error = err; + } + }); + + test('Should not succeed', () => { + expect(success).toBe(false); + }); + + test('Should return HTTP status 422', () => { + expect(error.http_code).toBe(422); + }); + + test('Should have appropriate error message', () => { + expect(error.http_message).toBeTruthy(); + }); + }); + + describe('412 Unauthorized Error', () => { + let success = false; + let error = null; + + beforeAll(async () => { + try { + Stack.headers = { authorization: 'InvalidAPIKey' }; // Simulating an invalid API key + const Query = Stack.ContentType(contentTypes.source).Query(); + await Query.toJSON().findOne(); + success = true; + } catch (err) { + error = err; + } finally { + // Reset headers for subsequent tests + Stack.headers = {}; + } + }); + + test('Should not succeed', () => { + expect(success).toBe(false); + }); + + test('Should return HTTP status 412', () => { + expect(error.http_code).toBe(412); + }); + + test('Should have appropriate error message', () => { + expect(error.http_message).toBeTruthy(); + }); + }); + }); +}); \ No newline at end of file diff --git a/test/entry/spread.js b/test/entry/spread.js index b863c9c5..f6395c37 100755 --- a/test/entry/spread.js +++ b/test/entry/spread.js @@ -1,209 +1,286 @@ /** * Created by Aamod Pisat on 09-06-2017. */ -'use strict'; +"use strict"; /* * Module Dependencies. */ -const test = require('tape'); -const Contentstack = require('../../dist/node/contentstack.js'); -const init = require('../config.js'); +const Contentstack = require("../../dist/node/contentstack.js"); +const init = require("../config.js"); const contentTypes = init.contentTypes; -var Stack; -/* - * Initalise the Contentstack Instance - * */ -test('Initalise the Contentstack Stack Instance', function(TC) { - setTimeout(function() { - Stack = Contentstack.Stack(init.stack); - Stack.setHost(init.host); - TC.end(); - }, 1000); -}); +let Stack; + +describe("Spread Method Tests", () => { + // Setup - Initialize the Contentstack Stack Instance + beforeAll((done) => { + Stack = Contentstack.Stack(init.stack); + Stack.setHost(init.host); + setTimeout(done, 1000); + }); -test('entries as first argument', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - field = 'updated_at'; + describe("Entries as first argument", () => { + const field = "updated_at"; - Query - .limit(1) + test("Should have entries", () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + Query.limit(1) .toJSON() .find() .spread(function success(entries) { - assert.ok(entries.length, 'Entries exists as first parameter'); - if (entries && entries.length) { - var prev = entries[0][field]; - var _entries = entries.every(function(entry) { - prev = entry[field]; - return (entry[field] <= prev); - }); - assert.equal(_entries, true, "default sorting of descending 'updated_at'"); - } - assert.end(); - }, function error(err) { - assert.end(); + expect(entries.length).toBeTruthy(); }); -}); + }); + + test("Should maintain default sorting of descending updated_at", () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + Query.limit(1) + .toJSON() + .find() + .spread(function success(entries) { + if (entries && entries.length) { + let prev = entries[0][field]; + const _entries = entries.every((entry) => { + prev = entry[field]; + return entry[field] <= prev; + }); + expect(_entries).toBe(true); + } + }); + }); + }); + + describe("With entries and count argument", () => { + const field = "updated_at"; + + test("Should have entries as first parameter", () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + Query.includeCount() + .toJSON() + .find() + .spread((entries) => { + expect(entries.length).toBeTruthy(); + }); + }); + + test("Should have count as second parameter", () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + Query.includeCount() + .toJSON() + .find() + .spread((_, count) => { + expect(count).toBeTruthy(); + }); + }); + + test("Should maintain default sorting of descending updated_at", () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + Query.includeCount() + .toJSON() + .find() + .spread((entries) => { + if (entries && entries.length) { + let prev = entries[0][field]; + const _entries = entries.every((entry) => { + prev = entry[field]; + return entry[field] <= prev; + }); + expect(_entries).toBe(true); + } + }); + }); + }); + + describe("With entries, schema and count argument (includeSchema first)", () => { + const field = "updated_at"; -test('with entries and count argument', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - field = 'updated_at'; - Query + test("Should have entries as first parameter", () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + Query.includeSchema() .includeCount() .toJSON() .find() - .spread(function success(entries, count) { - assert.ok(entries.length, 'Entries exists as first parameter'); - assert.ok(count, 'Count exists as second parameter'); - if (entries && entries.length) { - var prev = entries[0][field]; - var _entries = entries.every(function(entry) { - prev = entry[field]; - return (entry[field] <= prev); - }); - assert.equal(_entries, true, "default sorting of descending 'updated_at'"); - } - assert.end(); - }, function error(err) { - assert.end(); + .spread((entries) => { + expect(entries.length).toBeTruthy(); }); -}); + }); -test('with entries, schema and count argument', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - field = 'updated_at'; - Query - .includeSchema() + test("Should have schema as second parameter", () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + Query.includeSchema() .includeCount() .toJSON() .find() - .spread(function success(entries, schema, count) { - assert.ok(entries.length, 'Entries exists as first parameter'); - assert.ok(schema, 'Schema exists as second parameter'); - assert.ok(count, 'Count exists as third parameter'); - if (entries && entries.length) { - var prev = entries[0][field]; - var _entries = entries.every(function(entry) { - prev = entry[field]; - return (entry[field] <= prev); - }); - assert.equal(_entries, true, "default sorting of descending 'updated_at'"); - } - assert.end(); - }, function error(err) { - assert.end(); + .spread((_, schema) => { + expect(schema).toBeTruthy(); }); -}); + }); -test('with entries, schema and count argument', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - field = 'updated_at'; - Query + test("Should have count as third parameter", () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + Query.includeSchema() .includeCount() - .includeSchema() .toJSON() .find() - .spread(function success(entries, schema, count) { - assert.ok(entries.length, 'Entries exists as first parameter'); - assert.ok(schema, 'Schema exists as second parameter'); - assert.ok(count, 'Count exists as third parameter'); - if (entries && entries.length) { - var prev = entries[0][field]; - var _entries = entries.every(function(entry) { - prev = entry[field]; - return (entry[field] <= prev); - }); - assert.equal(_entries, true, "default sorting of descending 'updated_at'"); - } - assert.end(); - }, function error(err) { - assert.fail(err.message); - assert.end(); + .spread((_, __, count) => { + expect(count).toBeTruthy(); }); -}); + }); -test('with entries, content_type and count argument', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - field = 'updated_at'; - Query - .includeContentType() + test("Should maintain default sorting of descending updated_at", () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + Query.includeSchema() .includeCount() .toJSON() .find() - .spread(function success(entries, contentType, count) { - assert.ok(entries.length, 'Entries exists as first parameter'); - assert.ok(contentType, 'ContentType exists as second parameter'); - assert.ok((contentType.uid === contentTypes.source), 'ContentType exists as second parameter'); - assert.ok(count, 'Count exists as third parameter'); - if (entries && entries.length) { - var prev = entries[0][field]; - var _entries = entries.every(function(entry) { - prev = entry[field]; - return (entry[field] <= prev); - }); - assert.equal(_entries, true, "default sorting of descending 'updated_at'"); - } - assert.end(); - }, function error(err) { - assert.end(); + .spread((entries) => { + if (entries && entries.length) { + let prev = entries[0][field]; + const _entries = entries.every((entry) => { + prev = entry[field]; + return entry[field] <= prev; + }); + expect(_entries).toBe(true); + } }); -}); + }); + }); -test('with entries, content_type and count argument', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - field = 'updated_at'; - Query + describe("With entries, content_type and count argument (includeContentType first)", () => { + const field = "updated_at"; + + test("Should have entries as first parameter", () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + Query.includeContentType() .includeCount() - .includeContentType() .toJSON() .find() - .spread(function success(entries, contentType, count) { - assert.ok(entries.length, 'Entries exists as first parameter'); - assert.ok(contentType, 'ContentType exists as second parameter'); - assert.ok((contentType.uid === contentTypes.source), 'ContentType exists as second parameter'); - assert.ok(count, 'Count exists as third parameter'); - if (entries && entries.length) { - var prev = entries[0][field]; - var _entries = entries.every(function(entry) { - prev = entry[field]; - return (entry[field] <= prev); - }); - assert.equal(_entries, true, "default sorting of descending 'updated_at'"); - } - assert.end(); - }, function error(err) { - assert.fail(err.message); - assert.end(); + .spread((entries) => { + expect(entries.length).toBeTruthy(); }); -}); + }); + + test("Should have contentType as second parameter", () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + Query.includeContentType() + .includeCount() + .toJSON() + .find() + .spread((_, contentType) => { + expect(contentType).toBeTruthy(); + }); + }); -test('with entries, content_type|schema and count argument', function(assert) { - var Query = Stack.ContentType(contentTypes.source).Query(), - field = 'updated_at'; - Query + test("Should have correct contentType uid", () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + Query.includeContentType() .includeCount() + .toJSON() + .find() + .spread((_, contentType) => { + expect(contentType.uid).toBe(contentTypes.source); + }); + }); + + test("Should have count as third parameter", () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + Query.includeContentType() + .includeCount() + .toJSON() + .find() + .spread((_, __, count) => { + expect(count).toBeTruthy(); + }); + }); + + test("Should maintain default sorting of descending updated_at", () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + Query.includeContentType() + .includeCount() + .toJSON() + .find() + .spread((entries) => { + if (entries && entries.length) { + let prev = entries[0][field]; + const _entries = entries.every((entry) => { + prev = entry[field]; + return entry[field] <= prev; + }); + expect(_entries).toBe(true); + } + }); + }); + }); + + describe("With entries, content_type|schema and count argument", () => { + const field = "updated_at"; + + test("Should have entries as first parameter", () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + Query.includeCount() + .includeSchema() + .includeContentType() + .toJSON() + .find() + .spread((entries) => { + expect(entries.length).toBeTruthy(); + }); + }); + + test("Should have contentType as second parameter", () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + Query.includeCount() .includeSchema() .includeContentType() .toJSON() .find() - .spread(function success(entries, contentType, count) { - assert.ok(entries.length, 'Entries exists as first parameter'); - assert.ok(contentType, 'ContentType exists as second parameter'); - assert.ok((contentType.uid === contentTypes.source), 'ContentType exists as second parameter'); - assert.ok(count, 'Count exists as third parameter'); - if (entries && entries.length) { - var prev = entries[0][field]; - var _entries = entries.every(function(entry) { - prev = entry[field]; - return (entry[field] <= prev); - }); - assert.equal(_entries, true, "default sorting of descending 'updated_at'"); - } - assert.end(); - }, function error(err) { - assert.fail(err.message); - assert.end(); - }); -}); \ No newline at end of file + .spread((_, contentType) => { + expect(contentType).toBeTruthy(); + }); + }); + + test("Should have correct contentType uid", () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + Query.includeCount() + .includeSchema() + .includeContentType() + .toJSON() + .find() + .spread((_, contentType) => { + expect(contentType.uid).toBe(contentTypes.source); + }); + }); + + test("Should have count as third parameter", () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + Query.includeCount() + .includeSchema() + .includeContentType() + .toJSON() + .find() + .spread((_, __, count) => { + expect(count).toBeTruthy(); + }); + }); + + test("Should maintain default sorting of descending updated_at", () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + Query.includeCount() + .includeSchema() + .includeContentType() + .toJSON() + .find() + .spread((entries) => { + if (entries && entries.length) { + let prev = entries[0][field]; + const _entries = entries.every((entry) => { + prev = entry[field]; + return entry[field] <= prev; + }); + expect(_entries).toBe(true); + } + }); + }); + }); +}); diff --git a/test/live-preview/live-preview-test.js b/test/live-preview/live-preview-test.js index 7bd491d3..31952026 100644 --- a/test/live-preview/live-preview-test.js +++ b/test/live-preview/live-preview-test.js @@ -1,91 +1,90 @@ - 'use strict'; -const test = require('tape'); const Contentstack = require('../../dist/node/contentstack.js'); -test('should check for values initialized', function(assert) { +describe('Contentstack Live Preview Tests', () => { + test('should check for values initialized', () => { const stack = Contentstack.Stack({ - 'api_key': process.env.API_KEY, - 'delivery_token': process.env.DELIVERY_TOKEN, - 'environment': process.env.ENVIRONMENT + 'api_key': process.env.region_API_KEY, + 'delivery_token': process.env.DELIVERY_TOKEN, + 'environment': process.env.ENVIRONMENT }); + const livePreviewObject = stack.config.live_preview; - assert.equal(livePreviewObject.enable, false); - assert.equal(stack.config.host, 'cdn.contentstack.io'); // rest-preview.contentstack.com - assert.end(); -}); + expect(livePreviewObject.enable).toBe(false); + expect(stack.config.host).toBe('cdn.contentstack.io'); // rest-preview.contentstack.com + }); -test('should check host when live preview is enabled and management token is provided', function(assert) { + test('should check host when live preview is enabled and management token is provided', () => { const stack = Contentstack.Stack({ - 'api_key': process.env.API_KEY, - 'delivery_token': process.env.DELIVERY_TOKEN, - 'environment': process.env.ENVIRONMENT, - live_preview: { - enable: true, - management_token: 'management_token' - } + 'api_key': process.env.API_KEY, + 'delivery_token': process.env.DELIVERY_TOKEN, + 'environment': process.env.ENVIRONMENT, + live_preview: { + enable: true, + management_token: 'management_token' + } }); + const livePreviewObject = stack.config.live_preview; - assert.notEqual(livePreviewObject, 'undefined'); - assert.notEqual(livePreviewObject.enable, 'undefined'); - assert.notEqual(livePreviewObject.host, 'undefined'); - assert.equal(stack.config.host, 'cdn.contentstack.io'); // rest-preview.contentstack.com - assert.end(); -}); + expect(livePreviewObject).not.toBe('undefined'); + expect(livePreviewObject.enable).not.toBe('undefined'); + expect(livePreviewObject.host).not.toBe('undefined'); + expect(stack.config.host).toBe('cdn.contentstack.i'); // rest-preview.contentstack.com + }); -test('should check host when live preview is disabled and management token is provided', function(assert) { + test('should check host when live preview is disabled and management token is provided', () => { const stack = Contentstack.Stack({ - 'api_key': process.env.API_KEY, - 'delivery_token': process.env.DELIVERY_TOKEN, - 'environment': process.env.ENVIRONMENT, - live_preview: { - enable: false, - management_token: 'management_token' - } + 'api_key': process.env.API_KEY, + 'delivery_token': process.env.DELIVERY_TOKEN, + 'environment': process.env.ENVIRONMENT, + live_preview: { + enable: false, + management_token: 'management_token' + } }); + const livePreviewObject = stack.config.live_preview; - assert.notEqual(livePreviewObject, 'undefined'); - assert.equal(livePreviewObject.enable, false); - assert.notEqual(livePreviewObject.host, 'undefined'); - assert.end(); -}); + expect(livePreviewObject).not.toBe('undefined'); + expect(livePreviewObject.enable).toBe(false); + expect(livePreviewObject.host).not.toBe('undefined'); + }); -test('should check host when live preview is enabled and preview token is provided', function(assert) { + test('should check host when live preview is enabled and preview token is provided', () => { const stack = Contentstack.Stack({ - 'api_key': process.env.API_KEY, - 'delivery_token': process.env.DELIVERY_TOKEN, - 'environment': process.env.ENVIRONMENT, - live_preview: { - enable: true, - preview_token: 'preview_token' - } + 'api_key': process.env.API_KEY, + 'delivery_token': process.env.DELIVERY_TOKEN, + 'environment': process.env.ENVIRONMENT, + live_preview: { + enable: true, + preview_token: 'preview_token' + } }); + const livePreviewObject = stack.config.live_preview; - assert.notEqual(livePreviewObject, 'undefined'); - assert.notEqual(livePreviewObject.enable, 'undefined'); - assert.notEqual(livePreviewObject.host, 'undefined'); - assert.notEqual(livePreviewObject.preview_token, 'undefined'); - assert.equal(stack.config.host, 'cdn.contentstack.io'); - assert.end(); -}); + expect(livePreviewObject).not.toBe('undefined'); + expect(livePreviewObject.enable).not.toBe('undefined'); + expect(livePreviewObject.host).not.toBe('undefined'); + expect(livePreviewObject.preview_token).not.toBe('undefined'); + expect(stack.config.host).toBe('cdn.contentstack.io'); + }); -test('should check host when live preview is disabled and preview token is provided', function(assert) { + test('should check host when live preview is disabled and preview token is provided', () => { const stack = Contentstack.Stack({ - 'api_key': process.env.API_KEY, - 'delivery_token': process.env.DELIVERY_TOKEN, - 'environment': process.env.ENVIRONMENT, - live_preview: { - enable: false, - preview_token: 'preview_token' - } + 'api_key': process.env.API_KEY, + 'delivery_token': process.env.DELIVERY_TOKEN, + 'environment': process.env.ENVIRONMENT, + live_preview: { + enable: false, + preview_token: 'preview_token' + } }); + const livePreviewObject = stack.config.live_preview; - assert.notEqual(livePreviewObject, 'undefined'); - assert.notEqual(livePreviewObject.enable, 'undefined'); - assert.notEqual(livePreviewObject.host, 'undefined'); - assert.notEqual(livePreviewObject.preview_token, 'undefined'); - assert.equal(stack.config.host, 'cdn.contentstack.io'); - assert.end(); -}); - + expect(livePreviewObject).not.toBe('undefined'); + expect(livePreviewObject.enable).not.toBe('undefined'); + expect(livePreviewObject.host).not.toBe('undefined'); + expect(livePreviewObject.preview_token).not.toBe('undefined'); + expect(stack.config.host).toBe('cdn.contentstack.io'); + }); +}); \ No newline at end of file From 1d77bfc2f0d59939172a678ec9d7de8904706b29 Mon Sep 17 00:00:00 2001 From: "harshitha.d" Date: Thu, 20 Mar 2025 15:49:01 +0530 Subject: [PATCH 4/9] fix: update live preview test to use correct CDN host --- test/live-preview/live-preview-test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/live-preview/live-preview-test.js b/test/live-preview/live-preview-test.js index 31952026..4ffc93e2 100644 --- a/test/live-preview/live-preview-test.js +++ b/test/live-preview/live-preview-test.js @@ -30,7 +30,7 @@ describe('Contentstack Live Preview Tests', () => { expect(livePreviewObject).not.toBe('undefined'); expect(livePreviewObject.enable).not.toBe('undefined'); expect(livePreviewObject.host).not.toBe('undefined'); - expect(stack.config.host).toBe('cdn.contentstack.i'); // rest-preview.contentstack.com + expect(stack.config.host).toBe('cdn.contentstack.io'); // rest-preview.contentstack.com }); test('should check host when live preview is disabled and management token is provided', () => { From 600c11545d0aa61ed711f9586d73df3d0b3340af Mon Sep 17 00:00:00 2001 From: "harshitha.d" Date: Thu, 20 Mar 2025 15:58:59 +0530 Subject: [PATCH 5/9] feat: update testing scripts and enhance Slack reporting for test results --- package-lock.json | 14 +++++ package.json | 2 +- sanity-report-dev11.js | 132 ++++++++++++++++++++++++----------------- 3 files changed, 94 insertions(+), 54 deletions(-) diff --git a/package-lock.json b/package-lock.json index c0de69ab..e867920c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5461,6 +5461,20 @@ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "license": "ISC" }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", diff --git a/package.json b/package.json index c5d28589..ca89d221 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "_id": "contentstack@3.19.3", "scripts": { "test": "npm run test:e2e && npm run test:typescript", - "test:e2e": "tape test/index.js | tap-html --out ./tap-html.html", + "test:e2e": "jest --config jest.js.config.js", "test:typescript": "jest --config jest.config.js --testPathPattern=test/typescript", "automate": "node test.js", "build:node": "webpack --config webpack/webpack.node.js", diff --git a/sanity-report-dev11.js b/sanity-report-dev11.js index eea37a6d..d82cc27b 100644 --- a/sanity-report-dev11.js +++ b/sanity-report-dev11.js @@ -1,6 +1,8 @@ const fs = require("fs"); +const { App } = require("@slack/bolt"); const { JSDOM } = require("jsdom"); const dotenv = require("dotenv"); +const path = require("path"); dotenv.config(); @@ -9,40 +11,38 @@ const user2 = process.env.USER2; const user3 = process.env.USER3; const user4 = process.env.USER4; -const tapHtmlContent = fs.readFileSync("./tap-html.html", "utf8"); -const dom = new JSDOM(tapHtmlContent); -const $ = require("jquery")(dom.window); - -const totalCount = $(".nav a:nth-child(2)") - .text() - .trim() - .replace("Total Count", ""); -const totalPass = $(".nav a:nth-child(3)") - .text() - .trim() - .replace("Total Pass", ""); -const totalFail = $(".nav a:nth-child(4)") - .text() - .trim() - .replace("Total Fail", ""); - -const totalTime = $(".nav a:nth-child(1)") - .text() - .trim() - .replace("Total Time", ""); - -const milliseconds = parseInt(totalTime.replace(/\D/g, ''), 10); -const totalSeconds = Math.floor(milliseconds / 1000); -const durationInMinutes = Math.floor(totalSeconds / 60); -const durationInSeconds = totalSeconds % 60; - -const passedTests = parseInt(totalPass, 10); -const totalTests = parseInt(totalCount, 10); +const data = fs.readFileSync(path.join(__dirname, "tap-html.html"), "utf8"); +const dom = new JSDOM(data); +const textarea = dom.window.document.querySelector( + "#jest-html-reports-result-data" +); +const testResults = JSON.parse(textarea.textContent.trim()); + +const startTime = testResults.startTime; +const endTime = Math.max( + ...testResults.testResults.map((t) => t.perfStats.end) +); +const totalSeconds = (endTime - startTime) / 1000; +const minutes = Math.floor(totalSeconds / 60); +const seconds = (totalSeconds % 60).toFixed(2); +const duration = `${minutes}m ${seconds}s`; + +const summary = { + totalSuites: testResults.numTotalTestSuites, + passedSuites: testResults.numPassedTestSuites, + failedSuites: testResults.numFailedTestSuites, + totalTests: testResults.numTotalTests, + passedTests: testResults.numPassedTests, + failedTests: testResults.numFailedTests, + skippedTests: testResults.numPendingTests + testResults.numTodoTests, + pendingTests: testResults.numPendingTests, + duration: duration, +}; const resultMessage = - passedTests === totalTests - ? `:white_check_mark: Success (${passedTests} / ${totalTests} Passed)` - : `:x: Failure (${passedTests} / ${totalTests} Passed)`; + summary.passedTests === summary.totalTests + ? `:white_check_mark: Success (${summary.passedTests} / ${summary.totalTests} Passed)` + : `:x: Failure (${summary.passedTests} / ${summary.totalTests} Passed)`; const pipelineName = process.env.GO_PIPELINE_NAME; const pipelineCounter = process.env.GO_PIPELINE_COUNTER; @@ -51,42 +51,68 @@ const goCdServer = process.env.GOCD_SERVER; const reportUrl = `http://${goCdServer}/go/files/${pipelineName}/${pipelineCounter}/sanity/1/sanity/test-results/tap-html.html`; let tagUsers = ``; -if (totalFail > 0) { +if (summary.failedTests > 0) { tagUsers = `<@${user1}> <@${user2}> <@${user3}> <@${user4}>`; } const slackMessage = { text: `Dev11, SDK-CDA Sanity -*Result:* ${resultMessage}. ${durationInMinutes}m ${durationInSeconds}s -*Failed Tests:* ${totalFail} +*Result:* ${resultMessage}. ${summary.duration}s +*Failed Tests:* ${summary.failedTests + summary.skippedTests} <${reportUrl}|View Report> ${tagUsers}`, }; -const slackWebhookUrl = process.env.SLACK_WEBHOOK_URL; - -const sendSlackMessage = async (message) => { - const payload = { - text: message, - }; +const app = new App({ + token: process.env.SLACK_BOT_TOKEN, + signingSecret: process.env.SLACK_SIGNING_SECRET, +}); +const sendSlackMessage = async () => { try { - const response = await fetch(slackWebhookUrl, { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify(payload), + const result = await app.client.chat.postMessage({ + token: process.env.SLACK_BOT_TOKEN, + channel: process.env.SLACK_CHANNEL, + text: slackMessage.text, // Ensure this is the full object }); - if (!response.ok) { - throw new Error(`Error sending message to Slack: ${response.statusText}`); + if (summary.failedTests > 0) { + await sendFailureDetails(result.ts); // Pass the correct thread timestamp } - - console.log("Message sent to Slack successfully"); } catch (error) { - console.error("Error:", error); + console.error("Error sending Slack message:", error); + } +}; + +sendSlackMessage(); + + +const sendFailureDetails = async (threadTs) => { + const failedTestSuites = testResults.testResults.filter( + (suite) => suite.numFailingTests > 0 + ); + if (failedTestSuites.length > 0) { + let failureDetails = "*Failed Test Modules:*\n"; + for (const suite of failedTestSuites) { + let modulePath = suite.testFilePath; + let formattedModuleName = path + .relative(__dirname, modulePath) + .replace(/^test\//, "") + .replace(/\.js$/, "") + .replace(/\//g, " "); + failureDetails += ` - ${formattedModuleName}: ${suite.numFailingTests} failed\n`; + } + try { + await app.client.chat.postMessage({ + token: process.env.SLACK_BOT_TOKEN, + channel: process.env.SLACK_CHANNEL, + text: failureDetails, + thread_ts: threadTs, + }); + } catch (error) { + console.error("Error sending failure details:", error); + } } }; -sendSlackMessage(slackMessage.text); \ No newline at end of file +sendSlackMessage(slackMessage.text); From 9a4b69913547640f0babe45f2c2f69d0948f0e67 Mon Sep 17 00:00:00 2001 From: "harshitha.d" Date: Thu, 20 Mar 2025 16:06:25 +0530 Subject: [PATCH 6/9] refactor: remove unnecessary invocation of sendSlackMessage in sanity-report-dev11.js --- sanity-report-dev11.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/sanity-report-dev11.js b/sanity-report-dev11.js index d82cc27b..d43a9138 100644 --- a/sanity-report-dev11.js +++ b/sanity-report-dev11.js @@ -84,9 +84,6 @@ const sendSlackMessage = async () => { } }; -sendSlackMessage(); - - const sendFailureDetails = async (threadTs) => { const failedTestSuites = testResults.testResults.filter( (suite) => suite.numFailingTests > 0 From 9870ff0ead33745b7a3a56acebfd47a459623acd Mon Sep 17 00:00:00 2001 From: "harshitha.d" Date: Thu, 20 Mar 2025 17:20:34 +0530 Subject: [PATCH 7/9] refactor: remove try catch blocks in test cases --- test/asset/find-result-wrapper.js | 1164 +++++++++++++------- test/asset/find.js | 936 ++++++++-------- test/asset/spread.js | 88 +- test/entry/find-result-wrapper.js | 1463 +++++++++++++++----------- test/entry/find.js | 802 +++++--------- test/entry/findone-result-wrapper.js | 940 +++++++---------- test/entry/findone.js | 784 ++++++-------- 7 files changed, 3095 insertions(+), 3082 deletions(-) diff --git a/test/asset/find-result-wrapper.js b/test/asset/find-result-wrapper.js index 5662dd38..5c03e016 100755 --- a/test/asset/find-result-wrapper.js +++ b/test/asset/find-result-wrapper.js @@ -1,10 +1,10 @@ -'use strict'; +"use strict"; /* * Module Dependencies. */ -const Contentstack = require('../../dist/node/contentstack.js'); -const init = require('../config.js'); -const Utils = require('../entry/utils.js'); +const Contentstack = require("../../dist/node/contentstack.js"); +const init = require("../config.js"); +const Utils = require("../entry/utils.js"); let Stack; @@ -18,82 +18,182 @@ describe("Contentstack Asset Tests", () => { }); }); - test('default .find() No fallback', async () => { - const _in = ['ja-jp']; - - try { - const assets = await Stack.Assets().Query().language('ja-jp').toJSON().find(); - + describe("default .find() No fallback", () => { + const _in = ["ja-jp"]; + let assets; + + // Setup - run the query once for all tests + beforeAll(async () => { + try { + assets = await Stack.Assets().Query().language("ja-jp").toJSON().find(); + } catch (error) { + console.error("Error in beforeAll:", error); + throw error; + } + }); + + test("should return a non-empty array of assets", async () => { + expect(assets).toBeDefined(); + expect(Array.isArray(assets)).toBe(true); + expect(assets[0]).toBeDefined(); expect(assets[0].length).toBeTruthy(); + }); + + test("should not include count when not requested", async () => { expect(assets[1]).toBeFalsy(); - + }); + + test("should return assets only in the requested locale", async () => { if (assets && assets.length && assets[0].length) { - const _assets = assets[0].every((asset) => { - return (_in.indexOf(asset['publish_details']['locale']) !== -1); + const allAssetsInRequestedLocale = assets[0].every((asset) => { + return _in.indexOf(asset["publish_details"]["locale"]) !== -1; }); - expect(_assets).toBe(true); + expect(allAssetsInRequestedLocale).toBe(true); + } else { + // Skip this test if no assets are returned + console.warn("No assets returned to verify locale"); } - } catch (error) { - console.error("Error:", error); - fail("asset default .find() fallback catch: " + error.toString()); - } + }); + + test("should have the correct structure for each asset", async () => { + if (assets && assets.length && assets[0].length) { + const firstAsset = assets[0][0]; + expect(firstAsset).toHaveProperty("uid"); + expect(firstAsset).toHaveProperty("title"); + expect(firstAsset).toHaveProperty("publish_details"); + expect(firstAsset.publish_details).toHaveProperty("locale"); + expect(firstAsset.publish_details.locale).toBe("ja-jp"); + } else { + // Skip this test if no assets are returned + console.warn("No assets returned to verify structure"); + } + }); }); - test('default .find() fallback', async () => { - const _in = ['ja-jp', 'en-us']; - try { - const assets = await Stack.Assets().Query().language('ja-jp').includeFallback().toJSON().find(); + describe("default .find() with fallback", () => { + const _in = ["ja-jp", "en-us"]; + let assets; + + // Setup - run the query once for all tests + beforeAll(async () => { + try { + assets = await Stack.Assets() + .Query() + .language("ja-jp") + .includeFallback() + .toJSON() + .find(); + } catch (error) { + console.error("Error in beforeAll:", error); + throw error; + } + }); + + test("should return a non-empty array of assets", async () => { + expect(assets).toBeDefined(); + expect(Array.isArray(assets)).toBe(true); + expect(assets[0]).toBeDefined(); expect(assets[0].length).toBeTruthy(); + }); + + test("should not include count when not requested", async () => { expect(assets[1]).toBeFalsy(); - + }); + + test("should return assets from both primary and fallback locales", async () => { if (assets && assets.length && assets[0].length) { - const _assets = assets[0].every((asset) => { - return (_in.indexOf(asset['publish_details']['locale']) !== -1); + const allAssetsInAllowedLocales = assets[0].every((asset) => { + return _in.indexOf(asset["publish_details"]["locale"]) !== -1; }); - expect(_assets).toBe(true); + expect(allAssetsInAllowedLocales).toBe(true); + } else { + // Skip this test if no assets are returned + console.warn("No assets returned to verify locales with fallback"); } - } catch (error) { - console.error("Error:", error); - fail("asset default .find() fallback catch: " + error.toString()); - } + }); + + test("should include some assets in primary locale", async () => { + if (assets && assets.length && assets[0].length) { + const anyAssetsInPrimaryLocale = assets[0].some((asset) => { + return asset["publish_details"]["locale"] === "ja-jp"; + }); + expect(anyAssetsInPrimaryLocale).toBe(true); + } else { + console.warn("No assets returned to verify primary locale presence"); + } + }); + + test("should have the correct structure for each asset", async () => { + if (assets && assets.length && assets[0].length) { + const firstAsset = assets[0][0]; + expect(firstAsset).toHaveProperty("uid"); + expect(firstAsset).toHaveProperty("title"); + expect(firstAsset).toHaveProperty("publish_details"); + expect(firstAsset.publish_details).toHaveProperty("locale"); + expect( + ["ja-jp", "en-us"].includes(firstAsset.publish_details.locale) + ).toBe(true); + } else { + console.warn("No assets returned to verify structure"); + } + }); }); - test('default .find()', async () => { - const Query = Stack.Assets().Query(); - const field = 'updated_at'; - try { - const assets = await Query.toJSON().find(); - + describe("default .find()", () => { + let assets; + const field = "updated_at"; + + // Setup - run the query once for all tests + beforeAll(async () => { + try { + const Query = Stack.Assets().Query(); + assets = await Query.toJSON().find(); + } catch (error) { + console.error("Error in beforeAll:", error); + throw error; + } + }); + + test("should return a non-empty array of assets", async () => { + expect(assets).toBeDefined(); + expect(Array.isArray(assets)).toBe(true); + expect(assets[0]).toBeDefined(); expect(assets[0].length).toBeTruthy(); + }); + + test("should not include count when not requested", async () => { expect(assets[1]).toBeFalsy(); - + }); + + test("should return assets sorted by updated_at by default in descending order", async () => { if (assets && assets.length && assets[0].length) { let prev = assets[0][0][field]; - const _assets = assets[0].every((asset) => { + const allAssetsSorted = assets[0].every((asset) => { + const isSorted = asset[field] <= prev; prev = asset[field]; - return (asset[field] <= prev); + return isSorted; }); - expect(_assets).toBe(true); + expect(allAssetsSorted).toBe(true); + } else { + console.warn("No assets returned to verify sorting"); } - } catch (err) { - console.error("Error:", err); - fail("asset default .find()"); - } + }); }); describe("sorting", () => { - test('.ascending()', async () => { + test(".ascending()", async () => { const Query = Stack.Assets().Query(); - const field = 'updated_at';try { + const field = "updated_at"; + try { const assets = await Query.ascending(field).toJSON().find(); - + expect(assets[0].length).toBeTruthy(); - + if (assets && assets.length && assets[0].length) { let prev = assets[0][0][field]; const _assets = assets[0].every((asset) => { prev = asset[field]; - return (asset[field] >= prev); + return asset[field] >= prev; }); expect(_assets).toBe(true); } @@ -103,18 +203,18 @@ describe("Contentstack Asset Tests", () => { } }); - test('.descending()', async () => { + test(".descending()", async () => { const Query = Stack.Assets().Query(); - const field = 'created_at'; + const field = "created_at"; try { const assets = await Query.descending(field).toJSON().find(); - + expect(assets[0].length).toBeTruthy(); - + if (assets && assets.length && assets[0].length) { let prev = assets[0][0][field]; const _assets = assets[0].every((asset) => { - const flag = (asset[field] <= prev); + const flag = asset[field] <= prev; prev = asset[field]; return flag; }); @@ -127,12 +227,14 @@ describe("Contentstack Asset Tests", () => { }); }); - test('.addParam()', async () => { + test(".addParam()", async () => { const Query = Stack.Assets().Query(); - + try { - const assets = await Query.addParam('include_dimension', 'true').toJSON().find(); - expect(assets[0][0].hasOwnProperty('dimension')).toBeTruthy(); + const assets = await Query.addParam("include_dimension", "true") + .toJSON() + .find(); + expect(assets[0][0].hasOwnProperty("dimension")).toBeTruthy(); } catch (err) { console.error("Error:", err); fail(".addParam()"); @@ -140,66 +242,82 @@ describe("Contentstack Asset Tests", () => { }); describe("comparison", () => { - test('.lessThan()', async () => { - const Query = Stack.Assets().Query(); - const field = 'file_size'; + describe(".lessThan()", () => { + const field = "file_size"; const value = 5122; - try { - const assets = await Query.lessThan('file_size', value).toJSON().find(); - + let assets; + + beforeAll(async () => { + const Query = Stack.Assets().Query(); + assets = await Query.lessThan(field, value).toJSON().find(); + }); + + test("should return a non-empty array of assets", async () => { + expect(assets).toBeDefined(); + expect(Array.isArray(assets)).toBe(true); + expect(assets[0]).toBeDefined(); expect(assets[0].length).toBeTruthy(); - + }); + + test("should return only assets with file_size less than the specified value", async () => { if (assets && assets.length && assets[0].length) { - let prev = assets[0][0][field]; - const _assets = assets[0].slice(1).every((asset) => { - const flag = (asset[field] < value); - prev = asset[field]; - return flag; - }); - expect(_assets).toBe(true); + const allAssetsMatchCondition = assets[0].every( + (asset) => asset[field] < value + ); + expect(allAssetsMatchCondition).toBe(true); + } else { + console.warn("No assets returned to verify lessThan condition"); } - } catch (err) { - console.error("Error:", err); - fail(".lessThan()"); - } + }); }); - test('.lessThanOrEqualTo()', async () => { - const Query = Stack.Assets().Query(); - const field = 'updated_at'; - try { - const assets = await Query.lessThanOrEqualTo('file_size', 5122).toJSON().find(); - + describe(".lessThanOrEqualTo()", () => { + const field = "file_size"; + const value = 5122; + let assets; + + beforeAll(async () => { + const Query = Stack.Assets().Query(); + assets = await Query.lessThanOrEqualTo(field, value).toJSON().find(); + }); + + test("should return a non-empty array of assets", async () => { + expect(assets).toBeDefined(); + expect(Array.isArray(assets)).toBe(true); + expect(assets[0]).toBeDefined(); expect(assets[0].length).toBeTruthy(); - + }); + + test("should return only assets with file_size less than or equal to the specified value", async () => { if (assets && assets.length && assets[0].length) { - let prev = assets[0][0][field]; - const _assets = assets[0].every((asset) => { - const flag = (asset[field] <= prev); - prev = asset[field]; - return flag; - }); - expect(_assets).toBe(true); + const allAssetsMatchCondition = assets[0].every( + (asset) => asset[field] <= value + ); + expect(allAssetsMatchCondition).toBe(true); + } else { + console.warn( + "No assets returned to verify lessThanOrEqualTo condition" + ); } - } catch (err) { - console.error("Error:", err); - fail(".lessThanOrEqualTo()"); - } + }); }); - test('.greaterThan()', async () => { + test(".greaterThan()", async () => { const Query = Stack.Assets().Query(); - const field = 'file_size'; + const field = "file_size"; const value = 5122; try { - const assets = await Query.greaterThan('file_size', value).ascending(field).toJSON().find(); - + const assets = await Query.greaterThan("file_size", value) + .ascending(field) + .toJSON() + .find(); + expect(assets[0].length).toBeTruthy(); - + if (assets && assets.length && assets[0].length) { let prev = assets[0][0][field]; const _assets = assets[0].slice(1).every((asset) => { - const flag = (asset[field] > value); + const flag = asset[field] > value; prev = asset[field]; return flag; }); @@ -210,19 +328,22 @@ describe("Contentstack Asset Tests", () => { } }); - test('.greaterThanOrEqualTo()', async () => { + test(".greaterThanOrEqualTo()", async () => { const Query = Stack.Assets().Query(); - const field = 'file_size'; + const field = "file_size"; const value = 5122; try { - const assets = await Query.greaterThanOrEqualTo('file_size', 5122).descending(field).toJSON().find(); - + const assets = await Query.greaterThanOrEqualTo("file_size", 5122) + .descending(field) + .toJSON() + .find(); + expect(assets[0].length).toBeTruthy(); - + if (assets && assets.length && assets[0].length) { let prev = assets[0][0][field]; const _assets = assets[0].every((asset) => { - const flag = (asset[field] >= value); + const flag = asset[field] >= value; prev = asset[field]; return flag; }); @@ -234,120 +355,218 @@ describe("Contentstack Asset Tests", () => { } }); - test('.notEqualTo()', async () => { - const Query = Stack.Assets().Query(); - const field = 'file_size'; + describe(".notEqualTo()", () => { + const field = "file_size"; const value = 5122; - try { - const assets = await Query.notEqualTo('file_size', value).descending(field).toJSON().find(); - + let assets; + + beforeAll(async () => { + const Query = Stack.Assets().Query(); + assets = await Query.notEqualTo(field, value) + .descending(field) + .toJSON() + .find(); + }); + + test("should return a non-empty array of assets", async () => { + expect(assets).toBeDefined(); + expect(Array.isArray(assets)).toBe(true); + expect(assets[0]).toBeDefined(); expect(assets[0].length).toBeTruthy(); - + }); + + test("should return only assets with file_size not equal to the specified value", async () => { if (assets && assets.length && assets[0].length) { - let prev = assets[0][0][field]; - const _assets = assets[0].every((asset) => { - const flag = (asset[field] != value); - prev = asset[field]; - return flag; - }); - expect(_assets).toBe(true); + const allAssetsMatchCondition = assets[0].every( + (asset) => asset[field] !== value + ); + expect(allAssetsMatchCondition).toBe(true); + } else { + console.warn("No assets returned to verify notEqualTo condition"); } - } catch (err) { - console.error("Error:", err); - fail(".notEqualTo()"); - } + }); }); - test('.where()', async () => { - const Query = Stack.Assets().Query(); - try { - const assets = await Query.where('title', "image1").toJSON().find(); - + describe(".where()", () => { + const title = "image1"; + let assets; + + beforeAll(async () => { + const Query = Stack.Assets().Query(); + assets = await Query.where("title", title).toJSON().find(); + }); + + test("should return a non-empty array of assets", async () => { + expect(assets).toBeDefined(); + expect(Array.isArray(assets)).toBe(true); + expect(assets[0]).toBeDefined(); expect(assets[0].length).toBeTruthy(); + }); + + test("should return exactly one asset matching the title", async () => { expect(assets[0].length).toBe(1); - } catch (err) { - console.error("Error:", err); - fail(".where()"); - } - }); + }); - test('.equalTo() compare boolean value (true)', async () => { - const Query = Stack.Assets().Query(); - try { - const assets = await Query.language('en-us').equalTo('is_dir', false).toJSON().find(); - - expect(assets[0].length).toBeTruthy(); - expect(assets[0].length).toBe(5); - } catch (err) { - console.error("Error:", err); - fail(".where()"); - } + test("should return only assets with the specified title", async () => { + if (assets && assets.length && assets[0].length) { + const matchingTitle = assets[0].every( + (asset) => asset.title === title + ); + expect(matchingTitle).toBe(true); + } else { + console.warn("No assets returned to verify where condition"); + } + }); }); - test('.equalTo() compare boolean value (false)', async () => { - const Query = Stack.Assets().Query(); - try { - const assets = await Query.equalTo('is_dir', true).toJSON().find(); - - expect(assets[0].length).toBeFalsy(); - expect(assets[0].length).toBe(0); - } catch (err) { - console.error("Error:", err); - fail(".where() boolean value having false"); - } + describe(".equalTo() with boolean values", () => { + describe("when comparing with false", () => { + let assets; + + beforeAll(async () => { + const Query = Stack.Assets().Query(); + assets = await Query.language("en-us") + .equalTo("is_dir", false) + .toJSON() + .find(); + }); + + test("should return a non-empty array of assets", async () => { + expect(assets).toBeDefined(); + expect(Array.isArray(assets)).toBe(true); + expect(assets[0]).toBeDefined(); + expect(assets[0].length).toBeTruthy(); + }); + + test("should return exactly 5 assets matching the condition", async () => { + expect(assets[0].length).toBe(5); + }); + + test("should return only assets with is_dir set to false", async () => { + if (assets && assets.length && assets[0].length) { + const allAssetsMatchCondition = assets[0].every( + (asset) => asset.is_dir === false + ); + expect(allAssetsMatchCondition).toBe(true); + } else { + console.warn("No assets returned to verify equalTo condition"); + } + }); + }); + + describe("when comparing with true", () => { + let assets; + + beforeAll(async () => { + const Query = Stack.Assets().Query(); + assets = await Query.equalTo("is_dir", true).toJSON().find(); + }); + + test("should return an empty array of assets", async () => { + expect(assets).toBeDefined(); + expect(Array.isArray(assets)).toBe(true); + expect(assets[0]).toBeDefined(); + expect(assets[0].length).toBe(0); + }); + }); }); }); describe("Array/Subset Tests", () => { - test('.containedIn()', async () => { - const Query = Stack.Assets().Query(); + describe(".containedIn()", () => { const _in = ["image1", "image2"]; - const field = 'updated_at'; - try { - const assets = await Query.containedIn('title', _in).toJSON().find(); - + let assets; + + beforeAll(async () => { + const Query = Stack.Assets().Query(); + assets = await Query.containedIn("title", _in).toJSON().find(); + }); + + test("should return a non-empty array of assets", async () => { + expect(assets).toBeDefined(); + expect(Array.isArray(assets)).toBe(true); + expect(assets[0]).toBeDefined(); expect(assets[0].length).toBeTruthy(); - + }); + + test("should return only assets with titles contained in the specified array", async () => { if (assets && assets.length && assets[0].length) { - const _assets = assets[0].every((asset) => { - return (_in.indexOf(asset['title']) != -1); + const allAssetsMatchCondition = assets[0].every((asset) => { + return _in.indexOf(asset["title"]) !== -1; }); - expect(_assets).toBe(true); + expect(allAssetsMatchCondition).toBe(true); + } else { + console.warn("No assets returned to verify containedIn condition"); } - } catch (err) { - console.error("Error:", err); - fail(".containedIn()"); - } + }); + + test("should include at least one asset with each of the specified titles", async () => { + if (assets && assets.length && assets[0].length) { + // Check if at least one asset exists for each title in the array + const foundTitles = _in.filter((title) => + assets[0].some((asset) => asset.title === title) + ); + expect(foundTitles.length).toBe(_in.length); + } else { + console.warn("No assets returned to verify all titles are present"); + } + }); }); - test('.notContainedIn()', async () => { - const Query = Stack.Assets().Query(); + describe(".notContainedIn()", () => { const _in = ["image1", "image2"]; - try { - const assets = await Query.notContainedIn('title', _in).toJSON().find(); - + let assets; + + beforeAll(async () => { + const Query = Stack.Assets().Query(); + assets = await Query.notContainedIn("title", _in).toJSON().find(); + }); + + test("should return a non-empty array of assets", async () => { + expect(assets).toBeDefined(); + expect(Array.isArray(assets)).toBe(true); + expect(assets[0]).toBeDefined(); expect(assets[0].length).toBeTruthy(); - } catch (err) { - console.error("Error:", err); - fail(".notContainedIn()"); - } + }); + + test("should return only assets with titles not contained in the specified array", async () => { + if (assets && assets.length && assets[0].length) { + const allAssetsMatchCondition = assets[0].every((asset) => { + return _in.indexOf(asset["title"]) === -1; + }); + expect(allAssetsMatchCondition).toBe(true); + } else { + console.warn("No assets returned to verify notContainedIn condition"); + } + }); + + test("should not include any assets with the specified titles", async () => { + if (assets && assets.length && assets[0].length) { + const foundForbiddenTitles = assets[0].filter((asset) => + _in.includes(asset.title) + ); + expect(foundForbiddenTitles.length).toBe(0); + } else { + console.warn("No assets returned to verify excluded titles"); + } + }); }); }); describe("Element Existence Tests", () => { - test('.exists()', async () => { + test(".exists()", async () => { const Query = Stack.Assets().Query(); const queryField = "is_dir"; - const field = 'updated_at'; + const field = "updated_at"; try { const assets = await Query.exists(queryField).toJSON().find(); - + expect(assets[0].length).toBeTruthy(); - + if (assets && assets.length && assets[0].length) { let prev = assets[0][0][field]; const _assets = assets[0].every((asset) => { - const flag = (asset[field] <= prev); + const flag = asset[field] <= prev; prev = asset[field]; return flag; }); @@ -359,19 +578,19 @@ describe("Contentstack Asset Tests", () => { } }); - test('.notExists()', async () => { + test(".notExists()", async () => { const Query = Stack.Assets().Query(); const queryField = "is_dir"; - const field = 'updated_at'; + const field = "updated_at"; try { const assets = await Query.notExists(queryField).toJSON().find(); expect(assets[0].length).toBeFalsy(); - + if (assets && assets.length && assets[0].length) { let prev = assets[0][0][field]; const _assets = assets[0].every((asset) => { - return (asset[field] <= prev); + return asset[field] <= prev; }); expect(_assets).toBe(true); } @@ -383,20 +602,20 @@ describe("Contentstack Asset Tests", () => { }); describe("Pagination Tests", () => { - test('.skip()', async () => { + test(".skip()", async () => { const Query = Stack.Assets().Query(); - const field = 'updated_at'; + const field = "updated_at"; try { const allassets = await Query.toJSON().find(); const assets = await Stack.Assets().Query().skip(1).toJSON().find(); - + expect(assets[0].length >= 2).toBeTruthy(); expect(allassets[0].slice(1)).toEqual(assets[0]); - + if (assets && assets.length && assets[0].length) { let prev = assets[0][0][field]; const _assets = assets[0].every((asset) => { - const flag = (asset[field] <= prev); + const flag = asset[field] <= prev; prev = asset[field]; return flag; }); @@ -408,20 +627,20 @@ describe("Contentstack Asset Tests", () => { } }); - test('.limit()', async () => { + test(".limit()", async () => { const Query = Stack.Assets().Query(); - const field = 'updated_at'; + const field = "updated_at"; try { const allassets = await Query.toJSON().find(); const assets = await Stack.Assets().Query().limit(2).toJSON().find(); - + expect(assets[0].length).toBeTruthy(); expect(allassets[0].slice(0, 2)).toEqual(assets[0]); - + if (assets && assets.length && assets[0] && assets[0].length) { let prev = assets[0][0][field]; const _assets = assets[0].every((asset) => { - const flag = (asset[field] <= prev); + const flag = asset[field] <= prev; prev = asset[field]; return flag; }); @@ -433,7 +652,7 @@ describe("Contentstack Asset Tests", () => { } }); - test('.count()', async () => { + test(".count()", async () => { const Query = Stack.Assets().Query(); try { const count = await Query.count().toJSON().find(); @@ -446,209 +665,450 @@ describe("Contentstack Asset Tests", () => { }); describe("Logical Operators Tests", () => { - test('.or() - Query Objects', async () => { - const Query1 = Stack.Assets().Query().where('title', 'image1'); - const Query2 = Stack.Assets().Query().where('is_dir', true); - const Query = Stack.Assets().Query(); - try { - const assets = await Query.or(Query1, Query2).toJSON().find(); - + describe(".or() - Query Objects", () => { + let assets; + const title = "image1"; + const isDir = true; + + beforeAll(async () => { + const Query1 = Stack.Assets().Query().where("title", title); + const Query2 = Stack.Assets().Query().where("is_dir", isDir); + const Query = Stack.Assets().Query(); + assets = await Query.or(Query1, Query2).toJSON().find(); + }); + + test("should return a non-empty array of assets", async () => { + expect(assets).toBeDefined(); + expect(Array.isArray(assets)).toBe(true); + expect(assets[0]).toBeDefined(); expect(assets[0].length).toBeTruthy(); - + }); + + test("should return only assets matching at least one of the specified conditions", async () => { if (assets && assets.length && assets[0].length) { - const _assets = assets[0].every((asset) => { - return (~(asset.title === 'source1' || asset.is_dir === true)); - }); - expect(_assets).toBeTruthy(); + const allAssetsMatchCondition = assets[0].every( + (asset) => asset.title === title || asset.is_dir === isDir + ); + expect(allAssetsMatchCondition).toBe(true); + } else { + console.warn("No assets returned to verify OR condition"); } - } catch (err) { - console.error("Error:", err); - fail(".or() - Query Objects"); - } + }); + + test("should include at least one asset matching the title condition", async () => { + if (assets && assets.length && assets[0].length) { + const anyAssetMatchesTitleCondition = assets[0].some( + (asset) => asset.title === title + ); + expect(anyAssetMatchesTitleCondition).toBe(true); + } else { + console.warn("No assets returned to verify first condition"); + } + }); }); - test('.and() - Query Objects', async () => { - const Query1 = Stack.Assets().Query().where('title', 'image1'); - const Query2 = Stack.Assets().Query().where('is_dir', true); - const Query = Stack.Assets().Query(); - try { - const assets = await Query.and(Query1, Query2).toJSON().find(); - + describe(".and() - Query Objects", () => { + let assets; + const title = "image1"; + const isDir = true; + + beforeAll(async () => { + const Query1 = Stack.Assets().Query().where("title", title); + const Query2 = Stack.Assets().Query().where("is_dir", isDir); + const Query = Stack.Assets().Query(); + assets = await Query.and(Query1, Query2).toJSON().find(); + }); + + test("should return an empty array when conditions cannot be satisfied simultaneously", async () => { + expect(assets).toBeDefined(); + expect(Array.isArray(assets)).toBe(true); + expect(assets[0]).toBeDefined(); expect(assets[0].length).toBeFalsy(); - + }); + + test("should verify that no assets match both conditions", async () => { if (assets && assets.length && assets[0].length) { - const _assets = assets[0].every((asset) => { - return (~(asset.title === 'image1' && asset.is_dir === true)); - }); - expect(_assets).toBeTruthy(); + const allAssetsMatchCondition = assets[0].every( + (asset) => asset.title === title && asset.is_dir === isDir + ); + expect(allAssetsMatchCondition).toBe(true); } - } catch (err) { - console.error("Error:", err); - fail(".and() - Query Objects"); - } + }); }); - test('.query() - Raw query', async () => { - const Query = Stack.Assets().Query(); - try { - const assets = await Query.query({ "$or": [{ "title": "image2" }, { "is_dir": "true" }] }).toJSON().find(); - + describe(".query() - Raw query", () => { + let assets; + const title = "image2"; + const isDir = true; + + beforeAll(async () => { + const Query = Stack.Assets().Query(); + assets = await Query.query({ + $or: [{ title: title }, { is_dir: isDir }], + }) + .toJSON() + .find(); + }); + + test("should return a non-empty array of assets", async () => { + expect(assets).toBeDefined(); + expect(Array.isArray(assets)).toBe(true); + expect(assets[0]).toBeDefined(); expect(assets[0].length).toBeTruthy(); - + }); + + test("should return only assets matching at least one of the specified conditions", async () => { if (assets && assets.length && assets[0].length) { - const _assets = assets[0].every((asset) => { - return (asset.title === 'image2' || asset.is_dir === false) - }); - expect(_assets).toBeTruthy(); + const allAssetsMatchCondition = assets[0].every( + (asset) => asset.title === title || asset.is_dir === isDir + ); + expect(allAssetsMatchCondition).toBe(true); + } else { + console.warn("No assets returned to verify raw query conditions"); } - } catch (err) { - console.error("Error:", err); - fail(".query() - Raw query"); - } + }); + + test("should include at least one asset matching the title condition", async () => { + if (assets && assets.length && assets[0].length) { + const anyAssetMatchesTitleCondition = assets[0].some( + (asset) => asset.title === title + ); + expect(anyAssetMatchesTitleCondition).toBe(true); + } else { + console.warn("No assets returned to verify first condition"); + } + }); }); }); describe("Tags Tests", () => { - test('.tags() - empty results', async () => { - const Query = Stack.Assets().Query(); + describe(".tags() - empty results", () => { + let assets; const tags = ["asset3"]; - try { - const assets = await Query.tags(tags).toJSON().find(); - - expect(assets.length >= 1).toBeTruthy(); - - if (assets && assets.length && assets[0].length) { - expect(assets[0].length).toBe(0); - } - } catch (err) { - console.error("Error:", err); - fail(".tags()"); - } + + beforeAll(async () => { + const Query = Stack.Assets().Query(); + assets = await Query.tags(tags).toJSON().find(); + }); + + test("should return a properly structured response", async () => { + expect(assets).toBeDefined(); + expect(Array.isArray(assets)).toBe(true); + expect(assets.length).toBeGreaterThanOrEqual(1); + }); + + test("should return an empty array when no assets match the tags", async () => { + expect(assets[0]).toBeDefined(); + expect(assets[0].length).toBe(0); + }); }); - test('.tags() - with results', async () => { - const Query = Stack.Assets().Query(); - const field = 'tags'; + describe(".tags() - with results", () => { + let assets; + const field = "tags"; const tags = ["asset1", "asset2"]; - try { - const assets = await Query.tags(tags).toJSON().find(); - - expect(assets.length >= 1).toBeTruthy(); - + + beforeAll(async () => { + const Query = Stack.Assets().Query(); + assets = await Query.tags(tags).toJSON().find(); + }); + + test("should return a non-empty array of assets", async () => { + expect(assets).toBeDefined(); + expect(Array.isArray(assets)).toBe(true); + expect(assets.length).toBeGreaterThanOrEqual(1); + expect(assets[0]).toBeDefined(); + expect(assets[0].length).toBeTruthy(); + }); + + test("should return only assets with at least one matching tag", async () => { if (assets && assets.length && assets[0].length) { - const _assets = assets[0].every((asset) => { - return (Utils.arrayPresentInArray(tags, asset[field])); + const allAssetsHaveMatchingTags = assets[0].every((asset) => { + return Utils.arrayPresentInArray(tags, asset[field]); }); - expect(_assets).toBe(true); + expect(allAssetsHaveMatchingTags).toBe(true); + } else { + console.warn("No assets returned to verify tags"); } - } catch (err) { - console.error("Error:", err); - fail(".tags()"); - } + }); + + test("should include assets with tags that overlap with the specified tags", async () => { + if (assets && assets.length && assets[0].length) { + const allAssetsHaveOverlappingTags = assets[0].every((asset) => { + // Check that asset tags overlap with requested tags + return asset[field].some((tag) => tags.includes(tag)); + }); + expect(allAssetsHaveOverlappingTags).toBe(true); + } else { + console.warn("No assets returned to verify tag overlap"); + } + }); }); }); describe("Search Tests", () => { - test('.search()', async () => { - const Query = Stack.Assets().Query(); - try { - const assets = await Query.toJSON().search('image1').find(); + describe(".search()", () => { + let assets; + const searchTerm = "image1"; + + beforeAll(async () => { + const Query = Stack.Assets().Query(); + assets = await Query.toJSON().search(searchTerm).find(); + }); + + test("should return a non-empty array of assets", async () => { + expect(assets).toBeDefined(); + expect(Array.isArray(assets)).toBe(true); + expect(assets[0]).toBeDefined(); expect(assets[0].length).toBeTruthy(); - } catch (err) { - console.error("Error:", err); - fail(".search()"); - } + }); + + test("should return assets matching the search term", async () => { + if (assets && assets.length && assets[0].length) { + // Verify that each asset contains the search term in some field + // This is a simplified check since search can match across multiple fields + const anyAssetMatchesSearchTerm = assets[0].some( + (asset) => + asset.title.includes(searchTerm) || + (asset.description && asset.description.includes(searchTerm)) + ); + expect(anyAssetMatchesSearchTerm).toBe(true); + } else { + console.warn("No assets returned to verify search results"); + } + }); }); - test('.regex()', async () => { - const Query = Stack.Assets().Query(); - const field = 'title'; + describe(".regex()", () => { + let assets; + const field = "title"; const regex = { - pattern: '^image', - options: 'i' + pattern: "^image", + options: "i", }; const regexpObj = new RegExp(regex.pattern, regex.options); - try { - const assets = await Query.regex(field, regex.pattern, regex.options).toJSON().find(); - - expect(assets.length >= 1).toBeTruthy(); - - const flag = assets[0].every((asset) => { - return regexpObj.test(asset[field]); - }); - expect(flag).toBeTruthy(); - } catch (err) { - console.error("Error:", err); - fail(".regex()"); - } + + beforeAll(async () => { + const Query = Stack.Assets().Query(); + assets = await Query.regex(field, regex.pattern, regex.options) + .toJSON() + .find(); + }); + + test("should return a non-empty array of assets", async () => { + expect(assets).toBeDefined(); + expect(Array.isArray(assets)).toBe(true); + expect(assets.length).toBeGreaterThanOrEqual(1); + expect(assets[0]).toBeDefined(); + expect(assets[0].length).toBeTruthy(); + }); + + test("should return only assets with titles matching the regex pattern", async () => { + if (assets && assets.length && assets[0].length) { + const allAssetsTitlesMatchRegex = assets[0].every((asset) => { + return regexpObj.test(asset[field]); + }); + expect(allAssetsTitlesMatchRegex).toBe(true); + } else { + console.warn("No assets returned to verify regex match"); + } + }); + + test('should include assets whose titles start with "image"', async () => { + if (assets && assets.length && assets[0].length) { + const allTitlesStartWithImage = assets[0].every((asset) => + asset.title.toLowerCase().startsWith("image") + ); + expect(allTitlesStartWithImage).toBe(true); + } else { + console.warn("No assets returned to verify specific regex pattern"); + } + }); }); }); describe("Include Options", () => { - test('.includeCount()', async () => { - const Query = Stack.Assets().Query(); - try { - const assets = await Query.includeCount().toJSON().find(); - + describe(".includeCount()", () => { + let assets; + + beforeAll(async () => { + const Query = Stack.Assets().Query(); + assets = await Query.includeCount().toJSON().find(); + }); + + test("should return a non-empty array of assets", async () => { + expect(assets).toBeDefined(); + expect(Array.isArray(assets)).toBe(true); + expect(assets[0]).toBeDefined(); expect(assets[0].length).toBeTruthy(); + }); + + test("should include count information in the result", async () => { + expect(assets[1]).toBeDefined(); expect(assets[1]).toBeTruthy(); - } catch (err) { - console.error("Error:", err); - fail(".includeCount()"); - } + }); + + test("should return count as a number", async () => { + expect(typeof assets[1]).toBe("number"); + }); + + test("should return count equal to the number of returned assets", async () => { + expect(assets[1]).toBeGreaterThanOrEqual(assets[0].length); + }); }); }); describe("Field Projections", () => { - test('.only() - Single String Parameter', async () => { - const Query = Stack.Assets().Query(); - try { - const assets = await Query.only('title').toJSON().find(); - + describe(".only() - Single String Parameter", () => { + let assets; + const selectedField = "title"; + + beforeAll(async () => { + const Query = Stack.Assets().Query(); + assets = await Query.only(selectedField).toJSON().find(); + }); + + test("should return a non-empty array of assets", async () => { + expect(assets).toBeDefined(); + expect(Array.isArray(assets)).toBe(true); + expect(assets[0]).toBeDefined(); expect(assets[0].length).toBeTruthy(); - - const flag = assets[0].every((asset) => { - return (asset && Object.keys(asset).length === 5 && "title" in asset && "uid" in asset && 'url' in asset); - }); - expect(flag).toBeTruthy(); - } catch (err) { - console.error("Error:", err); - fail(".only() - Single String Parameter"); - } + }); + + test("should include the selected field in each asset", async () => { + if (assets && assets.length && assets[0].length) { + const allAssetsHaveSelectedField = assets[0].every( + (asset) => selectedField in asset + ); + expect(allAssetsHaveSelectedField).toBe(true); + } else { + console.warn("No assets returned to verify field projection"); + } + }); + + test("should include system fields along with the selected field", async () => { + if (assets && assets.length && assets[0].length) { + const allAssetsHaveRequiredFields = assets[0].every( + (asset) => "title" in asset && "uid" in asset && "url" in asset + ); + expect(allAssetsHaveRequiredFields).toBe(true); + } else { + console.warn("No assets returned to verify system fields"); + } + }); + + test("should limit the total number of fields in each asset", async () => { + if (assets && assets.length && assets[0].length) { + const allAssetsHaveLimitedFields = assets[0].every( + (asset) => Object.keys(asset).length === 5 + ); + expect(allAssetsHaveLimitedFields).toBe(true); + } else { + console.warn("No assets returned to verify field count"); + } + }); }); - test('.only() - Multiple String Parameter', async () => { - const Query = Stack.Assets().Query(); - try { - const assets = await Query.only('BASE', 'title').toJSON().find(); - + describe(".only() - Multiple String Parameters", () => { + let assets; + const selectedFields = ["BASE", "title"]; + + beforeAll(async () => { + const Query = Stack.Assets().Query(); + assets = await Query.only(...selectedFields) + .toJSON() + .find(); + }); + + test("should return a non-empty array of assets", async () => { + expect(assets).toBeDefined(); + expect(Array.isArray(assets)).toBe(true); + expect(assets[0]).toBeDefined(); expect(assets[0].length).toBeTruthy(); - - const flag = assets[0].every((asset) => { - return (asset && Object.keys(asset).length === 5 && "title" in asset && "uid" in asset && 'url' in asset); - }); - expect(flag).toBeTruthy(); - } catch (err) { - console.error("Error:", err); - fail(".only() - Multiple String Parameter"); - } + }); + + test("should include the title field in each asset", async () => { + if (assets && assets.length && assets[0].length) { + const allAssetsHaveTitle = assets[0].every( + (asset) => "title" in asset + ); + expect(allAssetsHaveTitle).toBe(true); + } else { + console.warn("No assets returned to verify field projection"); + } + }); + + test("should include system fields in each asset", async () => { + if (assets && assets.length && assets[0].length) { + const allAssetsHaveSystemFields = assets[0].every( + (asset) => "uid" in asset && "url" in asset + ); + expect(allAssetsHaveSystemFields).toBe(true); + } else { + console.warn("No assets returned to verify system fields"); + } + }); + + test("should limit the total number of fields in each asset", async () => { + if (assets && assets.length && assets[0].length) { + const allAssetsHaveLimitedFields = assets[0].every( + (asset) => Object.keys(asset).length === 5 + ); + expect(allAssetsHaveLimitedFields).toBe(true); + } else { + console.warn("No assets returned to verify field count"); + } + }); }); - test('.only() - Array Parameter', async () => { - const Query = Stack.Assets().Query(); - try { - const assets = await Query.only(['title', 'filename']).toJSON().find(); - + describe(".only() - Array Parameter", () => { + let assets; + const selectedFields = ["title", "filename"]; + + beforeAll(async () => { + const Query = Stack.Assets().Query(); + assets = await Query.only(selectedFields).toJSON().find(); + }); + + test("should return a non-empty array of assets", async () => { + expect(assets).toBeDefined(); + expect(Array.isArray(assets)).toBe(true); + expect(assets[0]).toBeDefined(); expect(assets[0].length).toBeTruthy(); - - const flag = assets[0].every((asset) => { - return (asset && Object.keys(asset).length === 5 && "title" in asset && "filename" in asset && "uid" in asset && "url" in asset); - }); - expect(flag).toBeTruthy(); - } catch (err) { - console.error("Error:", err); - fail(".only() - Array Parameter"); - } + }); + + test("should include all the selected fields in each asset", async () => { + if (assets && assets.length && assets[0].length) { + const allAssetsHaveSelectedFields = assets[0].every((asset) => + selectedFields.every((field) => field in asset) + ); + expect(allAssetsHaveSelectedFields).toBe(true); + } else { + console.warn("No assets returned to verify field projection"); + } + }); + + test("should include system fields in each asset", async () => { + if (assets && assets.length && assets[0].length) { + const allAssetsHaveSystemFields = assets[0].every( + (asset) => "uid" in asset && "url" in asset + ); + expect(allAssetsHaveSystemFields).toBe(true); + } else { + console.warn("No assets returned to verify system fields"); + } + }); + + test("should limit the total number of fields in each asset", async () => { + if (assets && assets.length && assets[0].length) { + const allAssetsHaveLimitedFields = assets[0].every( + (asset) => Object.keys(asset).length === 5 + ); + expect(allAssetsHaveLimitedFields).toBe(true); + } else { + console.warn("No assets returned to verify field count"); + } + }); }); }); -}); \ No newline at end of file +}); diff --git a/test/asset/find.js b/test/asset/find.js index 5758917f..ea2aee3c 100755 --- a/test/asset/find.js +++ b/test/asset/find.js @@ -1,10 +1,10 @@ -'use strict'; +"use strict"; /* * Module Dependencies. */ -const Contentstack = require('../../dist/node/contentstack.js'); -const init = require('../config.js'); -const Utils = require('../entry/utils.js'); +const Contentstack = require("../../dist/node/contentstack.js"); +const init = require("../config.js"); +const Utils = require("../entry/utils.js"); let Stack; @@ -19,674 +19,564 @@ describe("Contentstack Asset Tests", () => { }); describe("Language and Fallback Tests", () => { - test('default .find() No fallback', async () => { - const _in = ['ja-jp']; - - try { - const assets = await Stack.Assets().Query().language('ja-jp').toJSON().find(); - - expect(assets[0].length).toBeTruthy(); - expect(assets[1]).toBeFalsy(); - - if (assets && assets.length && assets[0].length) { - const _assets = assets[0].every((asset) => { - return (_in.indexOf(asset['publish_details']['locale']) !== -1); - }); - expect(_assets).toBe(true); - } - } catch (error) { - console.error("Error:", error); - fail("asset default .find() fallback catch: " + error.toString()); - } - }); + test("default .find() No fallback", async () => { + const _in = ["ja-jp"]; + + const assets = await Stack.Assets() + .Query() + .language("ja-jp") + .toJSON() + .find(); + + expect(assets[0].length).toBeTruthy(); + expect(assets[1]).toBeFalsy(); - test('default .find() fallback', async () => { - const _in = ['ja-jp', 'en-us']; - - try { - const assets = await Stack.Assets().Query().language('ja-jp').includeFallback().toJSON().find(); - - expect(assets[0].length).toBeTruthy(); - expect(assets[1]).toBeFalsy(); - - if (assets && assets.length && assets[0].length) { - const _assets = assets[0].every((asset) => { - return (_in.indexOf(asset['publish_details']['locale']) !== -1); - }); - expect(_assets).toBe(true); - } - } catch (error) { - console.error("Error:", error); - fail("asset default .find() fallback catch: " + error.toString()); + if (assets && assets.length && assets[0].length) { + const _assets = assets[0].every((asset) => { + return _in.indexOf(asset["publish_details"]["locale"]) !== -1; + }); + expect(_assets).toBe(true); } }); - }); - test('default .find()', async () => { - const Query = Stack.Assets().Query(); - const field = 'updated_at'; - - try { - const assets = await Query.toJSON().find(); - + test("default .find() fallback", async () => { + const _in = ["ja-jp", "en-us"]; + + const assets = await Stack.Assets() + .Query() + .language("ja-jp") + .includeFallback() + .toJSON() + .find(); + expect(assets[0].length).toBeTruthy(); expect(assets[1]).toBeFalsy(); - + if (assets && assets.length && assets[0].length) { - let prev = assets[0][0][field]; const _assets = assets[0].every((asset) => { - const flag = (asset[field] <= prev); - prev = asset[field]; - return flag; + return _in.indexOf(asset["publish_details"]["locale"]) !== -1; }); expect(_assets).toBe(true); } - } catch (err) { - console.error("Error:", err); - fail("asset default .find()"); + }); + }); + + test("default .find()", async () => { + const Query = Stack.Assets().Query(); + const field = "updated_at"; + const assets = await Query.toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + expect(assets[1]).toBeFalsy(); + + if (assets && assets.length && assets[0].length) { + let prev = assets[0][0][field]; + const _assets = assets[0].every((asset) => { + const flag = asset[field] <= prev; + prev = asset[field]; + return flag; + }); + expect(_assets).toBe(true); } }); describe("Sorting", () => { - test('.ascending()', async () => { + test(".ascending()", async () => { const Query = Stack.Assets().Query(); - const field = 'updated_at'; - - try { - const assets = await Query.ascending(field).toJSON().find(); - - expect(assets[0].length).toBeTruthy(); - - if (assets && assets.length && assets[0].length) { - let prev = assets[0][0][field]; - const _assets = assets[0].every((asset) => { - const flag = (asset[field] >= prev); - prev = asset[field]; - return flag; - }); - expect(_assets).toBe(true); - } - } catch (err) { - console.error("Error:", err); - fail(".ascending()"); + const field = "updated_at"; + + const assets = await Query.ascending(field).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + let prev = assets[0][0][field]; + const _assets = assets[0].every((asset) => { + const flag = asset[field] >= prev; + prev = asset[field]; + return flag; + }); + expect(_assets).toBe(true); } }); - test('.descending()', async () => { + test(".descending()", async () => { const Query = Stack.Assets().Query(); - const field = 'created_at'; - - try { - const assets = await Query.descending(field).toJSON().find(); - - expect(assets[0].length).toBeTruthy(); - - if (assets && assets.length && assets[0].length) { - let prev = assets[0][0][field]; - const _assets = assets[0].every((asset) => { - const flag = (asset[field] <= prev); - prev = asset[field]; - return flag; - }); - expect(_assets).toBe(true); - } - } catch (err) { - console.error("Error:", err); - fail(".descending()"); + const field = "created_at"; + + const assets = await Query.descending(field).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + let prev = assets[0][0][field]; + const _assets = assets[0].every((asset) => { + const flag = asset[field] <= prev; + prev = asset[field]; + return flag; + }); + expect(_assets).toBe(true); } }); }); describe("Params", () => { - test('.addParam()', async () => { + test(".addParam()", async () => { const Query = Stack.Assets().Query(); - - try { - const assets = await Query.addParam('include_dimension', 'true').toJSON().find(); - expect(assets[0][0].hasOwnProperty('dimension')).toBeTruthy(); - } catch (err) { - console.error("Error:", err); - fail(".addParam()"); - } + + const assets = await Query.addParam("include_dimension", "true") + .toJSON() + .find(); + expect(assets[0][0].hasOwnProperty("dimension")).toBeTruthy(); }); }); describe("Comparison", () => { - test('.lessThan()', async () => { + test(".lessThan()", async () => { const Query = Stack.Assets().Query(); - const field = 'file_size'; + const field = "file_size"; const value = 5122; - - try { - const assets = await Query.lessThan('file_size', value).toJSON().find(); - - expect(assets[0].length).toBeTruthy(); - - if (assets && assets.length && assets[0].length) { - let prev = assets[0][0][field]; - const _assets = assets[0].slice(1).every((asset) => { - const flag = (asset[field] < value); - prev = asset[field]; - return flag; - }); - expect(_assets).toBe(true); - } - } catch (err) { - console.error("Error:", err); - fail(".lessThan()"); + + const assets = await Query.lessThan("file_size", value).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + let prev = assets[0][0][field]; + const _assets = assets[0].slice(1).every((asset) => { + const flag = asset[field] < value; + prev = asset[field]; + return flag; + }); + expect(_assets).toBe(true); } }); - test('.lessThanOrEqualTo()', async () => { + test(".lessThanOrEqualTo()", async () => { const Query = Stack.Assets().Query(); - const field = 'updated_at'; - - try { - const assets = await Query.lessThanOrEqualTo('file_size', 5122).toJSON().find(); - - expect(assets[0].length).toBeTruthy(); - - if (assets && assets.length && assets[0].length) { - let prev = assets[0][0][field]; - const _assets = assets[0].every((asset) => { - const flag = (asset[field] <= prev); - prev = asset[field]; - return flag; - }); - expect(_assets).toBe(true); - } - } catch (err) { - console.error("Error:", err); - fail(".lessThanOrEqualTo()"); + const field = "updated_at"; + + const assets = await Query.lessThanOrEqualTo("file_size", 5122) + .toJSON() + .find(); + + expect(assets[0].length).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + let prev = assets[0][0][field]; + const _assets = assets[0].every((asset) => { + const flag = asset[field] <= prev; + prev = asset[field]; + return flag; + }); + expect(_assets).toBe(true); } }); - test('.greaterThan()', async () => { + test(".greaterThan()", async () => { const Query = Stack.Assets().Query(); - const field = 'file_size'; + const field = "file_size"; const value = 5122; - - try { - const assets = await Query.greaterThan('file_size', value).ascending(field).toJSON().find(); - - expect(assets[0].length).toBeTruthy(); - - if (assets && assets.length && assets[0].length) { - let prev = assets[0][0][field]; - const _assets = assets[0].slice(1).every((asset) => { - const flag = (asset[field] > value); - prev = asset[field]; - return flag; - }); - expect(_assets).toBe(true); - } - } catch (err) { - fail(".greaterThan()"); + + const assets = await Query.greaterThan("file_size", value) + .ascending(field) + .toJSON() + .find(); + + expect(assets[0].length).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + let prev = assets[0][0][field]; + const _assets = assets[0].slice(1).every((asset) => { + const flag = asset[field] > value; + prev = asset[field]; + return flag; + }); + expect(_assets).toBe(true); } }); - test('.greaterThanOrEqualTo()', async () => { + test(".greaterThanOrEqualTo()", async () => { const Query = Stack.Assets().Query(); - const field = 'file_size'; + const field = "file_size"; const value = 5122; - - try { - const assets = await Query.greaterThanOrEqualTo('file_size', value).descending(field).toJSON().find(); - - expect(assets[0].length).toBeTruthy(); - - if (assets && assets.length && assets[0].length) { - let prev = assets[0][0][field]; - const _assets = assets[0].every((asset) => { - const flag = (asset[field] >= value); - prev = asset[field]; - return flag; - }); - expect(_assets).toBe(true); - } - } catch (err) { - console.error("Error:", err); - fail(".greaterThanOrEqualTo()"); + + const assets = await Query.greaterThanOrEqualTo("file_size", value) + .descending(field) + .toJSON() + .find(); + + expect(assets[0].length).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + let prev = assets[0][0][field]; + const _assets = assets[0].every((asset) => { + const flag = asset[field] >= value; + prev = asset[field]; + return flag; + }); + expect(_assets).toBe(true); } }); - test('.notEqualTo()', async () => { + test(".notEqualTo()", async () => { const Query = Stack.Assets().Query(); - const field = 'file_size'; + const field = "file_size"; const value = 5122; - - try { - const assets = await Query.notEqualTo('file_size', value).descending(field).toJSON().find(); - - expect(assets[0].length).toBeTruthy(); - - if (assets && assets.length && assets[0].length) { - let prev = assets[0][0][field]; - const _assets = assets[0].every((asset) => { - const flag = (asset[field] != value); - prev = asset[field]; - return flag; - }); - expect(_assets).toBe(true); - } - } catch (err) { - console.error("Error:", err); - fail(".notEqualTo()"); + + const assets = await Query.notEqualTo("file_size", value) + .descending(field) + .toJSON() + .find(); + + expect(assets[0].length).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + let prev = assets[0][0][field]; + const _assets = assets[0].every((asset) => { + const flag = asset[field] != value; + prev = asset[field]; + return flag; + }); + expect(_assets).toBe(true); } }); - test('.where()', async () => { + test(".where()", async () => { const Query = Stack.Assets().Query(); - - try { - const assets = await Query.where('title', "image1").toJSON().find(); - - expect(assets[0].length).toBeTruthy(); - expect(assets[0].length).toBe(1); - } catch (err) { - console.error("Error:", err); - fail(".where()"); - } + + const assets = await Query.where("title", "image1").toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + expect(assets[0].length).toBe(1); }); - test('.equalTo() compare boolean value (true)', async () => { + test(".equalTo() compare boolean value (true)", async () => { const Query = Stack.Assets().Query(); - - try { - const assets = await Query.language('en-us').equalTo('is_dir', false).toJSON().find(); - - expect(assets[0].length).toBeTruthy(); - expect(assets[0].length).toBe(5); - } catch (err) { - console.error("Error:", err); - fail(".where()"); - } + + const assets = await Query.language("en-us") + .equalTo("is_dir", false) + .toJSON() + .find(); + + expect(assets[0].length).toBeTruthy(); + expect(assets[0].length).toBe(5); }); - test('.equalTo() compare boolean value (false)', async () => { + test(".equalTo() compare boolean value (false)", async () => { const Query = Stack.Assets().Query(); - - try { - const assets = await Query.equalTo('is_dir', true).toJSON().find(); - - expect(assets[0].length).toBeFalsy(); - expect(assets[0].length).toBe(0); - } catch (err) { - console.error("Error:", err); - fail(".where() boolean value having false"); - } + + const assets = await Query.equalTo("is_dir", true).toJSON().find(); + + expect(assets[0].length).toBeFalsy(); + expect(assets[0].length).toBe(0); }); }); describe("Array/Subset Tests", () => { - test('.containedIn()', async () => { + test(".containedIn()", async () => { const Query = Stack.Assets().Query(); const _in = ["image1", "image2"]; - const field = 'updated_at'; - - try { - const assets = await Query.containedIn('title', _in).toJSON().find(); - - expect(assets[0].length).toBeTruthy(); - - if (assets && assets.length && assets[0].length) { - const _assets = assets[0].every((asset) => { - return (_in.indexOf(asset['title']) != -1); - }); - expect(_assets).toBe(true); - } - } catch (err) { - console.error("Error:", err); - fail(".containedIn()"); + const field = "updated_at"; + + const assets = await Query.containedIn("title", _in).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + const _assets = assets[0].every((asset) => { + return _in.indexOf(asset["title"]) != -1; + }); + expect(_assets).toBe(true); } }); - test('.notContainedIn()', async () => { + test(".notContainedIn()", async () => { const Query = Stack.Assets().Query(); const _in = ["image1", "image2"]; - - try { - const assets = await Query.notContainedIn('title', _in).toJSON().find(); - - expect(assets[0].length).toBeTruthy(); - } catch (err) { - console.error("Error:", err); - fail(".notContainedIn()"); - } + + const assets = await Query.notContainedIn("title", _in).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); }); }); describe("Element Existence Tests", () => { - test('.exists()', async () => { + test(".exists()", async () => { const Query = Stack.Assets().Query(); const queryField = "is_dir"; - const field = 'updated_at'; - - try { - const assets = await Query.exists(queryField).toJSON().find(); - - expect(assets[0].length).toBeTruthy(); - - if (assets && assets.length && assets[0].length) { - let prev = assets[0][0][field]; - const _assets = assets[0].every((asset) => { - const flag = (asset[field] <= prev); - prev = asset[field]; - return flag; - }); - expect(_assets).toBe(true); - } - } catch (err) { - console.error("Error:", err); - fail(".exists()"); + const field = "updated_at"; + + const assets = await Query.exists(queryField).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + let prev = assets[0][0][field]; + const _assets = assets[0].every((asset) => { + const flag = asset[field] <= prev; + prev = asset[field]; + return flag; + }); + expect(_assets).toBe(true); } }); - test('.notExists()', async () => { + test(".notExists()", async () => { const Query = Stack.Assets().Query(); const queryField = "is_dir"; - const field = 'updated_at'; - - try { - const assets = await Query.notExists(queryField).toJSON().find(); - - expect(assets[0].length).toBeFalsy(); - - if (assets && assets.length && assets[0].length) { - let prev = assets[0][0][field]; - const _assets = assets[0].every((asset) => { - return (asset[field] <= prev); - }); - expect(_assets).toBe(true); - } - } catch (err) { - console.error("Error:", err); - fail(".notExists()"); + const field = "updated_at"; + + const assets = await Query.notExists(queryField).toJSON().find(); + + expect(assets[0].length).toBeFalsy(); + + if (assets && assets.length && assets[0].length) { + let prev = assets[0][0][field]; + const _assets = assets[0].every((asset) => { + return asset[field] <= prev; + }); + expect(_assets).toBe(true); } }); }); describe("Pagination Tests", () => { - test('.skip()', async () => { + test(".skip()", async () => { const Query = Stack.Assets().Query(); - const field = 'updated_at'; - - try { - const allassets = await Query.toJSON().find(); - const assets = await Stack.Assets().Query().skip(1).toJSON().find(); - - expect(assets[0].length >= 2).toBeTruthy(); - expect(allassets[0].slice(1)).toEqual(assets[0]); - - if (assets && assets.length && assets[0].length) { - let prev = assets[0][0][field]; - const _assets = assets[0].every((asset) => { - const flag = (asset[field] <= prev); - prev = asset[field]; - return flag; - }); - expect(_assets).toBe(true); - } - } catch (err) { - console.error("Error:", err); - fail(".skip()"); + const field = "updated_at"; + + const allassets = await Query.toJSON().find(); + const assets = await Stack.Assets().Query().skip(1).toJSON().find(); + + expect(assets[0].length >= 2).toBeTruthy(); + expect(allassets[0].slice(1)).toEqual(assets[0]); + + if (assets && assets.length && assets[0].length) { + let prev = assets[0][0][field]; + const _assets = assets[0].every((asset) => { + const flag = asset[field] <= prev; + prev = asset[field]; + return flag; + }); + expect(_assets).toBe(true); } }); - test('.limit()', async () => { + test(".limit()", async () => { const Query = Stack.Assets().Query(); - const field = 'updated_at'; - - try { - const allassets = await Query.toJSON().find(); - const assets = await Stack.Assets().Query().limit(2).toJSON().find(); - - expect(assets[0].length).toBeTruthy(); - expect(allassets[0].slice(0, 2)).toEqual(assets[0]); - - if (assets && assets.length && assets[0] && assets[0].length) { - let prev = assets[0][0][field]; - const _assets = assets[0].every((asset) => { - const flag = (asset[field] <= prev); - prev = asset[field]; - return flag; - }); - expect(_assets).toBe(true); - } - } catch (err) { - console.error("Error:", err); - fail(".limit()"); + const field = "updated_at"; + + const allassets = await Query.toJSON().find(); + const assets = await Stack.Assets().Query().limit(2).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + expect(allassets[0].slice(0, 2)).toEqual(assets[0]); + + if (assets && assets.length && assets[0] && assets[0].length) { + let prev = assets[0][0][field]; + const _assets = assets[0].every((asset) => { + const flag = asset[field] <= prev; + prev = asset[field]; + return flag; + }); + expect(_assets).toBe(true); } }); - test('.count()', async () => { + test(".count()", async () => { const Query = Stack.Assets().Query(); - - try { - const count = await Query.count().toJSON().find(); - expect(count).toBeTruthy(); - } catch (err) { - console.error("Error:", err); - fail(".count()"); - } + + const count = await Query.count().toJSON().find(); + expect(count).toBeTruthy(); }); }); describe("Logical Operators Tests", () => { - test('.or() - Query Objects', async () => { - const Query1 = Stack.Assets().Query().where('title', 'image1'); - const Query2 = Stack.Assets().Query().where('is_dir', true); + test(".or() - Query Objects", async () => { + const Query1 = Stack.Assets().Query().where("title", "image1"); + const Query2 = Stack.Assets().Query().where("is_dir", true); const Query = Stack.Assets().Query(); - - try { - const assets = await Query.or(Query1, Query2).toJSON().find(); - - expect(assets[0].length).toBeTruthy(); - - if (assets && assets.length && assets[0].length) { - const _assets = assets[0].every((asset) => { - return (~(asset.title === 'source1' || asset.is_dir === true)); - }); - expect(_assets).toBeTruthy(); - } - } catch (err) { - console.error("Error:", err); - fail(".or() - Query Objects"); + + const assets = await Query.or(Query1, Query2).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + const _assets = assets[0].every((asset) => { + return ~(asset.title === "source1" || asset.is_dir === true); + }); + expect(_assets).toBeTruthy(); } }); - test('.and() - Query Objects', async () => { - const Query1 = Stack.Assets().Query().where('title', 'image1'); - const Query2 = Stack.Assets().Query().where('is_dir', true); + test(".and() - Query Objects", async () => { + const Query1 = Stack.Assets().Query().where("title", "image1"); + const Query2 = Stack.Assets().Query().where("is_dir", true); const Query = Stack.Assets().Query(); - - try { - const assets = await Query.and(Query1, Query2).toJSON().find(); - - expect(assets[0].length).toBeFalsy(); - - if (assets && assets.length && assets[0].length) { - const _assets = assets[0].every((asset) => { - return (~(asset.title === 'image1' && asset.is_dir === true)); - }); - expect(_assets).toBeTruthy(); - } - } catch (err) { - console.error("Error:", err); - fail(".and() - Query Objects"); + + const assets = await Query.and(Query1, Query2).toJSON().find(); + + expect(assets[0].length).toBeFalsy(); + + if (assets && assets.length && assets[0].length) { + const _assets = assets[0].every((asset) => { + return ~(asset.title === "image1" && asset.is_dir === true); + }); + expect(_assets).toBeTruthy(); } }); - test('.query() - Raw query', async () => { + test(".query() - Raw query", async () => { const Query = Stack.Assets().Query(); - - try { - const assets = await Query.query({ "$or": [{ "title": "image2" }, { "is_dir": "true" }] }).toJSON().find(); - - expect(assets[0].length).toBeTruthy(); - - if (assets && assets.length && assets[0].length) { - const _assets = assets[0].every((asset) => { - return (asset.title === 'image2' || asset.is_dir === false); - }); - expect(_assets).toBeTruthy(); - } - } catch (err) { - console.error("Error:", err); - fail(".query() - Raw query"); + + const assets = await Query.query({ + $or: [{ title: "image2" }, { is_dir: "true" }], + }) + .toJSON() + .find(); + + expect(assets[0].length).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + const _assets = assets[0].every((asset) => { + return asset.title === "image2" || asset.is_dir === false; + }); + expect(_assets).toBeTruthy(); } }); }); describe("Tags Tests", () => { - test('.tags() - empty results', async () => { + test(".tags() - empty results", async () => { const Query = Stack.Assets().Query(); const tags = ["asset3"]; - - try { - const assets = await Query.tags(tags).toJSON().find(); - - expect(assets.length >= 1).toBeTruthy(); - - if (assets && assets.length && assets[0].length) { - expect(assets[0].length).toBe(0); - } - } catch (err) { - console.error("Error:", err); - fail(".tags()"); + + const assets = await Query.tags(tags).toJSON().find(); + + expect(assets.length >= 1).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + expect(assets[0].length).toBe(0); } }); - test('.tags() - with results', async () => { + test(".tags() - with results", async () => { const Query = Stack.Assets().Query(); - const field = 'tags'; + const field = "tags"; const tags = ["asset1", "asset2"]; - - try { - const assets = await Query.tags(tags).toJSON().find(); - - expect(assets.length >= 1).toBeTruthy(); - - if (assets && assets.length && assets[0].length) { - const _assets = assets[0].every((asset) => { - return (Utils.arrayPresentInArray(tags, asset[field])); - }); - expect(_assets).toBe(true); - } - } catch (err) { - console.error("Error:", err); - fail(".tags()"); + + const assets = await Query.tags(tags).toJSON().find(); + + expect(assets.length >= 1).toBeTruthy(); + + if (assets && assets.length && assets[0].length) { + const _assets = assets[0].every((asset) => { + return Utils.arrayPresentInArray(tags, asset[field]); + }); + expect(_assets).toBe(true); } }); }); describe("Search Tests", () => { - test('.search()', async () => { + test(".search()", async () => { const Query = Stack.Assets().Query(); - - try { - const assets = await Query.toJSON().search('image1').find(); - expect(assets[0].length).toBeTruthy(); - } catch (err) { - console.error("Error:", err); - fail(".search()"); - } + + const assets = await Query.toJSON().search("image1").find(); + expect(assets[0].length).toBeTruthy(); }); - test('.regex()', async () => { + test(".regex()", async () => { const Query = Stack.Assets().Query(); - const field = 'title'; + const field = "title"; const regex = { - pattern: '^image', - options: 'i' + pattern: "^image", + options: "i", }; const regexpObj = new RegExp(regex.pattern, regex.options); - - try { - const assets = await Query.regex(field, regex.pattern, regex.options).toJSON().find(); - - expect(assets.length >= 1).toBeTruthy(); - - const flag = assets[0].every((asset) => { - return regexpObj.test(asset[field]); - }); - expect(flag).toBeTruthy(); - } catch (err) { - console.error("Error:", err); - fail(".regex()"); - } + + const assets = await Query.regex(field, regex.pattern, regex.options) + .toJSON() + .find(); + + expect(assets.length >= 1).toBeTruthy(); + + const flag = assets[0].every((asset) => { + return regexpObj.test(asset[field]); + }); + expect(flag).toBeTruthy(); }); }); describe("Include Options", () => { - test('.includeCount()', async () => { + test(".includeCount()", async () => { const Query = Stack.Assets().Query(); - - try { - const assets = await Query.includeCount().toJSON().find(); - - expect(assets[0].length).toBeTruthy(); - expect(assets[1]).toBeTruthy(); - } catch (err) { - console.error("Error:", err); - fail(".includeCount()"); - } + + const assets = await Query.includeCount().toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + expect(assets[1]).toBeTruthy(); }); }); describe("Field Projections", () => { - test('.only() - Single String Parameter', async () => { + test(".only() - Single String Parameter", async () => { const Query = Stack.Assets().Query(); - - try { - const assets = await Query.only('title').toJSON().find(); - - expect(assets[0].length).toBeTruthy(); - - const flag = assets[0].every((asset) => { - return (asset && Object.keys(asset).length === 5 && "title" in asset && "uid" in asset && 'url' in asset); - }); - expect(flag).toBeTruthy(); - } catch (err) { - console.error("Error:", err); - fail(".only() - Single String Parameter"); - } + + const assets = await Query.only("title").toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + + const flag = assets[0].every((asset) => { + return ( + asset && + Object.keys(asset).length === 5 && + "title" in asset && + "uid" in asset && + "url" in asset + ); + }); + expect(flag).toBeTruthy(); }); - test('.only() - Multiple String Parameter', async () => { + test(".only() - Multiple String Parameter", async () => { const Query = Stack.Assets().Query(); - - try { - const assets = await Query.only('BASE', 'title').toJSON().find(); - - expect(assets[0].length).toBeTruthy(); - - const flag = assets[0].every((asset) => { - return (asset && Object.keys(asset).length === 5 && "title" in asset && "uid" in asset && 'url' in asset); - }); - expect(flag).toBeTruthy(); - } catch (err) { - console.error("Error:", err); - fail(".only() - Multiple String Parameter"); - } + + const assets = await Query.only("BASE", "title").toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + + const flag = assets[0].every((asset) => { + return ( + asset && + Object.keys(asset).length === 5 && + "title" in asset && + "uid" in asset && + "url" in asset + ); + }); + expect(flag).toBeTruthy(); }); - test('.only() - Array Parameter', async () => { + test(".only() - Array Parameter", async () => { const Query = Stack.Assets().Query(); - - try { - const assets = await Query.only(['title', 'filename']).toJSON().find(); - - expect(assets[0].length).toBeTruthy(); - - const flag = assets[0].every((asset) => { - return (asset && Object.keys(asset).length === 5 && "title" in asset && "filename" in asset && "uid" in asset && "url" in asset); - }); - expect(flag).toBeTruthy(); - } catch (err) { - console.error("Error:", err); - fail(".only() - Array Parameter"); - } + + const assets = await Query.only(["title", "filename"]).toJSON().find(); + + expect(assets[0].length).toBeTruthy(); + + const flag = assets[0].every((asset) => { + return ( + asset && + Object.keys(asset).length === 5 && + "title" in asset && + "filename" in asset && + "uid" in asset && + "url" in asset + ); + }); + expect(flag).toBeTruthy(); }); }); -}); \ No newline at end of file +}); diff --git a/test/asset/spread.js b/test/asset/spread.js index e494eae2..6fe9b0d1 100755 --- a/test/asset/spread.js +++ b/test/asset/spread.js @@ -1,12 +1,12 @@ /** * Created by Aamod Pisat on 09-06-2017. */ -'use strict'; +"use strict"; /* * Module Dependencies. */ -const Contentstack = require('../../dist/node/contentstack.js'); -const init = require('../config.js'); +const Contentstack = require("../../dist/node/contentstack.js"); +const init = require("../config.js"); let Stack; @@ -20,60 +20,44 @@ describe("Contentstack Asset Tests", () => { }); }); - test('assets as first argument', async () => { + test("assets as first argument", async () => { const Query = Stack.Assets().Query(); - const field = 'updated_at'; + const field = "updated_at"; - try { - const result = await Query - .limit(1) - .toJSON() - .find(); - - const assets = result[0]; // Using array destructuring - - expect(assets.length).toBeTruthy(); - - if (assets && assets.length) { - let prev = assets[0][field]; - const _assets = assets.every((asset) => { - prev = asset[field]; - return (asset[field] <= prev); - }); - expect(_assets).toBe(true); - } - } catch (err) { - console.error("Error:", err); - fail("assets as first argument test failed"); + const result = await Query.limit(1).toJSON().find(); + + const assets = result[0]; // Using array destructuring + + expect(assets.length).toBeTruthy(); + + if (assets && assets.length) { + let prev = assets[0][field]; + const _assets = assets.every((asset) => { + prev = asset[field]; + return asset[field] <= prev; + }); + expect(_assets).toBe(true); } }); - test('with assets and count argument', async () => { + test("with assets and count argument", async () => { const Query = Stack.Assets().Query(); - const field = 'updated_at'; - - try { - const result = await Query - .includeCount() - .toJSON() - .find(); - - const [assets, count] = result; // Using array destructuring - - expect(assets.length).toBeTruthy(); - expect(count).toBeTruthy(); - - if (assets && assets.length) { - let prev = assets[0][field]; - const _assets = assets.every((asset) => { - prev = asset[field]; - return (asset[field] <= prev); - }); - expect(_assets).toBe(true); - } - } catch (err) { - console.error("Error:", err); - fail("with assets and count argument test failed"); + const field = "updated_at"; + + const result = await Query.includeCount().toJSON().find(); + + const [assets, count] = result; // Using array destructuring + + expect(assets.length).toBeTruthy(); + expect(count).toBeTruthy(); + + if (assets && assets.length) { + let prev = assets[0][field]; + const _assets = assets.every((asset) => { + prev = asset[field]; + return asset[field] <= prev; + }); + expect(_assets).toBe(true); } }); -}); \ No newline at end of file +}); diff --git a/test/entry/find-result-wrapper.js b/test/entry/find-result-wrapper.js index 531358a7..a62e73a1 100755 --- a/test/entry/find-result-wrapper.js +++ b/test/entry/find-result-wrapper.js @@ -20,16 +20,28 @@ describe("ContentStack SDK Tests", () => { }); }); - test("default .find()", async () => { - const Query = Stack.ContentType(contentTypes.source).Query(); + describe("default .find()", () => { + let entries; const field = "updated_at"; - try { - const entries = await Query.toJSON().find(); + // Setup - run the query once for all tests + beforeAll(async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.toJSON().find(); + }); + test("should return a non-empty array of entries", async () => { + expect(entries).toBeDefined(); + expect(Array.isArray(entries)).toBe(true); + expect(entries[0]).toBeDefined(); expect(entries[0].length).toBeTruthy(); + }); + + test("should not include count when not requested", async () => { expect(entries[1]).toBeFalsy(); + }); + test("should return entries sorted by updated_at in descending order by default", async () => { if (entries && entries.length && entries[0].length) { let prev = entries[0][0][field]; const _entries = entries[0].every(function (entry) { @@ -37,11 +49,21 @@ describe("ContentStack SDK Tests", () => { return entry.updated_at <= prev; }); expect(_entries).toBe(true); + } else { + console.warn("Not enough entries returned to verify default sorting"); } - } catch (err) { - console.error("error:", err); - fail("default .find()"); - } + }); + + test("should have entries with valid structure", async () => { + if (entries && entries.length && entries[0].length) { + const firstEntry = entries[0][0]; + expect(firstEntry).toHaveProperty("uid"); + expect(firstEntry).toHaveProperty("title"); + expect(firstEntry).toHaveProperty("updated_at"); + } else { + console.warn("No entries returned to verify structure"); + } + }); }); describe("sorting", () => { @@ -49,22 +71,17 @@ describe("ContentStack SDK Tests", () => { const Query = Stack.ContentType(contentTypes.source).Query(); const field = "updated_at"; - try { - const entries = await Query.ascending(field).toJSON().find(); + const entries = await Query.ascending(field).toJSON().find(); - expect(entries[0].length).toBeTruthy(); + expect(entries[0].length).toBeTruthy(); - if (entries && entries.length && entries[0].length) { - let prev = entries[0][0][field]; - const _entries = entries[0].every(function (entry) { - prev = entry[field]; - return entry[field] >= prev; - }); - expect(_entries).toBe(true); - } - } catch (err) { - console.error("error:", err); - fail(".ascending()"); + if (entries && entries.length && entries[0].length) { + let prev = entries[0][0][field]; + const _entries = entries[0].every(function (entry) { + prev = entry[field]; + return entry[field] >= prev; + }); + expect(_entries).toBe(true); } }); @@ -72,22 +89,17 @@ describe("ContentStack SDK Tests", () => { const Query = Stack.ContentType(contentTypes.source).Query(); const field = "created_at"; - try { - const entries = await Query.descending(field).toJSON().find(); + const entries = await Query.descending(field).toJSON().find(); - expect(entries[0].length).toBeTruthy(); + expect(entries[0].length).toBeTruthy(); - if (entries && entries.length && entries[0].length) { - let prev = entries[0][0][field]; - const _entries = entries[0].every(function (entry) { - prev = entry[field]; - return entry[field] >= prev; - }); - expect(_entries).toBe(true); - } - } catch (err) { - console.error("error:", err); - fail(".descending()"); + if (entries && entries.length && entries[0].length) { + let prev = entries[0][0][field]; + const _entries = entries[0].every(function (entry) { + prev = entry[field]; + return entry[field] >= prev; + }); + expect(_entries).toBe(true); } }); }); @@ -100,25 +112,18 @@ describe("ContentStack SDK Tests", () => { const value = 11; const field = "updated_at"; - try { - const entries = await Query.lessThan("num_field", value) - .toJSON() - .find(); + const entries = await Query.lessThan("num_field", value).toJSON().find(); - expect(entries[0].length).toBeTruthy(); + expect(entries[0].length).toBeTruthy(); - if (entries && entries.length && entries[0].length) { - let prev = entries[0][0][field]; - const _entries = entries[0].slice(1).every(function (entry) { - const flag = entry[field] < value; - prev = entry[field]; - return flag; - }); - expect(_entries).toBe(true); - } - } catch (err) { - console.error("error:", err); - fail(".lessThan()"); + if (entries && entries.length && entries[0].length) { + let prev = entries[0][0][field]; + const _entries = entries[0].slice(1).every(function (entry) { + const flag = entry[field] < value; + prev = entry[field]; + return flag; + }); + expect(_entries).toBe(true); } }); @@ -129,25 +134,20 @@ describe("ContentStack SDK Tests", () => { const field = "updated_at"; const value = 11; - try { - const entries = await Query.lessThanOrEqualTo("num_field", value) - .toJSON() - .find(); + const entries = await Query.lessThanOrEqualTo("num_field", value) + .toJSON() + .find(); - expect(entries[0].length).toBeTruthy(); + expect(entries[0].length).toBeTruthy(); - if (entries && entries.length && entries[0].length) { - let prev = entries[0][0][field]; - const _entries = entries[0].every(function (entry) { - const flag = entry[field] <= prev; - prev = entry[field]; - return flag; - }); - expect(_entries).toBe(true); - } - } catch (err) { - console.error("error:", err); - fail(".lessThanOrEqualTo()"); + if (entries && entries.length && entries[0].length) { + let prev = entries[0][0][field]; + const _entries = entries[0].every(function (entry) { + const flag = entry[field] <= prev; + prev = entry[field]; + return flag; + }); + expect(_entries).toBe(true); } }); @@ -158,26 +158,21 @@ describe("ContentStack SDK Tests", () => { const field = "num_field"; const value = 11; - try { - const entries = await Query.greaterThan("num_field", value) - .ascending(field) - .toJSON() - .find(); + const entries = await Query.greaterThan("num_field", value) + .ascending(field) + .toJSON() + .find(); - expect(entries[0].length).toBeTruthy(); + expect(entries[0].length).toBeTruthy(); - if (entries && entries.length && entries[0].length) { - let prev = entries[0][0][field]; - const _entries = entries[0].slice(1).every(function (entry) { - const flag = entry[field] > value; - prev = entry[field]; - return flag; - }); - expect(_entries).toBe(true); - } - } catch (err) { - console.error("error:", err); - fail(".greaterThan()"); + if (entries && entries.length && entries[0].length) { + let prev = entries[0][0][field]; + const _entries = entries[0].slice(1).every(function (entry) { + const flag = entry[field] > value; + prev = entry[field]; + return flag; + }); + expect(_entries).toBe(true); } }); @@ -188,26 +183,21 @@ describe("ContentStack SDK Tests", () => { const field = "num_field"; const value = 11; - try { - const entries = await Query.greaterThanOrEqualTo("num_field", value) - .descending(field) - .toJSON() - .find(); + const entries = await Query.greaterThanOrEqualTo("num_field", value) + .descending(field) + .toJSON() + .find(); - expect(entries[0].length).toBeTruthy(); + expect(entries[0].length).toBeTruthy(); - if (entries && entries.length && entries[0].length) { - let prev = entries[0][0][field]; - const _entries = entries[0].every(function (entry) { - const flag = entry[field] >= value; - prev = entry[field]; - return flag; - }); - expect(_entries).toBe(true); - } - } catch (err) { - console.error("error:", err); - fail(".greaterThanOrEqualTo()"); + if (entries && entries.length && entries[0].length) { + let prev = entries[0][0][field]; + const _entries = entries[0].every(function (entry) { + const flag = entry[field] >= value; + prev = entry[field]; + return flag; + }); + expect(_entries).toBe(true); } }); @@ -218,26 +208,21 @@ describe("ContentStack SDK Tests", () => { const field = "num_field"; const value = 6; - try { - const entries = await Query.notEqualTo("num_field", value) - .descending(field) - .toJSON() - .find(); + const entries = await Query.notEqualTo("num_field", value) + .descending(field) + .toJSON() + .find(); - expect(entries[0].length).toBeTruthy(); + expect(entries[0].length).toBeTruthy(); - if (entries && entries.length && entries[0].length) { - let prev = entries[0][0][field]; - const _entries = entries[0].every(function (entry) { - const flag = entry[field] != value; - prev = entry[field]; - return flag; - }); - expect(_entries).toBe(true); - } - } catch (err) { - console.error("error:", err); - fail(".notEqualTo()"); + if (entries && entries.length && entries[0].length) { + let prev = entries[0][0][field]; + const _entries = entries[0].every(function (entry) { + const flag = entry[field] != value; + prev = entry[field]; + return flag; + }); + expect(_entries).toBe(true); } }); }); @@ -248,20 +233,15 @@ describe("ContentStack SDK Tests", () => { const _in = ["source1", "source2"]; const field = "updated_at"; - try { - const entries = await Query.containedIn("title", _in).toJSON().find(); + const entries = await Query.containedIn("title", _in).toJSON().find(); - expect(entries[0].length).toBeTruthy(); + expect(entries[0].length).toBeTruthy(); - if (entries && entries.length && entries[0].length) { - const _entries = entries[0].every(function (entry) { - return _in.indexOf(entry["title"]) != -1; - }); - expect(_entries).toBe(true); - } - } catch (err) { - console.error("error:", err); - fail(".containedIn()"); + if (entries && entries.length && entries[0].length) { + const _entries = entries[0].every(function (entry) { + return _in.indexOf(entry["title"]) != -1; + }); + expect(_entries).toBe(true); } }); @@ -269,16 +249,9 @@ describe("ContentStack SDK Tests", () => { const Query = Stack.ContentType(contentTypes.source).Query(); const _in = ["sourceddd1", "sourceddddd2"]; - try { - const entries = await Query.notContainedIn("title", _in) - .toJSON() - .find(); + const entries = await Query.notContainedIn("title", _in).toJSON().find(); - expect(entries[0].length).toBeTruthy(); - } catch (err) { - console.error("error:", err); - fail(".notContainedIn()"); - } + expect(entries[0].length).toBeTruthy(); }); }); @@ -288,23 +261,18 @@ describe("ContentStack SDK Tests", () => { const queryField = "boolean"; const field = "updated_at"; - try { - const entries = await Query.exists(queryField).toJSON().find(); + const entries = await Query.exists(queryField).toJSON().find(); - expect(entries[0].length).toBeTruthy(); + expect(entries[0].length).toBeTruthy(); - if (entries && entries.length && entries[0].length) { - let prev = entries[0][0][field]; - const _entries = entries[0].every(function (entry) { - const flag = entry[field] <= prev; - prev = entry[field]; - return flag; - }); - expect(_entries).toBe(true); - } - } catch (err) { - console.error("error:", err); - fail(".exists()"); + if (entries && entries.length && entries[0].length) { + let prev = entries[0][0][field]; + const _entries = entries[0].every(function (entry) { + const flag = entry[field] <= prev; + prev = entry[field]; + return flag; + }); + expect(_entries).toBe(true); } }); @@ -313,21 +281,16 @@ describe("ContentStack SDK Tests", () => { const queryField = "isspecial"; const field = "updated_at"; - try { - const entries = await Query.notExists(queryField).toJSON().find(); + const entries = await Query.notExists(queryField).toJSON().find(); - expect("entries" in entries).toBeTruthy(); + expect("entries" in entries).toBeTruthy(); - if (entries && entries.length && entries[0].length) { - let prev = entries[0][0][field]; - const _entries = entries[0].every(function (entry) { - return entry[field] <= prev; - }); - expect(_entries).toBe(true); - } - } catch (err) { - console.error("error:", err); - fail(".notExists()"); + if (entries && entries.length && entries[0].length) { + let prev = entries[0][0][field]; + const _entries = entries[0].every(function (entry) { + return entry[field] <= prev; + }); + expect(_entries).toBe(true); } }); }); @@ -337,31 +300,26 @@ describe("ContentStack SDK Tests", () => { const Query = Stack.ContentType(contentTypes.source).Query(); const field = "updated_at"; - try { - const allEntries = await Query.toJSON().find(); + const allEntries = await Query.toJSON().find(); - const entries = await Stack.ContentType(contentTypes.source) - .Query() - .skip(1) - .toJSON() - .find(); + const entries = await Stack.ContentType(contentTypes.source) + .Query() + .skip(1) + .toJSON() + .find(); - expect(entries[0].length).toBeGreaterThanOrEqual(2); - expect(allEntries[0].slice(1)).toEqual(entries[0]); + expect(entries[0].length).toBeGreaterThanOrEqual(2); + expect(allEntries[0].slice(1)).toEqual(entries[0]); - if (entries && entries.length && entries[0].length) { - allEntries[0] = allEntries[0].slice(1); - let prev = entries[0][0][field]; - const _entries = entries[0].every(function (entry) { - const flag = entry[field] <= prev; - prev = entry[field]; - return flag; - }); - expect(_entries).toBe(true); - } - } catch (err) { - console.error("error:", err); - fail(".skip()"); + if (entries && entries.length && entries[0].length) { + allEntries[0] = allEntries[0].slice(1); + let prev = entries[0][0][field]; + const _entries = entries[0].every(function (entry) { + const flag = entry[field] <= prev; + prev = entry[field]; + return flag; + }); + expect(_entries).toBe(true); } }); @@ -369,194 +327,365 @@ describe("ContentStack SDK Tests", () => { const Query = Stack.ContentType(contentTypes.source).Query(); const field = "updated_at"; - try { - const allEntries = await Query.toJSON().find(); + const allEntries = await Query.toJSON().find(); - const entries = await Stack.ContentType(contentTypes.source) - .Query() - .limit(2) - .toJSON() - .find(); + const entries = await Stack.ContentType(contentTypes.source) + .Query() + .limit(2) + .toJSON() + .find(); - expect(entries[0].length).toBeTruthy(); - expect(allEntries[0].slice(0, 2)).toEqual(entries[0]); + expect(entries[0].length).toBeTruthy(); + expect(allEntries[0].slice(0, 2)).toEqual(entries[0]); - if (entries && entries.length && entries[0].length) { - let prev = entries[0][0][field]; - const _entries = entries[0].every(function (entry) { - const flag = entry[field] <= prev; - prev = entry[field]; - return flag; - }); - expect(_entries).toBe(true); - } - } catch (err) { - console.error("error:", err); - fail(".limit()"); + if (entries && entries.length && entries[0].length) { + let prev = entries[0][0][field]; + const _entries = entries[0].every(function (entry) { + const flag = entry[field] <= prev; + prev = entry[field]; + return flag; + }); + expect(_entries).toBe(true); } }); test(".count()", async () => { const Query = Stack.ContentType(contentTypes.source).Query(); - try { - const entries = await Query.count().toJSON().find(); + const entries = await Query.count().toJSON().find(); - expect(entries[0]).toBeTruthy(); - } catch (err) { - console.error("error:", err); - fail(".count()"); - } + expect(entries[0]).toBeTruthy(); }); }); describe("logical", () => { - test(".or() - Query Objects", async () => { - const Query1 = Stack.ContentType(contentTypes.source) - .Query() - .containedIn("title", ["source1", "source2"]); - const Query2 = Stack.ContentType(contentTypes.source) - .Query() - .where("boolean", true); - const Query = Stack.ContentType(contentTypes.source).Query(); + describe(".or() - Query Objects", () => { + let entries; + const titles = ["source1", "source2"]; + + beforeAll(async () => { + const Query1 = Stack.ContentType(contentTypes.source) + .Query() + .containedIn("title", titles); + const Query2 = Stack.ContentType(contentTypes.source) + .Query() + .where("boolean", true); + const Query = Stack.ContentType(contentTypes.source).Query(); - try { - const entries = await Query.or(Query1, Query2).toJSON().find(); + entries = await Query.or(Query1, Query2).toJSON().find(); + }); + test("should return a non-empty array of entries", async () => { + expect(entries).toBeDefined(); + expect(Array.isArray(entries)).toBe(true); + expect(entries[0]).toBeDefined(); expect(entries[0].length).toBeTruthy(); + }); + test("should return entries matching at least one of the conditions", async () => { if (entries && entries.length && entries[0].length) { - const _entries = entries[0].every(function (entry) { - return ~(entry.title === "source1" || entry.boolean === true); - }); - expect(_entries).toBeTruthy(); + const allEntriesMatchAnyCondition = entries[0].every( + (entry) => titles.includes(entry.title) || entry.boolean === true + ); + expect(allEntriesMatchAnyCondition).toBe(true); + } else { + console.warn("No entries returned to verify OR condition"); } - } catch (err) { - console.error("error:", err); - fail(".or() - Query Objects"); - } + }); + + test("should include entries with title in the specified list", async () => { + if (entries && entries.length && entries[0].length) { + const hasEntryWithTitle = entries[0].some((entry) => + titles.includes(entry.title) + ); + expect(hasEntryWithTitle).toBe(true); + } else { + console.warn("No entries returned to verify first condition"); + } + }); + + test("should include entries with boolean field set to true", async () => { + if (entries && entries.length && entries[0].length) { + const hasEntryWithBoolean = entries[0].some( + (entry) => entry.boolean === true + ); + expect(hasEntryWithBoolean).toBe(true); + } else { + console.warn("No entries returned to verify second condition"); + } + }); }); - test(".and() - Query Objects", async () => { - const Query1 = Stack.ContentType(contentTypes.source) - .Query() - .where("title", "source1"); - const Query2 = Stack.ContentType(contentTypes.source) - .Query() - .where("boolean", true); - const Query = Stack.ContentType(contentTypes.source).Query(); + describe(".and() - Query Objects", () => { + let entries; + + beforeAll(async () => { + const Query1 = Stack.ContentType(contentTypes.source) + .Query() + .where("title", "source1"); + const Query2 = Stack.ContentType(contentTypes.source) + .Query() + .where("boolean", true); + const Query = Stack.ContentType(contentTypes.source).Query(); - try { - const entries = await Query.and(Query1, Query2).toJSON().find(); + entries = await Query.and(Query1, Query2).toJSON().find(); + }); + test("should return a non-empty array of entries", async () => { + expect(entries).toBeDefined(); + expect(Array.isArray(entries)).toBe(true); + expect(entries[0]).toBeDefined(); expect(entries[0].length).toBeTruthy(); + }); + test("should return only entries matching all specified conditions", async () => { if (entries && entries.length && entries[0].length) { - const _entries = entries[0].every(function (entry) { - return ~(entry.title === "source1" || entry.boolean === true); - }); - expect(_entries).toBeTruthy(); + const allEntriesMatchAllConditions = entries[0].every( + (entry) => entry.title === "source1" && entry.boolean === true + ); + expect(allEntriesMatchAllConditions).toBe(true); + } else { + console.warn("No entries returned to verify AND condition"); } - } catch (err) { - console.error("error:", err); - fail(".and() - Query Objects"); - } + }); + + test('should include entries with title set to "source1"', async () => { + if (entries && entries.length && entries[0].length) { + const allEntriesHaveCorrectTitle = entries[0].every( + (entry) => entry.title === "source1" + ); + expect(allEntriesHaveCorrectTitle).toBe(true); + } else { + console.warn("No entries returned to verify title condition"); + } + }); + + test("should include entries with boolean field set to true", async () => { + if (entries && entries.length && entries[0].length) { + const allEntriesHaveBooleanTrue = entries[0].every( + (entry) => entry.boolean === true + ); + expect(allEntriesHaveBooleanTrue).toBe(true); + } else { + console.warn("No entries returned to verify boolean condition"); + } + }); }); - test(".and() - Raw queries", async () => { - const Query1 = Stack.ContentType(contentTypes.source) - .Query() - .where("title", "source1"); - const Query2 = Stack.ContentType(contentTypes.source) - .Query() - .where("boolean", true); - const Query = Stack.ContentType(contentTypes.source).Query(); + describe(".query() - Raw query", () => { + let entries; - try { - const entries = await Query.and(Query1, Query2).toJSON().find(); + beforeAll(async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.query({ + $or: [{ title: "source1" }, { boolean: true }], + }) + .toJSON() + .find(); + }); + test("should return a non-empty array of entries", async () => { + expect(entries).toBeDefined(); + expect(Array.isArray(entries)).toBe(true); + expect(entries[0]).toBeDefined(); expect(entries[0].length).toBeTruthy(); + }); + test("should return entries matching at least one of the conditions in the raw query", async () => { if (entries && entries.length && entries[0].length) { - const _entries = entries[0].every(function (entry) { - return ~(entry.title === "source1" || entry.boolean === true); - }); - expect(_entries).toBeTruthy(); + const allEntriesMatchAnyCondition = entries[0].every( + (entry) => entry.title === "source1" || entry.boolean === true + ); + expect(allEntriesMatchAnyCondition).toBe(true); + } else { + console.warn("No entries returned to verify raw query conditions"); } - } catch (err) { - console.error("error:", err); - fail(".and() - Raw queries"); - } + }); + + test('should include entries with title "source1"', async () => { + if (entries && entries.length && entries[0].length) { + const hasEntryWithTitle = entries[0].some( + (entry) => entry.title === "source1" + ); + expect(hasEntryWithTitle).toBe(true); + } else { + console.warn( + "No entries returned to verify first raw query condition" + ); + } + }); + + test("should include entries with boolean field set to true", async () => { + if (entries && entries.length && entries[0].length) { + const hasEntryWithBoolean = entries[0].some( + (entry) => entry.boolean === true + ); + expect(hasEntryWithBoolean).toBe(true); + } else { + console.warn( + "No entries returned to verify second raw query condition" + ); + } + }); }); }); describe("custom query", () => { - test(".query() - Raw query", async () => { + test(".query() - Raw query with basic OR condition", async () => { const Query = Stack.ContentType(contentTypes.source).Query(); - try { - const entries = await Query.query({ - $or: [{ title: "source1" }, { boolean: "true" }], - }) - .toJSON() - .find(); + const entries = await Query.query({ + $or: [{ title: "source1" }, { boolean: "true" }], + }) + .toJSON() + .find(); - expect(entries[0].length).toBeTruthy(); + expect(entries[0].length).toBeTruthy(); - if (entries && entries.length && entries[0].length) { - const _entries = entries[0].every(function (entry) { - return entry.title === "source1" || entry.boolean === true; - }); - expect(_entries).toBeTruthy(); - } - } catch (err) { - console.error("error:", err); - fail(".query() - Raw query"); + if (entries && entries.length && entries[0].length) { + const _entries = entries[0].every(function (entry) { + return entry.title === "source1" || entry.boolean === true; + }); + expect(_entries).toBeTruthy(); } }); + + test(".query() - Raw query with AND condition", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + + const entries = await Query.query({ + $and: [{ title: "source1" }, { boolean: true }], + }) + .toJSON() + .find(); + + expect(entries[0].length).toBeTruthy(); + + const allMatchBothConditions = entries[0].every( + (entry) => entry.title === "source1" && entry.boolean === true + ); + expect(allMatchBothConditions).toBeTruthy(); + }); + + test(".query() - Raw query with nested conditions", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + + const entries = await Query.query({ + $and: [ + { title: "source1" }, + { $or: [{ boolean: true }, { url: { $exists: true } }] }, + ], + }) + .toJSON() + .find(); + + expect(entries[0].length).toBeTruthy(); + + const allMatchConditions = entries[0].every( + (entry) => + entry.title === "source1" && + (entry.boolean === true || entry.url !== undefined) + ); + expect(allMatchConditions).toBeTruthy(); + }); }); describe("tags", () => { - test(".tags()", async () => { + test(".tags() - Multiple tags filter", async () => { const Query = Stack.ContentType(contentTypes.source).Query(); const field = "tags"; const tags = ["tag1", "tag2"]; - try { - const entries = await Query.tags(tags).toJSON().find(); + const entries = await Query.tags(tags).toJSON().find(); - expect(entries.length).toBeGreaterThanOrEqual(1); + expect(entries.length).toBeGreaterThanOrEqual(1); - if (entries && entries.length && entries[0].length) { - const _entries = entries[0].every(function (entry) { - return Utils.arrayPresentInArray(tags, entry[field]); - }); - expect(_entries).toBe(true); - } - } catch (err) { - console.error("error:", err); - fail(".tags()"); + if (entries && entries.length && entries[0].length) { + const _entries = entries[0].every(function (entry) { + return Utils.arrayPresentInArray(tags, entry[field]); + }); + expect(_entries).toBe(true); } }); + + test(".tags() - Single tag filter", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + const field = "tags"; + const tags = ["tag1"]; + + const entries = await Query.tags(tags).toJSON().find(); + + expect(entries.length).toBeGreaterThanOrEqual(1); + + if (entries && entries.length && entries[0].length) { + const entriesWithTag = entries[0].every( + (entry) => entry[field] && entry[field].includes(tags[0]) + ); + expect(entriesWithTag).toBe(true); + } + }); + + test(".tags() - Empty results with non-existent tag", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + const nonExistentTag = ["non_existent_tag_123456"]; + + const entries = await Query.tags(nonExistentTag).toJSON().find(); + + // Should return an array but with empty results + expect(entries).toBeDefined(); + expect(Array.isArray(entries)).toBe(true); + expect(entries[0].length).toBe(0); + }); }); describe("search", () => { - test(".search()", async () => { + test(".search() - Exact match", async () => { const Query = Stack.ContentType(contentTypes.source).Query(); - try { - const entries = await Query.search("source1").toJSON().find(); + const entries = await Query.search("source1").toJSON().find(); - expect(entries[0].length).toBeTruthy(); - } catch (err) { - console.error("Error:", err); - fail(".search()"); - } + expect(entries[0].length).toBeTruthy(); + + const hasMatchingEntries = entries[0].some( + (entry) => + entry.title === "source1" || JSON.stringify(entry).includes("source1") + ); + expect(hasMatchingEntries).toBe(true); + }); + + test(".search() - Partial match", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + + const entries = await Query.search("source").toJSON().find(); + + expect(entries[0].length).toBeTruthy(); + + const hasMatchingEntries = entries[0].some( + (entry) => + (entry.title && entry.title.includes("source")) || + JSON.stringify(entry).includes("source") + ); + expect(hasMatchingEntries).toBe(true); + }); + + test(".search() - Case insensitive match", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + + const entries = await Query.search("SOURCE1").toJSON().find(); + + expect(entries[0].length).toBeTruthy(); + + const hasMatchingEntries = entries[0].some( + (entry) => + (entry.title && entry.title.toLowerCase() === "source1") || + JSON.stringify(entry).toLowerCase().includes("source1") + ); + expect(hasMatchingEntries).toBe(true); }); }); describe("regex", () => { - test(".regex()", async () => { + test(".regex() - Basic pattern match", async () => { const Query = Stack.ContentType(contentTypes.source).Query(); const field = "title"; const regex = { @@ -565,462 +694,567 @@ describe("ContentStack SDK Tests", () => { }; const regexpObj = new RegExp(regex.pattern, regex.options); - try { - const entries = await Query.regex(field, regex.pattern, regex.options) - .toJSON() - .find(); + const entries = await Query.regex(field, regex.pattern, regex.options) + .toJSON() + .find(); - expect(entries.length).toBeGreaterThanOrEqual(1); + expect(entries.length).toBeGreaterThanOrEqual(1); - const flag = entries[0].every(function (entry) { - return regexpObj.test(entry[field]); - }); - expect(flag).toBeTruthy(); - } catch (err) { - console.error("Error:", err); - fail(".regex()"); + const flag = entries[0].every(function (entry) { + return regexpObj.test(entry[field]); + }); + expect(flag).toBeTruthy(); + }); + + test(".regex() - Specific suffix pattern", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + const field = "title"; + const regex = { + pattern: "1$", // Matches strings ending with 1 + options: "", + }; + const regexpObj = new RegExp(regex.pattern, regex.options); + + const entries = await Query.regex(field, regex.pattern, regex.options) + .toJSON() + .find(); + + expect(entries.length).toBeGreaterThanOrEqual(1); + + if (entries && entries[0].length) { + const matchesPattern = entries[0].every((entry) => + regexpObj.test(entry[field]) + ); + expect(matchesPattern).toBeTruthy(); + + const endsWithOne = entries[0].every( + (entry) => entry[field] && entry[field].endsWith("1") + ); + expect(endsWithOne).toBeTruthy(); + } + }); + + test(".regex() - With wildcard pattern", async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + const field = "title"; + const regex = { + pattern: "source.*", + options: "i", + }; + const regexpObj = new RegExp(regex.pattern, regex.options); + + const entries = await Query.regex(field, regex.pattern, regex.options) + .toJSON() + .find(); + + expect(entries.length).toBeGreaterThanOrEqual(1); + + if (entries && entries[0].length) { + const matchesPattern = entries[0].every((entry) => + regexpObj.test(entry[field]) + ); + expect(matchesPattern).toBeTruthy(); } }); }); describe("locale and fallback", () => { - test("find: without fallback", async () => { - const _in = ["ja-jp"]; + test("find: with specific locale", async () => { + const locale = "ja-jp"; - try { - const entries = await Stack.ContentType(contentTypes.source) - .Query() - .language("ja-jp") - .toJSON() - .find(); + const entries = await Stack.ContentType(contentTypes.source) + .Query() + .language(locale) + .toJSON() + .find(); - expect(entries[0].length).toBeTruthy(); + expect(entries[0].length).toBeTruthy(); - if (entries && entries.length && entries[0].length) { - const _entries = entries[0].every(function (entry) { - return _in.indexOf(entry["publish_details"]["locale"]) != -1; - }); - expect(_entries).toBe(true); - } - } catch (error) { - fail("Entries default .find() fallback catch: " + error.toString()); + if (entries && entries.length && entries[0].length) { + const allEntriesInRequestedLocale = entries[0].every( + (entry) => + entry.publish_details && entry.publish_details.locale === locale + ); + expect(allEntriesInRequestedLocale).toBe(true); } }); - test("find: fallback", async () => { - const _in = ["ja-jp", "en-us"]; + test("find: with fallback enabled for partially localized content", async () => { + const primaryLocale = "ja-jp"; + const fallbackLocale = "en-us"; - try { - const entries = await Stack.ContentType(contentTypes.source) - .Query() - .language("ja-jp") - .includeFallback() - .toJSON() - .find(); + const entries = await Stack.ContentType(contentTypes.source) + .Query() + .language(primaryLocale) + .includeFallback() + .toJSON() + .find(); - expect(entries[0].length).toBeTruthy(); + expect(entries[0].length).toBeTruthy(); - if (entries && entries.length && entries[0].length) { - const _entries = entries[0].every(function (entry) { - return _in.indexOf(entry["publish_details"]["locale"]) != -1; - }); - expect(_entries).toBe(true); - } - } catch (error) { - fail("Entries default .find() fallback catch: " + error.toString()); + if (entries && entries.length && entries[0].length) { + const _entries = entries[0].every(function (entry) { + return [primaryLocale, fallbackLocale].includes( + entry.publish_details.locale + ); + }); + expect(_entries).toBe(true); + } + + if (entries && entries.length && entries[0].length > 1) { + const hasPrimaryLocaleEntries = entries[0].some( + (entry) => entry.publish_details.locale === primaryLocale + ); + + const hasFallbackLocaleEntries = entries[0].some( + (entry) => entry.publish_details.locale === fallbackLocale + ); + + expect(hasPrimaryLocaleEntries || hasFallbackLocaleEntries).toBe(true); + } + }); + + test("find: comparing results with and without fallback", async () => { + const locale = "ja-jp"; + + const entriesWithoutFallback = await Stack.ContentType( + contentTypes.source + ) + .Query() + .language(locale) + .toJSON() + .find(); + + const entriesWithFallback = await Stack.ContentType(contentTypes.source) + .Query() + .language(locale) + .includeFallback() + .toJSON() + .find(); + + expect(entriesWithFallback[0].length).toBeGreaterThanOrEqual( + entriesWithoutFallback[0].length + ); + + if (entriesWithoutFallback && entriesWithoutFallback[0].length) { + const allInRequestedLocale = entriesWithoutFallback[0].every( + (entry) => entry.publish_details.locale === locale + ); + expect(allInRequestedLocale).toBe(true); } }); }); describe("include reference", () => { - test(".includeReference() - String", async () => { - const Query = Stack.ContentType(contentTypes.source).Query(); + describe(".includeReference() - String", () => { + let entries; - try { - const entries = await Query.includeReference("reference") - .toJSON() - .find(); + beforeAll(async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.includeReference("reference").toJSON().find(); + }); - const flag = entries[0].every(function (entry) { - return ( + test("should return entries with the reference field", () => { + expect(entries[0].length).toBeGreaterThan(0); + }); + + test("should include the reference field as an object", () => { + const allEntriesHaveReference = entries[0].every( + (entry) => entry && entry["reference"] && typeof entry["reference"] === "object" - ); - }); - expect(flag).toBe(true); - } catch (err) { - console.error("Error:", err); - fail(".includeReference() - String"); - } + ); + expect(allEntriesHaveReference).toBe(true); + }); }); - test(".includeReference() - Array", async () => { - const Query = Stack.ContentType(contentTypes.source).Query(); + describe(".includeReference() - Array", () => { + let entries; - try { - const entries = await Query.includeReference([ - "reference", - "other_reference", - ]) + beforeAll(async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.includeReference(["reference", "other_reference"]) .toJSON() .find(); + }); - const flag = entries[0].every(function (entry) { - return ( + test("should return entries with data", () => { + expect(entries[0].length).toBeGreaterThan(0); + }); + + test("should include the first reference field as an object", () => { + const allEntriesHaveFirstReference = entries[0].every( + (entry) => entry && entry["reference"] && - typeof entry["reference"] === "object" && + typeof entry["reference"] === "object" + ); + expect(allEntriesHaveFirstReference).toBe(true); + }); + + test("should include the second reference field as an object", () => { + const allEntriesHaveSecondReference = entries[0].every( + (entry) => + entry && entry["other_reference"] && typeof entry["other_reference"] === "object" - ); - }); - expect(flag).toBe(true); - } catch (err) { - console.error("Error:", err); - fail(".includeReference() - Array"); - } + ); + expect(allEntriesHaveSecondReference).toBe(true); + }); }); }); describe("include count and schema", () => { - test(".includeCount()", async () => { - const Query = Stack.ContentType(contentTypes.source).Query(); + describe(".includeCount()", () => { + let entries; - try { - const entries = await Query.includeCount().toJSON().find(); + beforeAll(async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.includeCount().toJSON().find(); + }); + test("should return entries", () => { expect(entries[0].length).toBeTruthy(); + }); + + test("should include count information", () => { expect(entries[1]).toBeTruthy(); - } catch (err) { - console.error("error:", err); - fail(".includeCount()"); - } + }); }); - test(".includeSchema()", async () => { - const Query = Stack.ContentType(contentTypes.source).Query(); + describe(".includeSchema()", () => { + let entries; - try { - const entries = await Query.includeSchema().toJSON().find(); + beforeAll(async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.includeSchema().toJSON().find(); + }); + test("should return entries", () => { expect(entries[0].length).toBeTruthy(); + }); + + test("should include schema information", () => { expect(entries[1].length).toBeTruthy(); - } catch (err) { - console.error("Error:", err); - fail(".includeSchema()"); - } + }); }); - test(".includeCount() and .includeSchema()", async () => { - const Query = Stack.ContentType(contentTypes.source).Query(); + describe(".includeCount() and .includeSchema()", () => { + let entries; - try { - const entries = await Query.includeCount() - .includeSchema() - .toJSON() - .find(); + beforeAll(async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.includeCount().includeSchema().toJSON().find(); + }); + test("should return entries", () => { expect(entries[0].length).toBeTruthy(); + }); + + test("should include schema information", () => { expect(entries[1].length).toBeTruthy(); + }); + + test("should include count information", () => { expect(entries[2]).toBeTruthy(); - } catch (err) { - console.error("Error:", err); - fail(".includeSchema()"); - } + }); }); }); describe("include contenttypes", () => { - test(".includeContentType()", async () => { - const Query = Stack.ContentType(contentTypes.source).Query(); + describe(".includeContentType()", () => { + let entries; - try { - const entries = await Query.includeContentType().toJSON().find(); + beforeAll(async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.includeContentType().toJSON().find(); + }); + test("should return entries", () => { expect(entries[0].length).toBeTruthy(); + }); + + test("should include content type information", () => { expect(entries[1]).toBeTruthy(); + }); + + test("should include content type title", () => { expect(entries[1]["title"]).toBeTruthy(); + }); + + test("should have the correct content type UID", () => { expect(entries[1]["uid"]).toBe(contentTypes.source); - } catch (err) { - console.error("error:", err); - fail(".includeContentType()"); - } + }); }); - test(".includeCount() and .includeContentType()", async () => { - const Query = Stack.ContentType(contentTypes.source).Query(); + describe(".includeCount() and .includeContentType()", () => { + let entries; - try { - const entries = await Query.includeCount() + beforeAll(async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.includeCount() .includeContentType() .toJSON() .find(); + }); + test("should return entries", () => { expect(entries[0].length).toBeTruthy(); + }); + + test("should include content type information", () => { expect(entries[1]).toBeTruthy(); + }); + + test("should include content type title", () => { expect(entries[1]["title"]).toBeTruthy(); + }); + + test("should have the correct content type UID", () => { expect(entries[1]["uid"]).toBe(contentTypes.source); + }); + + test("should include count information", () => { expect(entries[2]).toBeTruthy(); - } catch (err) { - console.error("Error:", err); - fail(".includeCount && includeContentType"); - } + }); }); - test(".includeSchema() and .includeContentType()", async () => { - const Query = Stack.ContentType(contentTypes.source).Query(); + describe(".includeSchema() and .includeContentType()", () => { + let entries; - try { - const entries = await Query.includeSchema() + beforeAll(async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.includeSchema() .includeContentType() .toJSON() .find(); + }); + test("should return entries", () => { expect(entries[0].length).toBeTruthy(); + }); + + test("should include content type information", () => { expect(entries[1]).toBeTruthy(); + }); + + test("should include content type title", () => { expect(entries[1]["title"]).toBeTruthy(); + }); + + test("should have the correct content type UID", () => { expect(entries[1]["uid"]).toBe(contentTypes.source); - } catch (err) { - console.error("Error:", err); - fail(".includeCount && includeContentType"); - } + }); }); - test(".includeCount(), .includeSchema() and .includeContentType()", async () => { - const Query = Stack.ContentType(contentTypes.source).Query(); + describe(".includeCount(), .includeSchema() and .includeContentType()", () => { + let entries; - try { - const entries = await Query.includeCount() + beforeAll(async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.includeCount() .includeSchema() .includeContentType() .toJSON() .find(); + }); + test("should return entries", () => { expect(entries[0].length).toBeTruthy(); + }); + + test("should include content type information", () => { expect(entries[1]).toBeTruthy(); + }); + + test("should include content type title", () => { expect(entries[1]["title"]).toBeTruthy(); + }); + + test("should have the correct content type UID", () => { expect(entries[1]["uid"]).toBe(contentTypes.source); + }); + + test("should include count information", () => { expect(entries[2]).toBeTruthy(); - } catch (err) { - console.error("Error:", err); - fail(".includeCount && includeContentType"); - } + }); }); }); describe("field projections", () => { - test(".only() - Single String Parameter", async () => { - const Query = Stack.ContentType(contentTypes.source).Query(); + describe(".only() - Single String Parameter", () => { + let entries; - try { - const entries = await Query.only("title").toJSON().find(); + beforeAll(async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.only("title").toJSON().find(); + }); - const flag = entries[0].every(function (entry) { - return ( + test("should return entries", () => { + expect(entries[0].length).toBeTruthy(); + }); + + test("should include only the title and uid fields", () => { + const correctFieldsOnly = entries[0].every( + (entry) => entry && Object.keys(entry).length === 2 && "title" in entry && "uid" in entry - ); - }); - expect(flag).toBeTruthy(); - } catch (err) { - console.error("Error:", err); - fail(".only() - Single String Parameter"); - } + ); + expect(correctFieldsOnly).toBeTruthy(); + }); }); - test(".only() - Multiple String Parameter", async () => { - const Query = Stack.ContentType(contentTypes.source).Query(); + describe(".only() - Multiple String Parameter", () => { + let entries; - try { - const entries = await Query.only("BASE", "title").toJSON().find(); + beforeAll(async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.only("BASE", "title").toJSON().find(); + }); - const flag = entries[0].every(function (entry) { - return ( + test("should return entries", () => { + expect(entries[0].length).toBeTruthy(); + }); + + test("should include only the title and uid fields", () => { + const correctFieldsOnly = entries[0].every( + (entry) => entry && Object.keys(entry).length === 2 && "title" in entry && "uid" in entry - ); - }); - expect(flag).toBeTruthy(); - } catch (err) { - console.error("Error:", err); - fail(".only() - Multiple String Parameter"); - } + ); + expect(correctFieldsOnly).toBeTruthy(); + }); }); - test(".only() - Array Parameter", async () => { - const Query = Stack.ContentType(contentTypes.source).Query(); + describe(".only() - Array Parameter", () => { + let entries; - try { - const entries = await Query.only(["title", "url"]).toJSON().find(); + beforeAll(async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.only(["title", "url"]).toJSON().find(); + }); - const flag = entries[0].every(function (entry) { - return ( + test("should return entries", () => { + expect(entries[0].length).toBeTruthy(); + }); + + test("should include only the title, url, and uid fields", () => { + const correctFieldsOnly = entries[0].every( + (entry) => entry && Object.keys(entry).length === 3 && "title" in entry && "url" in entry && "uid" in entry - ); - }); - expect(flag).toBeTruthy(); - } catch (err) { - console.error("Error:", err); - fail(".only() - Array Parameter"); - } + ); + expect(correctFieldsOnly).toBeTruthy(); + }); }); - test(".only() - For the reference - String", async () => { - const Query = Stack.ContentType(contentTypes.source).Query(); + describe(".except() - Single String Parameter", () => { + let entries; - try { - const entries = await Query.includeReference("reference") - .only("BASE", ["reference"]) - .only("reference", "title") - .toJSON() - .find(); - - expect(entries).toBeTruthy(); - } catch (err) { - console.error("Error:", err); - fail(".only() - For the reference - String"); - } - }); - - test(".only() - For the reference - Array", async () => { - const Query = Stack.ContentType(contentTypes.source).Query(); - - try { - const entries = await Query.includeReference("reference") - .only("BASE", ["reference"]) - .only("reference", ["title"]) - .toJSON() - .find(); + beforeAll(async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.except("title").toJSON().find(); + }); - expect(entries).toBeTruthy(); - } catch (err) { - console.error("Error:", err); - fail(".only() - For the reference - Array"); - } + test("should return entries", () => { + expect(entries[0].length).toBeTruthy(); + }); + + test("should exclude the title field", () => { + const titleExcluded = entries[0].every( + (entry) => entry && !("title" in entry) + ); + expect(titleExcluded).toBeTruthy(); + }); }); - test(".except() - Single String Parameter", async () => { - const Query = Stack.ContentType(contentTypes.source).Query(); + describe(".except() - Multiple String Parameter", () => { + let entries; - try { - const entries = await Query.except("title").toJSON().find(); + beforeAll(async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.except("BASE", "title").toJSON().find(); + }); - const flag = entries[0].every(function (entry) { - return entry && !("title" in entry); - }); - expect(flag).toBeTruthy(); - } catch (err) { - console.error("Error:", err); - fail(".except() - Single String Parameter"); - } + test("should return entries", () => { + expect(entries[0].length).toBeTruthy(); + }); + + test("should exclude the title field", () => { + const titleExcluded = entries[0].every( + (entry) => entry && !("title" in entry) + ); + expect(titleExcluded).toBeTruthy(); + }); }); - test(".except() - Multiple String Parameter", async () => { - const Query = Stack.ContentType(contentTypes.source).Query(); + describe(".except() - Array of String Parameter", () => { + let entries; - try { - const entries = await Query.except("BASE", "title").toJSON().find(); + beforeAll(async () => { + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.except(["title", "file"]).toJSON().find(); + }); - const flag = entries[0].every(function (entry) { - return entry && !("title" in entry); - }); - expect(flag).toBeTruthy(); - } catch (err) { - console.error("Error:", err); - fail(".except() - Multiple String Parameter"); - } + test("should return entries", () => { + expect(entries[0].length).toBeTruthy(); + }); + + test("should exclude the title field", () => { + const titleExcluded = entries[0].every( + (entry) => entry && !("title" in entry) + ); + expect(titleExcluded).toBeTruthy(); + }); + + test("should exclude the file field", () => { + const fileExcluded = entries[0].every( + (entry) => entry && !("file" in entry) + ); + expect(fileExcluded).toBeTruthy(); + }); }); - test(".except() - Array of String Parameter", async () => { - const Query = Stack.ContentType(contentTypes.source).Query(); - - try { - const entries = await Query.except(["title", "file"]).toJSON().find(); + describe(".except() - For the reference - String", () => { + let entries; - const flag = entries[0].every(function (entry) { - return entry && !("title" in entry) && !("file" in entry); - }); - expect(flag).toBeTruthy(); - } catch (err) { - console.error("Error:", err); - fail(".except() - Array of String Parameter"); - } - }); - test(".except() - For the reference - String", async () => { - try { + beforeAll(async () => { const Query = Stack.ContentType(contentTypes.source).Query(); - - const entries = await Query.includeReference("reference") + entries = await Query.includeReference("reference") .only("BASE", ["reference"]) .except("reference", "title") .toJSON() .find(); + }); - const flag = entries[0].every((entry) => { - let _flag; - if ( - entry && - entry["reference"] && - typeof entry["reference"] === "object" - ) { - _flag = true; - _flag = entry.reference.every((reference) => { - return reference && !("title" in reference); - }); - } else { - _flag = false; - } - return ( - _flag && - entry && - Object.keys(entry).length === 2 && - "reference" in entry && - "uid" in entry - ); - }); - - expect(flag).toBeTruthy(); - } catch (err) { - console.error("Error:", err); - fail(".except() - For the reference - String"); - } - }); - - test(".except() - For the reference - Array", async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - - const entries = await Query.includeReference("reference") - .only("BASE", ["reference"]) - .except("reference", ["title"]) - .toJSON() - .find(); + test("should return entries", () => { + expect(entries[0].length).toBeTruthy(); + }); - const flag = entries[0].every((entry) => { - let _flag; + test("should properly format entries with reference but without title in references", () => { + const correctFormat = entries[0].every((entry) => { + let hasCorrectReferenceFormat = false; if ( entry && entry["reference"] && typeof entry["reference"] === "object" ) { - _flag = true; - _flag = entry.reference.every((reference) => { + hasCorrectReferenceFormat = true; + hasCorrectReferenceFormat = entry.reference.every((reference) => { return reference && !("title" in reference); }); - } else { - _flag = false; } + return ( - _flag && + hasCorrectReferenceFormat && entry && Object.keys(entry).length === 2 && "reference" in entry && @@ -1028,11 +1262,8 @@ describe("ContentStack SDK Tests", () => { ); }); - expect(flag).toBeTruthy(); - } catch (err) { - console.error("Error:", err); - fail(".except() - For the reference - Array"); - } + expect(correctFormat).toBeTruthy(); + }); }); }); }); diff --git a/test/entry/find.js b/test/entry/find.js index 081c80b7..07276a30 100755 --- a/test/entry/find.js +++ b/test/entry/find.js @@ -28,17 +28,12 @@ describe("ContentStack SDK Tests", () => { }); describe("Default Find", () => { - let entries + let entries; const field = "updated_at"; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entries = await Query.toJSON().find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.toJSON().find(); }); test("Should return entries in the resultset", () => { @@ -68,13 +63,8 @@ describe("ContentStack SDK Tests", () => { const field = "updated_at"; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entries = await Query.ascending(field).toJSON().find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.ascending(field).toJSON().find(); }); test("Should return entries in the resultset", () => { @@ -99,13 +89,8 @@ describe("ContentStack SDK Tests", () => { const field = "created_at"; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entries = await Query.descending(field).toJSON().find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.descending(field).toJSON().find(); }); test("Should return entries in the resultset", () => { @@ -131,15 +116,8 @@ describe("ContentStack SDK Tests", () => { let entries; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entries = await Query.addParam("include_count", "true") - .toJSON() - .find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.addParam("include_count", "true").toJSON().find(); }); test("Should return entries in the resultset", () => { @@ -159,20 +137,14 @@ describe("ContentStack SDK Tests", () => { const value = 11; test("Should return entry in the resultset", async () => { - try { - const Query = Stack.ContentType( - contentTypes.numbers_content_type - ).Query(); + const Query = Stack.ContentType( + contentTypes.numbers_content_type + ).Query(); - const result = await Query.lessThan("num_field", value) - .toJSON() - .find(); + const result = await Query.lessThan("num_field", value).toJSON().find(); - entries = result; - expect(entries[0].length).toBeTruthy(); - } catch (err) { - fail("Query.lessThan failed"); - } + entries = result; + expect(entries[0].length).toBeTruthy(); }); test("All entries should have num_field less than specified value", () => { @@ -189,17 +161,12 @@ describe("ContentStack SDK Tests", () => { const value = 11; beforeAll(async () => { - try { - const Query = Stack.ContentType( - contentTypes.numbers_content_type - ).Query(); - entries = await Query.lessThanOrEqualTo("num_field", value) - .toJSON() - .find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType( + contentTypes.numbers_content_type + ).Query(); + entries = await Query.lessThanOrEqualTo("num_field", value) + .toJSON() + .find(); }); test("Should return entries in the resultset", () => { @@ -233,18 +200,13 @@ describe("ContentStack SDK Tests", () => { const value = 11; beforeAll(async () => { - try { - const Query = Stack.ContentType( - contentTypes.numbers_content_type - ).Query(); - entries = await Query.greaterThan("num_field", value) - .ascending(field) - .toJSON() - .find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType( + contentTypes.numbers_content_type + ).Query(); + entries = await Query.greaterThan("num_field", value) + .ascending(field) + .toJSON() + .find(); }); test("Should return entries in the resultset", () => { @@ -277,18 +239,13 @@ describe("ContentStack SDK Tests", () => { const value = 11; beforeAll(async () => { - try { - const Query = Stack.ContentType( - contentTypes.numbers_content_type - ).Query(); - entries = await Query.greaterThanOrEqualTo("num_field", value) - .descending(field) - .toJSON() - .find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType( + contentTypes.numbers_content_type + ).Query(); + entries = await Query.greaterThanOrEqualTo("num_field", value) + .descending(field) + .toJSON() + .find(); }); test("Should return entries in the resultset", () => { @@ -321,18 +278,13 @@ describe("ContentStack SDK Tests", () => { const value = 6; beforeAll(async () => { - try { - const Query = Stack.ContentType( - contentTypes.numbers_content_type - ).Query(); - entries = await Query.notEqualTo("num_field", value) - .descending(field) - .toJSON() - .find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType( + contentTypes.numbers_content_type + ).Query(); + entries = await Query.notEqualTo("num_field", value) + .descending(field) + .toJSON() + .find(); }); test("Should return entries in the resultset", () => { @@ -361,13 +313,8 @@ describe("ContentStack SDK Tests", () => { let entries; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entries = await Query.where("boolean", true).toJSON().find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.where("boolean", true).toJSON().find(); }); test("Should return entries in the resultset", () => { @@ -388,13 +335,8 @@ describe("ContentStack SDK Tests", () => { let entries; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entries = await Query.where("boolean", false).toJSON().find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.where("boolean", false).toJSON().find(); }); test("Should return entries in the resultset", () => { @@ -415,13 +357,8 @@ describe("ContentStack SDK Tests", () => { let entries; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entries = await Query.where("title", "").toJSON().find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.where("title", "").toJSON().find(); }); test("Should return zero entries in the resultset", () => { @@ -434,13 +371,8 @@ describe("ContentStack SDK Tests", () => { const tags = ["tag1", "tag2"]; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entries = await Query.tags(tags).toJSON().find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.tags(tags).toJSON().find(); }); test("Should return one or more entries in the resultset", () => { @@ -468,13 +400,8 @@ describe("ContentStack SDK Tests", () => { const field = "title"; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entries = await Query.containedIn("title", _in).toJSON().find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.containedIn("title", _in).toJSON().find(); }); test("Should return entries in the resultset", () => { @@ -501,13 +428,8 @@ describe("ContentStack SDK Tests", () => { const field = "title"; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entries = await Query.notContainedIn("title", _in).toJSON().find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.notContainedIn("title", _in).toJSON().find(); }); test("Should return entries in the resultset", () => { @@ -531,26 +453,20 @@ describe("ContentStack SDK Tests", () => { const Query = Stack.ContentType(contentTypes.source).Query(); const queryField = "boolean"; const field = "updated_at"; + const entries = await Query.exists(queryField).toJSON().find(); - try { - const entries = await Query.exists(queryField).toJSON().find(); - - // Check if entries are returned - expect(entries[0].length).toBeTruthy(); + // Check if entries are returned + expect(entries[0].length).toBeTruthy(); - // Verify sorting order (descending on updated_at) - if (entries && entries.length && entries[0].length) { - let prev = entries[0][0][field]; - const _entries = entries[0].every(function (entry) { - const flag = entry[field] <= prev; - prev = entry[field]; - return flag; - }); - expect(_entries).toBe(true); - } - } catch (err) { - console.error("error:", err); - fail(".exists() test failed"); + // Verify sorting order (descending on updated_at) + if (entries && entries.length && entries[0].length) { + let prev = entries[0][0][field]; + const _entries = entries[0].every(function (entry) { + const flag = entry[field] <= prev; + prev = entry[field]; + return flag; + }); + expect(_entries).toBe(true); } }); @@ -558,24 +474,18 @@ describe("ContentStack SDK Tests", () => { const Query = Stack.ContentType(contentTypes.source).Query(); const queryField = "isspecial"; const field = "updated_at"; + const entries = await Query.notExists(queryField).toJSON().find(); - try { - const entries = await Query.notExists(queryField).toJSON().find(); - - // Check if entries are returned - expect("entries" in entries).toBeTruthy(); + // Check if entries are returned + expect("entries" in entries).toBeTruthy(); - // Verify sorting order if entries exist - if (entries && entries.length && entries[0].length) { - let prev = entries[0][0][field]; - const _entries = entries[0].every(function (entry) { - return entry[field] <= prev; - }); - expect(_entries).toBe(true); - } - } catch (err) { - console.error("error:", err); - fail(".notExists() test failed"); + // Verify sorting order if entries exist + if (entries && entries.length && entries[0].length) { + let prev = entries[0][0][field]; + const _entries = entries[0].every(function (entry) { + return entry[field] <= prev; + }); + expect(_entries).toBe(true); } }); }); @@ -587,16 +497,11 @@ describe("ContentStack SDK Tests", () => { const field = "updated_at"; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - allEntries = await Query.toJSON().find(); + const Query = Stack.ContentType(contentTypes.source).Query(); + allEntries = await Query.toJSON().find(); - const SkipQuery = Stack.ContentType(contentTypes.source).Query(); - skippedEntries = await SkipQuery.skip(1).toJSON().find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const SkipQuery = Stack.ContentType(contentTypes.source).Query(); + skippedEntries = await SkipQuery.skip(1).toJSON().find(); }); test("All entries should be present in the resultset", () => { @@ -635,16 +540,11 @@ describe("ContentStack SDK Tests", () => { const limitNumber = 2; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - allEntries = await Query.toJSON().find(); + const Query = Stack.ContentType(contentTypes.source).Query(); + allEntries = await Query.toJSON().find(); - const LimitQuery = Stack.ContentType(contentTypes.source).Query(); - limitedEntries = await LimitQuery.limit(limitNumber).toJSON().find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const LimitQuery = Stack.ContentType(contentTypes.source).Query(); + limitedEntries = await LimitQuery.limit(limitNumber).toJSON().find(); }); test("All entries should be present in the resultset", () => { @@ -680,13 +580,8 @@ describe("ContentStack SDK Tests", () => { let count; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - count = await Query.count().toJSON().find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + count = await Query.count().toJSON().find(); }); test("Entries present in the resultset", () => { @@ -700,20 +595,15 @@ describe("ContentStack SDK Tests", () => { let entries; beforeAll(async () => { - try { - const Query1 = Stack.ContentType(contentTypes.source) - .Query() - .where("title", "source2"); - const Query2 = Stack.ContentType(contentTypes.source) - .Query() - .where("boolean", true); - const Query = Stack.ContentType(contentTypes.source).Query(); + const Query1 = Stack.ContentType(contentTypes.source) + .Query() + .where("title", "source2"); + const Query2 = Stack.ContentType(contentTypes.source) + .Query() + .where("boolean", true); + const Query = Stack.ContentType(contentTypes.source).Query(); - entries = await Query.or(Query1, Query2).toJSON().find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + entries = await Query.or(Query1, Query2).toJSON().find(); }); test("Should return entries in the resultset", () => { @@ -738,20 +628,15 @@ describe("ContentStack SDK Tests", () => { let entries; beforeAll(async () => { - try { - const Query1 = Stack.ContentType(contentTypes.source) - .Query() - .where("title", "source1"); - const Query2 = Stack.ContentType(contentTypes.source) - .Query() - .where("boolean", true); - const Query = Stack.ContentType(contentTypes.source).Query(); + const Query1 = Stack.ContentType(contentTypes.source) + .Query() + .where("title", "source1"); + const Query2 = Stack.ContentType(contentTypes.source) + .Query() + .where("boolean", true); + const Query = Stack.ContentType(contentTypes.source).Query(); - entries = await Query.and(Query1, Query2).toJSON().find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + entries = await Query.and(Query1, Query2).toJSON().find(); }); test("Should return one entry in the resultset", () => { @@ -772,17 +657,12 @@ describe("ContentStack SDK Tests", () => { let entries; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entries = await Query.query({ - $or: [{ title: "source2" }, { boolean: "true" }], - }) - .toJSON() - .find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.query({ + $or: [{ title: "source2" }, { boolean: "true" }], + }) + .toJSON() + .find(); }); test("Should return entries in the resultset", () => { @@ -808,13 +688,8 @@ describe("ContentStack SDK Tests", () => { let entries; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entries = await Query.toJSON().search("source2").find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.toJSON().search("source2").find(); }); test("Should return entries in the resultset", () => { @@ -828,16 +703,11 @@ describe("ContentStack SDK Tests", () => { let entries; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entries = await Query.includeCount() - .includeContentType() - .toJSON() - .find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.includeCount() + .includeContentType() + .toJSON() + .find(); }); test("Should return entries in the resultset", () => { @@ -865,13 +735,8 @@ describe("ContentStack SDK Tests", () => { let entries; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entries = await Query.includeEmbeddedItems().toJSON().find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.includeEmbeddedItems().toJSON().find(); }); test("Should return entries in the resultset", () => { @@ -883,16 +748,11 @@ describe("ContentStack SDK Tests", () => { let entries; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entries = await Query.includeSchema() - .includeContentType() - .toJSON() - .find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.includeSchema() + .includeContentType() + .toJSON() + .find(); }); test("Should return entries in the resultset", () => { @@ -916,17 +776,12 @@ describe("ContentStack SDK Tests", () => { let entries; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entries = await Query.includeCount() - .includeSchema() - .includeContentType() - .toJSON() - .find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.includeCount() + .includeSchema() + .includeContentType() + .toJSON() + .find(); }); test("Should return entries in the resultset", () => { @@ -957,16 +812,11 @@ describe("ContentStack SDK Tests", () => { const _in = ["ja-jp"]; beforeAll(async () => { - try { - entries = await Stack.ContentType(contentTypes.source) - .Query() - .language("ja-jp") - .toJSON() - .find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + entries = await Stack.ContentType(contentTypes.source) + .Query() + .language("ja-jp") + .toJSON() + .find(); }); test("Should return entries in the resultset", () => { @@ -988,17 +838,12 @@ describe("ContentStack SDK Tests", () => { const _in = ["ja-jp", "en-us"]; beforeAll(async () => { - try { - entries = await Stack.ContentType(contentTypes.source) - .Query() - .language("ja-jp") - .includeFallback() - .toJSON() - .find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + entries = await Stack.ContentType(contentTypes.source) + .Query() + .language("ja-jp") + .includeFallback() + .toJSON() + .find(); }); test("Should return entries in the resultset", () => { @@ -1021,14 +866,9 @@ describe("ContentStack SDK Tests", () => { let entries; beforeAll(async () => { - try { - entries = await Stack.getContentTypes({ - include_global_field_schema: true, - }); - } catch (err) { - error = err; - console.error("Error:", err); - } + entries = await Stack.getContentTypes({ + include_global_field_schema: true, + }); }); test("Global field schema should be present when applicable", () => { @@ -1048,13 +888,8 @@ describe("ContentStack SDK Tests", () => { let entries; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entries = await Query.only("title").toJSON().find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.only("title").toJSON().find(); }); test("Should return entries in the resultset", () => { @@ -1076,13 +911,8 @@ describe("ContentStack SDK Tests", () => { let entries; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entries = await Query.only("BASE", "title").toJSON().find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.only("BASE", "title").toJSON().find(); }); test("Should return entries in the resultset", () => { @@ -1104,13 +934,8 @@ describe("ContentStack SDK Tests", () => { let entries; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entries = await Query.only(["title", "url"]).toJSON().find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.only(["title", "url"]).toJSON().find(); }); test("Should return entries in the resultset", () => { @@ -1133,17 +958,12 @@ describe("ContentStack SDK Tests", () => { let entries; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entries = await Query.includeReference("reference") - .only("BASE", ["reference"]) - .only("reference", "title") - .toJSON() - .find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.includeReference("reference") + .only("BASE", ["reference"]) + .only("reference", "title") + .toJSON() + .find(); }); test("Should return entries in the resultset", () => { @@ -1162,17 +982,12 @@ describe("ContentStack SDK Tests", () => { let entries; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entries = await Query.includeReference("reference") - .only("BASE", ["reference"]) - .only("reference", ["title"]) - .toJSON() - .find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.includeReference("reference") + .only("BASE", ["reference"]) + .only("reference", ["title"]) + .toJSON() + .find(); }); test("Should return entries in the resultset", () => { @@ -1193,13 +1008,8 @@ describe("ContentStack SDK Tests", () => { let entries; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entries = await Query.except("title").toJSON().find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.except("title").toJSON().find(); }); test("Should return entries in the resultset", () => { @@ -1218,13 +1028,8 @@ describe("ContentStack SDK Tests", () => { let entries; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entries = await Query.except("BASE", "title").toJSON().find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.except("BASE", "title").toJSON().find(); }); test("Should return entries in the resultset", () => { @@ -1243,13 +1048,8 @@ describe("ContentStack SDK Tests", () => { let entries; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entries = await Query.except(["title", "file"]).toJSON().find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.except(["title", "file"]).toJSON().find(); }); test("Should return entries in the resultset", () => { @@ -1268,17 +1068,12 @@ describe("ContentStack SDK Tests", () => { let entries; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entries = await Query.includeReference("reference") - .only("BASE", ["reference"]) - .except("reference", "title") - .toJSON() - .find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.includeReference("reference") + .only("BASE", ["reference"]) + .except("reference", "title") + .toJSON() + .find(); }); test("Should return entries in the resultset", () => { @@ -1324,17 +1119,12 @@ describe("ContentStack SDK Tests", () => { let entries; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entries = await Query.includeReference("reference") - .only("BASE", ["reference"]) - .except("reference", ["title"]) - .toJSON() - .find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entries = await Query.includeReference("reference") + .only("BASE", ["reference"]) + .except("reference", ["title"]) + .toJSON() + .find(); }); test("Should return entries in the resultset", () => { @@ -1382,15 +1172,10 @@ describe("ContentStack SDK Tests", () => { let entries; beforeAll(async () => { - try { - const Query = Stack.Taxonomies(); - entries = await Query.where("taxonomies.one", "term_one") - .toJSON() - .find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.Taxonomies(); + entries = await Query.where("taxonomies.one", "term_one") + .toJSON() + .find(); }); test("Should return entries in the resultset", () => { @@ -1402,18 +1187,13 @@ describe("ContentStack SDK Tests", () => { let entries; beforeAll(async () => { - try { - const Query = Stack.Taxonomies(); - entries = await Query.containedIn("taxonomies.one", [ - "term_one", - "term_two", - ]) - .toJSON() - .find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.Taxonomies(); + entries = await Query.containedIn("taxonomies.one", [ + "term_one", + "term_two", + ]) + .toJSON() + .find(); }); test("Should return entries in the resultset", () => { @@ -1425,22 +1205,11 @@ describe("ContentStack SDK Tests", () => { let entries; beforeAll(async () => { - try { - const Query1 = Stack.Taxonomies().where( - "taxonomies.one", - "term_one" - ); - const Query2 = Stack.Taxonomies().where( - "taxonomies.two", - "term_two" - ); - const Query = Stack.Taxonomies(); + const Query1 = Stack.Taxonomies().where("taxonomies.one", "term_one"); + const Query2 = Stack.Taxonomies().where("taxonomies.two", "term_two"); + const Query = Stack.Taxonomies(); - entries = await Query.or(Query1, Query2).toJSON().find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + entries = await Query.or(Query1, Query2).toJSON().find(); }); test("Should return entries in the resultset", () => { @@ -1452,22 +1221,11 @@ describe("ContentStack SDK Tests", () => { let entries; beforeAll(async () => { - try { - const Query1 = Stack.Taxonomies().where( - "taxonomies.one", - "term_one" - ); - const Query2 = Stack.Taxonomies().where( - "taxonomies.two", - "term_two" - ); - const Query = Stack.Taxonomies(); + const Query1 = Stack.Taxonomies().where("taxonomies.one", "term_one"); + const Query2 = Stack.Taxonomies().where("taxonomies.two", "term_two"); + const Query = Stack.Taxonomies(); - entries = await Query.and(Query1, Query2).toJSON().find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + entries = await Query.and(Query1, Query2).toJSON().find(); }); test("Should return entries in the resultset", () => { @@ -1479,13 +1237,8 @@ describe("ContentStack SDK Tests", () => { let entries; beforeAll(async () => { - try { - const Query = Stack.Taxonomies(); - entries = await Query.exists("taxonomies.one").toJSON().find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.Taxonomies(); + entries = await Query.exists("taxonomies.one").toJSON().find(); }); test("Should return entries in the resultset", () => { @@ -1499,15 +1252,10 @@ describe("ContentStack SDK Tests", () => { let entries; beforeAll(async () => { - try { - const Query = Stack.ContentType("source").Query(); - entries = await Query.where("taxonomies.one", "term_one") - .toJSON() - .find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType("source").Query(); + entries = await Query.where("taxonomies.one", "term_one") + .toJSON() + .find(); }); test("Should return entries in the resultset", () => { @@ -1519,18 +1267,13 @@ describe("ContentStack SDK Tests", () => { let entries; beforeAll(async () => { - try { - const Query = Stack.ContentType("source").Query(); - entries = await Query.containedIn("taxonomies.one", [ - "term_one", - "term_two", - ]) - .toJSON() - .find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType("source").Query(); + entries = await Query.containedIn("taxonomies.one", [ + "term_one", + "term_two", + ]) + .toJSON() + .find(); }); test("Should return entries in the resultset", () => { @@ -1542,20 +1285,15 @@ describe("ContentStack SDK Tests", () => { let entries; beforeAll(async () => { - try { - const Query1 = Stack.ContentType("source") - .Query() - .where("taxonomies.one", "term_one"); - const Query2 = Stack.ContentType("source") - .Query() - .where("taxonomies.two", "term_two"); - const Query = Stack.ContentType("source").Query(); - - entries = await Query.or(Query1, Query2).toJSON().find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query1 = Stack.ContentType("source") + .Query() + .where("taxonomies.one", "term_one"); + const Query2 = Stack.ContentType("source") + .Query() + .where("taxonomies.two", "term_two"); + const Query = Stack.ContentType("source").Query(); + + entries = await Query.or(Query1, Query2).toJSON().find(); }); test("Should return entries in the resultset", () => { @@ -1567,20 +1305,15 @@ describe("ContentStack SDK Tests", () => { let entries; beforeAll(async () => { - try { - const Query1 = Stack.ContentType("source") - .Query() - .where("taxonomies.one", "term_one"); - const Query2 = Stack.ContentType("source") - .Query() - .where("taxonomies.two", "term_two"); - const Query = Stack.ContentType("source").Query(); - - entries = await Query.and(Query1, Query2).toJSON().find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query1 = Stack.ContentType("source") + .Query() + .where("taxonomies.one", "term_one"); + const Query2 = Stack.ContentType("source") + .Query() + .where("taxonomies.two", "term_two"); + const Query = Stack.ContentType("source").Query(); + + entries = await Query.and(Query1, Query2).toJSON().find(); }); test("Should return entries in the resultset", () => { @@ -1592,13 +1325,8 @@ describe("ContentStack SDK Tests", () => { let entries; beforeAll(async () => { - try { - const Query = Stack.ContentType("source").Query(); - entries = await Query.exists("taxonomies.one").toJSON().find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType("source").Query(); + entries = await Query.exists("taxonomies.one").toJSON().find(); }); test("Should return entries in the resultset", () => { @@ -1610,15 +1338,10 @@ describe("ContentStack SDK Tests", () => { let entries; beforeAll(async () => { - try { - const Query = Stack.ContentType("source").Query(); - entries = await Query.equalAndBelow("taxonomies.one", "term_one") - .toJSON() - .find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType("source").Query(); + entries = await Query.equalAndBelow("taxonomies.one", "term_one") + .toJSON() + .find(); }); test("Should return entries in the resultset", () => { @@ -1630,15 +1353,10 @@ describe("ContentStack SDK Tests", () => { let entries; beforeAll(async () => { - try { - const Query = Stack.ContentType("source").Query(); - entries = await Query.below("taxonomies.one", "term_one") - .toJSON() - .find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType("source").Query(); + entries = await Query.below("taxonomies.one", "term_one") + .toJSON() + .find(); }); test("Should return entries in the resultset", () => { @@ -1650,15 +1368,10 @@ describe("ContentStack SDK Tests", () => { let entries; beforeAll(async () => { - try { - const Query = Stack.ContentType("source").Query(); - entries = await Query.equalAndAbove("taxonomies.one", "term_one") - .toJSON() - .find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType("source").Query(); + entries = await Query.equalAndAbove("taxonomies.one", "term_one") + .toJSON() + .find(); }); test("Should return entries in the resultset", () => { @@ -1670,15 +1383,10 @@ describe("ContentStack SDK Tests", () => { let entries; beforeAll(async () => { - try { - const Query = Stack.ContentType("source").Query(); - entries = await Query.above("taxonomies.one", "term_one_child") - .toJSON() - .find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType("source").Query(); + entries = await Query.above("taxonomies.one", "term_one_child") + .toJSON() + .find(); }); test("Should return entries in the resultset", () => { @@ -1691,18 +1399,10 @@ describe("ContentStack SDK Tests", () => { let entries; beforeAll(async () => { - try { - const Query = Stack.ContentType("source").Query(); - entries = await Query.variants([ - "variant_entry_1", - "variant_entry_2", - ]) - .toJSON() - .find(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType("source").Query(); + entries = await Query.variants(["variant_entry_1", "variant_entry_2"]) + .toJSON() + .find(); }); test("Should return variant entries in the resultset", () => { @@ -1711,4 +1411,4 @@ describe("ContentStack SDK Tests", () => { }); }); }); -}); \ No newline at end of file +}); diff --git a/test/entry/findone-result-wrapper.js b/test/entry/findone-result-wrapper.js index 8f638951..af8e7774 100755 --- a/test/entry/findone-result-wrapper.js +++ b/test/entry/findone-result-wrapper.js @@ -1,304 +1,272 @@ -'use strict'; +"use strict"; /* * Module Dependencies. */ -const Contentstack = require('../../dist/node/contentstack.js'); -const Utils = require('./utils.js'); -const init = require('../config.js'); +const Contentstack = require("../../dist/node/contentstack.js"); +const Utils = require("./utils.js"); +const init = require("../config.js"); const contentTypes = init.contentTypes; let Stack; -describe('FindOne Tests', () => { +describe("FindOne Tests", () => { // Setup - Initialize the Contentstack Stack Instance beforeAll((done) => { Stack = Contentstack.Stack(init.stack); Stack.setHost(init.host); setTimeout(done, 1000); }); - - describe('Default FindOne', () => { + + describe("Default FindOne", () => { let entry; let error = null; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query.toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.toJSON().findOne(); }); - test('Should return an entry with uid, locale, publish_details', () => { + test("Should return an entry with uid, locale, publish_details", () => { expect(entry).toBeDefined(); - expect(entry['uid']).toBeDefined(); - expect(entry['locale']).toBeDefined(); - expect(entry['publish_details']).toBeDefined(); + expect(entry["uid"]).toBeDefined(); + expect(entry["locale"]).toBeDefined(); + expect(entry["publish_details"]).toBeDefined(); }); }); // SORTING TESTS - describe('Sorting', () => { - describe('Ascending', () => { + describe("Sorting", () => { + describe("Ascending", () => { let entry; let error = null; - const field = 'updated_at'; + const field = "updated_at"; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query.ascending(field).toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.ascending(field).toJSON().findOne(); }); - test('Should return an entry with uid, locale, publish_details', () => { + test("Should return an entry with uid, locale, publish_details", () => { expect(entry).toBeDefined(); - expect(entry['uid']).toBeDefined(); - expect(entry['locale']).toBeDefined(); - expect(entry['publish_details']).toBeDefined(); + expect(entry["uid"]).toBeDefined(); + expect(entry["locale"]).toBeDefined(); + expect(entry["publish_details"]).toBeDefined(); }); }); - describe('Descending', () => { + describe("Descending", () => { let entry; - let error = null; - const field = 'created_at'; + const field = "created_at"; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query.descending(field).toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.descending(field).toJSON().findOne(); }); - test('Should return an entry with uid, locale, publish_details', () => { + test("Should return an entry with uid, locale, publish_details", () => { expect(entry).toBeDefined(); - expect(entry['uid']).toBeDefined(); - expect(entry['locale']).toBeDefined(); - expect(entry['publish_details']).toBeDefined(); + expect(entry["uid"]).toBeDefined(); + expect(entry["locale"]).toBeDefined(); + expect(entry["publish_details"]).toBeDefined(); }); }); }); // COMPARISON TESTS - describe('Comparison', () => { - describe('lessThan', () => { + describe("Comparison", () => { + describe("lessThan", () => { let entry; let error = null; - const field = 'num_field'; + const field = "num_field"; const value = 11; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.numbers_content_type).Query(); - entry = await Query.lessThan(field, value).toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType( + contentTypes.numbers_content_type + ).Query(); + entry = await Query.lessThan(field, value).toJSON().findOne(); }); - test('Should return an entry with uid, locale, publish_details', () => { + test("Should return an entry with uid, locale, publish_details", () => { expect(entry).toBeDefined(); - expect(entry['uid']).toBeDefined(); - expect(entry['locale']).toBeDefined(); - expect(entry['publish_details']).toBeDefined(); + expect(entry["uid"]).toBeDefined(); + expect(entry["locale"]).toBeDefined(); + expect(entry["publish_details"]).toBeDefined(); }); - test('num_field should be less than specified value', () => { + test("num_field should be less than specified value", () => { expect(entry[field]).toBeLessThan(value); }); }); - describe('lessThanOrEqualTo', () => { + describe("lessThanOrEqualTo", () => { let entry; let error = null; - const field = 'num_field'; + const field = "num_field"; const value = 11; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.numbers_content_type).Query(); - entry = await Query.lessThanOrEqualTo(field, value).toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType( + contentTypes.numbers_content_type + ).Query(); + entry = await Query.lessThanOrEqualTo(field, value).toJSON().findOne(); }); - test('Should return an entry with uid, locale, publish_details', () => { + test("Should return an entry with uid, locale, publish_details", () => { expect(entry).toBeDefined(); - expect(entry['uid']).toBeDefined(); - expect(entry['locale']).toBeDefined(); - expect(entry['publish_details']).toBeDefined(); + expect(entry["uid"]).toBeDefined(); + expect(entry["locale"]).toBeDefined(); + expect(entry["publish_details"]).toBeDefined(); }); - test('num_field should be less than or equal to specified value', () => { + test("num_field should be less than or equal to specified value", () => { expect(entry[field]).toBeLessThanOrEqual(value); }); }); - describe('greaterThan', () => { + describe("greaterThan", () => { let entry; let error = null; - const field = 'num_field'; + const field = "num_field"; const value = 6; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.numbers_content_type).Query(); - entry = await Query.greaterThan(field, value).ascending(field).toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType( + contentTypes.numbers_content_type + ).Query(); + entry = await Query.greaterThan(field, value) + .ascending(field) + .toJSON() + .findOne(); }); - test('Should return an entry with uid, locale, publish_details', () => { + test("Should return an entry with uid, locale, publish_details", () => { expect(entry).toBeDefined(); - expect(entry['uid']).toBeDefined(); - expect(entry['locale']).toBeDefined(); - expect(entry['publish_details']).toBeDefined(); + expect(entry["uid"]).toBeDefined(); + expect(entry["locale"]).toBeDefined(); + expect(entry["publish_details"]).toBeDefined(); }); - test('num_field should be greater than specified value', () => { + test("num_field should be greater than specified value", () => { expect(entry[field]).toBeGreaterThan(value); }); }); - describe('greaterThanOrEqualTo', () => { + describe("greaterThanOrEqualTo", () => { let entry; let error = null; - const field = 'num_field'; + const field = "num_field"; const value = 11; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.numbers_content_type).Query(); - entry = await Query.greaterThanOrEqualTo(field, value).descending(field).toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType( + contentTypes.numbers_content_type + ).Query(); + entry = await Query.greaterThanOrEqualTo(field, value) + .descending(field) + .toJSON() + .findOne(); }); - - test('Should return an entry with uid, locale, publish_details', () => { + + test("Should return an entry with uid, locale, publish_details", () => { expect(entry).toBeDefined(); - expect(entry['uid']).toBeDefined(); - expect(entry['locale']).toBeDefined(); - expect(entry['publish_details']).toBeDefined(); + expect(entry["uid"]).toBeDefined(); + expect(entry["locale"]).toBeDefined(); + expect(entry["publish_details"]).toBeDefined(); }); - test('num_field should be greater than or equal to specified value', () => { + test("num_field should be greater than or equal to specified value", () => { expect(entry[field]).toBeGreaterThanOrEqual(value); }); }); - describe('notEqualTo', () => { + describe("notEqualTo", () => { let entry; let error = null; - const field = 'num_field'; + const field = "num_field"; const value = 6; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.numbers_content_type).Query(); - entry = await Query.notEqualTo(field, value).descending(field).toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType( + contentTypes.numbers_content_type + ).Query(); + entry = await Query.notEqualTo(field, value) + .descending(field) + .toJSON() + .findOne(); }); - test('num_field should not be equal to specified value', () => { + test("num_field should not be equal to specified value", () => { expect(entry[field]).not.toBe(value); }); - - test('Should return an entry with uid, locale, publish_details', () => { + + test("Should return an entry with uid, locale, publish_details", () => { expect(entry).toBeDefined(); - expect(entry['uid']).toBeDefined(); - expect(entry['locale']).toBeDefined(); - expect(entry['publish_details']).toBeDefined(); + expect(entry["uid"]).toBeDefined(); + expect(entry["locale"]).toBeDefined(); + expect(entry["publish_details"]).toBeDefined(); }); }); }); // ARRAY/SUBSET TESTS - describe('Array/Subset', () => { - describe('containedIn', () => { + describe("Array/Subset", () => { + describe("containedIn", () => { let entry; let error = null; const _in = ["source1", "source2"]; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query.containedIn('title', _in).toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.containedIn("title", _in).toJSON().findOne(); }); - test('Entry title should be in the specified values', () => { + test("Entry title should be in the specified values", () => { expect(_in).toContain(entry.title); }); - test('Should return an entry with uid, locale, publish_details', () => { + test("Should return an entry with uid, locale, publish_details", () => { expect(entry).toBeDefined(); - expect(entry['uid']).toBeDefined(); - expect(entry['locale']).toBeDefined(); - expect(entry['publish_details']).toBeDefined(); + expect(entry["uid"]).toBeDefined(); + expect(entry["locale"]).toBeDefined(); + expect(entry["publish_details"]).toBeDefined(); }); }); - describe('notContainedIn', () => { + describe("notContainedIn", () => { let entry; let error = null; const _in = ["source1"]; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query.notContainedIn('title', _in).toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.notContainedIn("title", _in).toJSON().findOne(); }); - test('Should either return an entry with matching criteria or an expected error', () => { + test("Should either return an entry with matching criteria or an expected error", () => { if (entry) { expect(entry.title).toBeDefined(); expect(_in).not.toContain(entry.title); } else { - expect(error).toEqual({ - error_code: 141, - error_message: 'The requested entry doesn\'t exist.' + expect(error).toEqual({ + error_code: 141, + error_message: "The requested entry doesn't exist.", }); } }); - test('If entry exists, it should have uid', () => { + test("If entry exists, it should have uid", () => { if (entry) { expect(entry.uid).toBeDefined(); } }); - test('If entry exists, it should have locale', () => { + test("If entry exists, it should have locale", () => { if (entry) { expect(entry.locale).toBeDefined(); } }); - test('If entry exists, it should have publish_details', () => { + test("If entry exists, it should have publish_details", () => { if (entry) { expect(entry.publish_details).toBeDefined(); } @@ -307,564 +275,484 @@ describe('FindOne Tests', () => { }); // ELEMENT EXISTS TESTS - describe('Element Existence', () => { - describe('exists', () => { + describe("Element Existence", () => { + describe("exists", () => { let entry; let error = null; const queryField = "boolean"; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query.exists(queryField).toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.exists(queryField).toJSON().findOne(); }); - test('Entry should have the queried field', () => { - expect(typeof entry[queryField]).not.toBe('undefined'); + test("Entry should have the queried field", () => { + expect(typeof entry[queryField]).not.toBe("undefined"); }); - - test('Should return an entry with uid, locale, publish_details', () => { + + test("Should return an entry with uid, locale, publish_details", () => { expect(entry).toBeDefined(); - expect(entry['uid']).toBeDefined(); - expect(entry['locale']).toBeDefined(); - expect(entry['publish_details']).toBeDefined(); + expect(entry["uid"]).toBeDefined(); + expect(entry["locale"]).toBeDefined(); + expect(entry["publish_details"]).toBeDefined(); }); }); - describe('notExists', () => { + describe("notExists", () => { let entry; let error = null; const queryField = "isspecial"; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query.notExists(queryField).toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.notExists(queryField).toJSON().findOne(); }); - test('Should handle either success or error case', () => { + test("Should handle either success or error case", () => { if (entry) { - expect(typeof entry[queryField]).toBe('undefined'); + expect(typeof entry[queryField]).toBe("undefined"); } else { - expect(error).toEqual({ - error_code: 141, - error_message: 'The requested entry doesn\'t exist.' + expect(error).toEqual({ + error_code: 141, + error_message: "The requested entry doesn't exist.", }); } }); - - test('If entry exists, it should have uid', () => { + + test("If entry exists, it should have uid", () => { if (entry) { expect(entry.uid).toBeDefined(); } }); - test('If entry exists, it should have locale', () => { + test("If entry exists, it should have locale", () => { if (entry) { expect(entry.locale).toBeDefined(); } }); - test('If entry exists, it should have publish_details', () => { + test("If entry exists, it should have publish_details", () => { if (entry) { expect(entry.publish_details).toBeDefined(); } }); }); }); - describe('Pagination', () => { - describe('skip', () => { + describe("Pagination", () => { + describe("skip", () => { let allEntries; let skippedEntry; let error = null; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - allEntries = await Query.toJSON().find(); - - const skipQuery = Stack.ContentType(contentTypes.source).Query(); - skippedEntry = await skipQuery.skip(1).toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + allEntries = await Query.toJSON().find(); + + const skipQuery = Stack.ContentType(contentTypes.source).Query(); + skippedEntry = await skipQuery.skip(1).toJSON().findOne(); }); - test('Should have entries in the result set', () => { + test("Should have entries in the result set", () => { expect(allEntries.length).toBeTruthy(); }); - test('Should get correct skipped entry', () => { + test("Should get correct skipped entry", () => { expect(skippedEntry).toEqual(allEntries[0][1]); }); }); }); - describe('Logical Operations', () => { - describe('OR Query Objects', () => { + describe("Logical Operations", () => { + describe("OR Query Objects", () => { let entry; let error = null; beforeAll(async () => { - try { - const Query1 = Stack.ContentType(contentTypes.source).Query().containedIn('title', ['source1']); - const Query2 = Stack.ContentType(contentTypes.source).Query().where('boolean', 'false'); - const Query = Stack.ContentType(contentTypes.source).Query(); - - entry = await Query.or(Query1, Query2).toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query1 = Stack.ContentType(contentTypes.source) + .Query() + .containedIn("title", ["source1"]); + const Query2 = Stack.ContentType(contentTypes.source) + .Query() + .where("boolean", "false"); + const Query = Stack.ContentType(contentTypes.source).Query(); + + entry = await Query.or(Query1, Query2).toJSON().findOne(); }); - test('Should return an entry with uid, locale, publish_details', () => { + test("Should return an entry with uid, locale, publish_details", () => { expect(entry).toBeDefined(); - expect(entry['uid']).toBeDefined(); - expect(entry['locale']).toBeDefined(); - expect(entry['publish_details']).toBeDefined(); + expect(entry["uid"]).toBeDefined(); + expect(entry["locale"]).toBeDefined(); + expect(entry["publish_details"]).toBeDefined(); }); }); - describe('AND Query Objects', () => { + describe("AND Query Objects", () => { let entry; let error = null; beforeAll(async () => { - try { - const Query1 = Stack.ContentType(contentTypes.source).Query().containedIn('title', ['source1']); - const Query2 = Stack.ContentType(contentTypes.source).Query().where('boolean', true); - const Query = Stack.ContentType(contentTypes.source).Query(); - - entry = await Query.and(Query1, Query2).toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query1 = Stack.ContentType(contentTypes.source) + .Query() + .containedIn("title", ["source1"]); + const Query2 = Stack.ContentType(contentTypes.source) + .Query() + .where("boolean", true); + const Query = Stack.ContentType(contentTypes.source).Query(); + + entry = await Query.and(Query1, Query2).toJSON().findOne(); }); - test('Should return an entry with uid, locale, publish_details', () => { + test("Should return an entry with uid, locale, publish_details", () => { expect(entry).toBeDefined(); - expect(entry['uid']).toBeDefined(); - expect(entry['locale']).toBeDefined(); - expect(entry['publish_details']).toBeDefined(); + expect(entry["uid"]).toBeDefined(); + expect(entry["locale"]).toBeDefined(); + expect(entry["publish_details"]).toBeDefined(); }); }); - describe('Raw Query', () => { + describe("Raw Query", () => { let entry; let error = null; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query - .query({ "$or": [{ "title": "source1" }, { "boolean": "false" }] }) - .toJSON() - .findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.query({ + $or: [{ title: "source1" }, { boolean: "false" }], + }) + .toJSON() + .findOne(); }); - test('Entry should satisfy OR condition', () => { - expect(entry.title === 'source1' || entry.boolean === false).toBeTruthy(); + test("Entry should satisfy OR condition", () => { + expect( + entry.title === "source1" || entry.boolean === false + ).toBeTruthy(); }); - - test('Should return an entry with uid, locale, publish_details', () => { + + test("Should return an entry with uid, locale, publish_details", () => { expect(entry).toBeDefined(); - expect(entry['uid']).toBeDefined(); - expect(entry['locale']).toBeDefined(); - expect(entry['publish_details']).toBeDefined(); + expect(entry["uid"]).toBeDefined(); + expect(entry["locale"]).toBeDefined(); + expect(entry["publish_details"]).toBeDefined(); }); }); }); - describe('Tags', () => { + describe("Tags", () => { let entry; let error = null; const tags = ["tag1", "tag2"]; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query.tags(tags).toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.tags(tags).toJSON().findOne(); }); - test('Tags specified should be found in the result', () => { + test("Tags specified should be found in the result", () => { expect(Utils.arrayPresentInArray(tags, entry.tags) > 0).toBe(true); }); - test('Should return an entry with uid, locale, publish_details', () => { + test("Should return an entry with uid, locale, publish_details", () => { expect(entry).toBeDefined(); - expect(entry['uid']).toBeDefined(); - expect(entry['locale']).toBeDefined(); - expect(entry['publish_details']).toBeDefined(); + expect(entry["uid"]).toBeDefined(); + expect(entry["locale"]).toBeDefined(); + expect(entry["publish_details"]).toBeDefined(); }); }); - describe('Search', () => { + describe("Search", () => { let entry; let error = null; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query.search('source1').toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.search("source1").toJSON().findOne(); }); - test('Should return an entry with uid, locale, publish_details', () => { + test("Should return an entry with uid, locale, publish_details", () => { expect(entry).toBeDefined(); - expect(entry['uid']).toBeDefined(); - expect(entry['locale']).toBeDefined(); - expect(entry['publish_details']).toBeDefined(); + expect(entry["uid"]).toBeDefined(); + expect(entry["locale"]).toBeDefined(); + expect(entry["publish_details"]).toBeDefined(); }); }); - describe('Regex', () => { + describe("Regex", () => { let entry; let error = null; - const field = 'title'; + const field = "title"; const regex = { - pattern: '^source', - options: 'i' + pattern: "^source", + options: "i", }; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query.regex(field, regex.pattern, regex.options).toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.regex(field, regex.pattern, regex.options) + .toJSON() + .findOne(); }); - test('Entry field should match the regex pattern', () => { + test("Entry field should match the regex pattern", () => { const regExp = new RegExp(regex.pattern, regex.options); expect(regExp.test(entry[field])).toBe(true); }); - - test('Should return an entry with uid, locale, publish_details', () => { - expect(entry).toBeDefined(); - expect(entry['uid']).toBeDefined(); - expect(entry['locale']).toBeDefined(); - expect(entry['publish_details']).toBeDefined(); - }); + + test("Should return an entry with uid, locale, publish_details", () => { + expect(entry).toBeDefined(); + expect(entry["uid"]).toBeDefined(); + expect(entry["locale"]).toBeDefined(); + expect(entry["publish_details"]).toBeDefined(); + }); }); - describe('Localization', () => { - describe('Without Fallback', () => { + describe("Localization", () => { + describe("Without Fallback", () => { let entry; let error = null; - const _in = ['ja-jp']; + const _in = ["ja-jp"]; beforeAll(async () => { - try { - entry = await Stack.ContentType(contentTypes.source) - .Query() - .language('ja-jp') - .toJSON() - .findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + entry = await Stack.ContentType(contentTypes.source) + .Query() + .language("ja-jp") + .toJSON() + .findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('Entry should have correct locale in publish_details', () => { + test("Entry should have correct locale in publish_details", () => { expect(_in).toContain(entry.publish_details.locale); }); }); - describe('With Fallback', () => { + describe("With Fallback", () => { let entry; let error = null; - const _in = ['ja-jp', 'en-us']; + const _in = ["ja-jp", "en-us"]; beforeAll(async () => { - try { - entry = await Stack.ContentType(contentTypes.source) - .Query() - .language('ja-jp') - .includeFallback() - .toJSON() - .findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + entry = await Stack.ContentType(contentTypes.source) + .Query() + .language("ja-jp") + .includeFallback() + .toJSON() + .findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('Entry should have locale from allowed fallback list', () => { + test("Entry should have locale from allowed fallback list", () => { expect(_in).toContain(entry.publish_details.locale); }); }); }); - describe('Including References', () => { - describe('includeReference - String', () => { + describe("Including References", () => { + describe("includeReference - String", () => { let entry; let error = null; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query.includeReference('reference').toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.includeReference("reference").toJSON().findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('All present references should be included as objects', () => { - expect(entry && entry['reference'] && typeof entry['reference'] === 'object').toBe(true); + test("All present references should be included as objects", () => { + expect( + entry && entry["reference"] && typeof entry["reference"] === "object" + ).toBe(true); }); }); - describe('includeReference - Array', () => { + describe("includeReference - Array", () => { let entry; let error = null; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query.includeReference(['reference', 'other_reference']).toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.includeReference(["reference", "other_reference"]) + .toJSON() + .findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('All present references should be included as objects', () => { - const condition = ( - entry && - entry['reference'] && - typeof entry['reference'] === 'object' && - entry.other_reference && - typeof entry.other_reference === 'object' - ); + test("All present references should be included as objects", () => { + const condition = + entry && + entry["reference"] && + typeof entry["reference"] === "object" && + entry.other_reference && + typeof entry.other_reference === "object"; expect(condition).toBe(true); }); }); }); - describe('Including Schema', () => { + describe("Including Schema", () => { let entry; let error = null; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query.includeSchema().toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.includeSchema().toJSON().findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); }); - describe('Including ContentType', () => { + describe("Including ContentType", () => { let entry; let contentType; let error = null; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - [entry, contentType] = await new Promise((resolve, reject) => { - Query.includeContentType() - .toJSON() - .findOne() - .then((entry, contentType) => resolve([entry, contentType]), reject); - }); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + [entry, contentType] = await new Promise((resolve, reject) => { + Query.includeContentType() + .toJSON() + .findOne() + .then((entry, contentType) => resolve([entry, contentType]), reject); + }); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('ContentType should not be present', () => { + test("ContentType should not be present", () => { expect(typeof contentType).toBe("undefined"); }); }); - describe('Including Schema and ContentType', () => { + describe("Including Schema and ContentType", () => { let entry; let contentType; let error = null; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - [entry, contentType] = await new Promise((resolve, reject) => { - Query.includeSchema() - .includeContentType() - .toJSON() - .findOne() - .then((entry, contentType) => resolve([entry, contentType]), reject); - }); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + [entry, contentType] = await new Promise((resolve, reject) => { + Query.includeSchema() + .includeContentType() + .toJSON() + .findOne() + .then((entry, contentType) => resolve([entry, contentType]), reject); + }); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('ContentType should not be present', () => { + test("ContentType should not be present", () => { expect(typeof contentType).toBe("undefined"); }); }); - describe('Field Selection - Only', () => { - describe('only - Single String Parameter', () => { + describe("Field Selection - Only", () => { + describe("only - Single String Parameter", () => { let entry; let error = null; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query.only('title').toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.only("title").toJSON().findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('Entry should only contain title and uid fields', () => { + test("Entry should only contain title and uid fields", () => { expect(Object.keys(entry).length).toBe(2); - expect(entry).toHaveProperty('title'); - expect(entry).toHaveProperty('uid'); + expect(entry).toHaveProperty("title"); + expect(entry).toHaveProperty("uid"); }); }); - describe('only - Multiple String Parameters', () => { + describe("only - Multiple String Parameters", () => { let entry; let error = null; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query.only('BASE', 'title').toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.only("BASE", "title").toJSON().findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('Entry should only contain title and uid fields', () => { + test("Entry should only contain title and uid fields", () => { expect(Object.keys(entry).length).toBe(2); - expect(entry).toHaveProperty('title'); - expect(entry).toHaveProperty('uid'); + expect(entry).toHaveProperty("title"); + expect(entry).toHaveProperty("uid"); }); }); - describe('only - Array Parameter', () => { + describe("only - Array Parameter", () => { let entry; let error = null; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query.only(['title', 'url']).toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.only(["title", "url"]).toJSON().findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('Entry should contain title, url, and uid fields', () => { + test("Entry should contain title, url, and uid fields", () => { expect(Object.keys(entry).length).toBe(3); - expect(entry).toHaveProperty('title'); - expect(entry).toHaveProperty('url'); - expect(entry).toHaveProperty('uid'); + expect(entry).toHaveProperty("title"); + expect(entry).toHaveProperty("url"); + expect(entry).toHaveProperty("uid"); }); }); - describe('only - For reference - String', () => { + describe("only - For reference - String", () => { let entry; let error = null; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query - .includeReference('reference') - .only('BASE', 'reference') - .only('reference', 'title') - .toJSON() - .findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.includeReference("reference") + .only("BASE", "reference") + .only("reference", "title") + .toJSON() + .findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('Reference fields should be properly filtered', () => { + test("Reference fields should be properly filtered", () => { let hasProperReferences = false; - if (entry && entry['reference'] && typeof entry['reference'] === 'object') { - hasProperReferences = entry['reference'].every(ref => - ref && "title" in ref && "uid" in ref); + if ( + entry && + entry["reference"] && + typeof entry["reference"] === "object" + ) { + hasProperReferences = entry["reference"].every( + (ref) => ref && "title" in ref && "uid" in ref + ); } else { hasProperReferences = true; // No references or empty references is valid } @@ -872,38 +760,33 @@ describe('FindOne Tests', () => { }); }); - describe('only - For reference - Array', () => { + describe("only - For reference - Array", () => { let entry; let error = null; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query - .includeReference('reference') - .only('BASE', ['reference']) - .only('reference', ['title']) - .toJSON() - .findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.includeReference("reference") + .only("BASE", ["reference"]) + .only("reference", ["title"]) + .toJSON() + .findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('References should have only specified fields', () => { + test("References should have only specified fields", () => { let hasProperReferences = false; - if (entry && entry['reference']) { - if (Array.isArray(entry['reference'])) { - if (entry['reference'].length === 0) { + if (entry && entry["reference"]) { + if (Array.isArray(entry["reference"])) { + if (entry["reference"].length === 0) { hasProperReferences = true; } else { - hasProperReferences = entry['reference'].every(ref => - ref && "title" in ref && "uid" in ref); + hasProperReferences = entry["reference"].every( + (ref) => ref && "title" in ref && "uid" in ref + ); } } else { hasProperReferences = true; @@ -916,108 +799,92 @@ describe('FindOne Tests', () => { }); }); - describe('Field Selection - Except', () => { - describe('except - Single String Parameter', () => { + describe("Field Selection - Except", () => { + describe("except - Single String Parameter", () => { let entry; let error = null; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query.except('title').toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.except("title").toJSON().findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('Entry should not contain the excluded field', () => { - expect(entry).not.toHaveProperty('title'); + test("Entry should not contain the excluded field", () => { + expect(entry).not.toHaveProperty("title"); }); }); - describe('except - Multiple String Parameters', () => { + describe("except - Multiple String Parameters", () => { let entry; let error = null; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query.except('BASE', 'title').toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.except("BASE", "title").toJSON().findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('Entry should not contain the excluded field', () => { - expect(entry).not.toHaveProperty('title'); + test("Entry should not contain the excluded field", () => { + expect(entry).not.toHaveProperty("title"); }); }); - describe('except - Array of String Parameters', () => { + describe("except - Array of String Parameters", () => { let entry; let error = null; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query.except(['title', 'url']).toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.except(["title", "url"]).toJSON().findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('Entry should not contain the first excluded field', () => { - expect(entry).not.toHaveProperty('title'); + test("Entry should not contain the first excluded field", () => { + expect(entry).not.toHaveProperty("title"); }); - test('Entry should not contain the second excluded field', () => { - expect(entry).not.toHaveProperty('url'); + test("Entry should not contain the second excluded field", () => { + expect(entry).not.toHaveProperty("url"); }); }); - describe('except - For the reference - String', () => { + describe("except - For the reference - String", () => { let entry; let error = null; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query - .includeReference('reference') - .only('BASE', 'reference') - .except('reference', 'title') - .toJSON() - .findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.includeReference("reference") + .only("BASE", "reference") + .except("reference", "title") + .toJSON() + .findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('References should not contain the excluded field', () => { + test("References should not contain the excluded field", () => { let hasProperExclusions = false; - if (entry && entry['reference'] && typeof entry['reference'] === 'object') { - hasProperExclusions = entry['reference'].every(ref => - ref && !("title" in ref)); + if ( + entry && + entry["reference"] && + typeof entry["reference"] === "object" + ) { + hasProperExclusions = entry["reference"].every( + (ref) => ref && !("title" in ref) + ); } else { // No references is valid for this test hasProperExclusions = true; @@ -1025,35 +892,34 @@ describe('FindOne Tests', () => { expect(hasProperExclusions).toBe(true); }); }); - - describe('except - For the reference - Array', () => { + + describe("except - For the reference - Array", () => { let entry; let error = null; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query - .includeReference('reference') - .only('BASE', ['reference']) - .except('reference', ['title']) - .toJSON() - .findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.includeReference("reference") + .only("BASE", ["reference"]) + .except("reference", ["title"]) + .toJSON() + .findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('References should not contain the excluded field', () => { + test("References should not contain the excluded field", () => { let hasProperExclusions = false; - if (entry && entry['reference'] && typeof entry['reference'] === 'object') { - hasProperExclusions = entry['reference'].every(ref => - ref && !("title" in ref)); + if ( + entry && + entry["reference"] && + typeof entry["reference"] === "object" + ) { + hasProperExclusions = entry["reference"].every( + (ref) => ref && !("title" in ref) + ); } else { hasProperExclusions = true; } @@ -1061,4 +927,4 @@ describe('FindOne Tests', () => { }); }); }); -}); \ No newline at end of file +}); diff --git a/test/entry/findone.js b/test/entry/findone.js index 53f649e3..e63d74be 100755 --- a/test/entry/findone.js +++ b/test/entry/findone.js @@ -1,248 +1,218 @@ -'use strict'; +"use strict"; /* * Module Dependencies. */ -const Contentstack = require('../../dist/node/contentstack.js'); -const Utils = require('./utils.js'); -const init = require('../config.js'); +const Contentstack = require("../../dist/node/contentstack.js"); +const Utils = require("./utils.js"); +const init = require("../config.js"); const contentTypes = init.contentTypes; let Stack; -describe('FindOne Tests', () => { +describe("FindOne Tests", () => { // Setup - Initialize the Contentstack Stack Instance beforeAll((done) => { Stack = Contentstack.Stack(init.stack); Stack.setHost(init.host); setTimeout(done, 1000); }); - - describe('Default FindOne', () => { + + describe("Default FindOne", () => { let entry; let error = null; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query.toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.toJSON().findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('Entry should have uid', () => { + test("Entry should have uid", () => { expect(entry.uid).toBeDefined(); }); - test('Entry should have locale', () => { + test("Entry should have locale", () => { expect(entry.locale).toBeDefined(); }); - test('Entry should have publish_details', () => { + test("Entry should have publish_details", () => { expect(entry.publish_details).toBeDefined(); }); }); - describe('Sorting', () => { - describe('Ascending', () => { + describe("Sorting", () => { + describe("Ascending", () => { let entry; let error = null; - const field = 'created_at'; + const field = "created_at"; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query.ascending(field).toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.ascending(field).toJSON().findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('Entry should have uid', () => { + test("Entry should have uid", () => { expect(entry.uid).toBeDefined(); }); - test('Entry should have locale', () => { + test("Entry should have locale", () => { expect(entry.locale).toBeDefined(); }); - test('Entry should have publish_details', () => { + test("Entry should have publish_details", () => { expect(entry.publish_details).toBeDefined(); }); }); - describe('Descending', () => { + describe("Descending", () => { let entry; let error = null; - const field = 'created_at'; + const field = "created_at"; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query.descending(field).toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.descending(field).toJSON().findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('Entry should have uid', () => { + test("Entry should have uid", () => { expect(entry.uid).toBeDefined(); }); - test('Entry should have locale', () => { + test("Entry should have locale", () => { expect(entry.locale).toBeDefined(); }); - test('Entry should have publish_details', () => { + test("Entry should have publish_details", () => { expect(entry.publish_details).toBeDefined(); }); }); }); - describe('Comparison', () => { - describe('lessThan', () => { + describe("Comparison", () => { + describe("lessThan", () => { let entry; let error = null; const value = 11; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.numbers_content_type).Query(); - entry = await Query.lessThan('num_field', value).toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType( + contentTypes.numbers_content_type + ).Query(); + entry = await Query.lessThan("num_field", value).toJSON().findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('num_field should be less than specified value', () => { + test("num_field should be less than specified value", () => { expect(entry.num_field).toBeLessThan(value); }); - test('Entry should have uid', () => { + test("Entry should have uid", () => { expect(entry.uid).toBeDefined(); }); - test('Entry should have locale', () => { + test("Entry should have locale", () => { expect(entry.locale).toBeDefined(); }); - test('Entry should have publish_details', () => { + test("Entry should have publish_details", () => { expect(entry.publish_details).toBeDefined(); }); }); - describe('lessThanOrEqualTo', () => { + describe("lessThanOrEqualTo", () => { let entry; let error = null; const value = 11; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.numbers_content_type).Query(); - entry = await Query.lessThanOrEqualTo('num_field', value).toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType( + contentTypes.numbers_content_type + ).Query(); + entry = await Query.lessThanOrEqualTo("num_field", value) + .toJSON() + .findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('num_field should be less than or equal to specified value', () => { + test("num_field should be less than or equal to specified value", () => { expect(entry.num_field).toBeLessThanOrEqual(value); }); - test('Entry should have uid', () => { + test("Entry should have uid", () => { expect(entry.uid).toBeDefined(); }); - test('Entry should have locale', () => { + test("Entry should have locale", () => { expect(entry.locale).toBeDefined(); }); - test('Entry should have publish_details', () => { + test("Entry should have publish_details", () => { expect(entry.publish_details).toBeDefined(); }); }); - }); - describe('Array/Subset', () => { - describe('containedIn', () => { + describe("Array/Subset", () => { + describe("containedIn", () => { let entry; let error = null; const _in = ["source1", "source2"]; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query.containedIn('title', _in).toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.containedIn("title", _in).toJSON().findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('Entry title should be in the specified values', () => { + test("Entry title should be in the specified values", () => { expect(_in).toContain(entry.title); }); - test('Entry should have uid', () => { + test("Entry should have uid", () => { expect(entry.uid).toBeDefined(); }); - test('Entry should have locale', () => { + test("Entry should have locale", () => { expect(entry.locale).toBeDefined(); }); - test('Entry should have publish_details', () => { + test("Entry should have publish_details", () => { expect(entry.publish_details).toBeDefined(); }); }); - describe('notContainedIn', () => { + describe("notContainedIn", () => { let entry; let error = null; const _in = ["source1", "source2", "source3", "source4"]; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query.notContainedIn('title', _in).toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.notContainedIn("title", _in).toJSON().findOne(); }); - test('Should either return an entry or an expected error', () => { + test("Should either return an entry or an expected error", () => { if (entry) { expect(entry).toBeDefined(); expect(_in).not.toContain(entry.title); @@ -250,527 +220,460 @@ describe('FindOne Tests', () => { expect(entry.locale).toBeDefined(); expect(entry.publish_details).toBeDefined(); } else { - expect(error).toEqual({ - error_code: 141, - error_message: 'The requested entry doesn\'t exist.' + expect(error).toEqual({ + error_code: 141, + error_message: "The requested entry doesn't exist.", }); } }); }); }); - describe('Element Existence', () => { - describe('exists', () => { + describe("Element Existence", () => { + describe("exists", () => { let entry; let error = null; const queryField = "boolean"; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query.exists(queryField).toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.exists(queryField).toJSON().findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('Entry should have the queried field', () => { - expect(typeof entry[queryField]).not.toBe('undefined'); + test("Entry should have the queried field", () => { + expect(typeof entry[queryField]).not.toBe("undefined"); }); - test('Entry should have uid', () => { + test("Entry should have uid", () => { expect(entry.uid).toBeDefined(); }); - test('Entry should have locale', () => { + test("Entry should have locale", () => { expect(entry.locale).toBeDefined(); }); - test('Entry should have publish_details', () => { + test("Entry should have publish_details", () => { expect(entry.publish_details).toBeDefined(); }); }); - describe('notExists', () => { + describe("notExists", () => { let entry; let error = null; const queryField = "isspecial"; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query.notExists(queryField).toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.notExists(queryField).toJSON().findOne(); }); - test('Should either have entry without field or proper error', () => { + test("Should either have entry without field or proper error", () => { if (entry) { - expect(typeof entry[queryField]).toBe('undefined'); + expect(typeof entry[queryField]).toBe("undefined"); expect(entry.uid).toBeDefined(); expect(entry.locale).toBeDefined(); expect(entry.publish_details).toBeDefined(); } else { - expect(error).toEqual({ - error_code: 141, - error_message: 'The requested entry doesn\'t exist.' + expect(error).toEqual({ + error_code: 141, + error_message: "The requested entry doesn't exist.", }); } }); }); }); - describe('Pagination', () => { - describe('skip', () => { + describe("Pagination", () => { + describe("skip", () => { let allEntries; let skippedEntry; let error = null; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - allEntries = await Query.toJSON().find(); - - const SkipQuery = Stack.ContentType(contentTypes.source).Query(); - skippedEntry = await SkipQuery.skip(1).toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + allEntries = await Query.toJSON().find(); + + const SkipQuery = Stack.ContentType(contentTypes.source).Query(); + skippedEntry = await SkipQuery.skip(1).toJSON().findOne(); }); - test('Should have entries in the result set', () => { + test("Should have entries in the result set", () => { expect(allEntries.length).toBeTruthy(); }); - test('Should get correct skipped entry', () => { + test("Should get correct skipped entry", () => { expect(skippedEntry).toEqual(allEntries[0][1]); }); }); }); - describe('Logical Operations', () => { - describe('OR Query Objects', () => { + describe("Logical Operations", () => { + describe("OR Query Objects", () => { let entry; let error = null; beforeAll(async () => { - try { - const Query1 = Stack.ContentType(contentTypes.source).Query().containedIn('title', ['source1', 'source2']); - const Query2 = Stack.ContentType(contentTypes.source).Query().where('boolean', true); - const Query = Stack.ContentType(contentTypes.source).Query(); - - entry = await Query.or(Query1, Query2).toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query1 = Stack.ContentType(contentTypes.source) + .Query() + .containedIn("title", ["source1", "source2"]); + const Query2 = Stack.ContentType(contentTypes.source) + .Query() + .where("boolean", true); + const Query = Stack.ContentType(contentTypes.source).Query(); + + entry = await Query.or(Query1, Query2).toJSON().findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('Entry should satisfy the OR condition', () => { - const condition = (entry.title === 'source1' || - entry.title === 'source2' || - entry.boolean === true); + test("Entry should satisfy the OR condition", () => { + const condition = + entry.title === "source1" || + entry.title === "source2" || + entry.boolean === true; expect(condition).toBeTruthy(); }); - test('Entry should have uid', () => { + test("Entry should have uid", () => { expect(entry.uid).toBeDefined(); }); - test('Entry should have locale', () => { + test("Entry should have locale", () => { expect(entry.locale).toBeDefined(); }); - test('Entry should have publish_details', () => { + test("Entry should have publish_details", () => { expect(entry.publish_details).toBeDefined(); }); }); - describe('AND Query Objects', () => { + describe("AND Query Objects", () => { let entry; let error = null; beforeAll(async () => { - try { - const Query1 = Stack.ContentType(contentTypes.source).Query().where('title', 'source1'); - const Query2 = Stack.ContentType(contentTypes.source).Query().where('boolean', true); - const Query = Stack.ContentType(contentTypes.source).Query(); - - entry = await Query.and(Query1, Query2).toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query1 = Stack.ContentType(contentTypes.source) + .Query() + .where("title", "source1"); + const Query2 = Stack.ContentType(contentTypes.source) + .Query() + .where("boolean", true); + const Query = Stack.ContentType(contentTypes.source).Query(); + + entry = await Query.and(Query1, Query2).toJSON().findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('Entry should satisfy the AND condition', () => { - const condition = (entry.title === 'source1' && entry.boolean === true); + test("Entry should satisfy the AND condition", () => { + const condition = entry.title === "source1" && entry.boolean === true; expect(condition).toBeTruthy(); }); - test('Entry should have uid', () => { + test("Entry should have uid", () => { expect(entry.uid).toBeDefined(); }); - test('Entry should have locale', () => { + test("Entry should have locale", () => { expect(entry.locale).toBeDefined(); }); - test('Entry should have publish_details', () => { + test("Entry should have publish_details", () => { expect(entry.publish_details).toBeDefined(); }); }); - describe('Raw Query', () => { + describe("Raw Query", () => { let entry; let error = null; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query - .query({ "$or": [{ "title": "source1" }, { "boolean": "false" }] }) - .toJSON() - .findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.query({ + $or: [{ title: "source1" }, { boolean: "false" }], + }) + .toJSON() + .findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('Entry should satisfy the OR condition in raw query', () => { - const condition = (entry.title === 'source1' || entry.boolean === false); + test("Entry should satisfy the OR condition in raw query", () => { + const condition = entry.title === "source1" || entry.boolean === false; expect(condition).toBeTruthy(); }); - test('Entry should have uid', () => { + test("Entry should have uid", () => { expect(entry.uid).toBeDefined(); }); - test('Entry should have locale', () => { + test("Entry should have locale", () => { expect(entry.locale).toBeDefined(); }); - test('Entry should have publish_details', () => { + test("Entry should have publish_details", () => { expect(entry.publish_details).toBeDefined(); }); }); }); - describe('Localization', () => { - describe('Without Fallback', () => { + describe("Localization", () => { + describe("Without Fallback", () => { let entry; let error = null; - const _in = ['ja-jp']; + const _in = ["ja-jp"]; beforeAll(async () => { - try { - entry = await Stack.ContentType(contentTypes.source) - .Query() - .language('ja-jp') - .toJSON() - .findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + entry = await Stack.ContentType(contentTypes.source) + .Query() + .language("ja-jp") + .toJSON() + .findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('Entry should have correct locale in publish_details', () => { + test("Entry should have correct locale in publish_details", () => { expect(_in).toContain(entry.publish_details.locale); }); }); - describe('With Fallback', () => { + describe("With Fallback", () => { let entry; let error = null; - const _in = ['ja-jp', 'en-us']; + const _in = ["ja-jp", "en-us"]; beforeAll(async () => { - try { - entry = await Stack.ContentType(contentTypes.source) - .Query() - .language('ja-jp') - .includeFallback() - .toJSON() - .findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + entry = await Stack.ContentType(contentTypes.source) + .Query() + .language("ja-jp") + .includeFallback() + .toJSON() + .findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('Entry should have locale from allowed fallback list', () => { + test("Entry should have locale from allowed fallback list", () => { expect(_in).toContain(entry.publish_details.locale); }); }); }); - describe('Including References', () => { - describe('includeReference - String', () => { + describe("Including References", () => { + describe("includeReference - String", () => { let entry; let error = null; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query.includeReference('reference').toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.includeReference("reference").toJSON().findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('All present references should be included as objects', () => { - expect(entry && entry.reference && typeof entry.reference === 'object').toBe(true); + test("All present references should be included as objects", () => { + expect( + entry && entry.reference && typeof entry.reference === "object" + ).toBe(true); }); }); - describe('includeReference - Array', () => { + describe("includeReference - Array", () => { let entry; let error = null; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query.includeReference(['reference', 'other_reference']).toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.includeReference(["reference", "other_reference"]) + .toJSON() + .findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('All present references should be included as objects', () => { - const condition = ( - entry && - entry.reference && - typeof entry.reference === 'object' && - entry.other_reference && - typeof entry.other_reference === 'object' - ); + test("All present references should be included as objects", () => { + const condition = + entry && + entry.reference && + typeof entry.reference === "object" && + entry.other_reference && + typeof entry.other_reference === "object"; expect(condition).toBe(true); }); }); }); - describe('Including Schema', () => { + describe("Including Schema", () => { let entry; let error = null; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query.includeSchema().toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.includeSchema().toJSON().findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); }); - describe('Including ContentType', () => { + describe("Including ContentType", () => { let entry; let contentType; let error = null; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - [entry, contentType] = await new Promise((resolve, reject) => { - Query.includeContentType() - .toJSON() - .findOne() - .then((entry, contentType) => resolve([entry, contentType]), reject); - }); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + [entry, contentType] = await new Promise((resolve, reject) => { + Query.includeContentType() + .toJSON() + .findOne() + .then((entry, contentType) => resolve([entry, contentType]), reject); + }); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('ContentType should not be present', () => { + test("ContentType should not be present", () => { expect(typeof contentType).toBe("undefined"); }); }); - describe('Including Schema and ContentType', () => { + describe("Including Schema and ContentType", () => { let entry; let contentType; let error = null; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - [entry, contentType] = await new Promise((resolve, reject) => { - Query.includeSchema() - .includeContentType() - .toJSON() - .findOne() - .then((entry, contentType) => resolve([entry, contentType]), reject); - }); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + [entry, contentType] = await new Promise((resolve, reject) => { + Query.includeSchema() + .includeContentType() + .toJSON() + .findOne() + .then((entry, contentType) => resolve([entry, contentType]), reject); + }); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('ContentType should not be present', () => { + test("ContentType should not be present", () => { expect(typeof contentType).toBe("undefined"); }); }); - describe('Field Selection - Only', () => { - describe('only - Single String Parameter', () => { + describe("Field Selection - Only", () => { + describe("only - Single String Parameter", () => { let entry; let error = null; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query.only('title').toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.only("title").toJSON().findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('Entry should only contain title and uid fields', () => { + test("Entry should only contain title and uid fields", () => { expect(Object.keys(entry).length).toBe(2); - expect(entry).toHaveProperty('title'); - expect(entry).toHaveProperty('uid'); + expect(entry).toHaveProperty("title"); + expect(entry).toHaveProperty("uid"); }); }); - describe('only - Multiple String Parameters', () => { + describe("only - Multiple String Parameters", () => { let entry; let error = null; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query.only('BASE', 'title').toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.only("BASE", "title").toJSON().findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('Entry should only contain title and uid fields', () => { + test("Entry should only contain title and uid fields", () => { expect(Object.keys(entry).length).toBe(2); - expect(entry).toHaveProperty('title'); - expect(entry).toHaveProperty('uid'); + expect(entry).toHaveProperty("title"); + expect(entry).toHaveProperty("uid"); }); }); - describe('only - Array Parameter', () => { + describe("only - Array Parameter", () => { let entry; let error = null; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query.only(['title', 'url']).toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.only(["title", "url"]).toJSON().findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('Entry should contain title, url, and uid fields', () => { + test("Entry should contain title, url, and uid fields", () => { expect(Object.keys(entry).length).toBe(3); - expect(entry).toHaveProperty('title'); - expect(entry).toHaveProperty('url'); - expect(entry).toHaveProperty('uid'); + expect(entry).toHaveProperty("title"); + expect(entry).toHaveProperty("url"); + expect(entry).toHaveProperty("uid"); }); }); - describe('only - For reference - String', () => { + describe("only - For reference - String", () => { let entry; let error = null; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query - .includeReference('reference') - .only('BASE', 'reference') - .only('reference', 'title') - .toJSON() - .findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.includeReference("reference") + .only("BASE", "reference") + .only("reference", "title") + .toJSON() + .findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('References should have only specified fields', () => { + test("References should have only specified fields", () => { let flag = false; - if (entry && entry['reference'] && typeof entry['reference'] === 'object') { - flag = entry.reference.every(reference => - reference && "title" in reference && "uid" in reference); + if ( + entry && + entry["reference"] && + typeof entry["reference"] === "object" + ) { + flag = entry.reference.every( + (reference) => + reference && "title" in reference && "uid" in reference + ); } else { flag = true; } @@ -778,38 +681,34 @@ describe('FindOne Tests', () => { }); }); - describe('only - For reference - Array', () => { + describe("only - For reference - Array", () => { let entry; let error = null; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query - .includeReference('reference') - .only('BASE', ['reference']) - .only('reference', ['title']) - .toJSON() - .findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.includeReference("reference") + .only("BASE", ["reference"]) + .only("reference", ["title"]) + .toJSON() + .findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('References should have only specified fields', () => { + test("References should have only specified fields", () => { let flag = false; - if (entry && entry['reference']) { - if (entry['reference'].length) { - if (entry['reference'].length === 0) { + if (entry && entry["reference"]) { + if (entry["reference"].length) { + if (entry["reference"].length === 0) { flag = true; } else { - flag = entry.reference.every(reference => - reference && "title" in reference && "uid" in reference); + flag = entry.reference.every( + (reference) => + reference && "title" in reference && "uid" in reference + ); } } else { flag = true; @@ -822,141 +721,124 @@ describe('FindOne Tests', () => { }); }); - describe('Field Selection - Except', () => { - describe('except - Single String Parameter', () => { + describe("Field Selection - Except", () => { + describe("except - Single String Parameter", () => { let entry; let error = null; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query.except('title').toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.except("title").toJSON().findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('Entry should not contain the title field', () => { - expect(entry).not.toHaveProperty('title'); + test("Entry should not contain the title field", () => { + expect(entry).not.toHaveProperty("title"); }); }); - describe('except - Multiple String Parameters', () => { + describe("except - Multiple String Parameters", () => { let entry; let error = null; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query.except('BASE', 'title').toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.except("BASE", "title").toJSON().findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('Entry should not contain the title field', () => { - expect(entry).not.toHaveProperty('title'); + test("Entry should not contain the title field", () => { + expect(entry).not.toHaveProperty("title"); }); }); - describe('except - Array Parameter', () => { + describe("except - Array Parameter", () => { let entry; let error = null; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query.except(['title', 'file']).toJSON().findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.except(["title", "file"]).toJSON().findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('Entry should not contain the title field', () => { - expect(entry).not.toHaveProperty('title'); + test("Entry should not contain the title field", () => { + expect(entry).not.toHaveProperty("title"); }); - test('Entry should not contain the file field', () => { - expect(entry).not.toHaveProperty('file'); + test("Entry should not contain the file field", () => { + expect(entry).not.toHaveProperty("file"); }); }); - describe('except - For reference - String', () => { + describe("except - For reference - String", () => { let entry; let error = null; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query - .includeReference('reference') - .only('BASE', 'reference') - .except('reference', 'title') - .toJSON() - .findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.includeReference("reference") + .only("BASE", "reference") + .except("reference", "title") + .toJSON() + .findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('References should not contain the specified field', () => { + test("References should not contain the specified field", () => { let flag = false; - if (entry && entry['reference'] && typeof entry['reference'] === 'object') { - flag = entry.reference.every(reference => - reference && !("title" in reference)); + if ( + entry && + entry["reference"] && + typeof entry["reference"] === "object" + ) { + flag = entry.reference.every( + (reference) => reference && !("title" in reference) + ); } expect(flag).toBeTruthy(); }); }); - describe('except - For reference - Array', () => { + describe("except - For reference - Array", () => { let entry; let error = null; beforeAll(async () => { - try { - const Query = Stack.ContentType(contentTypes.source).Query(); - entry = await Query - .includeReference('reference') - .only('BASE', ['reference']) - .except('reference', ['title']) - .toJSON() - .findOne(); - } catch (err) { - error = err; - console.error("Error:", err); - } + const Query = Stack.ContentType(contentTypes.source).Query(); + entry = await Query.includeReference("reference") + .only("BASE", ["reference"]) + .except("reference", ["title"]) + .toJSON() + .findOne(); }); - test('Should return an entry', () => { + test("Should return an entry", () => { expect(entry).toBeDefined(); }); - test('References should not contain the specified field', () => { + test("References should not contain the specified field", () => { let flag = false; - if (entry && entry['reference'] && typeof entry['reference'] === 'object') { - flag = entry.reference.every(reference => - reference && !("title" in reference)); + if ( + entry && + entry["reference"] && + typeof entry["reference"] === "object" + ) { + flag = entry.reference.every( + (reference) => reference && !("title" in reference) + ); } expect(flag).toBeTruthy(); }); @@ -978,26 +860,26 @@ describe('FindOne Tests', () => { } }); - test('Should not succeed', () => { + test("Should not succeed", () => { expect(success).toBe(false); }); - test('Should return HTTP status 422', () => { + test("Should return HTTP status 422", () => { expect(error.http_code).toBe(422); }); - test('Should have appropriate error message', () => { + test("Should have appropriate error message", () => { expect(error.http_message).toBeTruthy(); }); }); - describe('412 Unauthorized Error', () => { + describe("412 Unauthorized Error", () => { let success = false; let error = null; beforeAll(async () => { try { - Stack.headers = { authorization: 'InvalidAPIKey' }; // Simulating an invalid API key + Stack.headers = { authorization: "InvalidAPIKey" }; // Simulating an invalid API key const Query = Stack.ContentType(contentTypes.source).Query(); await Query.toJSON().findOne(); success = true; @@ -1009,17 +891,17 @@ describe('FindOne Tests', () => { } }); - test('Should not succeed', () => { + test("Should not succeed", () => { expect(success).toBe(false); }); - test('Should return HTTP status 412', () => { + test("Should return HTTP status 412", () => { expect(error.http_code).toBe(412); }); - test('Should have appropriate error message', () => { + test("Should have appropriate error message", () => { expect(error.http_message).toBeTruthy(); }); }); }); -}); \ No newline at end of file +}); From abff767456d4de12d3c9631787d06803181fc419 Mon Sep 17 00:00:00 2001 From: "harshitha.d" Date: Mon, 24 Mar 2025 21:22:56 +0530 Subject: [PATCH 8/9] fix: update Slack channel in sendSlackMessage function --- sanity-report-dev11.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sanity-report-dev11.js b/sanity-report-dev11.js index d43a9138..9b84ce4e 100644 --- a/sanity-report-dev11.js +++ b/sanity-report-dev11.js @@ -72,7 +72,7 @@ const sendSlackMessage = async () => { try { const result = await app.client.chat.postMessage({ token: process.env.SLACK_BOT_TOKEN, - channel: process.env.SLACK_CHANNEL, + channel: process.env.SLACK_CHANNEL2, text: slackMessage.text, // Ensure this is the full object }); From b116bd60eb441a60954e0928ed995825ef50000c Mon Sep 17 00:00:00 2001 From: "harshitha.d" Date: Wed, 26 Mar 2025 12:05:02 +0530 Subject: [PATCH 9/9] update dependencies --- package-lock.json | 44 +++++++++++++------------------------------- package.json | 6 +++--- 2 files changed, 16 insertions(+), 34 deletions(-) diff --git a/package-lock.json b/package-lock.json index e867920c..43626622 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,10 +9,10 @@ "version": "3.25.0", "license": "MIT", "dependencies": { - "@contentstack/utils": "^1.3.15", - "@fetch-mock/jest": "^0.2.10", + "@contentstack/utils": "^1.3.18", + "@fetch-mock/jest": "^0.2.12", "es6-promise": "^4.2.8", - "fetch-mock": "^12.2.0", + "fetch-mock": "^12.4.0", "localStorage": "1.0.4", "qs": "^6.14.0" }, @@ -1783,9 +1783,9 @@ "license": "MIT" }, "node_modules/@contentstack/utils": { - "version": "1.3.16", - "resolved": "https://registry.npmjs.org/@contentstack/utils/-/utils-1.3.16.tgz", - "integrity": "sha512-HfVEwh7Da8xV4iZth/ci5bcOqszTx/U2mOzsWbyjHLeOfiU9U7uj6DefrrAPhNhL7JgCq/EpRd3vFtaxiEHBlA==", + "version": "1.3.20", + "resolved": "https://registry.npmjs.org/@contentstack/utils/-/utils-1.3.20.tgz", + "integrity": "sha512-WXkFv5uKrAMs21NPCWe3+7KHYfagenS8rv1/yCDsZ+uV1FvKkzst+MiU1+hcaWHi0E6QaPpYDcxpiltUHo5TSA==", "license": "MIT" }, "node_modules/@csstools/color-helpers": { @@ -1914,12 +1914,12 @@ } }, "node_modules/@fetch-mock/jest": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/@fetch-mock/jest/-/jest-0.2.10.tgz", - "integrity": "sha512-nBZUUrYhuCzzmCx0jmGTZOfENf7IhmyYG89WMquHlCkqYSXBJT5PldFg+P107QZcShQPUmqxyLzGHdmsL7mmJw==", + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/@fetch-mock/jest/-/jest-0.2.15.tgz", + "integrity": "sha512-cudDyqZr/mzA/AsXzowx3Il5C7//lOaBn3CW/+gzitGRk621ZPSdlZYbaq3kwxji5vwUaaFQE0saKBLHi2K6fQ==", "license": "MIT", "dependencies": { - "fetch-mock": "^12.3.0" + "fetch-mock": "^12.5.2" }, "engines": { "node": ">=18.11.0" @@ -5199,15 +5199,14 @@ } }, "node_modules/fetch-mock": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/fetch-mock/-/fetch-mock-12.3.0.tgz", - "integrity": "sha512-+ZHzLuzrKpP3u5PZo8ghFP1Kr3UJUTZ5PT/uQZtLv7UagDCVRt1bSzVg6MoTFdjQ0GXsx/crq2t0tGabkbH2yA==", + "version": "12.5.2", + "resolved": "https://registry.npmjs.org/fetch-mock/-/fetch-mock-12.5.2.tgz", + "integrity": "sha512-b5KGDFmdmado2MPQjZl6ix3dAG3iwCitb0XQwN72y2s9VnWZ3ObaGNy+bkpm1390foiLDybdJ7yjRGKD36kATw==", "license": "MIT", "dependencies": { "@types/glob-to-regexp": "^0.4.4", "dequal": "^2.0.3", "glob-to-regexp": "^0.4.1", - "is-subset-of": "^3.1.10", "regexparam": "^3.0.0" }, "engines": { @@ -6410,16 +6409,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-subset-of": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/is-subset-of/-/is-subset-of-3.1.10.tgz", - "integrity": "sha512-avvaYgVmYWyaZ1NDFiv4y9JGkrE2je3op1Po4VYKKJKR8H2qVPsg1GZuuXl5elCTxTlwAIsrAjWAs4BVrISFRw==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "license": "MIT", - "dependencies": { - "typedescriptor": "3.0.2" - } - }, "node_modules/is-symbol": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", @@ -11014,13 +11003,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typedescriptor": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/typedescriptor/-/typedescriptor-3.0.2.tgz", - "integrity": "sha512-hyVbaCUd18UiXk656g/imaBLMogpdijIEpnhWYrSda9rhvO4gOU16n2nh7xG5lv/rjumnZzGOdz0CEGTmFe0fQ==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "license": "MIT" - }, "node_modules/typescript": { "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", diff --git a/package.json b/package.json index ca89d221..e0333705 100644 --- a/package.json +++ b/package.json @@ -100,10 +100,10 @@ "webpack-node-externals": "^3.0.0" }, "dependencies": { - "@contentstack/utils": "^1.3.15", - "@fetch-mock/jest": "^0.2.10", + "@contentstack/utils": "^1.3.18", + "@fetch-mock/jest": "^0.2.12", "es6-promise": "^4.2.8", - "fetch-mock": "^12.2.0", + "fetch-mock": "^12.4.0", "localStorage": "1.0.4", "qs": "^6.14.0" }