-import { fork, ChildProcess } from 'child_process'
+import { ChildProcess, fork } from 'child_process'
+import { randomInt } from '../../core-utils/miscs/miscs'
+import { parallelTests } from '../server/servers'
class MockSmtpServer {
private constructor () {
this.emailChildProcess = fork(`${__dirname}/email-child-process`, [])
- this.emailChildProcess.on('message', (msg) => {
+ this.emailChildProcess.on('message', (msg: any) => {
if (msg.email) {
return this.emails.push(msg.email)
}
}
collectEmails (emailsCollection: object[]) {
- return new Promise((res, rej) => {
+ return new Promise<number>((res, rej) => {
+ const port = parallelTests() ? randomInt(1000, 2000) : 1025
+
if (this.started) {
this.emails = emailsCollection
return res()
// ensure maildev isn't started until
// unexpected exit can be reported to test runner
- this.emailChildProcess.send({ start: true })
+ this.emailChildProcess.send({ start: true, port })
this.emailChildProcess.on('exit', () => {
return rej(new Error('maildev exited unexpectedly, confirm port not in use'))
})
- this.emailChildProcess.on('message', (msg) => {
- if (msg.err) {
- return rej(new Error(msg.err))
- }
+ this.emailChildProcess.on('message', (msg: any) => {
+ if (msg.err) return rej(new Error(msg.err))
+
this.started = true
this.emails = emailsCollection
- return res()
+
+ return res(port)
})
})
}