61 lines
1.9 KiB
TypeScript
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();
|
|
});
|
|
});
|