UNPKG

@jungvonmatt/sb-migrate

Version:

CLI tool for managing Storyblok schema and content migrations

190 lines 8.16 kB
"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