mirror of
https://github.com/fastapi/full-stack-fastapi-template.git
synced 2026-09-24 06:30:19 +00:00
60 lines
1.1 KiB
TypeScript
60 lines
1.1 KiB
TypeScript
import type { APIRequestContext } from "@playwright/test"
|
|
|
|
type Address = {
|
|
Name: string
|
|
Address: string
|
|
}
|
|
|
|
type Email = {
|
|
ID: string
|
|
To: Address[]
|
|
Subject: string
|
|
}
|
|
|
|
async function findEmail({
|
|
request,
|
|
query,
|
|
}: {
|
|
request: APIRequestContext
|
|
query: string
|
|
}) {
|
|
const response = await request.get(
|
|
`${process.env.MAILPIT_HOST}/api/v1/search`,
|
|
{
|
|
params: { query, limit: 1 },
|
|
},
|
|
)
|
|
|
|
const { messages }: { messages: Email[] } = await response.json()
|
|
|
|
return messages[0] ?? null
|
|
}
|
|
|
|
export async function findLastEmail({
|
|
request,
|
|
query,
|
|
timeout = 5000,
|
|
}: {
|
|
request: APIRequestContext
|
|
query: string
|
|
timeout?: number
|
|
}) {
|
|
const deadline = Date.now() + timeout
|
|
|
|
while (Date.now() < deadline) {
|
|
const email = await findEmail({ request, query })
|
|
|
|
if (email) {
|
|
return email
|
|
}
|
|
|
|
await new Promise((resolve) => setTimeout(resolve, 100))
|
|
}
|
|
|
|
throw new Error(`Timeout while trying to get the latest email for "${query}"`)
|
|
}
|
|
|
|
export function emailUrl(email: Email) {
|
|
return `${process.env.MAILPIT_HOST}/view/${email.ID}.html`
|
|
}
|