import { describe, it, expect } from "vitest"; import { RecordingTracer, RecordingLogger } from "@repo/core-testing/instrumentation"; import { MockArticlesRepository } from "@/infrastructure/repositories/articles.repository.mock"; // Mock repo also wraps in spans (R42); easier to assert without booting Payload. describe("MockArticlesRepository emits spans (R42)", () => { it("getArticles emits one span with op='repository'", async () => { const tracer = new RecordingTracer(); const logger = new RecordingLogger(); const repo = new MockArticlesRepository(tracer, logger); await repo.getArticles({ limit: 10 }); expect(tracer.spans).toHaveLength(1); expect(tracer.spans[0]).toMatchObject({ name: "articles.getArticles", op: "repository", }); expect(tracer.spans[0]!.attributes).toMatchObject({ limit: 10 }); }); it("createArticle emits a span with slug attribute", async () => { const tracer = new RecordingTracer(); const repo = new MockArticlesRepository(tracer); await repo.createArticle({ id: "a1", title: "T", slug: "t", content: null, status: "draft", authorId: "u1", createdAt: new Date(), updatedAt: new Date(), }); expect(tracer.findSpan("articles.createArticle")).toBeDefined(); expect(tracer.findSpan("articles.createArticle")!.attributes.slug).toBe("t"); }); it("getArticle records found=false for missing id", async () => { const tracer = new RecordingTracer(); const repo = new MockArticlesRepository(tracer); await repo.getArticle("missing"); expect(tracer.spans[0]!.attributes.found).toBe(false); }); });