Files
optima/api/tests/unit/fieldValidator.test.ts
T

96 lines
2.8 KiB
TypeScript

import { describe, test, expect } from "bun:test";
import { ValueType } from "../../src/modules/credentials/credentialTypeDefs";
import { fieldValidator } from "../../src/modules/credentials/fieldValidator";
import type {
CredentialField,
CredentialTypeField,
} from "../../src/modules/credentials/credentialTypeDefs";
const baseAcceptableFields: CredentialTypeField[] = [
{
id: "username",
name: "Username",
required: true,
secure: false,
valueType: ValueType.PLAIN_TEXT,
},
{
id: "password",
name: "Password",
required: true,
secure: true,
valueType: ValueType.PASSWORD,
},
{
id: "notes",
name: "Notes",
required: false,
secure: false,
valueType: ValueType.PLAIN_TEXT,
},
];
describe("fieldValidator", () => {
test("validates correct fields and returns validated array", async () => {
const fields: CredentialField[] = [
{ fieldId: "username", value: "admin" },
{ fieldId: "password", value: "secret123" },
];
const result = await fieldValidator(fields, baseAcceptableFields);
expect(result).toHaveLength(2);
expect(result[0]!.fieldId).toBe("username");
expect(result[0]!.secure).toBe(false);
expect(result[1]!.fieldId).toBe("password");
expect(result[1]!.secure).toBe(true);
});
test("throws GenericError for unknown field ID", async () => {
const fields: CredentialField[] = [
{ fieldId: "nonexistent", value: "val" },
];
await expect(fieldValidator(fields, baseAcceptableFields)).rejects.toThrow(
"Invalid field ID: nonexistent",
);
});
test("handles optional fields", async () => {
const fields: CredentialField[] = [
{ fieldId: "notes", value: "some note" },
];
const result = await fieldValidator(fields, baseAcceptableFields);
expect(result).toHaveLength(1);
expect(result[0]!.secure).toBe(false);
});
test("handles empty fields array", async () => {
const result = await fieldValidator([], baseAcceptableFields);
expect(result).toEqual([]);
});
test("marks MULTI_CREDENTIAL fields correctly", async () => {
const acceptableFields: CredentialTypeField[] = [
{
id: "sub_creds",
name: "Sub Credentials",
required: false,
secure: false,
valueType: ValueType.MULTI_CREDENTIAL,
subFields: [
{
id: "sub_user",
name: "Sub User",
required: true,
secure: false,
valueType: ValueType.PLAIN_TEXT,
},
],
},
];
const fields: CredentialField[] = [{ fieldId: "sub_creds", value: "" }];
const result = await fieldValidator(fields, acceptableFields);
expect(result).toHaveLength(1);
expect(result[0]!.isMultiCredential).toBe(true);
expect(result[0]!.secure).toBe(false);
});
});