Files
PraisonAIUI/docs/api/testing.html
T
2026-11-05 16:51:48 +00:00

99 lines
15 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<link rel="sitemap" type="application/xml" href="/sitemap.xml" />
<script id="aiui-canonical-url">(function(){var p=location.pathname.replace(/\/+$/, '')||'/';if(p!==location.pathname){history.replaceState(null,'',p+location.search+location.hash);}})();</script>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Test all 16 PraisonAIUI feature APIs using curl. Each example creates real data and verifies backend processing." />
<meta name="robots" content="index, follow" />
<meta property="og:type" content="website" />
<meta property="og:locale" content="en_US" />
<link rel="icon" type="image/svg+xml" href="/icon.svg" />
<title>API Testing Guide | PraisonAIUI Docs</title>
<script>
(function(){try{var t=localStorage.getItem('aiui-theme-preference');var d=true;if(t==='dark'||(t==='system'&&matchMedia('(prefers-color-scheme: dark)').matches)||(!t&&d))document.documentElement.classList.add('dark');else if(t==='light')document.documentElement.classList.remove('dark');}catch(e){}})();
</script>
<link rel="stylesheet" href="/assets/theme.css">
<script type="module" crossorigin src="/assets/index.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index.css">
<link rel="canonical" href="https://ui.praison.ai/docs/api/testing" />
<meta property="og:title" content="API Testing Guide | PraisonAIUI Docs" />
<meta property="og:description" content="Test all 16 PraisonAIUI feature APIs using curl. Each example creates real data and verifies backend processing." />
<meta property="og:url" content="https://ui.praison.ai/docs/api/testing" />
<meta property="og:type" content="article" />
<meta property="og:image" content="https://ui.praison.ai/icon.svg" />
<meta name="twitter:card" content="summary" />
<meta name="twitter:title" content="API Testing Guide | PraisonAIUI Docs" />
<meta name="twitter:description" content="Test all 16 PraisonAIUI feature APIs using curl. Each example creates real data and verifies backend processing." />
<meta name="robots" content="index, follow" />
<script type="application/ld+json">{"@context": "https://schema.org", "@type": "TechArticle", "headline": "API Testing Guide", "description": "Test all 16 PraisonAIUI feature APIs using curl. Each example creates real data and verifies backend processing.", "url": "https://ui.praison.ai/docs/api/testing", "isPartOf": {"@type": "WebSite", "name": "PraisonAIUI Docs", "url": "https://ui.praison.ai/"}}</script>
</head>
<body>
<div id="root"><noscript><nav aria-label="Documentation"><ul><li><a href="https://ui.praison.ai/docs/health-endpoints">Health Endpoints Guide</a></li><li><a href="https://ui.praison.ai/docs/index">PraisonAIUI</a></li><li><a href="https://ui.praison.ai/docs/testing">Testing</a></li><li><a href="https://ui.praison.ai/docs/adr">Adr</a></li><li><a href="https://ui.praison.ai/docs/adr/replay-view-clean-room">ADR 0001: PraisonAI Replay view, a clean-room design</a></li><li><a href="https://ui.praison.ai/docs/api">Api</a></li><li><a href="https://ui.praison.ai/docs/api/cli">CLI API Reference</a></li><li><a href="https://ui.praison.ai/docs/api/components">Component API Reference</a></li><li><a href="https://ui.praison.ai/docs/api/features-api">Features REST API Reference</a></li><li><a href="https://ui.praison.ai/docs/api/health">Health API Reference</a></li><li><a href="https://ui.praison.ai/docs/api/python">Python SDK API</a></li><li><a href="https://ui.praison.ai/docs/api/sessions">Sessions API Reference</a></li><li><a href="https://ui.praison.ai/docs/api/testing">API Testing Guide</a></li><li><a href="https://ui.praison.ai/docs/api/typescript">TypeScript SDK Reference</a></li><li><a href="https://ui.praison.ai/docs/concepts">Concepts</a></li><li><a href="https://ui.praison.ai/docs/concepts/architecture">Architecture: AG-UI Protocol vs Gateway Integration</a></li><li><a href="https://ui.praison.ai/docs/concepts/configuration">YAML Configuration</a></li><li><a href="https://ui.praison.ai/docs/concepts/providers">Providers</a></li><li><a href="https://ui.praison.ai/docs/concepts/slots">Slots &amp; Components</a></li><li><a href="https://ui.praison.ai/docs/concepts/templates">Templates &amp; Layouts</a></li><li><a href="https://ui.praison.ai/docs/examples">Examples</a></li><li><a href="https://ui.praison.ai/docs/examples/advanced">Advanced Examples</a></li><li><a href="https://ui.praison.ai/docs/examples/basic">Basic Examples</a></li><li><a href="https://ui.praison.ai/docs/features">Features</a></li><li><a href="https://ui.praison.ai/docs/features/a2ui-canvas">A2UI canvas — agent-driven UI</a></li><li><a href="https://ui.praison.ai/docs/features/agent-ui-host">Agent UI host — modular dashboard shell</a></li><li><a href="https://ui.praison.ai/docs/features/attachments">Chat Attachments</a></li><li><a href="https://ui.praison.ai/docs/features/backend-integration">Backend Integration Contract</a></li><li><a href="https://ui.praison.ai/docs/features/beautifului-integration">BeautifulUI Integration Strategy</a></li><li><a href="https://ui.praison.ai/docs/features/browser-automation">Browser Automation</a></li><li><a href="https://ui.praison.ai/docs/features/channel-chat-bridge">Channel-to-Chat Bridge</a></li><li><a href="https://ui.praison.ai/docs/features/code-execution">Code Execution</a></li><li><a href="https://ui.praison.ai/docs/features/comparison-openclaw">Feature Comparison: PraisonAIUI vs OpenClaw</a></li><li><a href="https://ui.praison.ai/docs/features/config-hot-reload">Config Hot-Reload</a></li><li><a href="https://ui.praison.ai/docs/features/content-sources">Content Sources</a></li><li><a href="https://ui.praison.ai/docs/features/css-architecture">How the UI Looks Are Built</a></li><li><a href="https://ui.praison.ai/docs/features/dark-mode">Dark Mode</a></li><li><a href="https://ui.praison.ai/docs/features/dashboard">Dashboard</a></li><li><a href="https://ui.praison.ai/docs/features/deployment">Deployment Guide</a></li><li><a href="https://ui.praison.ai/docs/features/device-pairing">Device Pairing</a></li><li><a href="https://ui.praison.ai/docs/features/differentiation">What Makes PraisonAIUI Different</a></li><li><a href="https://ui.praison.ai/docs/features/feature-inventory">Feature Inventory</a></li><li><a href="https://ui.praison.ai/docs/features/gap-analysis">Gap Analysis — Validated Against praisonai SDK</a></li><li><a href="https://ui.praison.ai/docs/features/gateway-chat">Gateway Chat</a></li><li><a href="https://ui.praison.ai/docs/features/hot-reload">Hot Reload</a></li><li><a href="https://ui.praison.ai/docs/features/how-to-add-a-feature">How to Add a Feature to PraisonAIUI</a></li><li><a href="https://ui.praison.ai/docs/features/i18n">Internationalization (i18n)</a></li><li><a href="https://ui.praison.ai/docs/features/image-preview-chat">Image Preview in Chat</a></li><li><a href="https://ui.praison.ai/docs/features/integration-analysis">AIUI Integration — Critical Review &amp; Architecture Analysis</a></li><li><a href="https://ui.praison.ai/docs/features/knowledge-embeddings">Knowledge Embedding Model Configuration</a></li><li><a href="https://ui.praison.ai/docs/features/marketplace">Plugin Marketplace</a></li><li><a href="https://ui.praison.ai/docs/features/media-analysis">Media Analysis</a></li><li><a href="https://ui.praison.ai/docs/features/message-elements">Message Elements</a></li><li><a href="https://ui.praison.ai/docs/features/model-fallback">Model Fallback</a></li><li><a href="https://ui.praison.ai/docs/features/navigation">Navigation</a></li><li><a href="https://ui.praison.ai/docs/features/praisonai-package-integration">PraisonAI package integration</a></li><li><a href="https://ui.praison.ai/docs/features/protocol-architecture">Protocol Architecture Reference</a></li><li><a href="https://ui.praison.ai/docs/features/protocol-versioning">Protocol Versioning</a></li><li><a href="https://ui.praison.ai/docs/features/protocols">Feature Protocols</a></li><li><a href="https://ui.praison.ai/docs/features/pwa">Progressive Web App (PWA)</a></li><li><a href="https://ui.praison.ai/docs/features/replay">Replay</a></li><li><a href="https://ui.praison.ai/docs/features/seo">SEO</a></li><li><a href="https://ui.praison.ai/docs/features/sessions">Session Management</a></li><li><a href="https://ui.praison.ai/docs/features/standalone-vs-integrated">Standalone vs Integrated</a></li><li><a href="https://ui.praison.ai/docs/features/standardization-verification">AIUI Standardization — Verification Report</a></li><li><a href="https://ui.praison.ai/docs/features/steps">Steps / Chain-of-Thought</a></li><li><a href="https://ui.praison.ai/docs/features/styles">UI Styles</a></li><li><a href="https://ui.praison.ai/docs/features/subagent-tree">Subagent Tree View</a></li><li><a href="https://ui.praison.ai/docs/features/theme-system">Theme System</a></li><li><a href="https://ui.praison.ai/docs/features/theming">Theming</a></li><li><a href="https://ui.praison.ai/docs/features/tts">Text-to-Speech (TTS)</a></li><li><a href="https://ui.praison.ai/docs/features/video-studio">Video Studio</a></li><li><a href="https://ui.praison.ai/docs/features/widget-zones">Widget Zones</a></li><li><a href="https://ui.praison.ai/docs/frontend">Frontend</a></li><li><a href="https://ui.praison.ai/docs/frontend/BEAUTIFULUI_UPSTREAM">BeautifulUI upstream pin record</a></li><li><a href="https://ui.praison.ai/docs/frontend/beautifului-adapter-architecture">ADR: BeautifulUI adapter layer &amp; upstream pin policy</a></li><li><a href="https://ui.praison.ai/docs/frontend/beautifului">BeautifulUI Upgrade Playbook</a></li><li><a href="https://ui.praison.ai/docs/getting-started">Getting Started</a></li><li><a href="https://ui.praison.ai/docs/getting-started/cli">CLI Reference</a></li><li><a href="https://ui.praison.ai/docs/getting-started/github-pages">Deploy to GitHub Pages</a></li><li><a href="https://ui.praison.ai/docs/getting-started/installation">Installation</a></li><li><a href="https://ui.praison.ai/docs/getting-started/quickstart">Quick Start</a></li><li><a href="https://ui.praison.ai/docs/protocols">Protocols</a></li><li><a href="https://ui.praison.ai/docs/protocols/application-design-protocol-report">Application Design Protocol (ADP) — Research Report</a></li><li><a href="https://ui.praison.ai/docs/protocols/adp">Application Design Protocol (ADP)</a></li><li><a href="https://ui.praison.ai/docs/protocols/adp/aiui-mapping">PraisonAIUI → ADP Field Mapping</a></li><li><a href="https://ui.praison.ai/docs/protocols/adp/implementation-status">ADP Implementation Status</a></li><li><a href="https://ui.praison.ai/docs/protocols/adp/spec">Application Design Protocol (ADP) — Normative Specification</a></li><li><a href="https://ui.praison.ai/docs/protocols/adp/validation-rules">ADP Validation Rules</a></li><li><a href="https://ui.praison.ai/docs/typescript">Typescript</a></li><li><a href="https://ui.praison.ai/docs/typescript/components">Components</a></li><li><a href="https://ui.praison.ai/docs/typescript">TypeScript SDK Overview</a></li><li><a href="https://ui.praison.ai/docs/typescript/nextjs">Next.js Adapter</a></li><li><a href="https://ui.praison.ai/docs/typescript/runtime">Runtime</a></li></ul></nav><h1>API Testing Guide</h1>
<p>Test all 16 PraisonAIUI feature APIs using curl. Each example creates real data and verifies backend processing.</p>
<h2>Quick Start</h2>
<h2>CLI Integration Tests (`aiui test`)</h2>
<p>PraisonAIUI includes built-in integration tests via</p>
<p><code>aiui test</code>. These run against a live server and verify chat, memory, sessions,</p>
<p>and API endpoint health.</p>
<h3>Quick Start</h3>
<h3>Available Subcommands</h3>
<p>| Command | What It Tests |</p>
<p>|---------|---------------|</p>
<p>| <code>aiui test endpoints</code> | API endpoint availability (/health, /api/features, /api/sessions, /api/chat) |</p>
<p>| <code>aiui test chat</code> | Message sending, session history isolation, context recall |</p>
<p>| <code>aiui test memory</code> | Cross-session persistent memory (store + recall facts) |</p>
<p>| <code>aiui test sessions</code> | Session file persistence (survives server restarts) |</p>
<p>| <code>aiui test all</code> | Runs all of the above in sequence |</p>
<h3>Options</h3>
<li><code>--server</code> / <code>-s</code> — Server URL (default: <code>http://127.0.0.1:8082</code>)</li>
<li><code>--timeout</code> / <code>-t</code> — Response timeout in seconds (default: <code>30</code>)</li>
<h3>Example Output</h3>
<h3>Test Details</h3>
<p><strong>Endpoints</strong> (6 checks, 2 optional skips):</p>
<li><code>GET /api/features</code> — Feature registry health</li>
<li><code>GET /api/sessions</code> — Session listing</li>
<li><code>GET /api/chat/history</code> — Empty session history</li>
<li><code>POST /api/chat/send</code> — Chat message dispatch</li>
<li><code>GET /api/provider/health</code> — _(optional, skipped if no provider)_</li>
<li><code>GET /api/provider/agents</code> — _(optional, skipped if no provider)_</li>
<li><code>GET /health</code> — Server health check</li>
<p><strong>Chat</strong> (8 checks):</p>
<li>Sends a message to Session A, verifies response in history</li>
<li>Creates Session B, verifies history isolation (no cross-session leakage)</li>
<li>Verifies Session A retains context from earlier messages</li>
<p><strong>Memory</strong> (2 checks):</p>
<li>Sends a fact to Session 1 ("remember my name")</li>
<li>Asks a recall question in Session 2, verifies cross-session memory</li>
<p><strong>Sessions</strong> (4 checks):</p>
<li>Sends a message and verifies session file is created on disk</li>
<li>Verifies history API returns persisted messages</li>
<p>---</p>
<h2>Running the Full API Test Suite</h2>
<p>Use the example at <code>examples/python/14-all-features/app.py</code> which tests all 16 features programmatically:</p>
<h2>Expected Results</h2>
<p>| Feature | Endpoints | Expected |</p>
<p>|---------|-----------|----------|</p>
<p>| Channels | 4 | All 200/201 |</p>
<p>| Agents | 3+ | 201 create, 200 list, 501 run (no praisonaiagents) |</p>
<p>| Approvals | 6 | Auto-approve low-risk, manual approve high-risk |</p>
<p>| Jobs | 3 | 202 submit, 200 list/stats |</p>
<p>| Schedules | 2 | 201 create, 200 list |</p>
<p>| Usage | 4+ | 201 track, 200 summary with by_model breakdown |</p>
<p>| Skills | 2 | 18 skills, 7 categories |</p>
<p>| Config | 5 | Schema, defaults, validate, runtime set/get |</p>
<p>| Auth | 4 | API key generation, multi-mode auth |</p>
<p>| OpenAI API | 2 | 11 endpoints, 13 models |</p>
<p>| Logs | 2 | 5 log levels |</p>
<p>| Sessions | 3 | State save/get/preview |</p>
<p>| Memory | 6 | List, add, search, context, session-scoped, status |</p>
<p>| Hooks | 1 | 200 (empty until registered) |</p>
<p>| Workflows | 1 | 200 (empty until created) |</p>
<p>| Features | 1 | 16 features registered |</p></noscript></div>
<script src="/plugins/plugin-loader.js"></script>
</body>
</html>