UNPKG

nightwatch-plugin-mailhog

Version:

A TypeScript based @nightwatchjs plugin for interacting with, and asserting on, data within a @mailhog instance.

101 lines (96 loc) 4.95 kB
import type {Awaitable} from 'nightwatch'; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore Nightwatch setup does not yet support extensionless/directory imports. import type {IfUnknown} from 'nightwatch/types/utils'; import type {NightwatchAssertionsResult} from 'nightwatch/types/assertions'; import type {MailHogFindOptions, MailHogItem} from '../commands/mailhog.ts'; export * from 'nightwatch'; declare module 'nightwatch' { export interface NightwatchCustomAssertions<ReturnType> { /** * Asserts on the number of matching messages in the MailHog inbox. * @param expected the expected number of messages * @param comparison 'lessThanOrEqual' | 'greaterThanOrEqual' | 'equal' (default) * @param query e.g. an email address or substring * @param kind 'from' | 'to' | 'containing' (default) */ mailhogInboxCount: (expected: number, comparison?: 'lessThanOrEqual' | 'greaterThanOrEqual' | 'equal', query?: string, kind?: 'from' | 'to' | 'containing') => Awaitable<IfUnknown<ReturnType, this>, NightwatchAssertionsResult<number>>; } interface NightwatchCustomCommands { /** * Access all Mailhog commands under browser.mailhog */ mailhog: () => { /** * Deletes all emails in the MailHog inbox. */ deleteAllEmails: () => Awaitable<NightwatchAPI, Error | null>; /** * Deletes a specific email in the MailHog inbox. */ deleteEmail: (id: string) => Awaitable<NightwatchAPI, Error | null>; /** * Finds messages in the MailHog inbox. * @param queryOrOptions The query string or options to find the email. * If a string, it is treated as a 'containing' query by default. */ findEmails: (queryOrOptions: string | MailHogFindOptions, callback: (items: MailHogItem[]) => void | Promise<void>) => Awaitable<NightwatchAPI, Error | null>; /** * Finds the most recent email in the MailHog inbox matching the * query. This uses findEmails and toSortedByDate internally. * @param queryOrOptions The query string or options to find the email. * If a string, it is treated as a 'containing' query by default. */ findMostRecentEmail: (queryOrOptions: string | MailHogFindOptions, callback: (item: MailHogItem | undefined) => void | Promise<void>) => Awaitable<NightwatchAPI, Error | null>; /** * Retrieves a specific email in the MailHog inbox by its ID. */ getEmail: (id: string, callback: (item: MailHogItem) => void | Promise<void>) => Awaitable<NightwatchAPI, Error | null>; /** * Retrieves a one-time code from the MailHog inbox by searching * for an email, parses it, and then deletes that email. * Expects an element like: <code data-otp="one-time-code">123456</code> in the body. * @param queryOrOptions The query string or options to find the email. * If a string, it is treated as a 'to' email address query by default. */ getOneTimeCode: (queryOrOptions: string | MailHogFindOptions, callback: (code: string) => void | Promise<void>) => Awaitable<NightwatchAPI, Error | null>; /** * Retrieves the most recent email in the MailHog inbox. This * returns the items rather than an Awaitable browser, but uses * findEmails internally. */ performFindEmails: (queryOrOptions: string | MailHogFindOptions) => Promise<MailHogItem[]>; /** * Retrieves the most recent email in the MailHog inbox. This * returns the item rather than an Awaitable browser, but uses * findMostRecentEmail internally. */ performFindMostRecentEmail: (queryOrOptions: string | MailHogFindOptions) => Promise<MailHogItem | undefined>; /** * Retrieves a specific email in the MailHog inbox by its ID. * This returns the item rather than an Awaitable browser, but uses * getEmail internally. */ performGetEmail: (id: string) => Promise<MailHogItem>; /** * Retrieves a one-time code from the MailHog inbox by searching * for an email, parses it, and then deletes that email. * Expects an element like: <code data-otp="one-time-code">123456</code> in the body. * This returns the code rather than an Awaitable browser, but uses * getOneTimeCode internally. * @param queryOrOptions The query string or options to find the email. * If a string, it is treated as a 'to' email address query by default. */ performGetOneTimeCode: (queryOrOptions: string | MailHogFindOptions) => Promise<string>; /** * Sorts in descending order by date, based on the Header of the * email or the MailHog server timestamp (if no Header value exists). * Useful when trying to find the latest email matching a query. */ toSortedByDate: (items: MailHogItem[]) => MailHogItem[]; }; } } // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore Nightwatch setup does not yet support extensionless/directory imports. export type {MailHogFindOptions, MailHogItem} from '../commands/mailhog.ts';