Skip to content

Commit fd9e549

Browse files
Merge pull request #267 from contentstack/development
Development to staging (11-02-2025) Release
2 parents 1e5bf45 + 787ea4d commit fd9e549

File tree

15 files changed

+687
-19
lines changed

15 files changed

+687
-19
lines changed

CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
# Changelog
2-
## [v1.19.2](https://github.com/contentstack/contentstack-management-javascript/tree/v1.19.2) (2025-01-27)
2+
## [v1.19.2](https://github.com/contentstack/contentstack-management-javascript/tree/v1.19.2) (2025-02-11)
33
- Enhancement
44
- Added support for nested global fields.
5+
- Added api_version support for variants
56

67
## [v1.19.1](https://github.com/contentstack/contentstack-management-javascript/tree/v1.19.1) (2025-01-27)
78
- Feature

lib/stack/contentType/entry/index.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ export function Entry (http, data) {
2525
this.urlPath = `/content_types/${this.content_type_uid}/entries`
2626

2727
if (data && data.entry) {
28+
this.apiVersion = data.api_version || undefined;
29+
if (this.apiVersion && !this.stackHeaders.api_version) {
30+
this.stackHeaders.api_version = this.apiVersion;
31+
}
2832
Object.assign(this, cloneDeep(data.entry))
2933
this.urlPath = `/content_types/${this.content_type_uid}/entries/${this.uid}`
3034

lib/stack/contentType/index.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,12 +147,16 @@ export function ContentType (http, data = {}) {
147147
* client.stack({ api_key: 'api_key'}).contentType('content_type_uid').entry('entry_uid').fetch()
148148
* .then((contentType) => console.log(contentType))
149149
*/
150-
this.entry = (uid = null) => {
150+
this.entry = (uid = null, options = {}) => {
151151
const data = { stackHeaders: this.stackHeaders }
152152
data.content_type_uid = this.uid
153153
if (uid) {
154154
data.entry = { uid: uid }
155155
}
156+
options = options || {}; // Ensure `options` is always an object
157+
if (options && typeof options === 'object' && options.api_version) {
158+
data.api_version = options.api_version;
159+
}
156160
return new Entry(http, data)
157161
}
158162

Lines changed: 228 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,228 @@
1+
import { expect } from "chai";
2+
import { describe, it, setup } from "mocha";
3+
import { jsonReader } from "../utility/fileOperations/readwrite";
4+
import { createVariantGroup } from "../mock/variantGroup.js";
5+
import { variant } from "../mock/variants.js";
6+
import {
7+
variantEntryFirst,
8+
publishVariantEntryFirst,
9+
unpublishVariantEntryFirst,
10+
} from "../mock/variantEntry.js";
11+
import { contentstackClient } from "../utility/ContentstackClient.js";
12+
13+
var client = {};
14+
15+
var stack = {};
16+
var variantUid = "";
17+
var variantGroupUid = "";
18+
var contentTypeUid = "";
19+
var entryUid = "";
20+
21+
describe("Entry Variants api Test", () => {
22+
setup(() => {
23+
const user = jsonReader("loggedinuser.json");
24+
stack = jsonReader("stack.json");
25+
client = contentstackClient(user.authtoken);
26+
const entry = jsonReader("entry.json");
27+
entryUid = entry[2].uid;
28+
contentTypeUid = entry[2].content_type_uid;
29+
});
30+
31+
it("should create a Variant Group", (done) => {
32+
makeVariantGroup()
33+
.create(createVariantGroup)
34+
.then((variantGroup) => {
35+
variantGroupUid = variantGroup.uid;
36+
expect(variantGroup.name).to.be.equal(createVariantGroup.name);
37+
expect(variantGroup.uid).to.be.equal(createVariantGroup.uid);
38+
done();
39+
})
40+
.catch(done);
41+
});
42+
43+
it("should create a Variants", (done) => {
44+
makeVariants()
45+
.create(variant)
46+
.then((variants) => {
47+
variantUid = variants.uid;
48+
expect(variants.name).to.be.equal(variant.name);
49+
expect(variants.uid).to.be.not.equal(null);
50+
done();
51+
})
52+
.catch(done);
53+
});
54+
55+
it("should update/create variant of an entry", (done) => {
56+
makeEntryVariants(variantUid)
57+
.update(variantEntryFirst)
58+
.then((variantEntry) => {
59+
expect(variantEntry.entry.title).to.be.equal("First page variant");
60+
expect(variantEntry.entry._variant._uid).to.be.not.equal(null);
61+
expect(variantEntry.notice).to.be.equal(
62+
"Entry variant created successfully."
63+
);
64+
done();
65+
})
66+
.catch(done);
67+
});
68+
69+
it("should get an entry variant", (done) => {
70+
makeEntryVariants(variantUid)
71+
.fetch(variantUid)
72+
.then((variantEntry) => {
73+
expect(variantEntry.entry.title).to.be.equal("First page variant");
74+
expect(variantEntry.entry._variant._uid).to.be.not.equal(null);
75+
done();
76+
})
77+
.catch(done);
78+
});
79+
80+
it("should publish entry variant", (done) => {
81+
publishVariantEntryFirst.entry.variants[0].uid = variantUid;
82+
83+
makeEntry()
84+
.entry(entryUid)
85+
.publish({
86+
publishDetails: publishVariantEntryFirst.entry,
87+
locale: publishVariantEntryFirst.locale,
88+
})
89+
.then((data) => {
90+
expect(data.notice).to.be.equal(
91+
"The requested action has been performed."
92+
);
93+
expect(data.job_id).to.be.not.equal(null);
94+
done();
95+
})
96+
.catch(done);
97+
});
98+
99+
it("should unpublish entry variant", (done) => {
100+
unpublishVariantEntryFirst.entry.variants[0].uid = variantUid;
101+
makeEntry()
102+
.entry(entryUid)
103+
.unpublish({
104+
publishDetails: publishVariantEntryFirst.entry,
105+
locale: publishVariantEntryFirst.locale,
106+
})
107+
.then((data) => {
108+
expect(data.notice).to.be.equal(
109+
"The requested action has been performed."
110+
);
111+
expect(data.job_id).to.be.not.equal(null);
112+
done();
113+
})
114+
.catch(done);
115+
});
116+
117+
it("should publish entry variant using api_version", (done) => {
118+
publishVariantEntryFirst.entry.variants[0].uid = variantUid;
119+
makeEntry()
120+
.entry(entryUid, { api_version: "3.2" })
121+
.publish({
122+
publishDetails: publishVariantEntryFirst.entry,
123+
locale: publishVariantEntryFirst.locale,
124+
})
125+
.then((data) => {
126+
expect(data.notice).to.be.equal(
127+
"The requested action has been performed."
128+
);
129+
expect(data.job_id).to.be.not.equal(null);
130+
done();
131+
})
132+
.catch(done);
133+
});
134+
135+
it("should unpublish entry variant using api_version", (done) => {
136+
unpublishVariantEntryFirst.entry.variants[0].uid = variantUid;
137+
makeEntry()
138+
.entry(entryUid, { api_version: "3.2" })
139+
.unpublish({
140+
publishDetails: unpublishVariantEntryFirst.entry,
141+
locale: unpublishVariantEntryFirst.locale,
142+
})
143+
.then((data) => {
144+
expect(data.notice).to.be.equal(
145+
"The requested action has been performed."
146+
);
147+
expect(data.job_id).to.be.not.equal(null);
148+
done();
149+
})
150+
.catch(done);
151+
});
152+
it("should get all entry variants", (done) => {
153+
makeEntryVariants()
154+
.query({})
155+
.find()
156+
.then((variantEntries) => {
157+
expect(variantEntries.items).to.be.an("array");
158+
expect(variantEntries.items[0].variants.title).to.be.equal(
159+
"First page variant"
160+
);
161+
expect(variantEntries.items[0].variants._variant._uid).to.be.not.equal(
162+
null
163+
);
164+
done();
165+
})
166+
.catch(done);
167+
});
168+
169+
it("should delete entry variant from uid", (done) => {
170+
makeEntryVariants(variantUid)
171+
.delete(variantUid)
172+
.then((variantEntry) => {
173+
expect(variantEntry.notice).to.be.equal(
174+
"Entry variant deleted successfully."
175+
);
176+
done();
177+
})
178+
.catch(done);
179+
});
180+
181+
it("Delete a Variant from uid", (done) => {
182+
makeVariantGroup(variantGroupUid)
183+
.variants(variantUid)
184+
.delete()
185+
.then((data) => {
186+
expect(data.message).to.be.equal("Variant deleted successfully");
187+
done();
188+
})
189+
.catch(done);
190+
});
191+
192+
it("Delete a Variant Group from uid", (done) => {
193+
makeVariantGroup(variantGroupUid)
194+
.delete()
195+
.then((data) => {
196+
expect(data.message).to.be.equal(
197+
"Variant Group and Variants deleted successfully"
198+
);
199+
done();
200+
})
201+
.catch(done);
202+
});
203+
});
204+
205+
function makeVariants(uid = null) {
206+
return client
207+
.stack({ api_key: process.env.API_KEY })
208+
.variantGroup(variantGroupUid)
209+
.variants(uid);
210+
}
211+
212+
function makeVariantGroup(uid = null) {
213+
return client.stack({ api_key: process.env.API_KEY }).variantGroup(uid);
214+
}
215+
216+
function makeEntryVariants(uid = null) {
217+
return client
218+
.stack({ api_key: process.env.API_KEY })
219+
.contentType(contentTypeUid)
220+
.entry(entryUid)
221+
.variants(uid);
222+
}
223+
224+
function makeEntry() {
225+
return client
226+
.stack({ api_key: process.env.API_KEY })
227+
.contentType(contentTypeUid);
228+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
const variantEntryFirst = {
2+
entry: {
3+
title: "First page variant",
4+
url: "/first-page-variant",
5+
_variant: {
6+
_change_set: ["title", "url"],
7+
},
8+
},
9+
};
10+
11+
var publishVariantEntryFirst = {
12+
entry: {
13+
environments: ["development"],
14+
locales: ["en-us", "en-at"],
15+
variants: [
16+
{
17+
uid: "",
18+
version: 1,
19+
},
20+
],
21+
variant_rules: {
22+
publish_latest_base: false,
23+
publish_latest_base_conditionally: true,
24+
},
25+
},
26+
locale: "en-us",
27+
version: 1,
28+
};
29+
30+
const unpublishVariantEntryFirst = {
31+
entry: {
32+
environments: ["development"],
33+
locales: ["en-at"],
34+
variants: [
35+
{
36+
uid: "",
37+
version: 1,
38+
},
39+
],
40+
variant_rules: {
41+
publish_latest_base: false,
42+
publish_latest_base_conditionally: true,
43+
},
44+
},
45+
locale: "en-us",
46+
version: 1,
47+
};
48+
49+
export { variantEntryFirst, publishVariantEntryFirst, unpublishVariantEntryFirst };

test/sanity-check/sanity.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,16 @@ require('./api/contentType-test')
1515
require('./api/asset-test')
1616
require('./api/extension-test')
1717
require('./api/entry-test')
18+
require('./api/variantGroup-test')
19+
require('./api/variants-test')
20+
require('./api/ungroupedVariants-test')
21+
require('./api/entryVariants-test')
1822
require('./api/bulkOperation-test')
1923
require('./api/webhook-test')
2024
require('./api/workflow-test')
2125
require('./api/globalfield-test')
2226
require('./api/release-test')
2327
require('./api/label-test')
24-
require('./api/variantGroup-test')
25-
require('./api/variants-test')
26-
require('./api/ungroupedVariants-test')
2728
require('./api/contentType-delete-test')
2829
require('./api/delete-test')
2930
require('./api/team-test')

0 commit comments

Comments
 (0)