161 lines
4.2 KiB
TypeScript
161 lines
4.2 KiB
TypeScript
import { describe, it, expect, beforeEach, vi } from "vitest";
|
|
import * as List from "../src/list";
|
|
import * as Validation from "../src/validation";
|
|
import { FunboxMetadata } from "../src/types";
|
|
|
|
describe("validation", () => {
|
|
describe("checkCompatibility", () => {
|
|
const getFunboxMock = vi.spyOn(List, "getFunbox");
|
|
|
|
beforeEach(() => {
|
|
getFunboxMock.mockClear();
|
|
});
|
|
|
|
it("should pass without funboxNames", () => {
|
|
//WHEN / THEN
|
|
expect(Validation.checkCompatibility([])).toBe(true);
|
|
});
|
|
|
|
it("should fail for undefined funboxNames", () => {
|
|
//GIVEN
|
|
getFunboxMock.mockReturnValueOnce([
|
|
{
|
|
name: "plus_one",
|
|
} as FunboxMetadata,
|
|
undefined as unknown as FunboxMetadata,
|
|
]);
|
|
|
|
//WHEN / THEN
|
|
expect(Validation.checkCompatibility(["plus_one", "plus_two"])).toBe(
|
|
false,
|
|
);
|
|
});
|
|
|
|
it("should fail for undefined withFunbox param", () => {
|
|
//GIVEN
|
|
getFunboxMock
|
|
.mockReturnValueOnce([])
|
|
.mockReturnValue([undefined as unknown as FunboxMetadata]);
|
|
|
|
//WHEN / THEN
|
|
expect(
|
|
Validation.checkCompatibility(["plus_one", "plus_two"], "plus_three"),
|
|
).toBe(false);
|
|
});
|
|
|
|
it("should check for optional withFunbox param ", () => {
|
|
//GIVEN
|
|
getFunboxMock
|
|
.mockReturnValueOnce([
|
|
{
|
|
name: "plus_one",
|
|
cssModifications: ["body", "main"],
|
|
} as FunboxMetadata,
|
|
{
|
|
name: "plus_two",
|
|
} as FunboxMetadata,
|
|
])
|
|
.mockReturnValueOnce([
|
|
{
|
|
name: "plus_three",
|
|
cssModifications: ["main", "typingTest"],
|
|
} as FunboxMetadata,
|
|
]);
|
|
|
|
//WHEN
|
|
const result = Validation.checkCompatibility(
|
|
["plus_one", "plus_two"],
|
|
"plus_three",
|
|
);
|
|
|
|
//THEN
|
|
expect(result).toBe(false);
|
|
|
|
expect(getFunboxMock).toHaveBeenNthCalledWith(1, [
|
|
"plus_one",
|
|
"plus_two",
|
|
]);
|
|
expect(getFunboxMock).toHaveBeenNthCalledWith(2, "plus_three");
|
|
});
|
|
|
|
it("should reject two funboxes modifying the same css element", () => {
|
|
//GIVEN
|
|
getFunboxMock.mockReturnValueOnce([
|
|
{
|
|
name: "plus_one",
|
|
cssModifications: ["body", "main"],
|
|
} as FunboxMetadata,
|
|
{
|
|
name: "plus_two",
|
|
cssModifications: ["main", "typingTest"],
|
|
} as FunboxMetadata,
|
|
]);
|
|
|
|
//WHEN / THEN
|
|
expect(Validation.checkCompatibility(["plus_one", "plus_two"])).toBe(
|
|
false,
|
|
);
|
|
});
|
|
|
|
it("should allow two funboxes modifying different css elements", () => {
|
|
//GIVEN
|
|
getFunboxMock.mockReturnValueOnce([
|
|
{
|
|
name: "plus_one",
|
|
cssModifications: ["body", "main"],
|
|
} as FunboxMetadata,
|
|
{
|
|
name: "plus_two",
|
|
cssModifications: ["words"],
|
|
} as FunboxMetadata,
|
|
]);
|
|
|
|
//WHEN / THEN
|
|
expect(Validation.checkCompatibility(["plus_one", "plus_two"])).toBe(
|
|
true,
|
|
);
|
|
});
|
|
describe("should validate two funboxes modifying the wordset", () => {
|
|
const testCases = [
|
|
{
|
|
firstFunction: "withWords",
|
|
secondFunction: "withWords",
|
|
compatible: false,
|
|
},
|
|
{
|
|
firstFunction: "withWords",
|
|
secondFunction: "getWord",
|
|
compatible: false,
|
|
},
|
|
{
|
|
firstFunction: "getWord",
|
|
secondFunction: "pullSection",
|
|
compatible: false,
|
|
},
|
|
];
|
|
|
|
it.for(testCases)(
|
|
`expect $firstFunction and $secondFunction to be compatible $compatible`,
|
|
({ firstFunction, secondFunction, compatible }) => {
|
|
//GIVEN
|
|
getFunboxMock.mockReturnValueOnce([
|
|
{
|
|
name: "plus_one",
|
|
frontendFunctions: [firstFunction],
|
|
} as FunboxMetadata,
|
|
{
|
|
name: "plus_two",
|
|
frontendFunctions: [secondFunction],
|
|
} as FunboxMetadata,
|
|
]);
|
|
|
|
//WHEN / THEN
|
|
expect(Validation.checkCompatibility(["plus_one", "plus_two"])).toBe(
|
|
compatible,
|
|
);
|
|
},
|
|
);
|
|
});
|
|
});
|
|
});
|