mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-01-14 13:13:31 +01:00
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 'vitest';
|
|
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,
|
|
},
|
|
],
|
|
},
|
|
]);
|
|
});
|
|
});
|