diff --git a/CHANGELOG.md b/CHANGELOG.md index 2e3ecc22..5160b405 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## [v1.19.1](https://github.com/contentstack/contentstack-management-javascript/tree/v1.19.1) (2025-01-27) + - Feature + - Added support for get entry references + - Added delay sanity testcases + - Axios, webpack, form-data, qs version bump + ## [v1.19.0](https://github.com/contentstack/contentstack-management-javascript/tree/v1.19.0) (2025-01-13) - Feature - Release 2.0 feature diff --git a/lib/stack/contentType/entry/index.js b/lib/stack/contentType/entry/index.js index 6701ed89..f435d264 100644 --- a/lib/stack/contentType/entry/index.js +++ b/lib/stack/contentType/entry/index.js @@ -352,6 +352,35 @@ export function Entry (http, data) { } } + /** + * @description The get references request allows to get the references of an entry. + * @memberof Entry + * @func references + * @returns {Promise} Response Object. + * @example 1 + * client.stack({ api_key: 'api_key'}).contentType('content_type_uid').entry('uid').references() + * .then((response) => console.log(response)); + * @example 2 + * client.stack({ api_key: 'api_key'}).contentType('content_type_uid').entry('uid').references({locale: 'en-us'}) + * .then((response) => console.log(response)); + */ + this.references = async (param = {}) => { + const headers = {} + if (this.stackHeaders) { + headers.headers = this.stackHeaders + } + try { + const response = await http.get(`${this.urlPath}/references`, {...headers, params: param,}) + if (response.data) { + return response.data + } else { + throw error(response) + } + } catch (err) { + throw error(err) + } + } + } else { /** * @description The Create an entry call creates a new entry for the selected content type. diff --git a/test/sanity-check/api/entry-test.js b/test/sanity-check/api/entry-test.js index de4a2ba4..62e378fa 100644 --- a/test/sanity-check/api/entry-test.js +++ b/test/sanity-check/api/entry-test.js @@ -170,6 +170,19 @@ describe('Entry api Test', () => { .catch(done) }) + it('should get references of the given Entry uid', done => { + makeEntry(singlepageCT.content_type.uid, entryUTD).references() + .then((reference) => { + reference.references.forEach((references) => { + expect(references.entry_uid).to.be.not.equal(null) + expect(references.content_type_uid).to.be.not.equal(null) + expect(references.content_type_title).to.be.not.equal(null) + }) + done() + }) + .catch(done) + }) + it('should unpublish localized entry', done => { makeEntry(singlepageCT.content_type.uid, entryUTD) .unpublish({ diff --git a/test/unit/entry-test.js b/test/unit/entry-test.js index 9e65ddd2..0ca82f12 100644 --- a/test/unit/entry-test.js +++ b/test/unit/entry-test.js @@ -615,6 +615,31 @@ describe('Contentstack Entry test', () => { }) .catch(done) }) + it('should get references of the given Entry uid', done => { + var mock = new MockAdapter(Axios) + const references = [ + { + entry_uid: "entry_uid", + content_type_uid: "referred_content_type", + locale: "en-us", + title: "Jeff Goins", + content_type_title: "Referred Content Type" + } + ] + mock.onGet('/content_types/content_type_uid/entries/UID/references').reply(200, { + references + }) + + makeEntry({ entry: { ...systemUidMock }, stackHeaders: stackHeadersMock }).references() + .then((reference) => { + expect(reference.references[0].entry_uid).to.be.equal('entry_uid') + reference.references.forEach((references) => { + expect(references.entry_uid).to.be.not.equal(null) + }) + done() + }) + .catch(done) + }) }) function makeEntry (data) { diff --git a/types/stack/contentType/entry.d.ts b/types/stack/contentType/entry.d.ts index 36cfc1cd..71b7c214 100644 --- a/types/stack/contentType/entry.d.ts +++ b/types/stack/contentType/entry.d.ts @@ -11,6 +11,7 @@ export interface Entry extends Publishable, Unpublishable, SystemFields, SystemF variants(uid: string): Variant setWorkflowStage(data: { workflow_stage: WorkflowStage, locale?:string}): Promise locales(): Promise + references(param: object): Promise } export interface Entries extends Queryable { @@ -38,4 +39,16 @@ export interface Locales { export interface Code extends AnyProperty { code: string; localized: boolean; +} + +export interface References { + references: EntryReferences[]; +} + +export interface EntryReferences extends AnyProperty { + title: string; + entry_uid: string; + locale: string; + content_type_uid: string; + content_type_title: string; } \ No newline at end of file