post-api-node.test.tsx2.3 KBView on GitHub import { render, screen, fireEvent } from '@testing-library/react';
import {
PostApiConfigForm,
type PostApiConfig,
} from '@/modules/documents/playbook/PostApiNode';
import { HASH_MENTION_OPTIONS } from '@/modules/documents/playbook/HashMentionList';
import { createPlaybookSlashCommands } from '@/modules/documents/playbook/playbookExtensions';
const EMPTY: PostApiConfig = { name: '', endpointUrl: '', headers: [], fields: [], instructions: '' };
describe('PostApiConfigForm', () => {
it('emits config edits through onChange', () => {
const onChange = jest.fn();
render(<PostApiConfigForm value={EMPTY} onChange={onChange} />);
fireEvent.change(screen.getByPlaceholderText('Notify CRM'), { target: { value: 'My API' } });
expect(onChange).toHaveBeenCalledWith(expect.objectContaining({ name: 'My API' }));
});
it('reopening shows the persisted config (name, url, header, field)', () => {
const value: PostApiConfig = {
name: 'Saved',
endpointUrl: 'https://x.test/hook',
headers: [{ key=[redacted], value: 'Bearer z' }],
fields: [{ key=[redacted], source: 'static', value: 's3cr3t' }],
instructions: 'when won',
};
render(<PostApiConfigForm value={value} onChange={() => {}} />);
expect(screen.getByDisplayValue('Saved')).toBeInTheDocument();
expect(screen.getByDisplayValue('https://x.test/hook')).toBeInTheDocument();
expect(screen.getByDisplayValue('Authorization')).toBeInTheDocument();
expect(screen.getByDisplayValue('secret')).toBeInTheDocument();
});
});
describe('playbook menu order (canonical)', () => {
it('# menu order is Trigger, Slack, iMessage, MCP, Post API, …', () => {
expect(HASH_MENTION_OPTIONS.map((o) => o.kind)).toEqual([
'trigger',
'slack',
'imessage',
'mcp',
'post_api',
'web_search',
'enrich',
'email',
'subagent',
'board',
'table',
'doc',
]);
});
it('/ menu order matches the canonical sequence', () => {
expect(createPlaybookSlashCommands().map((c) => c.title)).toEqual([
'Trigger',
'Slack',
'iMessage',
'MCP',
'Post API',
'Web search',
'Enrich',
'Email me',
'Subagent',
'Board',
'Table',
'Document',
]);
});
});