From c420ad755c1b8d844c9f221ba8742f4782d8eab5 Mon Sep 17 00:00:00 2001 From: "harshitha.d" Date: Fri, 7 Feb 2025 16:39:26 +0530 Subject: [PATCH 1/6] add api_version support for variants entry --- lib/stack/contentType/entry/index.js | 4 ++++ lib/stack/contentType/index.js | 6 +++++- types/stack/bulkOperation/index.d.ts | 4 ++-- types/stack/contentType/index.d.ts | 4 +--- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/lib/stack/contentType/entry/index.js b/lib/stack/contentType/entry/index.js index f435d264..8049afb2 100644 --- a/lib/stack/contentType/entry/index.js +++ b/lib/stack/contentType/entry/index.js @@ -25,6 +25,10 @@ export function Entry (http, data) { this.urlPath = `/content_types/${this.content_type_uid}/entries` if (data && data.entry) { + this.apiVersion = data.api_version || undefined; + if (this.apiVersion) { + this.stackHeaders.api_version = this.apiVersion; + } Object.assign(this, cloneDeep(data.entry)) this.urlPath = `/content_types/${this.content_type_uid}/entries/${this.uid}` diff --git a/lib/stack/contentType/index.js b/lib/stack/contentType/index.js index ea06967d..db101705 100644 --- a/lib/stack/contentType/index.js +++ b/lib/stack/contentType/index.js @@ -147,12 +147,16 @@ export function ContentType (http, data = {}) { * client.stack({ api_key: 'api_key'}).contentType('content_type_uid').entry('entry_uid').fetch() * .then((contentType) => console.log(contentType)) */ - this.entry = (uid = null) => { + this.entry = (uid = null, options = {}) => { const data = { stackHeaders: this.stackHeaders } data.content_type_uid = this.uid if (uid) { data.entry = { uid: uid } } + options = options || {}; // Ensure `options` is always an object + if (options && typeof options === 'object' && options.api_version) { + data.api_version = options.api_version; + } return new Entry(http, data) } diff --git a/types/stack/bulkOperation/index.d.ts b/types/stack/bulkOperation/index.d.ts index 4a997e15..36d46d76 100644 --- a/types/stack/bulkOperation/index.d.ts +++ b/types/stack/bulkOperation/index.d.ts @@ -6,8 +6,8 @@ export interface BulkOperation extends SystemFields { publish(config: BulkOperationConfig): Promise unpublish(config: BulkOperationConfig): Promise delete(config: BulkDeleteConfig): Promise - addItems(config: AddItemsConfig): Promise - updateItems(config: AddItemsConfig): Promise + addItems(config: BulkAddItemsConfig): Promise + updateItems(config: BulkAddItemsConfig): Promise jobStatus(config: BulkJobStatus): Promise } export interface BulkOperationConfig { diff --git a/types/stack/contentType/index.d.ts b/types/stack/contentType/index.d.ts index 2b34aaa4..4be9e85d 100644 --- a/types/stack/contentType/index.d.ts +++ b/types/stack/contentType/index.d.ts @@ -4,10 +4,8 @@ import { Entries, Entry } from "./entry"; export interface ContentType extends SystemFields, SystemFunction { entry(): Entries - entry(uid: string): Entry + entry(uid: string, options?: { api_version : number | string }): Entry } - - export interface ContentTypes extends Queryable { import(data: {content_type: string}, params?: any): Promise From 463e284002fc4a8b02a232cbc1214faf15031a54 Mon Sep 17 00:00:00 2001 From: "harshitha.d" Date: Fri, 7 Feb 2025 16:39:35 +0530 Subject: [PATCH 2/6] add and update test cases for api_version support --- test/sanity-check/api/entryVariants-test.js | 88 +++++++++++---------- test/sanity-check/mock/variantEntry.js | 42 +++++++++- test/sanity-check/sanity.js | 8 +- 3 files changed, 90 insertions(+), 48 deletions(-) diff --git a/test/sanity-check/api/entryVariants-test.js b/test/sanity-check/api/entryVariants-test.js index 73469a97..7cbff2cc 100644 --- a/test/sanity-check/api/entryVariants-test.js +++ b/test/sanity-check/api/entryVariants-test.js @@ -3,27 +3,29 @@ import { describe, it, setup } from "mocha"; import { jsonReader } from "../utility/fileOperations/readwrite"; import { createVariantGroup } from "../mock/variantGroup.js"; import { variant } from "../mock/variants.js"; -import { variantEntryFirst } from "../mock/variantEntry.js"; +import { + variantEntryFirst, + publishVariantEntryFirst, + unpublishVariantEntryFirst, +} from "../mock/variantEntry.js"; import { contentstackClient } from "../utility/ContentstackClient.js"; var client = {}; var stack = {}; var variantUid = ""; -var variantName = ""; var variantGroupUid = ""; var contentTypeUid = ""; var entryUid = ""; -const entry = jsonReader("entry.json"); -entryUid = entry[2].uid; -contentTypeUid = entry[2].content_type_uid; - describe("Entry Variants api Test", () => { setup(() => { const user = jsonReader("loggedinuser.json"); stack = jsonReader("stack.json"); client = contentstackClient(user.authtoken); + const entry = jsonReader("entry.json"); + entryUid = entry[2].uid; + contentTypeUid = entry[2].content_type_uid; }); it("should create a Variant Group", (done) => { @@ -76,24 +78,8 @@ describe("Entry Variants api Test", () => { }); it("should publish entry variant", (done) => { - var publishVariantEntryFirst = { - entry: { - environments: ["development"], - locales: ["en-us", "en-at"], - variants: [ - { - uid: variantUid, - version: 1, - }, - ], - variant_rules: { - publish_latest_base: false, - publish_latest_base_conditionally: true, - }, - }, - locale: "en-us", - version: 1, - }; + publishVariantEntryFirst.entry.variants[0].uid = variantUid; + makeEntry() .entry(entryUid) .publish({ @@ -111,24 +97,7 @@ describe("Entry Variants api Test", () => { }); it("should unpublish entry variant", (done) => { - var publishVariantEntryFirst = { - entry: { - environments: ["development"], - locales: ["en-at"], - variants: [ - { - uid: variantUid, - version: 1, - }, - ], - variant_rules: { - publish_latest_base: false, - publish_latest_base_conditionally: true, - }, - }, - locale: "en-us", - version: 1, - }; + unpublishVariantEntryFirst.entry.variants[0].uid = variantUid; makeEntry() .entry(entryUid) .unpublish({ @@ -145,6 +114,41 @@ describe("Entry Variants api Test", () => { .catch(done); }); + it("should publish entry variant using api_version", (done) => { + publishVariantEntryFirst.entry.variants[0].uid = variantUid; + makeEntry() + .entry(entryUid, { api_version: "3.2" }) + .publish({ + publishDetails: publishVariantEntryFirst.entry, + locale: publishVariantEntryFirst.locale, + }) + .then((data) => { + expect(data.notice).to.be.equal( + "The requested action has been performed." + ); + expect(data.job_id).to.be.not.equal(null); + done(); + }) + .catch(done); + }); + + it("should unpublish entry variant using api_version", (done) => { + unpublishVariantEntryFirst.entry.variants[0].uid = variantUid; + makeEntry() + .entry(entryUid, { api_version: "3.2" }) + .unpublish({ + publishDetails: publishVariantEntryFirst.entry, + locale: publishVariantEntryFirst.locale, + }) + .then((data) => { + expect(data.notice).to.be.equal( + "The requested action has been performed." + ); + expect(data.job_id).to.be.not.equal(null); + done(); + }) + .catch(done); + }); it("should get all entry variants", (done) => { makeEntryVariants() .query({}) diff --git a/test/sanity-check/mock/variantEntry.js b/test/sanity-check/mock/variantEntry.js index 8e88bc8c..ac8d9ef6 100644 --- a/test/sanity-check/mock/variantEntry.js +++ b/test/sanity-check/mock/variantEntry.js @@ -6,6 +6,44 @@ const variantEntryFirst = { _change_set: ["title", "url"], }, }, -} +}; -export { variantEntryFirst }; +var publishVariantEntryFirst = { + entry: { + environments: ["development"], + locales: ["en-us", "en-at"], + variants: [ + { + uid: "", + version: 1, + }, + ], + variant_rules: { + publish_latest_base: false, + publish_latest_base_conditionally: true, + }, + }, + locale: "en-us", + version: 1, +}; + +const unpublishVariantEntryFirst = { + entry: { + environments: ["development"], + locales: ["en-at"], + variants: [ + { + uid: "", + version: 1, + }, + ], + variant_rules: { + publish_latest_base: false, + publish_latest_base_conditionally: true, + }, + }, + locale: "en-us", + version: 1, +}; + +export { variantEntryFirst, publishVariantEntryFirst, unpublishVariantEntryFirst }; diff --git a/test/sanity-check/sanity.js b/test/sanity-check/sanity.js index 34793272..447de175 100644 --- a/test/sanity-check/sanity.js +++ b/test/sanity-check/sanity.js @@ -15,16 +15,16 @@ require('./api/contentType-test') require('./api/asset-test') require('./api/extension-test') require('./api/entry-test') +require('./api/variantGroup-test') +require('./api/variants-test') +require('./api/ungroupedVariants-test') +require('./api/entryVariants-test') require('./api/bulkOperation-test') require('./api/webhook-test') require('./api/workflow-test') require('./api/globalfield-test') require('./api/release-test') require('./api/label-test') -require('./api/variantGroup-test') -require('./api/variants-test') -require('./api/ungroupedVariants-test') -require('./api/entryVariants-test') require('./api/contentType-delete-test') require('./api/delete-test') require('./api/team-test') From 5d7a7e58f464ec50c7e89392af28e760624a3837 Mon Sep 17 00:00:00 2001 From: "harshitha.d" Date: Fri, 7 Feb 2025 17:38:41 +0530 Subject: [PATCH 3/6] added unit test cases --- test/sanity-check/api/entryVariants-test.js | 4 +- test/unit/variants-entry-test.js | 107 ++++++++++++++++++-- 2 files changed, 101 insertions(+), 10 deletions(-) diff --git a/test/sanity-check/api/entryVariants-test.js b/test/sanity-check/api/entryVariants-test.js index 7cbff2cc..aa2a5267 100644 --- a/test/sanity-check/api/entryVariants-test.js +++ b/test/sanity-check/api/entryVariants-test.js @@ -137,8 +137,8 @@ describe("Entry Variants api Test", () => { makeEntry() .entry(entryUid, { api_version: "3.2" }) .unpublish({ - publishDetails: publishVariantEntryFirst.entry, - locale: publishVariantEntryFirst.locale, + publishDetails: unpublishVariantEntryFirst.entry, + locale: unpublishVariantEntryFirst.locale, }) .then((data) => { expect(data.notice).to.be.equal( diff --git a/test/unit/variants-entry-test.js b/test/unit/variants-entry-test.js index df8fe547..70bfe806 100644 --- a/test/unit/variants-entry-test.js +++ b/test/unit/variants-entry-test.js @@ -6,11 +6,17 @@ import { Variants, VariantsCollection, } from "../../lib/stack/contentType/entry/variants/"; -import { checkSystemFields, varinatsEntryMock, variantEntryVersion } from "./mock/objects"; +import { Entry } from "../../lib/stack/contentType/entry/"; +import { + checkSystemFields, + varinatsEntryMock, + variantEntryVersion, +} from "./mock/objects"; +import { systemUidMock, noticeMock } from "./mock/objects"; describe("Contentstack Variants entry test", () => { it("Variants entry test without uid", (done) => { - const entry = makeEntry({ + const entry = makeEntryVariants({ content_type_uid: "content_type_uid", entry_uid: "UID", }); @@ -26,7 +32,7 @@ describe("Contentstack Variants entry test", () => { }); it("Variants entry test with uid", (done) => { - const entry = makeEntry({ + const entry = makeEntryVariants({ content_type_uid: "content_type_uid", entry_uid: "UID", }); @@ -58,7 +64,10 @@ describe("Contentstack Variants entry test", () => { .reply(200, { entries: [varinatsEntryMock], }); - makeEntry({ content_type_uid: "content_type_uid", entry_uid: "UID" }) + makeEntryVariants({ + content_type_uid: "content_type_uid", + entry_uid: "UID", + }) .query() .find() .then((entry) => { @@ -79,7 +88,7 @@ describe("Contentstack Variants entry test", () => { ...varinatsEntryMock, }, }); - makeEntry({ + makeEntryVariants({ content_type_uid: "content_type_uid", entry_uid: "UID", variants_uid: "variants_uid", @@ -98,9 +107,9 @@ describe("Contentstack Variants entry test", () => { "/content_types/content_type_uid/entries/UID/variants/variants_uid/versions" ) .reply(200, { - ...variantEntryVersion, + ...variantEntryVersion, }); - makeEntry({ + makeEntryVariants({ content_type_uid: "content_type_uid", entry_uid: "UID", variants_uid: "variants_uid", @@ -112,12 +121,94 @@ describe("Contentstack Variants entry test", () => { }) .catch(done); }); + + it("Entry publish test", (done) => { + var mock = new MockAdapter(Axios); + const publishVariantEntryFirst = { + entry: { + environments: ["development"], + locales: ["en-us"], + variants: [ + { + uid: "variants_uid", + version: 1, + }, + ], + variant_rules: { + publish_latest_base: false, + publish_latest_base_conditionally: true, + }, + }, + locale: "en-us", + version: 1, + }; + mock + .onPost("/content_types/content_type_uid/entries/UID/publish") + .reply(200, { + ...noticeMock, + job_id: "job_id", + }); + + makeEntry({ entry: { ...systemUidMock }, options: { api_version: "3.2" } }) + .publish({ + publishDetails: publishVariantEntryFirst.entry, + locale: publishVariantEntryFirst.locale, + }) + .then((entry) => { + expect(entry.notice).to.be.equal(noticeMock.notice); + expect(entry.job_id).to.be.not.equal(undefined); + done(); + }) + .catch(done); + }); + + it("Entry unpublish test", (done) => { + var unpublishVariantEntryFirst = { + entry: { + environments: ["development"], + locales: ["en-at"], + variants: [ + { + uid: "", + version: 1, + }, + ], + variant_rules: { + publish_latest_base: false, + publish_latest_base_conditionally: true, + }, + }, + locale: "en-us", + version: 1, + }; + var mock = new MockAdapter(Axios); + mock + .onPost("/content_types/content_type_uid/entries/UID/unpublish") + .reply(200, { + ...noticeMock, + job_id: "job_id", + }); + makeEntry({ entry: { ...systemUidMock }, options: { api_version: "3.2" } }) + .unpublish({ + publishDetails: unpublishVariantEntryFirst.entry, + locale: unpublishVariantEntryFirst.locale, + }) + .then((entry) => { + expect(entry.notice).to.be.equal(noticeMock.notice); + done(); + }) + .catch(done); + }); }); -function makeEntry(data) { +function makeEntryVariants(data) { return new Variants(Axios, { ...data }); } +function makeEntry(data) { + return new Entry(Axios, { content_type_uid: "content_type_uid", ...data }); +} + function checkEntry(entry) { checkSystemFields(entry); } From 149426797ce5c3208b561352496cb8039b2c0ee4 Mon Sep 17 00:00:00 2001 From: "harshitha.d" Date: Fri, 7 Feb 2025 20:04:56 +0530 Subject: [PATCH 4/6] improved test coverage --- test/unit/asset-test.js | 61 ++++++++++++++++++++++ test/unit/contentType-test.js | 28 ++++++++++ test/unit/entry-test.js | 31 +++++++++++ test/unit/globalField-test.js | 33 ++++++++++++ test/unit/stack-test.js | 89 +++++++++++++++++++++++++++++++- test/unit/variantGroup-test.js | 12 +++++ test/unit/variants-entry-test.js | 40 ++++++++++++++ 7 files changed, 293 insertions(+), 1 deletion(-) diff --git a/test/unit/asset-test.js b/test/unit/asset-test.js index 30176aa2..d0c3dfc7 100644 --- a/test/unit/asset-test.js +++ b/test/unit/asset-test.js @@ -315,6 +315,67 @@ describe('Contentstack Asset test', () => { }) .catch(done) }) + + + it('Asset download test', done => { + var mock = new MockAdapter(Axios) + const downloadResponse = new Blob(['file content'], { type: 'text/plain' }) + + mock.onGet('/assets/download_url').reply(200, downloadResponse) + + makeAsset({ + asset: { + ...systemUidMock + }, + stackHeaders: stackHeadersMock + }) + .download({ url: '/assets/download_url', responseType: 'blob' }) + .then((response) => { + expect(response.data).to.be.instanceOf(Blob) + expect(response.data.type).to.be.equal('text/plain') + done() + }) + .catch(done) + }) + + it('Asset download test without url', done => { + var mock = new MockAdapter(Axios) + const downloadResponse = new Blob(['file content'], { type: 'text/plain' }) + + mock.onGet(`/assets/${systemUidMock.uid}`).reply(200, downloadResponse) + + makeAsset({ + asset: { + ...systemUidMock + }, + stackHeaders: stackHeadersMock + }) + .download({ responseType: 'blob' }) + .then((response) => { + console.log("🚀 ~ .then ~ response:", response) + expect(response.data).to.be.instanceOf(Blob) + expect(response.data.type).to.be.equal('text/plain') + done() + }) + .catch((err) => { + expect(err.message).to.be.equal('Asset URL can not be empty') + done() + }) + }) + + it('Asset download test with missing url', done => { + makeAsset({ + asset: { + ...systemUidMock + }, + stackHeaders: stackHeadersMock + }) + .download({ responseType: 'blob' }) + .catch((err) => { + expect(err.message).to.be.equal('Asset URL can not be empty') + done() + }) + }) }) function makeAsset (data) { diff --git a/test/unit/contentType-test.js b/test/unit/contentType-test.js index 6f7f66d4..4ce44dd2 100644 --- a/test/unit/contentType-test.js +++ b/test/unit/contentType-test.js @@ -280,6 +280,34 @@ describe('Contentstack ContentType test', () => { done() }) }) + it('should fetch references of a ContentType', done => { + var mock = new MockAdapter(Axios) + const referencesResponse = { + references: [ + { + uid: 'entry_uid', + title: 'Entry Title', + content_type: 'UID' + } + ] + } + mock.onGet(`/content_types/UID/references`).reply(200, referencesResponse) + makeContentType({ + content_type: { + ...systemUidMock + }, + stackHeaders: stackHeadersMock + }) + .references() + .then((response) => { + expect(response.references).to.be.an('array') + expect(response.references[0].uid).to.be.equal('entry_uid') + expect(response.references[0].title).to.be.equal('Entry Title') + expect(response.references[0].content_type).to.be.equal('UID') + done() + }) + .catch(done) + }) }) function makeContentType (data) { diff --git a/test/unit/entry-test.js b/test/unit/entry-test.js index 0ca82f12..a0d113d2 100644 --- a/test/unit/entry-test.js +++ b/test/unit/entry-test.js @@ -640,6 +640,37 @@ describe('Contentstack Entry test', () => { }) .catch(done) }) + + it('should fetch variants of an Entry', done => { + var mock = new MockAdapter(Axios) + const variantsResponse = { + variants: [ + { + uid: 'variant_uid', + title: 'Variant Title', + content_type: 'content_type_uid' + } + ] + } + + mock.onGet(`/content_types/content_type_uid/entries/UID/variants/variantUid`).reply(200, variantsResponse) + + makeEntry({ + entry: { + ...systemUidMock + } + }) + .variants('variantUid') + .fetch() + .then((response) => { + expect(response.variants).to.be.an('array') + expect(response.variants[0].uid).to.be.equal('variant_uid') + expect(response.variants[0].title).to.be.equal('Variant Title') + expect(response.variants[0].content_type).to.be.equal('content_type_uid') + done() + }) + .catch(done) + }) }) function makeEntry (data) { diff --git a/test/unit/globalField-test.js b/test/unit/globalField-test.js index 5eea7910..0de87493 100644 --- a/test/unit/globalField-test.js +++ b/test/unit/globalField-test.js @@ -438,6 +438,39 @@ describe("Contentstack GlobalField test (API Version 3.2)", () => { }) .catch(done); }); + + it("should update nested global field", (done) => { + var mock = new MockAdapter(Axios); + const updatedData = { + global_field: { + title: "Updated Nested Global Field Title", + schema: nestedGlobalFieldPayload, + }, + }; + + mock + .onPut(`/global_fields/${systemUidMock.uid}`) + .reply(200, { + global_field: { + ...nestedGlobalFieldMock, + ...updatedData.global_field, + }, + }); + + makeGlobalField({ + global_field: { + ...systemUidMock, + }, + stackHeaders: stackHeadersMock, + }) + .updateNestedGlobalField(updatedData) + .then((response) => { + expect(response.global_field.title).to.be.equal("Updated Nested Global Field Title"); + expect(response.global_field.schema).to.deep.equal(nestedGlobalFieldPayload); + done(); + }) + .catch(done); + }); }); function makeGlobalField (data) { diff --git a/test/unit/stack-test.js b/test/unit/stack-test.js index dda4a326..64743855 100644 --- a/test/unit/stack-test.js +++ b/test/unit/stack-test.js @@ -2,7 +2,7 @@ import { describe, it } from 'mocha' import { Stack, StackCollection } from '../../lib/stack/index' import Axios from 'axios' import { expect } from 'chai' -import { stackMock, noticeMock, systemUidMock } from './mock/objects' +import { stackMock, noticeMock, systemUidMock, stackHeadersMock } from './mock/objects' import MockAdapter from 'axios-mock-adapter' describe('Contentstack Stack test', () => { @@ -998,6 +998,93 @@ describe('Contentstack Stack test', () => { }) .catch(done) }) + + it('Global fields initialization without uid', done => { + const global_field = makeStack({ + stack: { + api_key: 'stack_api_key' + } + }) + .globalField() + expect(global_field.uid).to.be.equal(undefined) + expect(global_field.stackHeaders).to.not.equal(undefined) + expect(global_field.stackHeaders.api_key).to.be.equal('stack_api_key') + done() + }) + + it('Management token initialization without uid', done => { + const management_token = makeStack({ + stack: { + api_key: 'stack_api_key' + } + }) + .managementToken() + expect(management_token.uid).to.be.equal(undefined) + expect(management_token.stackHeaders).to.not.equal(undefined) + expect(management_token.stackHeaders.api_key).to.be.equal('stack_api_key') + done() + }) + + it('Global fields initialization uid', done => { + const global_field = makeStack({ + stack: { + api_key: 'stack_api_key' + } + }) + .globalField(systemUidMock.uid) + expect(global_field.uid).to.be.equal(systemUidMock.uid) + expect(global_field.stackHeaders.api_key).to.be.equal('stack_api_key') + done() + }) + + it('Management token initialization uid', done => { + const management_token = makeStack({ + stack: { + api_key: 'stack_api_key' + } + }) + .managementToken(systemUidMock.uid) + expect(management_token.uid).to.be.equal(systemUidMock.uid) + expect(management_token.stackHeaders.api_key).to.be.equal('stack_api_key') + done() + }) + + it('should update users roles', done => { + var mock = new MockAdapter(Axios) + const usersRolesData = { + user_uid: ['role_uid_1', 'role_uid_2'] + } + + mock.onPost('/stacks/users/roles').reply(200, { + notice: 'Roles updated successfully' + }) + + makeStack({ + stack: { + api_key: 'stack_api_key' + } + }) + .updateUsersRoles(usersRolesData) + .then((response) => { + expect(response.notice).to.be.equal('Roles updated successfully') + done() + }) + .catch(done) + }) + + it('should fetch variants of a stack', done => { + var mock = new MockAdapter(Axios) + const variantsResponse = makeStack({ + stack: { + api_key: 'stack_api_key' + } + }) + .variants() + expect(variantsResponse.create).to.be.not.equal(undefined) + expect(variantsResponse.query).to.be.not.equal(undefined) + expect(variantsResponse.fetchByUIDs).to.be.not.equal(undefined) + done() + }) }) function makeStack (data) { diff --git a/test/unit/variantGroup-test.js b/test/unit/variantGroup-test.js index ecdb5205..c50f6817 100644 --- a/test/unit/variantGroup-test.js +++ b/test/unit/variantGroup-test.js @@ -152,6 +152,18 @@ describe('Contentstack VariantGroup test', () => { }) .catch(done) }) + + it('should fetch variants of a VariantGroup', done => { + const variants = makeVariantGroup({ + variant_group: { + ...systemUidMock + }, + stackHeaders: stackHeadersMock + }) + .variants() + expect(variants.variant_group_uid).to.be.equal(systemUidMock.uid) + done() + }) }) function makeVariantGroup (data = {}) { diff --git a/test/unit/variants-entry-test.js b/test/unit/variants-entry-test.js index 70bfe806..a9780361 100644 --- a/test/unit/variants-entry-test.js +++ b/test/unit/variants-entry-test.js @@ -199,6 +199,46 @@ describe("Contentstack Variants entry test", () => { }) .catch(done); }); + + it("Variants update test", (done) => { + var mock = new MockAdapter(Axios); + const updatedData = { + entry: { + title: "Updated Variant Title", + url: "/updated-variant-url", + }, + }; + const variantEntryMock = { + uid: 'variant_uid', + title: 'Variant Title', + content_type: 'content_type_uid', + locale: 'en-us', + _version: 1, + _in_progress: false + } + + mock + .onPut(`/content_types/content_type_uid/entries/entry_uid/variants/variant_uid`) + .reply(200, { + entry: { + ...variantEntryMock, + ...updatedData.entry, + }, + }); + + makeEntryVariants({ + content_type_uid: "content_type_uid", + entry_uid: "entry_uid", + variants_uid: "variant_uid", + }) + .update(updatedData) + .then((response) => { + expect(response.entry.title).to.be.equal("Updated Variant Title"); + expect(response.entry.url).to.be.equal("/updated-variant-url"); + done(); + }) + .catch(done); + }); }); function makeEntryVariants(data) { From 16895e5e0315ecc762e42485e7dd3737f779c16e Mon Sep 17 00:00:00 2001 From: "harshitha.d" Date: Fri, 7 Feb 2025 20:07:08 +0530 Subject: [PATCH 5/6] update changeLog --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2cda9b41..1492d53e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,8 @@ # Changelog -## [v1.19.2](https://github.com/contentstack/contentstack-management-javascript/tree/v1.19.2) (2025-01-27) +## [v1.19.2](https://github.com/contentstack/contentstack-management-javascript/tree/v1.19.2) (2025-02-11) - Enhancement - Added support for nested global fields. + - Added api_version support for variants ## [v1.19.1](https://github.com/contentstack/contentstack-management-javascript/tree/v1.19.1) (2025-01-27) - Feature From ee400bab798b7f1ebea94c5a55817868fcc1fed8 Mon Sep 17 00:00:00 2001 From: "harshitha.d" Date: Fri, 7 Feb 2025 20:20:50 +0530 Subject: [PATCH 6/6] update if api_version is already present --- lib/stack/contentType/entry/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/stack/contentType/entry/index.js b/lib/stack/contentType/entry/index.js index 8049afb2..6bcef110 100644 --- a/lib/stack/contentType/entry/index.js +++ b/lib/stack/contentType/entry/index.js @@ -26,7 +26,7 @@ export function Entry (http, data) { if (data && data.entry) { this.apiVersion = data.api_version || undefined; - if (this.apiVersion) { + if (this.apiVersion && !this.stackHeaders.api_version) { this.stackHeaders.api_version = this.apiVersion; } Object.assign(this, cloneDeep(data.entry))