diff --git a/packages/marketing-pages/src/di/container.test.ts b/packages/marketing-pages/src/di/container.test.ts new file mode 100644 index 0000000..782cce8 --- /dev/null +++ b/packages/marketing-pages/src/di/container.test.ts @@ -0,0 +1,33 @@ +import { afterEach, beforeEach, describe, expect, it } from "vitest"; +import { marketingPagesContainer } from "./container"; +import { MARKETING_PAGES_SYMBOLS } from "./symbols"; +import { MarketingPagesModule } from "./module"; +import { MockPagesRepository } from "@/infrastructure/repositories/mock-pages.repository"; +import { MockSiteSettingsRepository } from "@/infrastructure/repositories/mock-site-settings.repository"; +import type { IPagesRepository } from "@/application/repositories/pages-repository.interface"; +import type { ISiteSettingsRepository } from "@/application/repositories/site-settings-repository.interface"; + +describe("marketingPagesContainer", () => { + beforeEach(() => { + marketingPagesContainer.unbindAll(); + marketingPagesContainer.load(MarketingPagesModule); + }); + + afterEach(() => { + marketingPagesContainer.unbindAll(); + }); + + it("resolves IPagesRepository to MockPagesRepository", () => { + const repo = marketingPagesContainer.get( + MARKETING_PAGES_SYMBOLS.IPagesRepository, + ); + expect(repo).toBeInstanceOf(MockPagesRepository); + }); + + it("resolves ISiteSettingsRepository to MockSiteSettingsRepository", () => { + const repo = marketingPagesContainer.get( + MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository, + ); + expect(repo).toBeInstanceOf(MockSiteSettingsRepository); + }); +}); diff --git a/packages/marketing-pages/src/di/container.ts b/packages/marketing-pages/src/di/container.ts new file mode 100644 index 0000000..f9b4c00 --- /dev/null +++ b/packages/marketing-pages/src/di/container.ts @@ -0,0 +1,8 @@ +import "reflect-metadata"; +import { Container } from "inversify"; +import { MarketingPagesModule } from "./module"; + +export const marketingPagesContainer = new Container({ + defaultScope: "Singleton", +}); +marketingPagesContainer.load(MarketingPagesModule); diff --git a/packages/marketing-pages/src/di/module.ts b/packages/marketing-pages/src/di/module.ts new file mode 100644 index 0000000..2f5c157 --- /dev/null +++ b/packages/marketing-pages/src/di/module.ts @@ -0,0 +1,18 @@ +import { ContainerModule, type interfaces } from "inversify"; + +import type { IPagesRepository } from "../application/repositories/pages-repository.interface"; +import type { ISiteSettingsRepository } from "../application/repositories/site-settings-repository.interface"; +import { MockPagesRepository } from "../infrastructure/repositories/mock-pages.repository"; +import { MockSiteSettingsRepository } from "../infrastructure/repositories/mock-site-settings.repository"; +import { MARKETING_PAGES_SYMBOLS } from "./symbols"; + +export const MarketingPagesModule = new ContainerModule( + (bind: interfaces.Bind) => { + bind(MARKETING_PAGES_SYMBOLS.IPagesRepository).to( + MockPagesRepository, + ); + bind( + MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository, + ).to(MockSiteSettingsRepository); + }, +); diff --git a/packages/marketing-pages/src/di/symbols.ts b/packages/marketing-pages/src/di/symbols.ts new file mode 100644 index 0000000..7f82590 --- /dev/null +++ b/packages/marketing-pages/src/di/symbols.ts @@ -0,0 +1,4 @@ +export const MARKETING_PAGES_SYMBOLS = { + IPagesRepository: Symbol.for("marketing-pages:IPagesRepository"), + ISiteSettingsRepository: Symbol.for("marketing-pages:ISiteSettingsRepository"), +} as const;