Add tests for email forward router

This commit is contained in:
Hongbo Wu
2022-07-27 11:55:19 +08:00
parent 6f11ccacb1
commit dfa0a65d15

View File

@ -0,0 +1,134 @@
import {
createTestNewsletterEmail,
createTestUser,
deleteTestUser,
} from '../db'
import { User } from '../../src/entity/user'
import 'mocha'
import sinon from 'sinon'
import { expect } from 'chai'
import { request } from '../util'
import * as parser from '../../src/utils/parser'
import * as sendNotification from '../../src/utils/sendNotification'
describe('Emails Router', () => {
const username = 'fakeUser'
const newsletterEmail = 'fakeUser@omnivore.app'
let user: User
let token: string
before(async () => {
// create test user and login
user = await createTestUser(username)
await createTestNewsletterEmail(user, newsletterEmail)
token = process.env.PUBSUB_VERIFICATION_TOKEN!
sinon.replace(
sendNotification,
'sendMulticastPushNotifications',
sinon.fake.resolves(undefined)
)
})
after(async () => {
// clean up
await deleteTestUser(username)
sinon.restore()
})
describe('forward', () => {
const from = 'from@omnivore.app'
const to = newsletterEmail
const subject = 'test subject'
const html = 'test html'
context('when email is a newsletter', () => {
before(() => {
sinon.replace(parser, 'isProbablyNewsletter', sinon.fake.resolves(true))
})
after(() => {
sinon.restore()
})
it('saves the email as a newsletter', async () => {
const data = {
message: {
data: Buffer.from(
JSON.stringify({ from, to, subject, html })
).toString('base64'),
publishTime: new Date().toISOString(),
},
}
const res = await request
.post(`/svc/pubsub/emails/forward?token=${token}`)
.send(data)
.expect(200)
expect(res.text).to.eql('Newsletter')
})
})
context('when email is an article', () => {
before(() => {
sinon.replace(
parser,
'isProbablyNewsletter',
sinon.fake.resolves(false)
)
sinon.replace(parser, 'isProbablyArticle', sinon.fake.resolves(true))
})
after(() => {
sinon.restore()
})
it('saves the email as an article', async () => {
const data = {
message: {
data: Buffer.from(
JSON.stringify({ from, to, subject, html })
).toString('base64'),
publishTime: new Date().toISOString(),
},
}
const res = await request
.post(`/svc/pubsub/emails/forward?token=${token}`)
.send(data)
.expect(200)
expect(res.text).to.eql('Article')
})
})
context('when email is a regular email', () => {
before(() => {
sinon.replace(
parser,
'isProbablyNewsletter',
sinon.fake.resolves(false)
)
sinon.replace(parser, 'isProbablyArticle', sinon.fake.resolves(false))
})
after(() => {
sinon.restore()
})
it('forwards the email', async () => {
const data = {
message: {
data: Buffer.from(
JSON.stringify({ from, to, subject, html })
).toString('base64'),
publishTime: new Date().toISOString(),
},
}
const res = await request
.post(`/svc/pubsub/emails/forward?token=${token}`)
.send(data)
.expect(200)
expect(res.text).to.eql('Email forwarded')
})
})
})
})