Files
brachnha-insight/_bmad-output/implementation-artifacts/atdd-checklist-story-3-3.md
Max 3fbbb1a93b Initial commit: Brachnha Insight project setup
- Next.js 14+ with App Router and TypeScript
- Tailwind CSS and ShadCN UI styling
- Zustand state management
- Dexie.js for IndexedDB (local-first data)
- Auth.js v5 for authentication
- BMAD framework integration

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-26 12:28:43 +07:00

129 lines
3.7 KiB
Markdown

# ATDD Checklist - Epic 3, Story 3.3: Offline Action Queueing
**Date:** 2026-01-26
**Author:** BMad TEA Agent
**Primary Test Level:** Integration (Sync Logic)
---
## Story Summary
**As a** user with intermittent connectivity
**I want** my actions (save, delete) to be queued when offline
**So that** I don't lose data and my intent is preserved until I reconnect.
---
## Acceptance Criteria
1. **Queue Actions Offline**: When offline, user actions (`SAVE_DRAFT`, `DELETE_ENTRY`) must be added to a persistent `syncQueue` in Dexie.
2. **Replay Actions Online**: When network restores, pending actions in `syncQueue` must be processed in order (FIFO).
3. **Retry Logic**: Failed actions should be retried with exponential backoff before being marked as failed.
---
## Failing Tests Created (RED Phase)
### Integration Tests (2 files)
**File:** `tests/integration/offline-action-queueing.test.ts`
-**Test:** should enqueue SAVE_DRAFT action when offline
- **Status:** RED - `SyncManager` logic not connected to UI/Service
- **Verifies:** `saveDraft` action is added to DB with correct payload.
-**Test:** should enqueue DELETE_ENTRY action when offline
- **Status:** RED - Failing placeholder
- **Verifies:** `deleteDraft` action is added to DB.
**File:** `tests/integration/sync-action-replay.test.ts`
-**Test:** should process pending actions when network restores
- **Status:** RED - `processQueue` not triggered or implemented
- **Verifies:** Queue drains and actions execute.
### Unit Tests (1 file)
**File:** `tests/unit/services/sync-manager.test.ts`
-**Test:** queueAction adds to DB
- **Status:** RED - Implementation missing
- **Verifies:** Service method calls DB correctly.
-**Test:** processQueue processes items
- **Status:** RED - Implementation missing
- **Verifies:** FIFO processing and status updates.
---
## Data Factories Created
Uses existing `faker` patterns (mocking data payload directly in tests for this infrastructure story).
---
## Mock Requirements
**SyncManager Service**:
- Mocks Dexie `db.syncQueue` for unit tests.
- Simulates server latency (500ms) for MVP `executeAction`.
---
## Implementation Checklist
### Test: Unit Tests (SyncManager)
**File:** `tests/unit/services/sync-manager.test.ts`
- [ ] Implement `SyncManager` class structure
- [ ] Implement `queueAction` method
- [ ] Implement `processQueue` method
- [ ] Implement `executeAction` (Simulated Sync)
- [ ] Run test: `npx vitest run sync-manager.test.ts`
- [ ] ✅ Test passes (green phase)
### Test: Integration Tests (Offline Queueing)
**File:** `tests/integration/offline-action-queueing.test.ts`
- [ ] Connect UI/Service 'Save' action to `SyncManager.queueAction` when offline
- [ ] Verify `navigator.onLine` check logic
- [ ] Run test: `npx playwright test offline-action-queueing.test.ts`
- [ ] ✅ Test passes (green phase)
### Test: Integration Tests (Replay)
**File:** `tests/integration/sync-action-replay.test.ts`
- [ ] Add `online` event listener initialization
- [ ] Trigger `processQueue` on network restore
- [ ] Run test: `npx playwright test sync-action-replay.test.ts`
- [ ] ✅ Test passes (green phase)
**Estimated Effort:** 4 hours
---
## Red-Green-Refactor Workflow
### RED Phase (Complete) ✅
- ✅ All tests written and failing
- ✅ Implementation checklist created
### GREEN Phase (DEV Team - Next Steps)
1. **Pick one failing test** (start with Unit Tests)
2. **Implement minimal code** in `sync-manager.ts`
3. **Run the test** (`npx vitest ...`)
4. **Move to Integration tests** once unit logic is solid
---
## Running Tests
```bash
# Run Unit Tests
npx vitest run sync-manager.test.ts
# Run Integration Tests
npx playwright test offline-action-queueing.test.ts
npx playwright test sync-action-replay.test.ts
```