27 lines
863 B
TypeScript
27 lines
863 B
TypeScript
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
import { createSessionSlug } from "./session-slug.js";
|
|
|
|
describe("session slug", () => {
|
|
afterEach(() => {
|
|
vi.restoreAllMocks();
|
|
});
|
|
|
|
it("generates a two-word slug by default", () => {
|
|
vi.spyOn(Math, "random").mockReturnValue(0);
|
|
const slug = createSessionSlug();
|
|
expect(slug).toBe("amber-atlas");
|
|
});
|
|
|
|
it("adds a numeric suffix when the base slug is taken", () => {
|
|
vi.spyOn(Math, "random").mockReturnValue(0);
|
|
const slug = createSessionSlug((id) => id === "amber-atlas");
|
|
expect(slug).toBe("amber-atlas-2");
|
|
});
|
|
|
|
it("falls back to three words when collisions persist", () => {
|
|
vi.spyOn(Math, "random").mockReturnValue(0);
|
|
const slug = createSessionSlug((id) => /^amber-atlas(-\d+)?$/.test(id));
|
|
expect(slug).toBe("amber-atlas-atlas");
|
|
});
|
|
});
|