import { describe, it, expect } from 'vitest'; import { eq } from 'drizzle-orm'; import { db } from '../src/db/client'; import { activities, workSessions, user } from '../src/db/schema'; import { createApp } from '../src/app'; const json = { 'content-type': 'application/json' }; describe('domain schema', () => { it('creates and reads back an activity with a json insole_types array', async () => { const [inserted] = await db .insert(activities) .values({ name: 'Frezen', insoleTypes: ['Kurk', 'Berk'] }) .returning(); const [row] = await db.select().from(activities).where(eq(activities.id, inserted.id)); expect(row.name).toBe('Frezen'); expect(row.insoleTypes).toEqual(['Kurk', 'Berk']); }); it('defaults a work_sessions row to status=active, source=app, pair_count=2, null end_time', async () => { const app = createApp(); const creds = { email: 'schema-user@example.com', password: 'sterk-wachtwoord-123', name: 'Schema User', }; await app.request('/api/auth/sign-up/email', { method: 'POST', headers: json, body: JSON.stringify(creds), }); const [createdUser] = await db.select().from(user).where(eq(user.email, creds.email)); expect(createdUser).toBeTruthy(); const [activity] = await db .insert(activities) .values({ name: 'Slijpen', insoleTypes: ['Kurk', 'Berk', '3D'] }) .returning(); const [inserted] = await db .insert(workSessions) .values({ userId: createdUser.id, activityId: activity.id, startTime: new Date(), }) .returning(); const [row] = await db.select().from(workSessions).where(eq(workSessions.id, inserted.id)); expect(row.status).toBe('active'); expect(row.source).toBe('app'); expect(row.pairCount).toBe(2); expect(row.endTime).toBeNull(); expect(row.durationSeconds).toBeNull(); }); });