2022-08-16 14:05:03 +02:00
|
|
|
import { SyncedItemMetadata } from "./sync-item-metadata";
|
|
|
|
|
2022-09-22 14:51:14 +02:00
|
|
|
describe("builder", () => {
|
2022-08-16 17:59:50 +02:00
|
|
|
const propertyKey = "propertyKey";
|
2022-08-16 14:05:03 +02:00
|
|
|
const key = "key";
|
|
|
|
const initializer = (s: any) => "used initializer";
|
|
|
|
class TestClass {}
|
|
|
|
const ctor = TestClass;
|
|
|
|
|
2022-09-22 14:51:14 +02:00
|
|
|
it("should use initializer if provided", () => {
|
|
|
|
const metadata = { propertyKey, sessionKey: key, initializer };
|
|
|
|
const builder = SyncedItemMetadata.builder(metadata);
|
|
|
|
expect(builder({})).toBe("used initializer");
|
2022-08-16 14:05:03 +02:00
|
|
|
});
|
|
|
|
|
2022-09-22 14:51:14 +02:00
|
|
|
it("should use ctor if initializer is not provided", () => {
|
|
|
|
const metadata = { propertyKey, sessionKey: key, ctor };
|
|
|
|
const builder = SyncedItemMetadata.builder(metadata);
|
|
|
|
expect(builder({})).toBeInstanceOf(TestClass);
|
2022-08-16 14:05:03 +02:00
|
|
|
});
|
|
|
|
|
2022-09-22 14:51:14 +02:00
|
|
|
it("should prefer initializer over ctor", () => {
|
|
|
|
const metadata = { propertyKey, sessionKey: key, ctor, initializer };
|
|
|
|
const builder = SyncedItemMetadata.builder(metadata);
|
|
|
|
expect(builder({})).toBe("used initializer");
|
2022-08-16 14:05:03 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
it("should honor initialize as array", () => {
|
2022-09-22 14:51:14 +02:00
|
|
|
const metadata = {
|
2022-08-16 17:59:50 +02:00
|
|
|
propertyKey,
|
|
|
|
sessionKey: key,
|
2022-08-16 14:05:03 +02:00
|
|
|
initializer: initializer,
|
|
|
|
initializeAsArray: true,
|
2022-09-22 14:51:14 +02:00
|
|
|
};
|
|
|
|
const builder = SyncedItemMetadata.builder(metadata);
|
|
|
|
expect(builder([{}])).toBeInstanceOf(Array);
|
|
|
|
expect(builder([{}])[0]).toBe("used initializer");
|
2022-08-16 14:05:03 +02:00
|
|
|
});
|
|
|
|
});
|