import { expect } from 'chai'
import { MockSmtpServer } from '@server/tests/shared'
import { HttpStatusCode } from '@shared/models'
-import { cleanupTests, createSingleServer, PeerTubeServer, setAccessTokensToServers, waitJobs } from '@shared/server-commands'
+import {
+ cleanupTests,
+ ConfigCommand,
+ createSingleServer,
+ PeerTubeServer,
+ setAccessTokensToServers,
+ waitJobs
+} from '@shared/server-commands'
describe('Test emails', function () {
let server: PeerTubeServer
username: 'user_1',
password: 'super_password'
}
- let emailPort: number
before(async function () {
- this.timeout(50000)
+ this.timeout(120000)
- emailPort = await MockSmtpServer.Instance.collectEmails(emails)
+ const emailPort = await MockSmtpServer.Instance.collectEmails(emails)
+ server = await createSingleServer(1, ConfigCommand.getEmailOverrideConfig(emailPort))
- const overrideConfig = {
- smtp: {
- hostname: 'localhost',
- port: emailPort
- }
- }
- server = await createSingleServer(1, overrideConfig)
await setAccessTokensToServers([ server ])
+ await server.config.enableSignup(true)
{
const created = await server.users.create({ username: user.username, password: user.password })
describe('When resetting user password', function () {
it('Should ask to reset the password', async function () {
- this.timeout(10000)
-
await server.users.askResetPassword({ email: 'user_1@example.com' })
await waitJobs(server)
const email = emails[0]
expect(email['from'][0]['name']).equal('PeerTube')
- expect(email['from'][0]['address']).equal('test-admin@localhost')
+ expect(email['from'][0]['address']).equal('test-admin@127.0.0.1')
expect(email['to'][0]['address']).equal('user_1@example.com')
expect(email['subject']).contains('password')
const email = emails[1]
expect(email['from'][0]['name']).equal('PeerTube')
- expect(email['from'][0]['address']).equal('test-admin@localhost')
+ expect(email['from'][0]['address']).equal('test-admin@127.0.0.1')
expect(email['to'][0]['address']).equal('create_password@example.com')
expect(email['subject']).contains('account')
expect(email['subject']).contains('password')
const email = emails[2]
expect(email['from'][0]['name']).equal('PeerTube')
- expect(email['from'][0]['address']).equal('test-admin@localhost')
+ expect(email['from'][0]['address']).equal('test-admin@127.0.0.1')
expect(email['to'][0]['address']).equal('admin' + server.internalServerNumber + '@example.com')
expect(email['subject']).contains('abuse')
expect(email['text']).contains(videoShortUUID)
const email = emails[3]
expect(email['from'][0]['name']).equal('PeerTube')
- expect(email['from'][0]['address']).equal('test-admin@localhost')
+ expect(email['from'][0]['address']).equal('test-admin@127.0.0.1')
expect(email['to'][0]['address']).equal('user_1@example.com')
expect(email['subject']).contains(' blocked')
expect(email['text']).contains(' blocked')
const email = emails[4]
expect(email['from'][0]['name']).equal('PeerTube')
- expect(email['from'][0]['address']).equal('test-admin@localhost')
+ expect(email['from'][0]['address']).equal('test-admin@127.0.0.1')
expect(email['to'][0]['address']).equal('user_1@example.com')
expect(email['subject']).contains(' unblocked')
expect(email['text']).contains(' unblocked')
const email = emails[5]
expect(email['from'][0]['name']).equal('PeerTube')
- expect(email['from'][0]['address']).equal('test-admin@localhost')
+ expect(email['from'][0]['address']).equal('test-admin@127.0.0.1')
expect(email['to'][0]['address']).equal('user_1@example.com')
expect(email['subject']).contains(' blacklisted')
expect(email['text']).contains('my super user video')
const email = emails[6]
expect(email['from'][0]['name']).equal('PeerTube')
- expect(email['from'][0]['address']).equal('test-admin@localhost')
+ expect(email['from'][0]['address']).equal('test-admin@127.0.0.1')
expect(email['to'][0]['address']).equal('user_1@example.com')
expect(email['subject']).contains(' unblacklisted')
expect(email['text']).contains('my super user video')
const email = emails[7]
expect(email['from'][0]['name']).equal('PeerTube')
- expect(email['from'][0]['address']).equal('test-admin@localhost')
+ expect(email['from'][0]['address']).equal('test-admin@127.0.0.1')
expect(email['to'][0]['address']).equal('user_1@example.com')
expect(email['subject']).contains('Verify')
})
})
+ describe('When verifying a registration email', function () {
+ let registrationId: number
+ let registrationIdEmail: number
+
+ before(async function () {
+ const { id } = await server.registrations.requestRegistration({
+ username: 'request_1',
+ email: 'request_1@example.com',
+ registrationReason: 'tt'
+ })
+ registrationId = id
+ })
+
+ it('Should ask to send the verification email', async function () {
+ this.timeout(10000)
+
+ await server.registrations.askSendVerifyEmail({ email: 'request_1@example.com' })
+
+ await waitJobs(server)
+ expect(emails).to.have.lengthOf(9)
+
+ const email = emails[8]
+
+ expect(email['from'][0]['name']).equal('PeerTube')
+ expect(email['from'][0]['address']).equal('test-admin@127.0.0.1')
+ expect(email['to'][0]['address']).equal('request_1@example.com')
+ expect(email['subject']).contains('Verify')
+
+ const verificationStringMatches = /verificationString=([a-z0-9]+)/.exec(email['text'])
+ expect(verificationStringMatches).not.to.be.null
+
+ verificationString = verificationStringMatches[1]
+ expect(verificationString).to.not.be.undefined
+ expect(verificationString).to.have.length.above(2)
+
+ const registrationIdMatches = /registrationId=([0-9]+)/.exec(email['text'])
+ expect(registrationIdMatches).not.to.be.null
+
+ registrationIdEmail = parseInt(registrationIdMatches[1], 10)
+
+ expect(registrationId).to.equal(registrationIdEmail)
+ })
+
+ it('Should not verify the email with an invalid verification string', async function () {
+ await server.registrations.verifyEmail({
+ registrationId: registrationIdEmail,
+ verificationString: verificationString + 'b',
+ expectedStatus: HttpStatusCode.FORBIDDEN_403
+ })
+ })
+
+ it('Should verify the email', async function () {
+ await server.registrations.verifyEmail({ registrationId: registrationIdEmail, verificationString })
+ })
+ })
+
after(async function () {
MockSmtpServer.Instance.kill()