diff --git a/packages/marketing-pages/src/application/use-cases/get-page-by-slug.use-case.test.ts b/packages/marketing-pages/src/application/use-cases/get-page-by-slug.use-case.test.ts new file mode 100644 index 0000000..24aab56 --- /dev/null +++ b/packages/marketing-pages/src/application/use-cases/get-page-by-slug.use-case.test.ts @@ -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(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(); + }); +}); diff --git a/packages/marketing-pages/src/application/use-cases/get-page-by-slug.use-case.ts b/packages/marketing-pages/src/application/use-cases/get-page-by-slug.use-case.ts new file mode 100644 index 0000000..f4b7954 --- /dev/null +++ b/packages/marketing-pages/src/application/use-cases/get-page-by-slug.use-case.ts @@ -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 { + const repo = marketingPagesContainer.get( + MARKETING_PAGES_SYMBOLS.IPagesRepository, + ); + return repo.getPageBySlug(slug); +}