diff options
| author | Martin Kagamino Lehoux <martin@lehoux.net> | 2026-10-18 22:22:55 +0200 |
|---|---|---|
| committer | Martin Kagamino Lehoux <martin@lehoux.net> | 2026-10-18 22:22:55 +0200 |
| commit | 4efed80a2f8dc238b420eadf97d56c3eccaadb76 (patch) | |
| tree | 7732a80745622c097a9e75dfb056603bceb10a23 /src/lib/server/services/groceries.test.ts | |
| parent | 0685e9ece66fbcb09c9457027cf7bb2107cc0171 (diff) | |
refactor: inject the database into every servicemain
Groceries, projects, references and routines become classes holding the
Drizzle handle, wired once in services/index.ts alongside categories. Tests
build their own instance on an in-memory database. Drops the unused
projects.loadAll and projects.rename.
Diffstat (limited to 'src/lib/server/services/groceries.test.ts')
| -rw-r--r-- | src/lib/server/services/groceries.test.ts | 30 |
1 files changed, 13 insertions, 17 deletions
diff --git a/src/lib/server/services/groceries.test.ts b/src/lib/server/services/groceries.test.ts index dbf46b7..a37e549 100644 --- a/src/lib/server/services/groceries.test.ts +++ b/src/lib/server/services/groceries.test.ts @@ -2,19 +2,15 @@ import { describe, it, expect, beforeEach } from 'vitest'; import { groceries, categories, references } from '$lib/server/db/schema'; import { eq } from 'drizzle-orm'; import { createTestDb, type TestDb } from '$lib/server/db/test-helper'; -import { - loadUnchecked, - loadAll, - toggle, - addOrUncheck, - deleteGrocery, -} from './groceries'; +import { GroceriesService } from './groceries'; describe('groceries service', () => { let db: TestDb['db']; + let service: GroceriesService; beforeEach(async () => { db = (await createTestDb()).db; + service = new GroceriesService(db); }); it('loadUnchecked returns only unchecked items', async () => { @@ -26,7 +22,7 @@ describe('groceries service', () => { { name: 'bread', checked: true, createdAt: now }, ]); - const result = await loadUnchecked(db); + const result = await service.loadUnchecked(); expect(result.items).toHaveLength(1); expect(result.items[0].name).toBe('milk'); }); @@ -40,7 +36,7 @@ describe('groceries service', () => { { name: 'bread', checked: true, createdAt: now }, ]); - const result = await loadAll(db); + const result = await service.loadAll(); expect(result.items).toHaveLength(2); }); @@ -53,10 +49,10 @@ describe('groceries service', () => { { name: 'bread', checked: false, createdAt: now }, ]); - const unchecked = await loadUnchecked(db); + const unchecked = await service.loadUnchecked(); expect(unchecked.items.map((i) => i.name)).toEqual(['bread', 'milk']); - const all = await loadAll(db); + const all = await service.loadAll(); expect(all.items.map((i) => i.name)).toEqual(['bread', 'milk']); }); @@ -73,7 +69,7 @@ describe('groceries service', () => { { groceryId: g.id, reference: 'Brand B', qualityScore: 80 }, ]); - const result = await loadAll(db); + const result = await service.loadAll(); expect(result.items[0].bestRef?.reference).toBe('Brand A'); }); @@ -97,7 +93,7 @@ describe('groceries service', () => { .set({ isPrimary: true }) .where(eq(references.id, b.id)); - const result = await loadAll(db); + const result = await service.loadAll(); expect(result.items[0].bestRef?.reference).toBe('Brand B'); }); @@ -110,7 +106,7 @@ describe('groceries service', () => { .values({ name: 'milk', checked: false, createdAt: now }); const [item] = await db.select().from(groceries); - await toggle(item.id, db); + await service.toggle(item.id); const [updated] = await db .select() @@ -120,7 +116,7 @@ describe('groceries service', () => { }); it('addOrUncheck creates a new grocery', async () => { - const { item, created } = await addOrUncheck('eggs', null, db); + const { item, created } = await service.addOrUncheck('eggs', null); expect(created).toBe(true); expect(item.name).toBe('eggs'); @@ -137,7 +133,7 @@ describe('groceries service', () => { .insert(groceries) .values({ name: 'milk', checked: true, createdAt: now }); - const { item, created } = await addOrUncheck('milk', null, db); + const { item, created } = await service.addOrUncheck('milk', null); expect(created).toBe(false); expect(item.checked).toBe(false); @@ -156,7 +152,7 @@ describe('groceries service', () => { .values({ name: 'milk', checked: false, createdAt: now }); const [item] = await db.select().from(groceries); - await deleteGrocery(item.id, db); + await service.deleteGrocery(item.id); const rows = await db.select().from(groceries); expect(rows).toHaveLength(0); |
