Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions lib/stack/contentType/entry/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -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}`

Expand Down
6 changes: 5 additions & 1 deletion lib/stack/contentType/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}

Expand Down
88 changes: 46 additions & 42 deletions test/sanity-check/api/entryVariants-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -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) => {
Expand Down Expand Up @@ -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({
Expand All @@ -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({
Expand All @@ -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: unpublishVariantEntryFirst.entry,
locale: unpublishVariantEntryFirst.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({})
Expand Down
42 changes: 40 additions & 2 deletions test/sanity-check/mock/variantEntry.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 };
8 changes: 4 additions & 4 deletions test/sanity-check/sanity.js
Original file line number Diff line number Diff line change
Expand Up @@ -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')
107 changes: 99 additions & 8 deletions test/unit/variants-entry-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -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",
});
Expand All @@ -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",
});
Expand Down Expand Up @@ -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) => {
Expand All @@ -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",
Expand All @@ -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",
Expand All @@ -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);
}
4 changes: 2 additions & 2 deletions types/stack/bulkOperation/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ export interface BulkOperation extends SystemFields {
publish(config: BulkOperationConfig): Promise<Response>
unpublish(config: BulkOperationConfig): Promise<Response>
delete(config: BulkDeleteConfig): Promise<Response>
addItems(config: AddItemsConfig): Promise<Response>
updateItems(config: AddItemsConfig): Promise<Response>
addItems(config: BulkAddItemsConfig): Promise<Response>
updateItems(config: BulkAddItemsConfig): Promise<Response>
jobStatus(config: BulkJobStatus): Promise<Response>
}
export interface BulkOperationConfig {
Expand Down
Loading
Loading