import { afterAll, afterEach, beforeAll, describe, expect, it } from "vitest"; import { companies, createDb } from "@paperclipai/db"; import { getEmbeddedPostgresTestSupport, startEmbeddedPostgresTestDatabase, } from "./helpers/embedded-postgres.js"; import { companyService } from "../services/companies.js"; const embeddedPostgresSupport = await getEmbeddedPostgresTestSupport(); const describeEmbeddedPostgres = embeddedPostgresSupport.supported ? describe : describe.skip; if (!embeddedPostgresSupport.supported) { console.warn( `Skipping embedded Postgres company service tests on this host: ${embeddedPostgresSupport.reason ?? "unsupported environment"}`, ); } describeEmbeddedPostgres("companyService", () => { let db!: ReturnType; let tempDb: Awaited> | null = null; beforeAll(async () => { tempDb = await startEmbeddedPostgresTestDatabase("paperclip-company-service-"); db = createDb(tempDb.connectionString); }, 20_000); afterEach(async () => { await db.delete(companies); }); afterAll(async () => { await tempDb?.cleanup(); }); it("retries generated issue prefixes when Drizzle wraps the unique constraint error", async () => { await db.insert(companies).values({ name: "Aron Existing", issuePrefix: "ARO", }); const created = await companyService(db).create({ name: "Aron & Sharon", }); expect(created.issuePrefix).toBe("AROA"); const rows = await db.select({ issuePrefix: companies.issuePrefix }).from(companies); expect(rows.map((row) => row.issuePrefix).sort()).toEqual(["ARO", "AROA"]); }); });