feat(blog): wire instrumentation — repo spans + use-case/controller withSpan + logger capture
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
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);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user