mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-03-20 16:43:53 +01:00
Add .oxfmtignore to skip generated bindings and wasm-pack output. Add npm format script, update DEVELOPMENT.md for Vite+ toolchain, and format all non-generated files with oxfmt. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
152 lines
3.9 KiB
TypeScript
152 lines
3.9 KiB
TypeScript
import { applyFormInputDefaults } from "@yaakapp-internal/lib/templateFunction";
|
|
import type { CallTemplateFunctionArgs } from "@yaakapp-internal/plugins";
|
|
import type { Context, DynamicTemplateFunctionArg } from "@yaakapp/api";
|
|
import { describe, expect, test } from "vite-plus/test";
|
|
import { applyDynamicFormInput } from "../src/common";
|
|
|
|
describe("applyFormInputDefaults", () => {
|
|
test("Works with top-level select", () => {
|
|
const args: DynamicTemplateFunctionArg[] = [
|
|
{
|
|
type: "select",
|
|
name: "test",
|
|
options: [{ label: "Option 1", value: "one" }],
|
|
defaultValue: "one",
|
|
},
|
|
];
|
|
expect(applyFormInputDefaults(args, {})).toEqual({
|
|
test: "one",
|
|
});
|
|
});
|
|
|
|
test("Works with existing value", () => {
|
|
const args: DynamicTemplateFunctionArg[] = [
|
|
{
|
|
type: "select",
|
|
name: "test",
|
|
options: [{ label: "Option 1", value: "one" }],
|
|
defaultValue: "one",
|
|
},
|
|
];
|
|
expect(applyFormInputDefaults(args, { test: "explicit" })).toEqual({
|
|
test: "explicit",
|
|
});
|
|
});
|
|
|
|
test("Works with recursive select", () => {
|
|
const args: DynamicTemplateFunctionArg[] = [
|
|
{ type: "text", name: "dummy", defaultValue: "top" },
|
|
{
|
|
type: "accordion",
|
|
label: "Test",
|
|
inputs: [
|
|
{ type: "text", name: "name", defaultValue: "hello" },
|
|
{
|
|
type: "select",
|
|
name: "test",
|
|
options: [{ label: "Option 1", value: "one" }],
|
|
defaultValue: "one",
|
|
},
|
|
],
|
|
},
|
|
];
|
|
expect(applyFormInputDefaults(args, {})).toEqual({
|
|
dummy: "top",
|
|
test: "one",
|
|
name: "hello",
|
|
});
|
|
});
|
|
|
|
test("Works with dynamic options", () => {
|
|
const args: DynamicTemplateFunctionArg[] = [
|
|
{
|
|
type: "select",
|
|
name: "test",
|
|
defaultValue: "one",
|
|
options: [],
|
|
dynamic() {
|
|
return { options: [{ label: "Option 1", value: "one" }] };
|
|
},
|
|
},
|
|
];
|
|
expect(applyFormInputDefaults(args, {})).toEqual({
|
|
test: "one",
|
|
});
|
|
expect(applyFormInputDefaults(args, {})).toEqual({
|
|
test: "one",
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("applyDynamicFormInput", () => {
|
|
test("Works with plain input", async () => {
|
|
const ctx = {} as Context;
|
|
const args: DynamicTemplateFunctionArg[] = [
|
|
{ type: "text", name: "name" },
|
|
{ type: "checkbox", name: "checked" },
|
|
];
|
|
const callArgs: CallTemplateFunctionArgs = {
|
|
values: {},
|
|
purpose: "preview",
|
|
};
|
|
expect(await applyDynamicFormInput(ctx, args, callArgs)).toEqual([
|
|
{ type: "text", name: "name" },
|
|
{ type: "checkbox", name: "checked" },
|
|
]);
|
|
});
|
|
|
|
test("Works with dynamic input", async () => {
|
|
const ctx = {} as Context;
|
|
const args: DynamicTemplateFunctionArg[] = [
|
|
{
|
|
type: "text",
|
|
name: "name",
|
|
async dynamic(_ctx, _args) {
|
|
return { hidden: true };
|
|
},
|
|
},
|
|
];
|
|
const callArgs: CallTemplateFunctionArgs = {
|
|
values: {},
|
|
purpose: "preview",
|
|
};
|
|
expect(await applyDynamicFormInput(ctx, args, callArgs)).toEqual([
|
|
{ type: "text", name: "name", hidden: true },
|
|
]);
|
|
});
|
|
|
|
test("Works with recursive dynamic input", async () => {
|
|
const ctx = {} as Context;
|
|
const callArgs: CallTemplateFunctionArgs = {
|
|
values: { hello: "world" },
|
|
purpose: "preview",
|
|
};
|
|
const args: DynamicTemplateFunctionArg[] = [
|
|
{
|
|
type: "banner",
|
|
inputs: [
|
|
{
|
|
type: "text",
|
|
name: "name",
|
|
async dynamic(_ctx, args) {
|
|
return { hidden: args.values.hello === "world" };
|
|
},
|
|
},
|
|
],
|
|
},
|
|
];
|
|
expect(await applyDynamicFormInput(ctx, args, callArgs)).toEqual([
|
|
{
|
|
type: "banner",
|
|
inputs: [
|
|
{
|
|
type: "text",
|
|
name: "name",
|
|
hidden: true,
|
|
},
|
|
],
|
|
},
|
|
]);
|
|
});
|
|
});
|