aboutsummaryrefslogtreecommitdiff
path: root/src/lib/server/services/references.test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/server/services/references.test.ts')
-rw-r--r--src/lib/server/services/references.test.ts35
1 files changed, 34 insertions, 1 deletions
diff --git a/src/lib/server/services/references.test.ts b/src/lib/server/services/references.test.ts
index bcefbd0..fa3fc97 100644
--- a/src/lib/server/services/references.test.ts
+++ b/src/lib/server/services/references.test.ts
@@ -2,7 +2,7 @@ import { describe, it, expect, beforeEach } from 'vitest';
import { groceries, references } from '$lib/server/db/schema';
import { eq } from 'drizzle-orm';
import { createTestDb, type TestDb } from '$lib/server/db/test-helper';
-import { loadForGrocery, add, deleteReference } from './references';
+import { loadForGrocery, add, promote, deleteReference } from './references';
describe('references service', () => {
let db: TestDb['db'];
@@ -73,6 +73,39 @@ describe('references service', () => {
expect(rows).toHaveLength(1);
});
+ it('promote puts the ref first and clears any sibling primary', async () => {
+ const now = Temporal.Now.instant().toString({
+ smallestUnit: 'millisecond',
+ });
+ const [g] = await db
+ .insert(groceries)
+ .values({ name: 'coffee', checked: false, createdAt: now })
+ .returning();
+ const [a] = await db
+ .insert(references)
+ .values({ groceryId: g.id, reference: 'A', qualityScore: 90 })
+ .returning();
+ const [b] = await db
+ .insert(references)
+ .values({ groceryId: g.id, reference: 'B' })
+ .returning();
+
+ await promote(b.id, db);
+ let refs = await loadForGrocery(g.id, db);
+ expect(refs.map((r) => r.reference)).toEqual(['B', 'A']);
+
+ await promote(a.id, db);
+ refs = await loadForGrocery(g.id, db);
+ expect(refs.map((r) => r.reference)).toEqual(['A', 'B']);
+
+ const rows = await db
+ .select()
+ .from(references)
+ .where(eq(references.groceryId, g.id));
+ expect(rows.filter((r) => r.isPrimary)).toHaveLength(1);
+ expect(rows.find((r) => r.id === a.id)?.isPrimary).toBe(true);
+ });
+
it('deleteReference removes the ref', async () => {
const now = Temporal.Now.instant().toString({
smallestUnit: 'millisecond',