aboutsummaryrefslogtreecommitdiff
path: root/src/lib/server/services/groceries.test.ts
diff options
context:
space:
mode:
authorMartin Kagamino Lehoux <martin@lehoux.net>2026-10-18 22:22:55 +0200
committerMartin Kagamino Lehoux <martin@lehoux.net>2026-10-18 22:22:55 +0200
commit4efed80a2f8dc238b420eadf97d56c3eccaadb76 (patch)
tree7732a80745622c097a9e75dfb056603bceb10a23 /src/lib/server/services/groceries.test.ts
parent0685e9ece66fbcb09c9457027cf7bb2107cc0171 (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.ts30
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);