65 lines
2.2 KiB
TypeScript
65 lines
2.2 KiB
TypeScript
import { describe, expect, test, vi } from "vitest";
|
|
|
|
import { duplicateItemCallback } from "../duplicate-item";
|
|
import * as emptyPositionModule from "../empty-position";
|
|
import { BoardMockBuilder } from "./mocks/board-mock";
|
|
import { ItemMockBuilder } from "./mocks/item-mock";
|
|
import { LayoutMockBuilder } from "./mocks/layout-mock";
|
|
|
|
describe("item actions duplicate-item", () => {
|
|
test("should copy it in the same section", () => {
|
|
// Arrange
|
|
const itemKind = "minecraftServerStatus";
|
|
const emptyPosition = { xOffset: 5, yOffset: 5 };
|
|
const currentSectionId = "2";
|
|
const layoutId = "1";
|
|
const currentItemSize = { height: 2, width: 3 };
|
|
|
|
const layout = new LayoutMockBuilder({ id: layoutId, columnCount: 4 }).build();
|
|
const currentItem = new ItemMockBuilder({
|
|
kind: itemKind,
|
|
integrationIds: ["1"],
|
|
options: { address: "localhost" },
|
|
advancedOptions: { customCssClasses: ["test"] },
|
|
})
|
|
.addLayout({ layoutId, sectionId: currentSectionId, ...currentItemSize })
|
|
.build();
|
|
const otherItem = new ItemMockBuilder({ id: "2" }).addLayout({ layoutId }).build();
|
|
|
|
const board = new BoardMockBuilder()
|
|
.addLayout(layout)
|
|
.addItem(currentItem)
|
|
.addItem(otherItem)
|
|
.addEmptySection({ id: "1", yOffset: 2 })
|
|
.addEmptySection({ id: currentSectionId, yOffset: 0 })
|
|
.addEmptySection({ id: "3", yOffset: 1 })
|
|
.build();
|
|
|
|
const spy = vi.spyOn(emptyPositionModule, "getFirstEmptyPosition");
|
|
spy.mockReturnValue(emptyPosition);
|
|
|
|
// Act
|
|
const result = duplicateItemCallback({ itemId: currentItem.id })(board);
|
|
|
|
// Assert
|
|
expect(result.items.length).toBe(3);
|
|
const duplicatedItem = result.items.find((item) => item.id !== currentItem.id && item.id !== otherItem.id);
|
|
|
|
expect(duplicatedItem).toEqual(
|
|
expect.objectContaining({
|
|
kind: itemKind,
|
|
integrationIds: currentItem.integrationIds,
|
|
options: currentItem.options,
|
|
advancedOptions: currentItem.advancedOptions,
|
|
layouts: [
|
|
expect.objectContaining({
|
|
...emptyPosition,
|
|
...currentItemSize,
|
|
sectionId: currentSectionId,
|
|
}),
|
|
],
|
|
}),
|
|
);
|
|
});
|
|
});
|