@jungvonmatt/sb-migrate
Version:
CLI tool for managing Storyblok schema and content migrations
190 lines • 8.16 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const vitest_1 = require("vitest");
const update_1 = require("../../../handlers/datasource/update");
const api_1 = require("../../../utils/api");
const storyblok_1 = require("../../../utils/storyblok");
// Mock the API and utility functions
vitest_1.vi.mock("../../../utils/api", () => ({
api: {
datasources: {
get: vitest_1.vi.fn(),
update: vitest_1.vi.fn(),
},
},
}));
vitest_1.vi.mock("../../../utils/storyblok", () => ({
addOrUpdateDatasource: vitest_1.vi.fn(),
createRollbackFile: vitest_1.vi.fn(),
}));
(0, vitest_1.describe)("handleUpdateDatasource", () => {
const mockDatasource = {
name: "updated-datasource",
slug: "updated-datasource",
};
const mockEntries = [
{
name: "entry1",
value: "value1",
dimension_value: "dimension1",
},
{
name: "entry2",
value: "value2",
dimension_value: "dimension1",
},
];
const mockExistingDatasource = {
id: 123,
name: "test-datasource",
slug: "test-datasource",
dimensions: [
{
name: "dimension1",
values: ["value1", "value2"],
},
],
};
const mockMigration = {
id: 123,
datasource: mockDatasource,
entries: mockEntries,
};
const mockOptions = {
isDryrun: false,
};
(0, vitest_1.beforeEach)(() => {
vitest_1.vi.clearAllMocks();
});
(0, vitest_1.it)("should update datasource properties successfully", async () => {
// Arrange
api_1.api.datasources.get.mockResolvedValue({
data: { datasource: mockExistingDatasource },
});
api_1.api.datasources.update.mockResolvedValue({});
storyblok_1.createRollbackFile.mockResolvedValue(undefined);
// Act
await (0, update_1.handleUpdateDatasource)({ id: 123, datasource: mockDatasource }, mockOptions);
// Assert
(0, vitest_1.expect)(api_1.api.datasources.get).toHaveBeenCalledWith(123);
(0, vitest_1.expect)(api_1.api.datasources.update).toHaveBeenCalledWith({
...mockExistingDatasource,
name: "updated-datasource",
slug: "updated-datasource",
});
});
(0, vitest_1.it)("should update datasource entries successfully", async () => {
// Arrange
const mockCreatedEntries = [
{ id: 1, name: "entry1" },
{ id: 2, name: "entry2" },
];
api_1.api.datasources.get.mockResolvedValue({
data: { datasource: mockExistingDatasource },
});
storyblok_1.addOrUpdateDatasource.mockResolvedValue([
mockExistingDatasource,
mockCreatedEntries,
]);
storyblok_1.createRollbackFile.mockResolvedValue(undefined);
// Act
await (0, update_1.handleUpdateDatasource)({ id: 123, entries: mockEntries }, mockOptions);
// Assert
(0, vitest_1.expect)(api_1.api.datasources.get).toHaveBeenCalledWith(123);
(0, vitest_1.expect)(storyblok_1.addOrUpdateDatasource).toHaveBeenCalledWith({
name: mockExistingDatasource.name,
slug: mockExistingDatasource.slug,
}, mockEntries.map((entry) => ({
name: entry.name,
value: entry.value,
dimension_value: entry.dimension_value,
})));
(0, vitest_1.expect)(storyblok_1.createRollbackFile).toHaveBeenCalled();
});
(0, vitest_1.it)("should update both properties and entries successfully", async () => {
// Arrange
const mockCreatedEntries = [
{ id: 1, name: "entry1" },
{ id: 2, name: "entry2" },
];
api_1.api.datasources.get.mockResolvedValue({
data: { datasource: mockExistingDatasource },
});
api_1.api.datasources.update.mockResolvedValue({});
storyblok_1.addOrUpdateDatasource.mockResolvedValue([
mockExistingDatasource,
mockCreatedEntries,
]);
storyblok_1.createRollbackFile.mockResolvedValue(undefined);
// Act
await (0, update_1.handleUpdateDatasource)(mockMigration, mockOptions);
// Assert
(0, vitest_1.expect)(api_1.api.datasources.get).toHaveBeenCalledWith(123);
(0, vitest_1.expect)(api_1.api.datasources.update).toHaveBeenCalled();
(0, vitest_1.expect)(storyblok_1.addOrUpdateDatasource).toHaveBeenCalled();
(0, vitest_1.expect)(storyblok_1.createRollbackFile).toHaveBeenCalled();
});
(0, vitest_1.it)("should handle dry run correctly", async () => {
// Arrange
const dryRunOptions = { isDryrun: true };
// Act
await (0, update_1.handleUpdateDatasource)(mockMigration, dryRunOptions);
// Assert
(0, vitest_1.expect)(api_1.api.datasources.get).not.toHaveBeenCalled();
(0, vitest_1.expect)(api_1.api.datasources.update).not.toHaveBeenCalled();
(0, vitest_1.expect)(storyblok_1.addOrUpdateDatasource).not.toHaveBeenCalled();
(0, vitest_1.expect)(storyblok_1.createRollbackFile).not.toHaveBeenCalled();
});
(0, vitest_1.it)("should handle missing updates gracefully", async () => {
// Act
await (0, update_1.handleUpdateDatasource)({ id: 123 }, mockOptions);
// Assert
(0, vitest_1.expect)(api_1.api.datasources.get).not.toHaveBeenCalled();
(0, vitest_1.expect)(api_1.api.datasources.update).not.toHaveBeenCalled();
(0, vitest_1.expect)(storyblok_1.addOrUpdateDatasource).not.toHaveBeenCalled();
(0, vitest_1.expect)(storyblok_1.createRollbackFile).not.toHaveBeenCalled();
});
(0, vitest_1.it)("should handle API errors gracefully", async () => {
// Arrange
const error = new Error("API Error");
api_1.api.datasources.get.mockRejectedValue(error);
// Act
await (0, update_1.handleUpdateDatasource)(mockMigration, mockOptions);
// Assert
(0, vitest_1.expect)(api_1.api.datasources.get).toHaveBeenCalled();
(0, vitest_1.expect)(api_1.api.datasources.update).not.toHaveBeenCalled();
(0, vitest_1.expect)(storyblok_1.addOrUpdateDatasource).not.toHaveBeenCalled();
(0, vitest_1.expect)(storyblok_1.createRollbackFile).not.toHaveBeenCalled();
});
(0, vitest_1.it)("should handle update errors gracefully", async () => {
// Arrange
const error = new Error("Update Error");
api_1.api.datasources.get.mockResolvedValue({
data: { datasource: mockExistingDatasource },
});
api_1.api.datasources.update.mockRejectedValue(error);
// Act
await (0, update_1.handleUpdateDatasource)({ id: 123, datasource: mockDatasource }, mockOptions);
// Assert
(0, vitest_1.expect)(api_1.api.datasources.get).toHaveBeenCalled();
(0, vitest_1.expect)(api_1.api.datasources.update).toHaveBeenCalled();
(0, vitest_1.expect)(storyblok_1.addOrUpdateDatasource).not.toHaveBeenCalled();
(0, vitest_1.expect)(storyblok_1.createRollbackFile).not.toHaveBeenCalled();
});
(0, vitest_1.it)("should handle entry update errors gracefully", async () => {
// Arrange
const error = new Error("Entry Update Error");
api_1.api.datasources.get.mockResolvedValue({
data: { datasource: mockExistingDatasource },
});
storyblok_1.addOrUpdateDatasource.mockRejectedValue(error);
// Act
await (0, update_1.handleUpdateDatasource)({ id: 123, entries: mockEntries }, mockOptions);
// Assert
(0, vitest_1.expect)(api_1.api.datasources.get).toHaveBeenCalled();
(0, vitest_1.expect)(api_1.api.datasources.update).not.toHaveBeenCalled();
(0, vitest_1.expect)(storyblok_1.addOrUpdateDatasource).toHaveBeenCalled();
(0, vitest_1.expect)(storyblok_1.createRollbackFile).not.toHaveBeenCalled();
});
});
//# sourceMappingURL=update.test.js.map