Skip to content

Commit 9c8cdea

Browse files
authored
test: mock nodemailer network calls (#9957)
In tests, nodemailer was making network calls to create test accounts using ethereal.email. This mocks them appropriately.
1 parent 4334940 commit 9c8cdea

File tree

5 files changed

+60
-42
lines changed

5 files changed

+60
-42
lines changed

packages/payload-cloud/src/email.spec.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type { Config, Payload } from 'payload'
22

33
import { jest } from '@jest/globals'
4+
import nodemailer from 'nodemailer'
45
import { defaults } from 'payload'
56

67
import { payloadCloudEmail } from './email.js'
@@ -13,6 +14,20 @@ describe('email', () => {
1314

1415
const mockedPayload: Payload = jest.fn() as unknown as Payload
1516

17+
beforeAll(() => {
18+
// Mock createTestAccount to prevent calling external services
19+
jest.spyOn(nodemailer, 'createTestAccount').mockImplementation(() => {
20+
return Promise.resolve({
21+
imap: { host: 'imap.test.com', port: 993, secure: true },
22+
pass: 'testpass',
23+
pop3: { host: 'pop3.test.com', port: 995, secure: true },
24+
smtp: { host: 'smtp.test.com', port: 587, secure: false },
25+
user: 'testuser',
26+
web: 'https://webmail.test.com',
27+
})
28+
})
29+
})
30+
1631
beforeEach(() => {
1732
defaultConfig = defaults as Config
1833
})

packages/payload-cloud/src/plugin.spec.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,20 @@ describe('plugin', () => {
1414

1515
const skipVerify = true
1616

17+
beforeAll(() => {
18+
// Mock createTestAccount to prevent calling external services
19+
jest.spyOn(nodemailer, 'createTestAccount').mockImplementation(() => {
20+
return Promise.resolve({
21+
imap: { host: 'imap.test.com', port: 993, secure: true },
22+
pass: 'testpass',
23+
pop3: { host: 'pop3.test.com', port: 995, secure: true },
24+
smtp: { host: 'smtp.test.com', port: 587, secure: false },
25+
user: 'testuser',
26+
web: 'https://webmail.test.com',
27+
})
28+
})
29+
})
30+
1731
beforeEach(() => {
1832
createTransportSpy = jest.spyOn(nodemailer, 'createTransport').mockImplementationOnce(() => {
1933
return {

pnpm-lock.yaml

Lines changed: 16 additions & 42 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/jest.setup.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import console from 'console'
22
global.console = console
33

4+
import nodemailer from 'nodemailer'
5+
46
import { generateDatabaseAdapter } from './generateDatabaseAdapter.js'
57

68
process.env.PAYLOAD_DISABLE_ADMIN = 'true'
@@ -11,6 +13,18 @@ process.env.PAYLOAD_PUBLIC_CLOUD_STORAGE_ADAPTER = 's3'
1113
process.env.NODE_OPTIONS = '--no-deprecation'
1214
process.env.PAYLOAD_CI_DEPENDENCY_CHECKER = 'true'
1315

16+
// Mock createTestAccount to prevent calling external services
17+
jest.spyOn(nodemailer, 'createTestAccount').mockImplementation(() => {
18+
return Promise.resolve({
19+
imap: { host: 'imap.test.com', port: 993, secure: true },
20+
pass: 'testpass',
21+
pop3: { host: 'pop3.test.com', port: 995, secure: true },
22+
smtp: { host: 'smtp.test.com', port: 587, secure: false },
23+
user: 'testuser',
24+
web: 'https://webmail.test.com',
25+
})
26+
})
27+
1428
const dbAdapter = process.env.PAYLOAD_DATABASE || 'mongodb'
1529

1630
generateDatabaseAdapter(dbAdapter)

test/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@
7070
"jwt-decode": "4.0.0",
7171
"mongoose": "8.8.3",
7272
"next": "15.0.3",
73+
"nodemailer": "6.9.10",
7374
"payload": "workspace:*",
7475
"qs-esm": "7.0.2",
7576
"react": "19.0.0",

0 commit comments

Comments
 (0)