---
name: cucu-testing
description: Chiến lược test full-stack cho CuCu Note (unit, integration, E2E, performance) dựa trên cursor-skills/testing.
---

# CuCu Testing Skill

Skill này định nghĩa **cách test chuẩn** cho CuCu Note, dựa trên best-practices trong `cursor-skills/testing`.
Agent dùng skill này khi:

## When to Use

- Người dùng nói về:
  - chạy test, sửa test fail, viết thêm test,
  - verify flow CuCu end-to-end,
  - refactor lớn và muốn đảm bảo không vỡ gì.
- Trước khi:
  - merge PR lớn,
  - release phiên bản mới,
  - thay đổi logic agent/chatbot hoặc filter memos.

## Test Strategy cho CuCu

### 1. Unit tests

- **Backend (Python/FastAPI/Mongo)**:
  - Focus vào:
    - `common/memos_core/services.py` (MemoService, AttachmentService, MemoRelationService…).
    - `common/conversation_manager.py` (logic history).
    - Helper riêng như `FormatterAgent`, `mongo_client`.
  - Dùng `pytest`, ưu tiên:
    - test cho từng method public,
    - mock DB (Motor/Mongo) hoặc dùng test DB riêng.

- **Frontend (React/Vite)** – optional:
  - Nếu viết unit-test FE:
    - test hook quan trọng (filter, query) và component có nhiều logic.

### 2. Integration tests (API)

- Dùng FastAPI TestClient hoặc pytest-asyncio để test:
  - `backend/api/memos/*`:
    - list memos với filter ngày/tag,
    - comments,
    - shortcuts (nếu cần).
  - `backend/api/chatbot/*`:
    - `/api/agent/chat` với query đơn giản,
    - `/api/history/{identity_key}` (history + load-more).
- Mục tiêu:
  - Request/response đúng schema,
  - status code chuẩn (2xx, 4xx, 5xx),
  - logic visibility PRIVATE/PROTECTED/PUBLIC hoạt động đúng.

### 3. End-to-End (E2E) tests

- Dùng **Playwright** đã cấu hình trong `frontend`:
  - Kịch bản E2E chính:
    - Tạo note mới với `#tag`.
    - Filter theo tag.
    - Filter theo ngày hiện tại.
    - Mở trang About CuCu.
    - Dùng chatbot widget + load history.
- Thay vì viết lại tất cả, hãy:
  - Gợi ý người dùng dùng lệnh `/run-e2e <url>`  
    (đã gọi subagent `playwright-tester` theo đúng 2-phase).

### 4. Performance / Load (sau này)

- Gợi ý:
  - BE: gửi nhiều request `/memos`, `/api/agent/chat` với dữ liệu thật nhỏ, đo latency cơ bản.
  - FE: dùng Playwright đo thời gian load Home + About + mở widget chatbot.
  - Không cần quá phức tạp lúc đầu, chỉ cần smoke/perf cơ bản.

## Instructions (Agent phải làm gì)

1. **Khi user bảo “chạy test” hoặc “check xem có vỡ gì không”:**
   - Xác định scope:
     - Nếu chỉ đổi FE → đề xuất `pnpm lint` + `/run-e2e`.
     - Nếu chỉ đổi BE → đề xuất `pytest` + `ruff/black`.
     - Nếu đổi cả 2 → combo cả FE + BE.
   - Dùng context từ repo để gợi ý **lệnh cụ thể** (nhưng đừng bịa).

2. **Khi thấy test fail:**
   - Đọc log/lỗi.
   - Xác định loại test (unit/integration/E2E).
   - Gợi ý cách sửa **giữ nguyên intent test**:
     - update code nếu bug thật,
     - update test nếu test sai assumption.

3. **Luôn nhắc về coverage & priorites:**
   - Ưu tiên test cho phần:
     - API memos / comments,
     - chatbot / history,
     - filter ngày/tag.
   - Nếu user hỏi về coverage, gợi ý:
     - Dùng pytest + coverage (hoặc tool tương đương),
     - Nhắm tối thiểu ~80% cho module quan trọng.


