mirror of https://github.com/Chocobozzz/PeerTube
parent
8fc58cb580
commit
af37210c0b
|
@ -20,7 +20,7 @@ import {
|
||||||
ServerInfo,
|
ServerInfo,
|
||||||
setAccessTokensToServers
|
setAccessTokensToServers
|
||||||
} from '../../../../shared/utils'
|
} from '../../../../shared/utils'
|
||||||
import { mockSmtpServer } from '../../../../shared/utils/miscs/email'
|
import { MockSmtpServer } from '../../../../shared/utils/miscs/email'
|
||||||
import { waitJobs } from '../../../../shared/utils/server/jobs'
|
import { waitJobs } from '../../../../shared/utils/server/jobs'
|
||||||
|
|
||||||
const expect = chai.expect
|
const expect = chai.expect
|
||||||
|
@ -41,7 +41,7 @@ describe('Test emails', function () {
|
||||||
before(async function () {
|
before(async function () {
|
||||||
this.timeout(30000)
|
this.timeout(30000)
|
||||||
|
|
||||||
await mockSmtpServer(emails)
|
await MockSmtpServer.Instance.collectEmails(emails)
|
||||||
|
|
||||||
await flushTests()
|
await flushTests()
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ import {
|
||||||
userLogin, login, runServer, ServerInfo, verifyEmail, updateCustomSubConfig
|
userLogin, login, runServer, ServerInfo, verifyEmail, updateCustomSubConfig
|
||||||
} from '../../../../shared/utils'
|
} from '../../../../shared/utils'
|
||||||
import { setAccessTokensToServers } from '../../../../shared/utils/users/login'
|
import { setAccessTokensToServers } from '../../../../shared/utils/users/login'
|
||||||
import { mockSmtpServer } from '../../../../shared/utils/miscs/email'
|
import { MockSmtpServer } from '../../../../shared/utils/miscs/email'
|
||||||
import { waitJobs } from '../../../../shared/utils/server/jobs'
|
import { waitJobs } from '../../../../shared/utils/server/jobs'
|
||||||
|
|
||||||
const expect = chai.expect
|
const expect = chai.expect
|
||||||
|
@ -30,7 +30,7 @@ describe('Test users account verification', function () {
|
||||||
before(async function () {
|
before(async function () {
|
||||||
this.timeout(30000)
|
this.timeout(30000)
|
||||||
|
|
||||||
await mockSmtpServer(emails)
|
await MockSmtpServer.Instance.collectEmails(emails)
|
||||||
|
|
||||||
await flushTests()
|
await flushTests()
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
const MailDev = require('maildev')
|
||||||
|
|
||||||
|
// must run maildev as forked ChildProcess
|
||||||
|
// failed instantiation stops main process with exit code 0
|
||||||
|
process.on('message', (msg) => {
|
||||||
|
if (msg.start) {
|
||||||
|
const maildev = new MailDev({
|
||||||
|
ip: '127.0.0.1',
|
||||||
|
smtp: 1025,
|
||||||
|
disableWeb: true,
|
||||||
|
silent: true
|
||||||
|
})
|
||||||
|
|
||||||
|
maildev.on('new', email => {
|
||||||
|
process.send({ email })
|
||||||
|
})
|
||||||
|
|
||||||
|
maildev.listen(err => {
|
||||||
|
if (err) {
|
||||||
|
// cannot send as Error object
|
||||||
|
return process.send({ err: err.message })
|
||||||
|
}
|
||||||
|
|
||||||
|
return process.send({ err: null })
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
|
@ -1,25 +1,55 @@
|
||||||
import * as MailDev from 'maildev'
|
import * as child from 'child_process'
|
||||||
|
|
||||||
function mockSmtpServer (emailsCollection: object[]) {
|
class MockSmtpServer {
|
||||||
const maildev = new MailDev({
|
|
||||||
ip: '127.0.0.1',
|
|
||||||
smtp: 1025,
|
|
||||||
disableWeb: true,
|
|
||||||
silent: true
|
|
||||||
})
|
|
||||||
maildev.on('new', email => emailsCollection.push(email))
|
|
||||||
|
|
||||||
return new Promise((res, rej) => {
|
private static instance: MockSmtpServer
|
||||||
maildev.listen(err => {
|
private started = false
|
||||||
if (err) return rej(err)
|
private emailChildProcess: child.ChildProcess
|
||||||
|
private emails: object[]
|
||||||
|
|
||||||
return res()
|
private constructor () {
|
||||||
|
this.emailChildProcess = child.fork(`${__dirname}/email-child-process`, [], { silent: true })
|
||||||
|
this.emailChildProcess.on('message', (msg) => {
|
||||||
|
if (msg.email) {
|
||||||
|
return this.emails.push(msg.email)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
})
|
process.on('exit', () => {
|
||||||
|
this.emailChildProcess.kill()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
collectEmails (emailsCollection: object[]) {
|
||||||
|
return new Promise((res, rej) => {
|
||||||
|
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.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.started = true
|
||||||
|
this.emails = emailsCollection
|
||||||
|
return res()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
static get Instance () {
|
||||||
|
return this.instance || (this.instance = new this())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
export {
|
export {
|
||||||
mockSmtpServer
|
MockSmtpServer
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue