diff --git a/CHANGELOG.md b/CHANGELOG.md index 5160b405..2cda9b41 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,7 @@ # Changelog +## [v1.19.2](https://github.com/contentstack/contentstack-management-javascript/tree/v1.19.2) (2025-01-27) + - Enhancement + - Added support for nested global fields. ## [v1.19.1](https://github.com/contentstack/contentstack-management-javascript/tree/v1.19.1) (2025-01-27) - Feature diff --git a/lib/entity.js b/lib/entity.js index a1d55a23..2203ccdf 100644 --- a/lib/entity.js +++ b/lib/entity.js @@ -71,6 +71,10 @@ export const upload = async ({ http, urlPath, stackHeaders, formData, params, me export const create = ({ http, params }) => { return async function (data, param) { + this.stackHeaders = { + ...this.stackHeaders, + ...(http.httpClientParams.headers?.api_version && { api_version: http.httpClientParams.headers.api_version }) + }; const headers = { headers: { ...cloneDeep(params), @@ -101,10 +105,11 @@ export const create = ({ http, params }) => { } } -export const query = ({ http, wrapperCollection }) => { +export const query = ({ http, wrapperCollection, apiVersion }) => { return function (params = {}) { const headers = { - ...cloneDeep(this.stackHeaders) + ...cloneDeep(this.stackHeaders), + ...(apiVersion != null ? { api_version: apiVersion } : {}) } if (this.organization_uid) { headers.organization_uid = this.organization_uid diff --git a/lib/stack/globalField/index.js b/lib/stack/globalField/index.js index ad254a2a..12d00ac1 100644 --- a/lib/stack/globalField/index.js +++ b/lib/stack/globalField/index.js @@ -11,6 +11,11 @@ import { createReadStream } from 'fs' export function GlobalField (http, data = {}) { this.stackHeaders = data.stackHeaders + this.apiVersion = data.api_version || undefined; + + if (this.apiVersion) { + this.stackHeaders.api_version = this.apiVersion; + } this.urlPath = `/global_fields` if (data.global_field) { @@ -34,7 +39,82 @@ export function GlobalField (http, data = {}) { * .then((globalField) => console.log(globalField)) * */ - this.update = update(http, 'global_field') + this.update = async (config) => { + try { + // Add `api_version` to headers if `this.apiVersion` is defined + if (this.apiVersion) { + this.stackHeaders.api_version = this.apiVersion; + } + const headers = { + headers: { + ...cloneDeep(this.stackHeaders) + } + } + const response = await http.put(`${this.urlPath}`, config, headers); + // Remove `api_version` from headers after fetching data + if (this.apiVersion) { + delete this.stackHeaders.api_version; + } + if (response.data) { + return response.data; + } else { + throw error(response); + } + } catch (err) { + throw error(err); + } + } + + + /** + * @description The Update GlobalField call lets you update the name and description of an existing GlobalField. + * @memberof GlobalField + * @func update + * @returns {Promise} Promise for GlobalField instance + * @example + * import * as contentstack from '@contentstack/management' + * const client = contentstack.client() + * const data = { + * "global_field": { + * "title": "Nested Global Field33", + * "uid": "nested_global_field33", + * "schema": [ + * { + * "data_type": "text", + * "display_name": "Single Line Textbox", + * "uid": "single_line" + * }, + * { + * "data_type": "global_field", + * "display_name": "Global", + * "uid": "global_field", + * "reference_to": "nested_global_field_123" + * } + * ] + * } + * } + * client.stack({ api_key: 'api_key'}).globalField('global_field_uid').updateNestedGlobalField(data, { headers: { api_version: '3.2' }}) + * .then((globalField) => { + console.log(globalField) + * }) + */ + this.updateNestedGlobalField = async (config, headers={}) => { + const apiVersion = {api_version: '3.2' } + this.stackHeaders = {...this.stackHeaders, ...apiVersion, ...headers} + try { + const headers = { + headers: { ...cloneDeep(this.stackHeaders) } + } + const response = await http.put(`${this.urlPath}`, config, headers) + if (response.data) { + return response.data + } else { + throw error(response) + } + } catch (err) { + throw error(err) + } + } /** * @description The Delete GlobalField call is used to delete an existing GlobalField permanently from your Stack. @@ -48,7 +128,35 @@ export function GlobalField (http, data = {}) { * client.stack({ api_key: 'api_key'}).globalField('global_field_uid').delete() * .then((response) => console.log(response.notice)) */ - this.delete = deleteEntity(http) + this.delete = async () => { + let param = {}; + try { + // Add `api_version` to headers if `this.apiVersion` is defined + if (this.apiVersion) { + this.stackHeaders.api_version = this.apiVersion; + } + const headers = { + headers: { + ...cloneDeep(this.stackHeaders) + }, + params: { + ...cloneDeep(param) + } + }; + const response = await http.delete(this.urlPath, headers); + if (this.apiVersion) { + delete this.stackHeaders.api_version; + } + if (response.data) { + return response.data; + } else { + throw error(response); + } + } catch (err) { + throw error(err); + } + }; + /** * @description The fetch GlobalField call fetches GlobalField details. @@ -63,7 +171,30 @@ export function GlobalField (http, data = {}) { * .then((globalField) => console.log(globalField)) * */ - this.fetch = fetch(http, 'global_field') + this.fetch = async function (param = {}) { + try { + if (this.apiVersion) { + this.stackHeaders.api_version = this.apiVersion; + } + const headers = { + headers: { + ...cloneDeep(this.stackHeaders) + }, + params: { + ...cloneDeep(param) + } + }; + const response = await http.get(this.urlPath, headers); + if (response.data) { + return response.data; + } else { + throw error(response); + } + } catch (err) { + throw error(err); + } + }; + } else { /** * @description The Create a GlobalField call creates a new globalField in a particular stack of your Contentstack account. @@ -86,7 +217,27 @@ export function GlobalField (http, data = {}) { * client.stack().globalField().create({ global_field }) * .then((globalField) => console.log(globalField)) */ - this.create = create({ http: http }) + this.create = async (data) => { + try { + if (this.apiVersion) { + this.stackHeaders.api_version = this.apiVersion; + } + const headers = { + headers: { + ...cloneDeep(this.stackHeaders) + } + }; + const response = await http.post(`${this.urlPath}`, data, headers); + if (response.data) { + return response.data; + } else { + return error(response); + } + } catch (err) { + return error(err); + } + }; + /** * @description The Query on GlobalField will allow to fetch details of all or specific GlobalField @@ -101,7 +252,7 @@ export function GlobalField (http, data = {}) { * client.stack().globalField().query({ query: { name: 'Global Field Name' } }).find() * .then((globalFields) => console.log(globalFields)) */ - this.query = query({ http: http, wrapperCollection: GlobalFieldCollection }) + this.query = query({ http: http, wrapperCollection: GlobalFieldCollection, apiVersion: this.apiVersion }) /** * @description The Import a global field call imports a global field into a stack. @@ -119,8 +270,9 @@ export function GlobalField (http, data = {}) { * .then((globalField) => console.log(globalField)) * */ - this.import = async function (data, params = {}) { + this.import = async function (data, params = {}, headers = {}) { try { + this.stackHeaders = { ...this.stackHeaders, ...headers }; const response = await upload({ http: http, urlPath: `${this.urlPath}/import`, diff --git a/lib/stack/index.js b/lib/stack/index.js index a5c0152a..b8e1f5ca 100644 --- a/lib/stack/index.js +++ b/lib/stack/index.js @@ -159,12 +159,30 @@ export function Stack (http, data) { * * client.stack({ api_key: 'api_key'}).globalField('globalField_uid').fetch() * .then((globalField) => console.log(globalField)) - */ - this.globalField = (globalFieldUid = null) => { - const data = { stackHeaders: this.stackHeaders } - if (globalFieldUid) { - data.global_field = { uid: globalFieldUid } + * + * client.stack({ api_key: 'api_key'}).globalField('globalField_uid', { api_version: '3.2' }).fetch() + * .then((globalField) => console.log(globalField)) + * + */ + this.globalField = (globalFieldUidOrOptions = null, options = {}) => { + let data = { + stackHeaders: this.stackHeaders, + }; + if (typeof globalFieldUidOrOptions === 'object' && globalFieldUidOrOptions !== null) { + options = globalFieldUidOrOptions; + } else if (globalFieldUidOrOptions) { + data.global_field = { uid: globalFieldUidOrOptions }; + } + + // Safely handle `options` and check for `api_version` + options = options || {}; // Ensure `options` is always an object + if (options && typeof options === 'object' && options.api_version) { + data.api_version = options.api_version; + if (options.api_version === '3.2') { + data.nested_global_fields = true; + } } + return new GlobalField(http, data) } diff --git a/package-lock.json b/package-lock.json index c6111334..b0120dc3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@contentstack/management", - "version": "1.19.1", + "version": "1.19.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@contentstack/management", - "version": "1.19.1", + "version": "1.19.2", "license": "MIT", "dependencies": { "axios": "^1.7.9", @@ -134,22 +134,22 @@ } }, "node_modules/@babel/core": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", - "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.7.tgz", + "integrity": "sha512-SRijHmF0PSPgLIBYlWnG0hyeJLwXE2CgpsXaMOrtt2yp9/86ALw6oUlj9KYuZ0JN07T4eBMVIW4li/9S1j2BGA==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.0", - "@babel/generator": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.5", + "@babel/helper-compilation-targets": "^7.26.5", "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.0", - "@babel/parser": "^7.26.0", + "@babel/helpers": "^7.26.7", + "@babel/parser": "^7.26.7", "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.26.0", + "@babel/traverse": "^7.26.7", + "@babel/types": "^7.26.7", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -433,27 +433,27 @@ } }, "node_modules/@babel/helpers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", - "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.7.tgz", + "integrity": "sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==", "dev": true, "license": "MIT", "dependencies": { "@babel/template": "^7.25.9", - "@babel/types": "^7.26.0" + "@babel/types": "^7.26.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.5.tgz", - "integrity": "sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.7.tgz", + "integrity": "sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.26.5" + "@babel/types": "^7.26.7" }, "bin": { "parser": "bin/babel-parser.js" @@ -1591,13 +1591,13 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz", - "integrity": "sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.26.7.tgz", + "integrity": "sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -1674,15 +1674,15 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.0.tgz", - "integrity": "sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.7.tgz", + "integrity": "sha512-Ycg2tnXwixaXOVb29rana8HNPgLVBof8qqtNQ9LE22IoyZboQbGSxI6ZySMdW3K5nAe6gu35IaJefUJflhUFTQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", + "@babel/compat-data": "^7.26.5", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-plugin-utils": "^7.26.5", "@babel/helper-validator-option": "^7.25.9", "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", @@ -1696,7 +1696,7 @@ "@babel/plugin-transform-arrow-functions": "^7.25.9", "@babel/plugin-transform-async-generator-functions": "^7.25.9", "@babel/plugin-transform-async-to-generator": "^7.25.9", - "@babel/plugin-transform-block-scoped-functions": "^7.25.9", + "@babel/plugin-transform-block-scoped-functions": "^7.26.5", "@babel/plugin-transform-block-scoping": "^7.25.9", "@babel/plugin-transform-class-properties": "^7.25.9", "@babel/plugin-transform-class-static-block": "^7.26.0", @@ -1707,7 +1707,7 @@ "@babel/plugin-transform-duplicate-keys": "^7.25.9", "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", "@babel/plugin-transform-dynamic-import": "^7.25.9", - "@babel/plugin-transform-exponentiation-operator": "^7.25.9", + "@babel/plugin-transform-exponentiation-operator": "^7.26.3", "@babel/plugin-transform-export-namespace-from": "^7.25.9", "@babel/plugin-transform-for-of": "^7.25.9", "@babel/plugin-transform-function-name": "^7.25.9", @@ -1716,12 +1716,12 @@ "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", "@babel/plugin-transform-member-expression-literals": "^7.25.9", "@babel/plugin-transform-modules-amd": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.26.3", "@babel/plugin-transform-modules-systemjs": "^7.25.9", "@babel/plugin-transform-modules-umd": "^7.25.9", "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", "@babel/plugin-transform-new-target": "^7.25.9", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.9", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6", "@babel/plugin-transform-numeric-separator": "^7.25.9", "@babel/plugin-transform-object-rest-spread": "^7.25.9", "@babel/plugin-transform-object-super": "^7.25.9", @@ -1738,7 +1738,7 @@ "@babel/plugin-transform-spread": "^7.25.9", "@babel/plugin-transform-sticky-regex": "^7.25.9", "@babel/plugin-transform-template-literals": "^7.25.9", - "@babel/plugin-transform-typeof-symbol": "^7.25.9", + "@babel/plugin-transform-typeof-symbol": "^7.26.7", "@babel/plugin-transform-unicode-escapes": "^7.25.9", "@babel/plugin-transform-unicode-property-regex": "^7.25.9", "@babel/plugin-transform-unicode-regex": "^7.25.9", @@ -1793,9 +1793,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", - "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.7.tgz", + "integrity": "sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1821,17 +1821,17 @@ } }, "node_modules/@babel/traverse": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.5.tgz", - "integrity": "sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.7.tgz", + "integrity": "sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.26.2", "@babel/generator": "^7.26.5", - "@babel/parser": "^7.26.5", + "@babel/parser": "^7.26.7", "@babel/template": "^7.25.9", - "@babel/types": "^7.26.5", + "@babel/types": "^7.26.7", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1840,9 +1840,9 @@ } }, "node_modules/@babel/types": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.5.tgz", - "integrity": "sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.7.tgz", + "integrity": "sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==", "dev": true, "license": "MIT", "dependencies": { @@ -3337,12 +3337,13 @@ "license": "MIT" }, "node_modules/@types/jsonwebtoken": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.7.tgz", - "integrity": "sha512-ugo316mmTYBl2g81zDFnZ7cfxlut3o+/EQdaP7J8QN2kY6lJ22hmQYCK5EHcJHbrW+dkCGSCPgbG8JtYj6qSrg==", + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.8.tgz", + "integrity": "sha512-7fx54m60nLFUVYlxAB1xpe9CBWX2vSrk50Y6ogRJ1v5xxtba7qXTg5BgYDN5dq+yuQQ9HaVlHJyAAt1/mxryFg==", "dev": true, "license": "MIT", "dependencies": { + "@types/ms": "*", "@types/node": "*" } }, @@ -3354,9 +3355,9 @@ "license": "MIT" }, "node_modules/@types/lodash": { - "version": "4.17.14", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.14.tgz", - "integrity": "sha512-jsxagdikDiDBeIRaPYtArcT8my4tN1og7MtMRquFT3XNA6axxyHDRUemqDz/taRDdOUn0GnGHRCuff4q48sW9A==", + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-w/P33JFeySuhN6JLkysYUK2gEmy9kHHFN7E8ro0tkfmlDOgxBDzWEZ/J8cWA+fHqFevpswDTFZnDx+R9lbL6xw==", "dev": true, "license": "MIT" }, @@ -3392,10 +3393,17 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/node": { - "version": "22.10.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.7.tgz", - "integrity": "sha512-V09KvXxFiutGp6B7XkpaDXlNadZxrzajcY50EuoLIpQ6WWYCSvf19lVIazzfIzQvhUN2HjX12spLojTnhuKlGg==", + "version": "22.12.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.12.0.tgz", + "integrity": "sha512-Fll2FZ1riMjNmlmJOdAyY5pUbkftXslB5DgEzlIuNaiWhXd00FhWxVC/r4yV/4wBb9JfImTu+jiSvXTkJ7F/gA==", "dev": true, "license": "MIT", "dependencies": { @@ -3424,9 +3432,9 @@ "license": "MIT" }, "node_modules/@types/ws": { - "version": "8.5.13", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.13.tgz", - "integrity": "sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==", + "version": "8.5.14", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.14.tgz", + "integrity": "sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw==", "dev": true, "license": "MIT", "dependencies": { @@ -3451,9 +3459,9 @@ "license": "MIT" }, "node_modules/@ungap/structured-clone": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.1.tgz", - "integrity": "sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", "dev": true, "license": "ISC" }, @@ -4052,6 +4060,16 @@ "node": "*" } }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -4969,9 +4987,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001692", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001692.tgz", - "integrity": "sha512-A95VKan0kdtrsnMubMKxEKUKImOPSuCpYgxSQBo036P5YYgVIcOYJEgt/txJWqObiRQeISNCfef9nvlQ0vbV7A==", + "version": "1.0.30001696", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001696.tgz", + "integrity": "sha512-pDCPkvzfa39ehJtJ+OwGT/2yvT2SbjfHhiIW2LWOAcMQ7BzwxT/XuyUp4OTOd0XFWA6BKw0JalnBHgSi5DGJBQ==", "dev": true, "funding": [ { @@ -5113,9 +5131,9 @@ } }, "node_modules/cjs-module-lexer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz", - "integrity": "sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", "dev": true, "license": "MIT" }, @@ -5734,9 +5752,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.83", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.83.tgz", - "integrity": "sha512-LcUDPqSt+V0QmI47XLzZrz5OqILSMGsPFkDYus22rIbgorSvBYEFqq854ltTmUdHkY92FSdAAvsh4jWEULMdfQ==", + "version": "1.5.90", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.90.tgz", + "integrity": "sha512-C3PN4aydfW91Natdyd449Kw+BzhLmof6tzy5W1pFC5SpQxVXT+oyiyOG9AgYYSN9OdA/ik3YkCrpwqI8ug5Tug==", "dev": true, "license": "ISC" }, @@ -6700,9 +6718,9 @@ "license": "MIT" }, "node_modules/fast-uri": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.5.tgz", - "integrity": "sha512-5JnBCWpFlMo0a3ciDy/JckMzzv1U9coZrIhedq+HXxxUfDTAiS0LA8OKVao4G9BxmCVck/jtA5r3KAtRWEyD8Q==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", "dev": true, "funding": [ { @@ -6727,9 +6745,9 @@ } }, "node_modules/fastq": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz", - "integrity": "sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.0.tgz", + "integrity": "sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==", "dev": true, "license": "ISC", "dependencies": { @@ -6920,13 +6938,19 @@ } }, "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.4.tgz", + "integrity": "sha512-kKaIINnFpzW6ffJNDjjyjrk21BkDx38c0xa/klsT8VzLCaMEefv4ZTacrcVR4DmgTeBra++jMDAfS/tS799YDw==", "dev": true, "license": "MIT", "dependencies": { - "is-callable": "^1.1.3" + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/foreground-child": { @@ -7772,12 +7796,13 @@ "license": "MIT" }, "node_modules/is-async-function": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.0.tgz", - "integrity": "sha512-GExz9MtyhlZyXYLxzlJRj5WUCE661zhDa1Yna52CN57AJsymh+DvXXjyveSioqSRdxvUrdKdvqB1b5cVKsNpWQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", "dev": true, "license": "MIT", "dependencies": { + "async-function": "^1.0.0", "call-bound": "^1.0.3", "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", @@ -8457,9 +8482,9 @@ } }, "node_modules/istanbul-lib-report/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.0.tgz", + "integrity": "sha512-DrfFnPzblFmNrIZzg5RzHegbiRWg7KMR7btwi2yjHwx06zsUbO5g613sVwEV7FTwmzJu+Io0lJe2GJ3LxqpvBQ==", "dev": true, "license": "ISC", "bin": { @@ -9565,9 +9590,9 @@ } }, "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.0.tgz", + "integrity": "sha512-DrfFnPzblFmNrIZzg5RzHegbiRWg7KMR7btwi2yjHwx06zsUbO5g613sVwEV7FTwmzJu+Io0lJe2GJ3LxqpvBQ==", "dev": true, "license": "ISC", "bin": { @@ -9996,9 +10021,9 @@ } }, "node_modules/jsonwebtoken/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.0.tgz", + "integrity": "sha512-DrfFnPzblFmNrIZzg5RzHegbiRWg7KMR7btwi2yjHwx06zsUbO5g613sVwEV7FTwmzJu+Io0lJe2GJ3LxqpvBQ==", "dev": true, "license": "ISC", "bin": { @@ -10600,9 +10625,9 @@ } }, "node_modules/mocha": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.0.1.tgz", - "integrity": "sha512-+3GkODfsDG71KSCQhc4IekSW+ItCK/kiez1Z28ksWvYhKXV/syxMlerR/sC7whDp7IyreZ4YxceMLdTs5hQE8A==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.1.0.tgz", + "integrity": "sha512-8uJR5RTC2NgpY3GrYcgpZrsEd9zKbPDpob1RezyR2upGHRQtHWofmzTMzTMSV6dru3tj5Ukt0+Vnq1qhFEEwAg==", "dev": true, "license": "MIT", "dependencies": { @@ -10623,8 +10648,8 @@ "strip-json-comments": "^3.1.1", "supports-color": "^8.1.1", "workerpool": "^6.5.1", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.9", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1", "yargs-unparser": "^2.0.0" }, "bin": { @@ -10644,16 +10669,6 @@ "node": ">= 0.6.0" } }, - "node_modules/mocha/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/mocha/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -10664,18 +10679,6 @@ "balanced-match": "^1.0.0" } }, - "node_modules/mocha/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, "node_modules/mocha/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -10769,19 +10772,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/mocha/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/mocha/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -10798,25 +10788,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/mocha/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/mochawesome": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/mochawesome/-/mochawesome-7.1.3.tgz", @@ -14061,9 +14032,9 @@ } }, "node_modules/ts-jest/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.0.tgz", + "integrity": "sha512-DrfFnPzblFmNrIZzg5RzHegbiRWg7KMR7btwi2yjHwx06zsUbO5g613sVwEV7FTwmzJu+Io0lJe2GJ3LxqpvBQ==", "dev": true, "license": "ISC", "bin": { @@ -14073,16 +14044,6 @@ "node": ">=10" } }, - "node_modules/ts-jest/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, "node_modules/tsconfig-paths": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", @@ -15047,13 +15008,13 @@ } }, "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, "license": "ISC", "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/yargs-unparser": { @@ -15098,16 +15059,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index 1f043d45..00e84570 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@contentstack/management", - "version": "1.19.1", + "version": "1.19.2", "description": "The Content Management API is used to manage the content of your Contentstack account", "main": "./dist/node/contentstack-management.js", "browser": "./dist/web/contentstack-management.js", diff --git a/test/sanity-check/api/globalfield-test.js b/test/sanity-check/api/globalfield-test.js index acecd852..9dd35c08 100644 --- a/test/sanity-check/api/globalfield-test.js +++ b/test/sanity-check/api/globalfield-test.js @@ -3,138 +3,250 @@ import { expect } from 'chai' import { cloneDeep } from 'lodash' import { describe, it, setup } from 'mocha' import { jsonReader } from '../utility/fileOperations/readwrite' -import { createGlobalField } from '../mock/globalfield' +import { createGlobalField, createNestedGlobalField, createNestedGlobalFieldForReference } from '../mock/globalfield' import { contentstackClient } from '../utility/ContentstackClient.js' import dotenv from 'dotenv' dotenv.config() let client = {} let createGlobalFieldUid = '' - -describe('Global Field api Test', () => { +describe("Global Field api Test", () => { setup(() => { - const user = jsonReader('loggedinuser.json') - client = contentstackClient(user.authtoken) - }) + const user = jsonReader("loggedinuser.json"); + client = contentstackClient(user.authtoken); + }); - it('should create global field', done => { - makeGlobalField().create(createGlobalField) + it("should create global field", (done) => { + makeGlobalField() + .create(createGlobalField) .then((globalField) => { - expect(globalField.uid).to.be.equal(createGlobalField.global_field.uid) - expect(globalField.title).to.be.equal(createGlobalField.global_field.title) - expect(globalField.schema[0].uid).to.be.equal(createGlobalField.global_field.schema[0].uid) - expect(globalField.schema[0].data_type).to.be.equal(createGlobalField.global_field.schema[0].data_type) - expect(globalField.schema[0].display_name).to.be.equal(createGlobalField.global_field.schema[0].display_name) - done() + globalField = globalField.global_field; + expect(globalField.uid).to.be.equal(createGlobalField.global_field.uid); + expect(globalField.title).to.be.equal( + createGlobalField.global_field.title + ); + expect(globalField.schema[0].uid).to.be.equal( + createGlobalField.global_field.schema[0].uid + ); + expect(globalField.schema[0].data_type).to.be.equal( + createGlobalField.global_field.schema[0].data_type + ); + expect(globalField.schema[0].display_name).to.be.equal( + createGlobalField.global_field.schema[0].display_name + ); + done(); }) - .catch(done) - }) + .catch(done); + }); - it('should fetch global Field', done => { - makeGlobalField(createGlobalField.global_field.uid).fetch() + it("should fetch global Field", (done) => { + makeGlobalField(createGlobalField.global_field.uid) + .fetch() .then((globalField) => { - expect(globalField.uid).to.be.equal(createGlobalField.global_field.uid) - expect(globalField.title).to.be.equal(createGlobalField.global_field.title) - expect(globalField.schema[0].uid).to.be.equal(createGlobalField.global_field.schema[0].uid) - expect(globalField.schema[0].data_type).to.be.equal(createGlobalField.global_field.schema[0].data_type) - expect(globalField.schema[0].display_name).to.be.equal(createGlobalField.global_field.schema[0].display_name) - done() + globalField = globalField.global_field; + expect(globalField.uid).to.be.equal(createGlobalField.global_field.uid); + expect(globalField.title).to.be.equal( + createGlobalField.global_field.title + ); + expect(globalField.schema[0].uid).to.be.equal( + createGlobalField.global_field.schema[0].uid + ); + expect(globalField.schema[0].data_type).to.be.equal( + createGlobalField.global_field.schema[0].data_type + ); + expect(globalField.schema[0].display_name).to.be.equal( + createGlobalField.global_field.schema[0].display_name + ); + done(); }) - .catch(done) - }) + .catch(done); + }); - it('should fetch and update global Field', done => { - makeGlobalField(createGlobalField.global_field.uid).fetch() - .then((globalField) => { - globalField.title = 'Update title' - return globalField.update() - }) + it("should update global Field", (done) => { + makeGlobalField(createGlobalField.global_field.uid) + .update(createGlobalField) .then((updateGlobal) => { - expect(updateGlobal.uid).to.be.equal(createGlobalField.global_field.uid) - expect(updateGlobal.title).to.be.equal('Update title') - expect(updateGlobal.schema[0].uid).to.be.equal(createGlobalField.global_field.schema[0].uid) - expect(updateGlobal.schema[0].data_type).to.be.equal(createGlobalField.global_field.schema[0].data_type) - expect(updateGlobal.schema[0].display_name).to.be.equal(createGlobalField.global_field.schema[0].display_name) - done() + updateGlobal = updateGlobal.global_field; + expect(updateGlobal.uid).to.be.equal( + createGlobalField.global_field.uid + ); + expect(updateGlobal.title).to.be.equal( + createGlobalField.global_field.title + ); + expect(updateGlobal.schema[0].uid).to.be.equal( + createGlobalField.global_field.schema[0].uid + ); + expect(updateGlobal.schema[0].data_type).to.be.equal( + createGlobalField.global_field.schema[0].data_type + ); + expect(updateGlobal.schema[0].display_name).to.be.equal( + createGlobalField.global_field.schema[0].display_name + ); + done(); }) - .catch(done) - }) + .catch(done); + }); - it('should update global Field', done => { - const globalField = makeGlobalField(createGlobalField.global_field.uid) - Object.assign(globalField, cloneDeep(createGlobalField.global_field)) - globalField.update() - .then((updateGlobal) => { - expect(updateGlobal.uid).to.be.equal(createGlobalField.global_field.uid) - expect(updateGlobal.title).to.be.equal(createGlobalField.global_field.title) - expect(updateGlobal.schema[0].uid).to.be.equal(createGlobalField.global_field.schema[0].uid) - expect(updateGlobal.schema[0].data_type).to.be.equal(createGlobalField.global_field.schema[0].data_type) - expect(updateGlobal.schema[0].display_name).to.be.equal(createGlobalField.global_field.schema[0].display_name) - done() + it("should import global Field", (done) => { + makeGlobalField() + .import({ + global_field: path.join(__dirname, "../mock/globalfield.json"), }) - .catch(done) - }) - - it('should import global Field', done => { - makeGlobalField().import({ - global_field: path.join(__dirname, '../mock/globalfield.json') - }) .then((response) => { - createGlobalFieldUid = response.uid - expect(response.uid).to.be.not.equal(null) - done() + createGlobalFieldUid = response.uid; + expect(response.uid).to.be.not.equal(null); + done(); }) - .catch(done) - }) + .catch(done); + }); - it('should get all global field from Query', done => { - makeGlobalField().query() + it("should get all global field from Query", (done) => { + makeGlobalField() + .query() .find() .then((collection) => { - collection.items.forEach(globalField => { - expect(globalField.uid).to.be.not.equal(null) - expect(globalField.title).to.be.not.equal(null) - expect(globalField.schema).to.be.not.equal(null) - }) - done() + collection.items.forEach((globalField) => { + expect(globalField.uid).to.be.not.equal(null); + expect(globalField.title).to.be.not.equal(null); + expect(globalField.schema).to.be.not.equal(null); + }); + done(); }) - .catch(done) - }) + .catch(done); + }); + - it('should get global field title matching Upload', done => { - makeGlobalField().query({ query: { title: 'Upload' } }) + it("should get global field title matching Upload", (done) => { + makeGlobalField() + .query({ query: { title: "Upload" } }) .find() .then((collection) => { - collection.items.forEach(globalField => { - expect(globalField.uid).to.be.not.equal(null) - expect(globalField.title).to.be.equal('Upload') - }) - done() + collection.items.forEach((globalField) => { + expect(globalField.uid).to.be.not.equal(null); + expect(globalField.title).to.be.equal("Upload"); + }); + done(); }) - .catch(done) - }) + .catch(done); + }); + + // it("should get all nested global fields from Query", (done) => { + // makeGlobalField({ api_version: '3.2' }) + // .query() + // .find() + // .then((collection) => { + // collection.items.forEach((globalField) => { + // expect(globalField.uid).to.be.not.equal(null); + // expect(globalField.title).to.be.not.equal(null); + // }); + // done(); + // }) + // .catch(done); + // }); + + + // it('should create nested global field for reference', done => { + // makeGlobalField({ api_version: '3.2' }).create(createNestedGlobalFieldForReference) + // .then(globalField => { + // expect(globalField.global_field.uid).to.be.equal(createNestedGlobalFieldForReference.global_field.uid); + // done(); + // }) + // .catch(err => { + // console.error('Error:', err.response?.data || err.message); + // done(err); + // }); + // }); + + // it('should create nested global field', done => { + // makeGlobalField({ api_version: '3.2' }).create(createNestedGlobalField) + // .then(globalField => { + // expect(globalField.global_field.uid).to.be.equal(createNestedGlobalField.global_field.uid); + // done(); + // }) + // .catch(err => { + // console.error('Error:', err.response?.data || err.message); + // done(err); + // }); + // }); + + // it('should fetch nested global field', done => { + // makeGlobalField(createNestedGlobalField.global_field.uid, { api_version: '3.2' }).fetch() + // .then(globalField => { + // expect(globalField.global_field.uid).to.be.equal(createNestedGlobalField.global_field.uid); + // done(); + // }) + // .catch(err => { + // console.error('Error:', err.response?.data || err.message); + // done(err); + // }); + // }); + + // it('should update nested global fields without fetch', done => { + // makeGlobalField(createNestedGlobalField.global_field.uid, { api_version: '3.2' }) + // .update(createNestedGlobalField) + // .then((globalField) => { + // expect(globalField.global_field.schema.length).to.be.equal(2) + // done() + // }) + // .catch(done) + // }) + + // it("should delete nested global field", (done) => { + // makeGlobalField(createNestedGlobalField.global_field.uid, { api_version: '3.2' }) + // .delete() + // .then((data) => { + // expect(data.notice).to.be.equal("Global Field deleted successfully."); + // done(); + // }) + // .catch((err) => { + // console.error("Error:", err.response?.data || err.message); + // done(err); + // }); + // }); + + // it("should delete nested global reference field", (done) => { + // makeGlobalField(createNestedGlobalFieldForReference.global_field.uid, { api_version: '3.2' }) + // .delete() + // .then((data) => { + // expect(data.notice).to.be.equal("Global Field deleted successfully."); + // done(); + // }) + // .catch((err) => { + // console.error("Error:", err.response?.data || err.message); + // done(err); + // }); + // }); - it('should delete global Field', done => { + it("should delete global Field", (done) => { makeGlobalField(createGlobalField.global_field.uid) .delete() .then((data) => { - expect(data.notice).to.be.equal('Global Field deleted successfully.') - done() + expect(data.notice).to.be.equal("Global Field deleted successfully."); + done(); }) - .catch(done) - }) + .catch(done); + }); - it('should delete imported global Field', done => { + it("should delete imported global Field", (done) => { makeGlobalField(createGlobalFieldUid) .delete() .then((data) => { - expect(data.notice).to.be.equal('Global Field deleted successfully.') - done() + expect(data.notice).to.be.equal("Global Field deleted successfully."); + done(); }) - .catch(done) - }) -}) + .catch(done); + }); +}); -function makeGlobalField (uid = null) { - return client.stack({ api_key: process.env.API_KEY }).globalField(uid) +function makeGlobalField(globalFieldUid = null, options = {}) { + let uid = null; + let finalOptions = options; + if (typeof globalFieldUid === "object") { + finalOptions = globalFieldUid; + } else { + uid = globalFieldUid; + } + finalOptions = finalOptions || {}; + return client + .stack({ api_key: process.env.API_KEY }).globalField(uid, finalOptions); } diff --git a/test/sanity-check/mock/globalfield.js b/test/sanity-check/mock/globalfield.js index 22f07718..ef1d3ec0 100644 --- a/test/sanity-check/mock/globalfield.js +++ b/test/sanity-check/mock/globalfield.js @@ -1,28 +1,71 @@ const createGlobalField = { global_field: { - title: 'First', - uid: 'first', - schema: [{ - display_name: 'Name', - uid: 'name', - data_type: 'text' - }, { - data_type: 'text', - display_name: 'Rich text editor', - uid: 'description', - field_metadata: { - allow_rich_text: true, - description: '', - multiline: false, - rich_text_type: 'advanced', - options: [], - version: 3 + title: "First", + uid: "first", + schema: [ + { + display_name: "Name", + uid: "name", + data_type: "text", }, - multiple: false, - mandatory: false, - unique: false - }] + { + data_type: "text", + display_name: "Rich text editor", + uid: "description", + field_metadata: { + allow_rich_text: true, + description: "", + multiline: false, + rich_text_type: "advanced", + options: [], + version: 3, + }, + multiple: false, + mandatory: false, + unique: false, + }, + ], + }, +}; + +const createNestedGlobalField = { + "global_field": { + "title": "Nested Global Fields9", + "uid": "nested_global_field9", + "schema": [ + { + "data_type": "text", + "display_name": "Single Line Textbox", + "uid": "single_line" + }, + { + "data_type": "global_field", + "display_name": "Global", + "uid": "global_field", + "reference_to": "nested_global_field33" + } + ] + } +} + +const createNestedGlobalFieldForReference = { + "global_field": { + "title": "nested global field for reference", + "uid": "nested_global_field33", + "schema": [ + { + "data_type": "text", + "display_name": "Single Line Textbox", + "uid": "single_line" + }, + { + "data_type": "global_field", + "display_name": "Global", + "uid": "global_field", + "reference_to": "first" + } + ] } } -export { createGlobalField } +export { createGlobalField, createNestedGlobalField, createNestedGlobalFieldForReference }; diff --git a/test/unit/globalField-test.js b/test/unit/globalField-test.js index 0dae7502..5eea7910 100644 --- a/test/unit/globalField-test.js +++ b/test/unit/globalField-test.js @@ -3,218 +3,449 @@ import Axios from 'axios' import { expect } from 'chai' import { describe, it } from 'mocha' import { GlobalField, GlobalFieldCollection, createFormData } from '../../lib/stack/globalField' -import { systemUidMock, checkSystemFields, globalFieldMock, stackHeadersMock, noticeMock } from './mock/objects' +import { systemUidMock, checkSystemFields, globalFieldMock, stackHeadersMock, noticeMock, nestedGlobalFieldMock, nestedGlobalFieldPayload } from './mock/objects' import MockAdapter from 'axios-mock-adapter' -describe('Contentstack GlobalField test', () => { - it('GlobalField test without uid', done => { - const globalField = makeGlobalField() - expect(globalField.urlPath).to.be.equal('/global_fields') - expect(globalField.stackHeaders).to.be.equal(undefined) - expect(globalField.update).to.be.equal(undefined) - expect(globalField.delete).to.be.equal(undefined) - expect(globalField.fetch).to.be.equal(undefined) - expect(globalField.create).to.not.equal(undefined) - expect(globalField.query).to.not.equal(undefined) - done() - }) - - it('GlobalField test with uid', done => { +describe("Contentstack GlobalField test", () => { + it("GlobalField test without uid", (done) => { + const globalField = makeGlobalField(); + expect(globalField.urlPath).to.be.equal("/global_fields"); + expect(globalField.stackHeaders).to.be.equal(undefined); + expect(globalField.update).to.be.equal(undefined); + expect(globalField.delete).to.be.equal(undefined); + expect(globalField.fetch).to.be.equal(undefined); + expect(globalField.create).to.not.equal(undefined); + expect(globalField.query).to.not.equal(undefined); + done(); + }); + + it("GlobalField test with uid", (done) => { const globalField = makeGlobalField({ global_field: { - ...systemUidMock - } - }) - expect(globalField.urlPath).to.be.equal(`/global_fields/${systemUidMock.uid}`) - expect(globalField.stackHeaders).to.be.equal(undefined) - expect(globalField.update).to.not.equal(undefined) - expect(globalField.delete).to.not.equal(undefined) - expect(globalField.fetch).to.not.equal(undefined) - expect(globalField.create).to.be.equal(undefined) - expect(globalField.query).to.be.equal(undefined) - done() - }) - - it('GlobalField test with Stack Headers', done => { + ...systemUidMock, + }, + }); + expect(globalField.urlPath).to.be.equal( + `/global_fields/${systemUidMock.uid}` + ); + expect(globalField.stackHeaders).to.be.equal(undefined); + expect(globalField.update).to.not.equal(undefined); + expect(globalField.delete).to.not.equal(undefined); + expect(globalField.fetch).to.not.equal(undefined); + expect(globalField.create).to.be.equal(undefined); + expect(globalField.query).to.be.equal(undefined); + done(); + }); + + it("GlobalField test with Stack Headers", (done) => { const globalField = makeGlobalField({ global_field: { - ...systemUidMock + ...systemUidMock, }, - stackHeaders: stackHeadersMock - }) - expect(globalField.urlPath).to.be.equal(`/global_fields/${systemUidMock.uid}`) - expect(globalField.stackHeaders).to.not.equal(undefined) - expect(globalField.stackHeaders.api_key).to.be.equal(stackHeadersMock.api_key) - expect(globalField.update).to.not.equal(undefined) - expect(globalField.delete).to.not.equal(undefined) - expect(globalField.fetch).to.not.equal(undefined) - expect(globalField.create).to.be.equal(undefined) - expect(globalField.query).to.be.equal(undefined) - done() - }) - - it('GlobalField Collection test with blank data', done => { - const globalFields = new GlobalFieldCollection(Axios, {}) - expect(globalFields.length).to.be.equal(0) - done() - }) - - it('GlobalField Collection test with data', done => { + stackHeaders: stackHeadersMock, + }); + expect(globalField.urlPath).to.be.equal( + `/global_fields/${systemUidMock.uid}` + ); + expect(globalField.stackHeaders).to.not.equal(undefined); + expect(globalField.stackHeaders.api_key).to.be.equal( + stackHeadersMock.api_key + ); + expect(globalField.update).to.not.equal(undefined); + expect(globalField.delete).to.not.equal(undefined); + expect(globalField.fetch).to.not.equal(undefined); + expect(globalField.create).to.be.equal(undefined); + expect(globalField.query).to.be.equal(undefined); + done(); + }); + + it("GlobalField Collection test with blank data", (done) => { + const globalFields = new GlobalFieldCollection(Axios, {}); + expect(globalFields.length).to.be.equal(0); + done(); + }); + + it("GlobalField Collection test with data", (done) => { const globalFields = new GlobalFieldCollection(Axios, { - global_fields: [ - globalFieldMock - ] - }) - expect(globalFields.length).to.be.equal(1) - checkGlobalField(globalFields[0]) - done() - }) + global_fields: [globalFieldMock], + }); + expect(globalFields.length).to.be.equal(1); + checkGlobalField(globalFields[0]); + done(); + }); - it('GlobalField create test', done => { - var mock = new MockAdapter(Axios) - mock.onPost('/global_fields').reply(200, { + it("GlobalField create test", (done) => { + var mock = new MockAdapter(Axios); + mock.onPost("/global_fields").reply(200, { global_field: { - ...globalFieldMock - } - }) + ...globalFieldMock, + }, + }); makeGlobalField() .create() .then((globalField) => { - checkGlobalField(globalField) - done() + checkGlobalField(globalField.global_field); + done(); }) - .catch(done) - }) - - it('GlobalField Query test', done => { - var mock = new MockAdapter(Axios) - mock.onGet('/global_fields').reply(200, { - global_fields: [ - globalFieldMock - ] - }) + .catch(done); + }); + + it("GlobalField Query test", (done) => { + var mock = new MockAdapter(Axios); + mock.onGet("/global_fields").reply(200, { + global_fields: [globalFieldMock], + }); makeGlobalField() .query() .find() .then((globalField) => { - checkGlobalField(globalField.items[0]) - done() + checkGlobalField(globalField.items[0]); + done(); }) - .catch(done) - }) + .catch(done); + }); - it('GlobalField update test', done => { - var mock = new MockAdapter(Axios) - mock.onPut('/global_fields/UID').reply(200, { + it("GlobalField update test", (done) => { + var mock = new MockAdapter(Axios); + mock.onPut("/global_fields/UID").reply(200, { global_field: { - ...globalFieldMock - } - }) + ...globalFieldMock, + }, + }); makeGlobalField({ global_field: { - ...systemUidMock + ...systemUidMock, }, - stackHeaders: stackHeadersMock + stackHeaders: stackHeadersMock, }) .update() .then((globalField) => { - checkGlobalField(globalField) - done() + checkGlobalField(globalField.global_field); + done(); }) - .catch(done) - }) + .catch(done); + }); - it('GlobalField fetch test', done => { - var mock = new MockAdapter(Axios) - mock.onGet('/global_fields/UID').reply(200, { + it("GlobalField fetch test", (done) => { + var mock = new MockAdapter(Axios); + mock.onGet("/global_fields/UID").reply(200, { global_field: { - ...globalFieldMock - } - }) + ...globalFieldMock, + }, + }); makeGlobalField({ global_field: { - ...systemUidMock + ...systemUidMock, }, - stackHeaders: stackHeadersMock + stackHeaders: stackHeadersMock, }) .fetch() .then((globalField) => { - checkGlobalField(globalField) - done() + checkGlobalField(globalField.global_field); + done(); }) - .catch(done) - }) + .catch(done); + }); - it('GlobalField delete test', done => { - var mock = new MockAdapter(Axios) - mock.onDelete('/global_fields/UID').reply(200, { - ...noticeMock - }) + it("GlobalField delete test", (done) => { + var mock = new MockAdapter(Axios); + mock.onDelete("/global_fields/UID").reply(200, { + ...noticeMock, + }); makeGlobalField({ global_field: { - ...systemUidMock + ...systemUidMock, }, - stackHeaders: stackHeadersMock + stackHeaders: stackHeadersMock, }) .delete() .then((response) => { - expect(response.notice).to.be.equal(noticeMock.notice) - done() + expect(response.notice).to.be.equal(noticeMock.notice); + done(); }) - .catch(done) - }) + .catch(done); + }); - it('Global Field import test', done => { - var mock = new MockAdapter(Axios) - mock.onPost('/global_fields/import').reply(200, { + it("Global Field import test", (done) => { + var mock = new MockAdapter(Axios); + mock.onPost("/global_fields/import").reply(200, { global_field: { - ...globalFieldMock - } - }) - const gfUpload = { global_field: path.join(__dirname, '../api/mock/globalfield.json') } - const form = createFormData(gfUpload)() - var boundary = form.getBoundary() + ...globalFieldMock, + }, + }); + const gfUpload = { + global_field: path.join(__dirname, "../api/mock/globalfield.json"), + }; + const form = createFormData(gfUpload)(); + var boundary = form.getBoundary(); - expect(boundary).to.be.equal(form.getBoundary()) - expect(boundary.length).to.be.equal(50) + expect(boundary).to.be.equal(form.getBoundary()); + expect(boundary.length).to.be.equal(50); makeGlobalField() .import() .then((webhook) => { - checkGlobalField(webhook) - done() + checkGlobalField(webhook); + done(); }) - .catch(done) - }) + .catch(done); + }); - it('Global Field import test with overwrite flag', done => { - var mock = new MockAdapter(Axios) - mock.onPost('/global_fields/import').reply(200, { + it("Global Field import test with overwrite flag", (done) => { + var mock = new MockAdapter(Axios); + mock.onPost("/global_fields/import").reply(200, { global_field: { - ...globalFieldMock - } - }) - const gfUpload = { global_field: path.join(__dirname, '../api/mock/globalfield.json') } - const form = createFormData(gfUpload)() - var boundary = form.getBoundary() + ...globalFieldMock, + }, + }); + const gfUpload = { + global_field: path.join(__dirname, "../api/mock/globalfield.json"), + }; + const form = createFormData(gfUpload)(); + var boundary = form.getBoundary(); - expect(boundary).to.be.equal(form.getBoundary()) - expect(boundary.length).to.be.equal(50) + expect(boundary).to.be.equal(form.getBoundary()); + expect(boundary.length).to.be.equal(50); makeGlobalField() .import(gfUpload, { overwrite: true }) .then((webhook) => { - checkGlobalField(webhook) - done() + checkGlobalField(webhook); + done(); + }) + .catch(done); + }); +}); + +describe("Contentstack GlobalField test (API Version 3.2)", () => { + it("GlobalField test without uid", (done) => { + const globalField = makeGlobalField({ + stackHeaders: stackHeadersMock, + api_version: "3.2"}); + expect(globalField.urlPath).to.be.equal("/global_fields"); + expect(globalField.apiVersion).to.be.equal("3.2"); + expect(globalField.stackHeaders).to.deep.equal({api_key: 'api_key', api_version: '3.2'}); + done(); + }); + + it("GlobalField test with uid", (done) => { + const globalField = makeGlobalField({ + global_field: { + ...systemUidMock, + }, + stackHeaders: stackHeadersMock, + api_version: "3.2", + }); + expect(globalField.urlPath).to.be.equal( + `/global_fields/${systemUidMock.uid}` + ); + expect(globalField.apiVersion).to.be.equal("3.2"); + expect(globalField.update).to.not.equal(undefined); + expect(globalField.delete).to.not.equal(undefined); + expect(globalField.fetch).to.not.equal(undefined); + expect(globalField.create).to.be.equal(undefined); + expect(globalField.query).to.be.equal(undefined); + done(); + }); + + it("GlobalField test with Stack Headers", (done) => { + const globalField = makeGlobalField({ + global_field: { + ...systemUidMock, + }, + stackHeaders: stackHeadersMock, + api_version: "3.2", + }); + expect(globalField.urlPath).to.be.equal( + `/global_fields/${systemUidMock.uid}` + ); + expect(globalField.apiVersion).to.be.equal("3.2"); + expect(globalField.stackHeaders).to.not.equal(undefined); + expect(globalField.stackHeaders.api_key).to.be.equal( + stackHeadersMock.api_key + ); + expect(globalField.update).to.not.equal(undefined); + expect(globalField.delete).to.not.equal(undefined); + expect(globalField.fetch).to.not.equal(undefined); + expect(globalField.create).to.be.equal(undefined); + expect(globalField.query).to.be.equal(undefined); + done(); + }); + + it("GlobalField Collection test with blank data", (done) => { + const globalFields = new GlobalFieldCollection(Axios, { + api_version: "3.2", + }); + expect(globalFields.length).to.be.equal(0); + done(); + }); + + it("GlobalField Collection test with data", (done) => { + const globalFields = new GlobalFieldCollection(Axios, { + global_fields: [nestedGlobalFieldMock], + api_version: "3.2", + }); + expect(globalFields.length).to.be.equal(1); + checkGlobalField(globalFields[0]); + done(); + }); + + it("GlobalField create test", (done) => { + var mock = new MockAdapter(Axios); + mock.onPost("/global_fields").reply(200, { + global_field: { + ...nestedGlobalFieldMock, + }, + }); + makeGlobalField({ + stackHeaders: stackHeadersMock, + api_version: "3.2"}) + .create() + .then((globalField) => { + checkGlobalField(globalField.global_field); + done(); + }) + .catch(done); + }); + + it("GlobalField Query test", (done) => { + var mock = new MockAdapter(Axios); + mock.onGet("/global_fields").reply(200, { + global_fields: [nestedGlobalFieldMock], + }); + makeGlobalField({ + stackHeaders: stackHeadersMock, + api_version: "3.2"}) + .query() + .find() + .then((globalField) => { + checkGlobalField(globalField.items[0]); + done(); + }) + .catch(done); + }); + + it("GlobalField update test", (done) => { + var mock = new MockAdapter(Axios); + mock.onPut("/global_fields/UID").reply(200, { + global_field: { + ...nestedGlobalFieldMock, + }, + }); + makeGlobalField({ + global_field: { + ...systemUidMock, + }, + stackHeaders: stackHeadersMock, + api_version: "3.2", + }) + .update() + .then((globalField) => { + checkGlobalField(globalField.global_field); + done(); + }) + .catch(done); + }); + + it("GlobalField fetch test", (done) => { + var mock = new MockAdapter(Axios); + mock.onGet("/global_fields/UID").reply(200, { + global_field: { + ...nestedGlobalFieldMock, + }, + }); + makeGlobalField({ + global_field: { + ...systemUidMock, + }, + stackHeaders: stackHeadersMock, + api_version: "3.2", + }) + .fetch() + .then((globalField) => { + checkGlobalField(globalField.global_field); + done(); + }) + .catch(done); + }); + + it("GlobalField delete test", (done) => { + var mock = new MockAdapter(Axios); + mock.onDelete("/global_fields/UID").reply(200, { + ...noticeMock, + }); + makeGlobalField({ + global_field: { + ...systemUidMock, + }, + stackHeaders: stackHeadersMock, + api_version: "3.2", + }) + .delete() + .then((response) => { + expect(response.notice).to.be.equal(noticeMock.notice); + done(); + }) + .catch(done); + }); + + it("GlobalField import test", (done) => { + var mock = new MockAdapter(Axios); + mock.onPost("/global_fields/import").reply(200, { + global_field: { + ...globalFieldMock, + }, + }); + const gfUpload = { + global_field: path.join(__dirname, "../api/mock/globalfield.json"), + }; + const form = createFormData(gfUpload)(); + var boundary = form.getBoundary(); + + expect(boundary).to.be.equal(form.getBoundary()); + expect(boundary.length).to.be.equal(50); + makeGlobalField({ + stackHeaders: stackHeadersMock, + api_version: "3.2"}) + .import() + .then((webhook) => { + checkGlobalField(webhook); + done(); + }) + .catch(done); + }); + + it("GlobalField import test with overwrite flag", (done) => { + var mock = new MockAdapter(Axios); + mock.onPost("/global_fields/import").reply(200, { + global_field: { + ...nestedGlobalFieldMock, + }, + }); + const gfUpload = { + global_field: path.join(__dirname, "../api/mock/globalfield.json"), + }; + const form = createFormData(gfUpload)(); + var boundary = form.getBoundary(); + + expect(boundary).to.be.equal(form.getBoundary()); + expect(boundary.length).to.be.equal(50); + makeGlobalField({ + stackHeaders: stackHeadersMock, + api_version: "3.2"}) + .import(gfUpload, { overwrite: true }) + .then((webhook) => { + checkGlobalField(webhook); + done(); }) - .catch(done) - }) -}) + .catch(done); + }); +}); function makeGlobalField (data) { return new GlobalField(Axios, data) } -function checkGlobalField (globalField) { - checkSystemFields(globalField) - expect(globalField.title).to.be.equal('title') - expect(globalField.schema.length).to.be.equal(2) +function checkGlobalField(globalField) { + checkSystemFields(globalField); + expect(globalField.title).to.be.equal("title"); + expect(globalField.schema.length).to.be.equal(2); } diff --git a/test/unit/mock/objects.js b/test/unit/mock/objects.js index 4071e8a6..11e0e291 100644 --- a/test/unit/mock/objects.js +++ b/test/unit/mock/objects.js @@ -431,6 +431,93 @@ const globalFieldMock = { ] } +const nestedGlobalFieldMock = { + ...systemFieldsMock, + ...systemFieldsUserMock, + title: 'title', + schema: + [ + { + display_name: 'Title', + uid: 'title', + data_type: 'text', + mandatory: true, + unique: true, + field_metadata: + { + _default: true + } + }, + { + display_name: 'URL', + uid: 'url', + data_type: 'text', + mandatory: false, + field_metadata: + { + _default: true + } + } + ] +} +const nestedGlobalFieldPayload = { + global_field: { + title: 'Nested Global Field 12345', + uid: 'nested_global_field_12345', + description: '', + schema: [ + { + data_type: 'text', + display_name: 'Single Line Textbox', + uid: 'single_line', + field_metadata: { + description: '', + default_value: '', + version: 3, + }, + format: '', + error_messages: { + format: '', + }, + mandatory: false, + multiple: false, + non_localizable: false, + unique: false, + }, + { + data_type: 'global_field', + display_name: 'Global', + reference_to: 'nested_global_field1234', + field_metadata: { + description: '', + }, + uid: 'global_field', + mandatory: false, + multiple: false, + non_localizable: false, + unique: false, + }, + ], + global_field_refs: [ + { + uid: 'nested_global_field_1234', + occurrence_count: 3, + isChild: true, + paths: [ + 'schema.1', + 'schema.3.schema.4', + 'schema.4.blocks.0.schema.2', + ], + }, + { + uid: 'nested_global_field_123', + occurrence_count: 1, + isChild: false, + }, + ], + }, +} + const entryMock = { ...systemFieldsMock, ...systemFieldsUserMock, @@ -1191,5 +1278,7 @@ export { variantBaseEntryMock, roleMockWithTaxonomy, varinatsEntryMock, - variantEntryVersion + variantEntryVersion, + nestedGlobalFieldMock, + nestedGlobalFieldPayload } diff --git a/types/stack/globalField/index.d.ts b/types/stack/globalField/index.d.ts index 70a4ab8b..c3c0bb36 100644 --- a/types/stack/globalField/index.d.ts +++ b/types/stack/globalField/index.d.ts @@ -8,6 +8,7 @@ export interface GlobalField extends SystemFields, SystemFunction { export interface GlobalFields extends Queryable { import(data: {global_field: string}, params?: any): Promise + (globalFieldUidOrOptions: string | { api_version?: string }, options?: { api_version?: string }): GlobalField; } export interface GlobalFieldData extends AnyProperty { diff --git a/types/stack/index.d.ts b/types/stack/index.d.ts index 764c3945..2ee9d273 100644 --- a/types/stack/index.d.ts +++ b/types/stack/index.d.ts @@ -62,7 +62,9 @@ export interface Stack extends SystemFields { contentType(uid: string): ContentType globalField(): GlobalFields + globalField({}): GlobalFields globalField(uid: string): GlobalField + globalField(uid: string, option: object): GlobalField asset(): Assets asset(uid: string): Asset