aboutsummaryrefslogtreecommitdiffhomepage
path: root/packages/tests/src/shared/mock-servers/mock-email.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/tests/src/shared/mock-servers/mock-email.ts')
-rw-r--r--packages/tests/src/shared/mock-servers/mock-email.ts62
1 files changed, 62 insertions, 0 deletions
diff --git a/packages/tests/src/shared/mock-servers/mock-email.ts b/packages/tests/src/shared/mock-servers/mock-email.ts
new file mode 100644
index 000000000..7c618e57f
--- /dev/null
+++ b/packages/tests/src/shared/mock-servers/mock-email.ts
@@ -0,0 +1,62 @@
1import MailDev from '@peertube/maildev'
2import { randomInt } from '@peertube/peertube-core-utils'
3import { parallelTests } from '@peertube/peertube-node-utils'
4
5class MockSmtpServer {
6
7 private static instance: MockSmtpServer
8 private started = false
9 private maildev: any
10 private emails: object[]
11
12 private constructor () { }
13
14 collectEmails (emailsCollection: object[]) {
15 return new Promise<number>((res, rej) => {
16 const port = parallelTests() ? randomInt(1025, 2000) : 1025
17 this.emails = emailsCollection
18
19 if (this.started) {
20 return res(undefined)
21 }
22
23 this.maildev = new MailDev({
24 ip: '127.0.0.1',
25 smtp: port,
26 disableWeb: true,
27 silent: true
28 })
29
30 this.maildev.on('new', email => {
31 this.emails.push(email)
32 })
33
34 this.maildev.listen(err => {
35 if (err) return rej(err)
36
37 this.started = true
38
39 return res(port)
40 })
41 })
42 }
43
44 kill () {
45 if (!this.maildev) return
46
47 this.maildev.close()
48
49 this.maildev = null
50 MockSmtpServer.instance = null
51 }
52
53 static get Instance () {
54 return this.instance || (this.instance = new this())
55 }
56}
57
58// ---------------------------------------------------------------------------
59
60export {
61 MockSmtpServer
62}