---
phase: 17-component-tests
plan: 07
type: execute
---
Add tests for menu and notification components: ConnectionDropMenu, Toast, and CostIndicator.
Purpose: Test UI feedback components for user interactions and status display.
Output: Test files covering menu rendering, toast notifications, and cost tracking display.
~/.claude/get-shit-done/workflows/execute-phase.md
~/.claude/get-shit-done/templates/summary.md
@.planning/PROJECT.md
@.planning/ROADMAP.md
@.planning/phases/17-component-tests/17-06-SUMMARY.md
# Key source files:
@src/components/ConnectionDropMenu.tsx
@src/components/Toast.tsx
@src/components/CostIndicator.tsx
**Tech stack available:** Vitest, React Testing Library, jsdom
**Established patterns:** ReactFlowProvider wrapper, vi.mock for Zustand store
Task 1: Add ConnectionDropMenu component tests
src/components/__tests__/ConnectionDropMenu.test.tsx
Create comprehensive tests for ConnectionDropMenu:
- Basic rendering when visible (position at x, y)
- Hidden when not visible
- Node type options based on source handle type:
- From image output: show image-accepting nodes (nanoBanana, generateVideo, annotation, output, llmGenerate)
- From text output: show text-accepting nodes (nanoBanana, generateVideo, llmGenerate)
- From reference output: show reference-accepting nodes (imageInput)
- Menu item click creating node and connection
- Click outside closing menu
- Escape key closing menu
- Menu positioning near viewport edges (adjust to stay visible)
Mock useWorkflowStore for: addNode, addEdge.
Mock useReactFlow for: screenToFlowPosition.
Pass props: x, y, sourceNodeId, sourceHandleId, sourceHandleType, onClose.
npm test -- --run src/components/__tests__/ConnectionDropMenu.test.tsx passes
ConnectionDropMenu tests cover rendering, node type filtering, and interactions
Task 2: Add Toast and CostIndicator tests
src/components/__tests__/Toast.test.tsx, src/components/__tests__/CostIndicator.test.tsx
**Create Toast.test.tsx:**
- Not rendered when message is null
- Renders with message text
- Type styling (info, success, warning, error)
- Type icons displayed correctly
- Close button click calls hide()
- Auto-hide after 4 seconds when not persistent
- Persistent toast stays visible (no auto-hide)
- Details section collapsed by default
- "Show details" button expands details
- "Hide details" button collapses details
Test useToast store hook: show() sets message, hide() clears message.
**Create CostIndicator.test.tsx:**
- Basic rendering with cost display
- Zero cost display ("$0.00")
- Non-zero cost formatted correctly
- Click opening CostDialog
- Cost updates when workflowCosts change
Mock useWorkflowStore for: workflowCosts, workflowId.
npm test -- --run src/components/__tests__/ passes Toast and CostIndicator tests
Toast and CostIndicator have full test coverage
Before declaring plan complete:
- [ ] `npm test -- --run` passes all tests
- [ ] `npm run build` succeeds without errors
- [ ] ConnectionDropMenu node filtering logic tested
- [ ] Toast auto-hide and persistent modes tested
- All tasks completed
- All verification checks pass
- No TypeScript errors
- ~20-25 new tests for menu and notification components