mirror of
https://github.com/furyhawk/ai_agent.git
synced 2026-07-21 10:15:44 +00:00
- Implemented `conversation-store` for managing conversations and messages. - Created `file-preview-store` to handle file preview state. - Added `sidebar-store` for sidebar visibility management. - Developed `theme-store` for theme persistence and management. - Introduced `kb-selection-store` for managing active knowledge base selections with persistence. chore: define API and chat types - Added types for API responses, authentication, chat messages, conversations, and projects. - Defined interfaces for various entities including users, sessions, and message ratings. build: configure TypeScript and testing setup - Set up `tsconfig.json` for TypeScript configuration. - Created `vitest.config.ts` for testing configuration with Vitest. - Added `vitest.setup.ts` for global test setup including mocks for Next.js router and media queries. - Configured Vercel deployment settings in `vercel.json`.
2.2 KiB
2.2 KiB
Testing Guide
Running Tests
cd backend
# Run all tests
pytest
# Run with coverage
pytest --cov=app --cov-report=term-missing
# Run specific test file
pytest tests/api/test_health.py -v
# Run specific test
pytest tests/api/test_health.py::test_health_check -v
# Run only unit tests
pytest tests/unit/
# Run only integration tests
pytest tests/integration/
# Run with verbose output
pytest -v
# Stop on first failure
pytest -x
Test Structure
tests/
├── conftest.py # Shared fixtures
├── api/ # API endpoint tests
│ ├── test_health.py
│ └── test_auth.py
├── unit/ # Unit tests (services, utils)
│ └── test_services.py
└── integration/ # Integration tests
└── test_db.py
Key Fixtures (conftest.py)
# Database session for tests
@pytest.fixture
async def db_session():
async with async_session() as session:
yield session
await session.rollback()
# Test client
@pytest.fixture
def client():
return TestClient(app)
# Authenticated client
@pytest.fixture
async def auth_client(client, test_user):
token = create_access_token(test_user.id)
client.headers["Authorization"] = f"Bearer {token}"
return client
Writing Tests
API Endpoint Test
def test_health_check(client):
response = client.get("/api/v1/health")
assert response.status_code == 200
assert response.json()["status"] == "healthy"
Service Test
async def test_create_item(db_session):
service = ItemService(db_session)
item = await service.create(ItemCreate(name="Test"))
assert item.name == "Test"
Test with Authentication
def test_protected_endpoint(auth_client):
response = auth_client.get("/api/v1/users/me")
assert response.status_code == 200
Frontend Tests
cd frontend
# Run unit tests
bun test
# Run with watch mode
bun test --watch
# Run E2E tests
bun test:e2e
# Run E2E in headed mode (see browser)
bun test:e2e --headed
Test Database
Tests use a separate test database or SQLite in-memory:
- Configuration in
tests/conftest.py - Database is reset between tests
- Use fixtures for test data