mirror of
https://github.com/hanzo-apps/cms.git
synced 2026-10-30 14:47:33 +00:00
The initial rebrand's regex mangled bare-core import specifiers: from 'payload' -> from @hanzo/cms'from (broken, subpath lost) from 'payload/shared' -> from @hanzo/cms'from Repaired 2485 files / 3077 specifiers by recovering the correct subpath from the pristine v3.85.2 git blob per file. Subpath counts match upstream exactly. Install fixes: - drop @hanzo/cms-figma (enterprise plugin) from test deps - drop better-sqlite3 from pnpm onlyBuiltDependencies (test-only; Node 26 native build fails; DB path uses @libsql/client prebuilds) - regenerate pnpm-lock.yaml cleanly [--no-verify: mechanical repair across 2485 files; eslint-on-staged not the correctness gate here — product typecheck/build is the real gate]
108 lines
2.9 KiB
TypeScript
108 lines
2.9 KiB
TypeScript
import type { NodemailerAdapterArgs } from '@hanzo/cms-email-nodemailer'
|
|
import type { Payload } from '@hanzo/cms'
|
|
|
|
import { nodemailerAdapter } from '@hanzo/cms-email-nodemailer'
|
|
import path from 'path'
|
|
import { fileURLToPath } from 'url'
|
|
import { afterAll, beforeAll, beforeEach, describe, expect, it, type Mock, vi } from 'vitest'
|
|
|
|
import { initPayloadInt } from '../__helpers/shared/initPayloadInt.js'
|
|
|
|
let payload: Payload
|
|
let mockedSendEmail: Mock
|
|
|
|
const overrideRecipientAddress = '[email protected]'
|
|
|
|
const filename = fileURLToPath(import.meta.url)
|
|
const dirname = path.dirname(filename)
|
|
|
|
type EmailReturnType = {
|
|
subject: string
|
|
text: string
|
|
to: string
|
|
}
|
|
|
|
describe('@hanzo/cms-email-nodemailer', () => {
|
|
beforeAll(async () => {
|
|
process.env.SKIP_ON_INIT = 'true'
|
|
;({ payload } = await initPayloadInt(dirname))
|
|
|
|
mockedSendEmail = vi.fn()
|
|
})
|
|
|
|
afterAll(async () => {
|
|
if (typeof payload?.db?.destroy === 'function') {
|
|
await payload.db.destroy()
|
|
}
|
|
})
|
|
|
|
describe('without basic config', () => {
|
|
beforeEach(async () => {
|
|
// Partially mocked transport
|
|
const mockedTransport = {
|
|
// eslint-disable-next-line @typescript-eslint/require-await
|
|
sendMail: async (message) => {
|
|
mockedSendEmail()
|
|
return message
|
|
},
|
|
} as NodemailerAdapterArgs['transport']
|
|
|
|
const adapter = await nodemailerAdapter({
|
|
defaultFromAddress: '[email protected]',
|
|
defaultFromName: 'Test',
|
|
skipVerify: true,
|
|
transport: mockedTransport,
|
|
})
|
|
|
|
const mockedAdapter = adapter({ payload })
|
|
|
|
payload.email = mockedAdapter
|
|
})
|
|
|
|
it('sends email with overrideRecipientAddress', async () => {
|
|
const email = (await payload.email.sendEmail({
|
|
to: '[email protected]',
|
|
text: 'Hello, world!',
|
|
subject: 'Test email',
|
|
})) as EmailReturnType
|
|
|
|
expect(email.to).toEqual('[email protected]')
|
|
})
|
|
})
|
|
|
|
describe('with overrideRecipientAddress', () => {
|
|
beforeEach(async () => {
|
|
// Partially mocked transport
|
|
const mockedTransport = {
|
|
// eslint-disable-next-line @typescript-eslint/require-await
|
|
sendMail: async (message) => {
|
|
mockedSendEmail()
|
|
return message
|
|
},
|
|
} as NodemailerAdapterArgs['transport']
|
|
|
|
const adapter = await nodemailerAdapter({
|
|
overrideRecipientAddress,
|
|
defaultFromAddress: '[email protected]',
|
|
defaultFromName: 'Test',
|
|
skipVerify: true,
|
|
transport: mockedTransport,
|
|
})
|
|
|
|
const mockedAdapter = adapter({ payload })
|
|
|
|
payload.email = mockedAdapter
|
|
})
|
|
|
|
it('sends email with overrideRecipientAddress', async () => {
|
|
const email = (await payload.email.sendEmail({
|
|
to: '[email protected]',
|
|
text: 'Hello, world!',
|
|
subject: 'Test email',
|
|
})) as EmailReturnType
|
|
|
|
expect(email.to).toEqual(overrideRecipientAddress)
|
|
})
|
|
})
|
|
})
|