workspace-time-migration.test.ts 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  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 { 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, "../../migration"), { withFileTypes: true })
  10. .filter((entry) => entry.isDirectory())
  11. .map((entry) => ({
  12. name: entry.name,
  13. timestamp: Number(entry.name.split("_")[0]),
  14. sql: readFileSync(path.join(import.meta.dirname, "../../migration", entry.name, "migration.sql"), "utf-8"),
  15. }))
  16. .sort((a, b) => a.timestamp - b.timestamp)
  17. }
  18. describe("workspace time migration", () => {
  19. test("migrates existing workspace rows", () => {
  20. const sqlite = new Database(":memory:")
  21. const db = drizzle({ client: sqlite })
  22. const entries = migrations()
  23. const index = entries.findIndex((entry) => entry.name === target)
  24. expect(index).toBeGreaterThan(0)
  25. migrate(db, entries.slice(0, index))
  26. sqlite.run(
  27. "INSERT INTO project (id, worktree, vcs, name, time_created, time_updated, sandboxes) VALUES (?, ?, ?, ?, ?, ?, ?)",
  28. ["project_1", "/tmp/project", "git", "project", 1, 1, "[]"],
  29. )
  30. sqlite.run(
  31. "INSERT INTO workspace (id, type, name, branch, directory, extra, project_id) VALUES (?, ?, ?, ?, ?, ?, ?)",
  32. ["workspace_1", "local", "main", "main", "/tmp/project", null, "project_1"],
  33. )
  34. expect(() => migrate(db, entries.slice(index))).not.toThrow()
  35. expect(sqlite.query("SELECT time_used FROM workspace WHERE id = ?").get("workspace_1")).toEqual({ time_used: 0 })
  36. })
  37. })