Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
53 changes: 46 additions & 7 deletions __test__/entry.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,15 +57,54 @@ describe("Entry", () => {
expect(testData.entry).toEqual(entry.getData());
});

it("getDraftData", () => {
entry._changedData = { title: "Draft Title", content: "Draft Content" };
expect(entry.getDraftData()).toEqual({
title: "Draft Title",
content: "Draft Content",
describe("getDraftData", () => {
it("should return draft data successfully", async () => {
const mockDraftData = {
title: "Draft Title",
description: "Draft Description",
};
const sendToParentSpy = jest
.spyOn(connection, "sendToParent")
.mockResolvedValue({ data: mockDraftData });

const result = await entry.getDraftData();

expect(sendToParentSpy).toHaveBeenCalledWith("getDraftData");
expect(result).toEqual(mockDraftData);
});

entry._changedData = {};
expect(entry.getDraftData()).toEqual({});
it("should return empty object when response data is null", async () => {
const sendToParentSpy = jest
.spyOn(connection, "sendToParent")
.mockResolvedValue({ data: null });

const result = await entry.getDraftData();

expect(sendToParentSpy).toHaveBeenCalledWith("getDraftData");
expect(result).toEqual({});
});

it("should return empty object when response data is undefined", async () => {
const sendToParentSpy = jest
.spyOn(connection, "sendToParent")
.mockResolvedValue({ data: undefined });

const result = await entry.getDraftData();

expect(sendToParentSpy).toHaveBeenCalledWith("getDraftData");
expect(result).toEqual({});
});

it("should throw error when sendToParent fails", async () => {
const sendToParentSpy = jest
.spyOn(connection, "sendToParent")
.mockRejectedValue(new Error("Connection failed"));

await expect(entry.getDraftData()).rejects.toThrow(
"Failed to retrieve draft data."
);
expect(sendToParentSpy).toHaveBeenCalledWith("getDraftData");
});
});

describe("getField", () => {
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@contentstack/app-sdk",
"version": "2.3.1",
"version": "2.3.2",
"types": "dist/src/index.d.ts",
"description": "The Contentstack App SDK allows you to customize your Contentstack applications.",
"main": "dist/index.js",
Expand Down
22 changes: 14 additions & 8 deletions src/entry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import {
import { ContentType, PublishDetails, Schema } from "./types/stack.types";
import { GenericObjectType } from "./types/common.types";
import EventRegistry from "./EventRegistry";
import { onData, onError } from "./utils/utils";

/** Class representing an entry from Contentstack UI. Not available for Dashboard UI Location. */

Expand Down Expand Up @@ -92,15 +93,20 @@ class Entry {
}

/**
* Gets the draft data of the current entry.
* If no changes are available, returns an empty object.
* @return {Object} Returns the draft entry data (_changedData) if available; otherwise, returns an empty object.
* Retrieves the draft data of the current unsaved entry.
* Returns an empty object if there are no changes.
*
* @returns {Promise<GenericObjectType>} The draft entry data or an empty object.
*/
getDraftData() {
if (this._changedData && Object.keys(this._changedData).length > 0) {
return this._changedData;
} else {
return {};
async getDraftData(): Promise<GenericObjectType> {
try {
const response =
await this._connection.sendToParent<GenericObjectType>(
"getDraftData"
);
return response?.data ?? {};
} catch (error) {
throw new Error("Failed to retrieve draft data.");
}
}

Expand Down
Loading