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',
    ]);
  });
});