# Test Database Feature

> Run repository integration tests against a local MySQL database for the RAPID backend. Use after implementing new repository methods, modifying Prisma database schema, testing use cases that depend on database access, or verifying data access patterns. Use when this capability is needed.

- Skill: `tomevault-io/test-database-feature` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add tomevault-io/test-database-feature`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tomevault-io/test-database-feature/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra
- Author: tomevault-io (https://skillmd.com/u/tomevault-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tomevault-io/test-database-feature

---


# Test Database Feature

## Prerequisites

### 1. Start Local Database

```bash
docker-compose -f assets/local/docker-compose.yml up -d
```

Database: `localhost:3306`, DB: `rapid_db`, User: `rapid_user`, Password: `rapid_password`

### 2. Setup Prisma

```bash
cd backend
npm run prisma:generate
npm run prisma:migrate
```

## Repository Integration Test Pattern

Repository tests MUST connect to actual database (not mocks).

```typescript
import { describe, it, expect, beforeEach, afterAll } from 'vitest';
import { PrismaClient } from '@prisma/client';
import { makeYourRepository } from '../domain/repository';

const prisma = new PrismaClient();

describe('YourRepository Integration Tests', () => {
  beforeEach(async () => {
    await prisma.yourModel.deleteMany();
  });

  afterAll(async () => {
    await prisma.$disconnect();
  });

  it('should create and retrieve entity', async () => {
    const repo = makeYourRepository(prisma);
    const entity = { id: 'test-1', name: 'Test Entity' };

    await repo.storeEntity({ entity });
    const retrieved = await repo.findEntityById('test-1');

    expect(retrieved).not.toBeNull();
    expect(retrieved?.name).toBe('Test Entity');
  });
});
```

## Test Organization

```
backend/src/api/features/{feature}/__tests__/
├── repository-integration.test.ts  # Database integration tests
├── usecase.test.ts                 # Use case unit tests (mocked repo)
└── handlers.test.ts                # Handler unit tests (mocked usecase)
```

## Running Tests

```bash
cd backend
npm test                          # All tests
npm run test -- {test-name}       # Specific test suite
npm run test:watch                # Watch mode
npm run test:coverage             # With coverage
```

## Quick Commands

| Task | Command |
|------|---------|
| Start DB | `docker-compose -f assets/local/docker-compose.yml up -d` |
| Stop DB | `docker-compose -f assets/local/docker-compose.yml down` |
| Reset DB | Add `-v` to down, then up + migrate |
| Run migrations | `cd backend && npm run prisma:migrate` |
| Prisma Studio | `cd backend && npm run prisma:studio` (http://localhost:5555) |

## Success Criteria

- Docker container running
- Migrations applied
- All repository integration tests pass
- Ready to run `/build-and-format` for final verification

---
> Converted and distributed by [TomeVault](https://tomevault.io/claim/aws-samples) — claim your Tome and manage your conversions.
<!-- tomevault:4.0:skill_md:2026-04-11 -->

