50 lines
1.6 KiB
TypeScript
50 lines
1.6 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 { createTestUser } from './helpers';
|
|
|
|
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 email = 'schema-user@example.com';
|
|
await createTestUser(email);
|
|
|
|
const [createdUser] = await db.select().from(user).where(eq(user.email, 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();
|
|
});
|
|
});
|