From 6a62ae50e80857b78947bbb1c9a8ec301bfe4754 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 10 Jan 2025 18:40:14 +0000 Subject: [PATCH] Wipe mailhog between test runs Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- playwright/services.ts | 25 +++++++++++------------ playwright/testcontainers/mailhog.ts | 30 ++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 13 deletions(-) create mode 100644 playwright/testcontainers/mailhog.ts diff --git a/playwright/services.ts b/playwright/services.ts index b480cbc4054..2a4d6ddf829 100644 --- a/playwright/services.ts +++ b/playwright/services.ts @@ -14,15 +14,18 @@ import { SynapseConfigOptions, SynapseContainer } from "./testcontainers/synapse import { ContainerLogger } from "./testcontainers/utils.ts"; import { StartedMatrixAuthenticationServiceContainer } from "./testcontainers/mas.ts"; import { HomeserverContainer, StartedHomeserverContainer } from "./testcontainers/HomeserverContainer.ts"; +import { MailhogContainer, StartedMailhogContainer } from "./testcontainers/mailhog.ts"; + +interface TestFixtures { + mailhogClient: mailhog.API; +} export interface Services { logger: ContainerLogger; network: StartedNetwork; postgres: StartedPostgreSqlContainer; - - mailhog: StartedTestContainer; - mailhogClient: mailhog.API; + mailhog: StartedMailhogContainer; synapseConfigOptions: SynapseConfigOptions; _homeserver: HomeserverContainer; @@ -30,7 +33,7 @@ export interface Services { mas?: StartedMatrixAuthenticationServiceContainer; } -export const test = base.extend<{}, Services>({ +export const test = base.extend({ logger: [ // eslint-disable-next-line no-empty-pattern async ({}, use) => { @@ -79,24 +82,20 @@ export const test = base.extend<{}, Services>({ mailhog: [ async ({ logger, network }, use) => { - const container = await new GenericContainer("mailhog/mailhog:latest") + const container = await new MailhogContainer() .withNetwork(network) .withNetworkAliases("mailhog") - .withExposedPorts(8025) .withLogConsumer(logger.getConsumer("mailhog")) - .withWaitStrategy(Wait.forListeningPorts()) .start(); await use(container); await container.stop(); }, { scope: "worker" }, ], - mailhogClient: [ - async ({ mailhog: container }, use) => { - await use(mailhog({ host: container.getHost(), port: container.getMappedPort(8025) })); - }, - { scope: "worker" }, - ], + mailhogClient: async ({ mailhog: container }, use) => { + await use(container.client); + await container.client.deleteAll(); + }, synapseConfigOptions: [{}, { option: true, scope: "worker" }], _homeserver: [ diff --git a/playwright/testcontainers/mailhog.ts b/playwright/testcontainers/mailhog.ts new file mode 100644 index 00000000000..c3305607d89 --- /dev/null +++ b/playwright/testcontainers/mailhog.ts @@ -0,0 +1,30 @@ +/* +Copyright 2024 New Vector Ltd. + +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial +Please see LICENSE files in the repository root for full details. +*/ + +import { AbstractStartedContainer, GenericContainer, StartedTestContainer, Wait } from "testcontainers"; +import mailhog from "mailhog"; + +export class MailhogContainer extends GenericContainer { + constructor() { + super("mailhog/mailhog:latest"); + + this.withExposedPorts(8025).withWaitStrategy(Wait.forListeningPorts()); + } + + public override async start(): Promise { + return new StartedMailhogContainer(await super.start()); + } +} + +export class StartedMailhogContainer extends AbstractStartedContainer { + public readonly client: mailhog.API; + + constructor(container: StartedTestContainer) { + super(container); + this.client = mailhog({ host: container.getHost(), port: container.getMappedPort(8025) }); + } +}