Files
bknd/app/__test__/data/specs/fields/EnumField.spec.ts
2024-11-16 12:01:47 +01:00

45 lines
1.4 KiB
TypeScript

import { describe, expect, test } from "bun:test";
import { EnumField } from "../../../../src/data";
import { runBaseFieldTests, transformPersist } from "./inc";
function options(strings: string[]) {
return { type: "strings", values: strings };
}
describe("[data] EnumField", async () => {
runBaseFieldTests(
EnumField,
{ defaultValue: "a", schemaType: "text" },
{ options: options(["a", "b", "c"]) }
);
test("yields if no options", async () => {
expect(() => new EnumField("test", { options: options([]) })).toThrow();
});
test("yields if default value is not a valid option", async () => {
expect(
() => new EnumField("test", { options: options(["a", "b"]), default_value: "c" })
).toThrow();
});
test("transformPersist (config)", async () => {
const field = new EnumField("test", { options: options(["a", "b", "c"]) });
expect(transformPersist(field, null)).resolves.toBeUndefined();
expect(transformPersist(field, "a")).resolves.toBe("a");
expect(transformPersist(field, "d")).rejects.toThrow();
});
test("transformRetrieve", async () => {
const field = new EnumField("test", {
options: options(["a", "b", "c"]),
default_value: "a",
required: true
});
expect(field.transformRetrieve(null)).toBe("a");
expect(field.transformRetrieve("d")).toBe("a");
});
});