@constl/bohr-db
Version:
Type-safe databases for OrbitDB.
146 lines (128 loc) • 3.57 kB
text/typescript
import {
ExtractKeys,
ExtractKeysAsList,
GetValueFromKey,
GetValueFromKeyList,
} from "@/types.js";
describe("Types", () => {
type S = {
a: string;
b: { c: number; d: { e: boolean } };
f: { g: { h: "i" } };
};
describe("Extract keys as list", () => {
let _value: ExtractKeys<S>;
it("Root key assignable", () => {
_value = "a";
});
it("Nested key assignable", () => {
_value = "b/d";
});
it("Deep nested key assignable", () => {
_value = "f/g/h";
});
it("Error for list", () => {
//@ts-expect-error list
_value = ["a"];
});
it("Error for wrong order", () => {
//@ts-expect-error wrong order
_value = "f/h/g";
});
it("Error for wrong nested key", () => {
//@ts-expect-error wrong key
_value = "f/g/z";
});
it("Error for too deep", () => {
//@ts-expect-error too long
_value = "f/g/h/i";
});
});
describe("Extract keys as list", () => {
type S = {
a: string;
b: { c: number; d: { e: boolean } };
f: { g: { h: "i" } };
};
let _value: ExtractKeysAsList<S>;
it("Root key assignable", () => {
_value = ["a"];
});
it("Nested key assignable", () => {
_value = ["b", "d"];
});
it("Deep nested key assignable", () => {
_value = ["f", "g", "h"];
});
it("Error for string", () => {
//@ts-expect-error string
_value = "a";
});
it("Error for wrong order", () => {
//@ts-expect-error wrong order
_value = ["f", "h", "g"];
});
it("Error for wrong nested key", () => {
//@ts-expect-error wrong key
_value = ["f", "g", "z"];
});
it("Error for too deep", () => {
//@ts-expect-error too long
_value = ["f", "g", "h", "i"];
});
});
describe("Get path value", () => {
it("Root key", () => {
let _value: GetValueFromKey<S, "a"> = "test";
// @ts-expect-error wrong type
_value = 1;
});
it("Nested key", () => {
let _value: GetValueFromKey<S, "b/c"> = 1;
// @ts-expect-error wrong type
_value = false;
});
it("Nested key object value", () => {
let _value: GetValueFromKey<S, "b/d"> = { e: true };
// @ts-expect-error wrong type
_value = { e: 1 };
});
it("Incomplete object type", () => {
let _value: GetValueFromKey<S, "b"> = { d: { e: false }, c: 2 };
// @ts-expect-error incomplete type
_value = { c: 1 };
});
it("Deep nested key", () => {
let _value: GetValueFromKey<S, "b/d/e"> = true;
// @ts-expect-error wrong type
_value = 1;
});
});
describe("Get path value from list", () => {
it("Root key", () => {
let _value: GetValueFromKeyList<S, ["a"]> = "test";
// @ts-expect-error wrong type
_value = 1;
});
it("Nested key", () => {
let _value: GetValueFromKeyList<S, ["b", "c"]> = 1;
// @ts-expect-error wrong type
_value = false;
});
it("Nested key object value", () => {
let _value: GetValueFromKeyList<S, ["b", "d"]> = { e: true };
// @ts-expect-error wrong type
_value = { e: 1 };
});
it("Incomplete object type", () => {
let _value: GetValueFromKeyList<S, ["b"]> = { d: { e: false }, c: 2 };
// @ts-expect-error incomplete type
_value = { c: 1 };
});
it("Deep nested key", () => {
let _value: GetValueFromKeyList<S, ["b", "d", "e"]> = true;
// @ts-expect-error wrong type
_value = 1;
});
});
});