diff options
Diffstat (limited to 'src/lib/server')
| -rw-r--r-- | src/lib/server/db/groceries.test.ts | 20 | ||||
| -rw-r--r-- | src/lib/server/db/schema.ts | 6 |
2 files changed, 21 insertions, 5 deletions
diff --git a/src/lib/server/db/groceries.test.ts b/src/lib/server/db/groceries.test.ts index b4f5050..bd14040 100644 --- a/src/lib/server/db/groceries.test.ts +++ b/src/lib/server/db/groceries.test.ts @@ -1,24 +1,30 @@ import { describe, it, expect, beforeEach } from 'vitest'; import { drizzle } from 'drizzle-orm/libsql'; import { createClient } from '@libsql/client'; -import { groceries } from '$lib/server/db/schema'; +import { groceries, categories } from '$lib/server/db/schema'; import { eq } from 'drizzle-orm'; describe('groceries add', () => { const client = createClient({ url: ':memory:' }); - const db = drizzle(client, { schema: { groceries } }); + const db = drizzle(client, { schema: { groceries, categories } }); beforeEach(async () => { await db.run(`DROP TABLE IF EXISTS groceries`); + await db.run(`DROP TABLE IF EXISTS categories`); + await db.run(`CREATE TABLE categories ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL + )`); await db.run(`CREATE TABLE groceries ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, checked INTEGER NOT NULL DEFAULT 0, - created_at TEXT NOT NULL + created_at TEXT NOT NULL, + category_id INTEGER REFERENCES categories(id) )`); }); - async function addItem(name: string) { + async function addItem(name: string, categoryId?: number | null) { const existing = await db .select() .from(groceries) @@ -28,11 +34,15 @@ describe('groceries add', () => { if (existing.length > 0) { await db .update(groceries) - .set({ checked: false }) + .set({ + checked: false, + categoryId: categoryId ?? existing[0].categoryId, + }) .where(eq(groceries.id, existing[0].id)); } else { await db.insert(groceries).values({ name, + categoryId, createdAt: new Date().toISOString(), }); } diff --git a/src/lib/server/db/schema.ts b/src/lib/server/db/schema.ts index 403ef51..1d5fd9e 100644 --- a/src/lib/server/db/schema.ts +++ b/src/lib/server/db/schema.ts @@ -1,8 +1,14 @@ import { sqliteTable, text, integer } from 'drizzle-orm/sqlite-core'; +export const categories = sqliteTable('categories', { + id: integer('id').primaryKey({ autoIncrement: true }), + name: text('name').notNull().unique(), +}); + export const groceries = sqliteTable('groceries', { id: integer('id').primaryKey({ autoIncrement: true }), name: text('name').notNull().unique(), checked: integer('checked', { mode: 'boolean' }).notNull().default(false), createdAt: text('created_at').notNull(), + categoryId: integer('category_id').references(() => categories.id), }); |
