keycloak-scim/js/apps/admin-ui/src/util.test.ts

146 lines
3.5 KiB
TypeScript

import { describe, expect, it, vi } from "vitest";
import {
convertAttributeNameToForm,
convertFormValuesToObject,
convertToFormValues,
} from "./util";
vi.mock("react");
const TOKEN = "🍺";
describe("Tests the form convert util functions", () => {
it("convert to form values", () => {
const given = {
name: "client",
other: { one: "1", two: "2" },
attributes: { one: ["1"] },
};
const values: { [index: string]: any } = {};
const spy = (name: string, value: any) => (values[name] = value);
//when
convertToFormValues(given, spy);
//then
expect(values).toEqual({
name: "client",
other: { one: "1", two: "2" },
attributes: [{ key: "one", value: "1" }],
});
});
it("convert save values", () => {
const given = {
name: "client",
attributes: [{ key: "one", value: "1" }],
config: { [`one${TOKEN}two`]: "3" },
};
//when
const values = convertFormValuesToObject(given);
//then
expect(values).toEqual({
name: "client",
attributes: { one: ["1"] },
config: { "one.two": "3" },
});
});
it("convert attributes flatten", () => {
const given = {
name: "test",
description: "",
type: "default",
attributes: {
[`display${TOKEN}on${TOKEN}consent${TOKEN}screen`]: "true",
[`include${TOKEN}in${TOKEN}token${TOKEN}scope`]: "true",
[`gui${TOKEN}order`]: "1",
[`consent${TOKEN}screen${TOKEN}text`]: "",
},
};
//when
const values = convertFormValuesToObject(given);
//then
expect(values).toEqual({
name: "test",
description: "",
type: "default",
attributes: {
"display.on.consent.screen": "true",
"include.in.token.scope": "true",
"gui.order": "1",
"consent.screen.text": "",
},
});
});
it("convert flatten attributes to object", () => {
const given = {
attributes: {
"display.on.consent.screen": "true",
"include.in.token.scope": "true",
"gui.order": "1",
"consent.screen.text": "",
},
};
const values: { [index: string]: any } = {};
const spy = (name: string, value: any) => (values[name] = value);
//when
convertToFormValues(given, spy);
//then
expect(values).toEqual({
[`attributes.display${TOKEN}on${TOKEN}consent${TOKEN}screen`]: "true",
[`attributes.include${TOKEN}in${TOKEN}token${TOKEN}scope`]: "true",
[`attributes.gui${TOKEN}order`]: "1",
[`attributes.consent${TOKEN}screen${TOKEN}text`]: "",
});
});
it("convert empty to empty object", () => {
const given = { attributes: [{ key: "", value: "" }] };
//when
const values = convertFormValuesToObject(given);
//then
expect(values).toEqual({
attributes: {},
});
});
it("convert single element arrays to string", () => {
const given = {
config: {
group: ["one"],
"another.nested": ["value"],
},
};
const values: { [index: string]: any } = {};
const spy = (name: string, value: any) => (values[name] = value);
//when
convertToFormValues(given, spy);
//then
expect(values).toEqual({
"config.group": "one",
[`config.another${TOKEN}nested`]: "value",
});
});
it("should convert attribute name to form", () => {
const given = "attributes.some.strange.attribute";
//when
const form = convertAttributeNameToForm(given);
//then
expect(form).toEqual(`attributes.some${TOKEN}strange${TOKEN}attribute`);
});
});