hypertune
Version:
[Hypertune](https://www.hypertune.com/) is the most flexible platform for feature flags, A/B testing, analytics and app configuration. Built with full end-to-end type-safety, Git-style version control and local, synchronous, in-memory flag evaluation. Opt
65 lines (62 loc) • 1.63 kB
text/typescript
import { expect, test } from "vitest";
import { Value } from "../shared/types";
import getOverrideFromOverridesList from "./getOverrideFromOverridesList";
const cases: {
name: string;
list: [flagPath: string, value: Value | null][];
expected: ReturnType<typeof getOverrideFromOverridesList>;
}[] = [
{
name: "null for empty list",
list: [],
expected: null,
},
{
name: "null overrides are ignored",
list: [["simpleFlag", null]],
expected: null,
},
{
name: "simple flag",
list: [["simpleFlag", true]],
expected: { root: { simpleFlag: true } },
},
{
name: "nested flag",
list: [["flags.ui.simpleFlag", true]],
expected: { root: { flags: { ui: { simpleFlag: true } } } },
},
{
name: "nested flag with root in path",
list: [["root.flags.ui.simpleFlag", true]],
expected: { root: { flags: { ui: { simpleFlag: true } } } },
},
{
name: "multiple nested flags",
list: [
["flags.ui.simpleFlag", true],
["flags.ui.ignoredFlag", null],
["flags.ui.stringFlag", "Override string"],
],
expected: {
root: {
flags: { ui: { simpleFlag: true, stringFlag: "Override string" } },
},
},
},
{
name: "multiple nested flags at different levels",
list: [
["flags.ui.simpleFlag", true],
["flags.errorList", ["Override string"]],
],
expected: {
root: {
flags: { ui: { simpleFlag: true }, errorList: ["Override string"] },
},
},
},
];
test.each(cases)("$name", ({ list, expected }) => {
expect(getOverrideFromOverridesList(list)).toEqual(expected);
});