Files
solelog/apps/api/test/schema.test.ts

61 lines
1.9 KiB
TypeScript

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();
});
});