mirror of
https://github.com/omnivore-app/omnivore.git
synced 2026-03-11 08:54:26 +00:00
Add tests for recent emails resolver
This commit is contained in:
parent
83c62c65a3
commit
a682d87aa6
2 changed files with 157 additions and 3 deletions
|
|
@ -72,18 +72,26 @@ export const markEmailAsItemResolver = authorized<
|
|||
const recentEmail = await getRepository(ReceivedEmail).findOneBy({
|
||||
id: recentEmailId,
|
||||
user: { id: claims.uid },
|
||||
type: 'non-article',
|
||||
})
|
||||
if (!recentEmail) {
|
||||
log.info('no recent email', recentEmailId)
|
||||
|
||||
return {
|
||||
errorCodes: [MarkEmailAsItemErrorCode.Unauthorized],
|
||||
}
|
||||
}
|
||||
|
||||
const newsletterEmail = await getRepository(NewsletterEmail).findOneBy({
|
||||
address: recentEmail.to,
|
||||
user: { id: claims.uid },
|
||||
const newsletterEmail = await getRepository(NewsletterEmail).findOne({
|
||||
where: {
|
||||
address: recentEmail.to,
|
||||
user: { id: claims.uid },
|
||||
},
|
||||
relations: ['user'],
|
||||
})
|
||||
if (!newsletterEmail) {
|
||||
log.info('no newsletter email', recentEmail.to)
|
||||
|
||||
return {
|
||||
errorCodes: [MarkEmailAsItemErrorCode.NotFound],
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,146 @@
|
|||
import 'mocha'
|
||||
import { expect } from 'chai'
|
||||
import { User } from '../../src/entity/user'
|
||||
import { createTestUser, deleteTestUser } from '../db'
|
||||
import { graphqlRequest, request } from '../util'
|
||||
import { getRepository } from '../../src/entity/utils'
|
||||
import { ReceivedEmail } from '../../src/entity/received_email'
|
||||
import { NewsletterEmail } from '../../src/entity/newsletter_email'
|
||||
|
||||
describe('Recent Emails Resolver', () => {
|
||||
const username = 'fakeUser'
|
||||
|
||||
let user: User
|
||||
let authToken: string
|
||||
let newsletterEmail: NewsletterEmail
|
||||
let newsletterEmail2: NewsletterEmail
|
||||
|
||||
before(async () => {
|
||||
// create test user and login
|
||||
user = await createTestUser(username)
|
||||
const res = await request
|
||||
.post('/local/debug/fake-user-login')
|
||||
.send({ fakeEmail: user.email })
|
||||
|
||||
authToken = res.body.authToken
|
||||
|
||||
// create test newsletter email
|
||||
newsletterEmail = await getRepository(NewsletterEmail).save({
|
||||
user: { id: user.id },
|
||||
address: 'fake email address',
|
||||
})
|
||||
newsletterEmail2 = await getRepository(NewsletterEmail).save({
|
||||
user: { id: user.id },
|
||||
address: 'fake email address 2',
|
||||
})
|
||||
})
|
||||
|
||||
after(async () => {
|
||||
// clean up
|
||||
await deleteTestUser(user.id)
|
||||
})
|
||||
|
||||
describe('recentEmails', () => {
|
||||
const recentEmailsQuery = `
|
||||
query {
|
||||
recentEmails {
|
||||
... on RecentEmailsSuccess {
|
||||
recentEmails {
|
||||
id
|
||||
from
|
||||
to
|
||||
subject
|
||||
text
|
||||
html
|
||||
}
|
||||
}
|
||||
... on RecentEmailsError {
|
||||
errorCodes
|
||||
}
|
||||
}
|
||||
}
|
||||
`
|
||||
let recentEmails: ReceivedEmail[]
|
||||
|
||||
before(async () => {
|
||||
// create fake emails
|
||||
const recentEmail = await getRepository(ReceivedEmail).save({
|
||||
user: { id: user.id },
|
||||
from: 'fake from',
|
||||
subject: 'fake subject',
|
||||
text: 'fake text',
|
||||
html: 'fake html',
|
||||
to: newsletterEmail.address,
|
||||
type: 'article',
|
||||
})
|
||||
const recentEmail2 = await getRepository(ReceivedEmail).save({
|
||||
user: { id: user.id },
|
||||
from: 'fake from 2',
|
||||
subject: 'fake subject 2',
|
||||
text: 'fake text 2',
|
||||
html: 'fake html 2',
|
||||
to: newsletterEmail2.address,
|
||||
type: 'non-article',
|
||||
})
|
||||
recentEmails = [recentEmail, recentEmail2]
|
||||
})
|
||||
|
||||
it('returns recent emails', async () => {
|
||||
const res = await graphqlRequest(recentEmailsQuery, authToken).expect(200)
|
||||
const { recentEmails: results } = res.body.data.recentEmails
|
||||
|
||||
expect(results).to.have.lengthOf(2)
|
||||
expect(results[0].id).to.eql(recentEmails[1].id)
|
||||
expect(results[1].id).to.eql(recentEmails[0].id)
|
||||
})
|
||||
})
|
||||
|
||||
describe('markEmailAsItem', () => {
|
||||
const markEmailAsItemMutation = (recentEmailId: string) => `
|
||||
mutation {
|
||||
markEmailAsItem(recentEmailId: "${recentEmailId}") {
|
||||
... on MarkEmailAsItemSuccess {
|
||||
success
|
||||
}
|
||||
... on MarkEmailAsItemError {
|
||||
errorCodes
|
||||
}
|
||||
}
|
||||
}
|
||||
`
|
||||
|
||||
let recentEmail: ReceivedEmail
|
||||
|
||||
before(async () => {
|
||||
// create fake email
|
||||
recentEmail = await getRepository(ReceivedEmail).save({
|
||||
user: { id: user.id },
|
||||
from: 'Omnivore Newsletter <newsletter@omnivore.app>',
|
||||
subject: 'fake subject 3',
|
||||
text: 'fake text 3',
|
||||
html: '<html><body>fake html 3</body></html>',
|
||||
to: newsletterEmail.address,
|
||||
type: 'non-article',
|
||||
})
|
||||
})
|
||||
|
||||
after(async () => {
|
||||
// clean up
|
||||
await getRepository(ReceivedEmail).delete(recentEmail.id)
|
||||
})
|
||||
|
||||
it('marks email as item', async () => {
|
||||
const resp = await graphqlRequest(
|
||||
markEmailAsItemMutation(recentEmail.id),
|
||||
authToken
|
||||
)
|
||||
|
||||
expect(resp.body.data.markEmailAsItem.success).to.be.true
|
||||
|
||||
const updatedRecentEmail = await getRepository(ReceivedEmail).findOneBy({
|
||||
id: recentEmail.id,
|
||||
})
|
||||
expect(updatedRecentEmail?.type).to.eql('article')
|
||||
})
|
||||
})
|
||||
})
|
||||
Loading…
Reference in a new issue