workspace-time-migration.test.ts 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import { describe, expect, test } from "bun:test"
  2. import { Database } from "bun:sqlite"
  3. import { drizzle } from "drizzle-orm/bun-sqlite"
  4. import { migrate } from "drizzle-orm/bun-sqlite/migrator"
  5. import { existsSync, readFileSync, readdirSync } from "fs"
  6. import path from "path"
  7. const target = "20260507164347_add_workspace_time"
  8. function migrations() {
  9. return readdirSync(path.join(import.meta.dirname, "../../../core/migration"), { withFileTypes: true })
  10. .filter(
  11. (entry) =>
  12. entry.isDirectory() &&
  13. existsSync(path.join(import.meta.dirname, "../../../core/migration", entry.name, "migration.sql")),
  14. )
  15. .map((entry) => ({
  16. name: entry.name,
  17. timestamp: Number(entry.name.split("_")[0]),
  18. sql: readFileSync(
  19. path.join(import.meta.dirname, "../../../core/migration", entry.name, "migration.sql"),
  20. "utf-8",
  21. ),
  22. }))
  23. .sort((a, b) => a.timestamp - b.timestamp)
  24. }
  25. describe("workspace time migration", () => {
  26. test("migrates existing workspace rows", () => {
  27. const sqlite = new Database(":memory:")
  28. const db = drizzle({ client: sqlite })
  29. const entries = migrations()
  30. const index = entries.findIndex((entry) => entry.name === target)
  31. expect(index).toBeGreaterThan(0)
  32. migrate(db, entries.slice(0, index))
  33. sqlite.run(
  34. "INSERT INTO project (id, worktree, vcs, name, time_created, time_updated, sandboxes) VALUES (?, ?, ?, ?, ?, ?, ?)",
  35. ["project_1", "/tmp/project", "git", "project", 1, 1, "[]"],
  36. )
  37. sqlite.run(
  38. "INSERT INTO workspace (id, type, name, branch, directory, extra, project_id) VALUES (?, ?, ?, ?, ?, ?, ?)",
  39. ["workspace_1", "local", "main", "main", "/tmp/project", null, "project_1"],
  40. )
  41. expect(() => migrate(db, entries.slice(index))).not.toThrow()
  42. expect(sqlite.query("SELECT time_used FROM workspace WHERE id = ?").get("workspace_1")).toEqual({ time_used: 0 })
  43. })
  44. })