feat(marketing-pages): add getPageBySlugUseCase (test red until DI lands)

This commit is contained in:
2026-05-05 08:28:12 +02:00
parent 63801bf3dc
commit 141e007d22
2 changed files with 43 additions and 0 deletions

View File

@@ -0,0 +1,30 @@
import { beforeEach, describe, expect, it } from "vitest";
import { marketingPagesContainer } from "@/di/container";
import { MARKETING_PAGES_SYMBOLS } from "@/di/symbols";
import { MockPagesRepository } from "@/infrastructure/repositories/mock-pages.repository";
import type { IPagesRepository } from "@/application/repositories/pages-repository.interface";
import { getPageBySlugUseCase } from "./get-page-by-slug.use-case";
describe("getPageBySlugUseCase", () => {
let repo: MockPagesRepository;
beforeEach(() => {
if (marketingPagesContainer.isBound(MARKETING_PAGES_SYMBOLS.IPagesRepository)) {
marketingPagesContainer.unbind(MARKETING_PAGES_SYMBOLS.IPagesRepository);
}
repo = new MockPagesRepository();
marketingPagesContainer
.bind<IPagesRepository>(MARKETING_PAGES_SYMBOLS.IPagesRepository)
.toConstantValue(repo);
});
it("returns the page when found", async () => {
const result = await getPageBySlugUseCase("about");
expect(result?.slug).toBe("about");
});
it("returns undefined when not found", async () => {
const result = await getPageBySlugUseCase("missing-page");
expect(result).toBeUndefined();
});
});

View File

@@ -0,0 +1,13 @@
import type { Page } from "../../entities/page";
import { marketingPagesContainer } from "../../di/container";
import { MARKETING_PAGES_SYMBOLS } from "../../di/symbols";
import type { IPagesRepository } from "../repositories/pages-repository.interface";
export async function getPageBySlugUseCase(
slug: string,
): Promise<Page | undefined> {
const repo = marketingPagesContainer.get<IPagesRepository>(
MARKETING_PAGES_SYMBOLS.IPagesRepository,
);
return repo.getPageBySlug(slug);
}