omnivore/packages/api/test/resolvers/newsletters.test.ts
Jackson Harper da28998130 Pull ul list out of newsletter blurb
next/react doesnt want child elements of the paragraphs

Improve formatting

Improve wording

Use buttons in the subscribe directly blocks

Simplify docs on setting up forwarding rules

Add extra padding on bottom of help docs

Remove unused style

Add emails help page

Improve formatting

Prefetch page content on iOS

Reduce the reader overly length now that items are precached

Add invalidation when highlights are added to items

fix missing index_settings.json file in api dockerfile for creating elastic index (#363)

Handle full email address objects in the to param from sendgrid

These come in a format like:

"jacksonh-dfdf@inbox.omnivore.app" <jacksonh-dfdf@inbox-demo.omnivore.app>

New IDs for short highlights because they dont cascade delete now

Testing CI issues

Simplify test

CI test

Use promises for async tests

Temporarily remove test to debug CI

Re-enable

re-enable test, return error

Specify a userId when looking up saved email pages

create a unique url for newsletters without a URL

Use 500ms on page test timeouts

Increase timeout

Dont use deep equal to match newsletter label

Run just the labels API

Run against just the newsletter emails

Run without the page tests

Fix

Set the allow uncaught flag

Remove highlight tests

Remove newsletters tests

more resolver tests

Remove newsetter tests

Comment out resolver tests

Use nock for external requests in tests

Specify puppeteer url for tests

Comment out more tests

uncomment tests

re-enable

re-enable email test

Re-disable

Re-enable one pdf attachment test

Re-disable pdf attachment test

Use promises on setTimeout tests

rm label tests

mv label tests into a context

Comment out pdf tests

Comment out pdf tests

Async test

Async wrappers

Delay when creating test pages

More debugging

Unique short ids

Remove potentially problematic test

Fetch page before returning for test

handler in before block

more debugging

More debugging

Move errors checks into contexts

Use a context when saving newsletters to force index refresh

Prettier fix

Fix newsletter label check, remove setTimeout

Re-enable test

timeout on pdf router handler

Fix method call

comment out PDF test

Unique fake username

Comment out PDF test

Debugging signed urls

Re-enable

New email

pdf test

PDF tests

Comment out pdf test

Add nock stubs for email URLs

Use full address for PDF test

Remove debug

Use full email addresses
2022-04-02 16:56:24 -07:00

198 lines
5.4 KiB
TypeScript

import {
createTestNewsletterEmail,
createTestUser,
deleteTestUser,
getNewsletterEmail,
} from '../db'
import { generateFakeUuid, graphqlRequest, request } from '../util'
import { NewsletterEmail } from '../../src/entity/newsletter_email'
import { expect } from 'chai'
import { DeleteNewsletterEmailErrorCode } from '../../src/generated/graphql'
import 'mocha'
describe('Newsletters API', () => {
const username = 'fakeUser'
let authToken: string
let newsletterEmails: NewsletterEmail[]
before(async () => {
// create test user and login
const 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 emails
const newsletterEmail1 = await createTestNewsletterEmail(
user,
'Test_email_address_1@fake-email.com'
)
const newsletterEmail2 = await createTestNewsletterEmail(
user,
'Test_email_address_2@fake-email.com'
)
newsletterEmails = [newsletterEmail1, newsletterEmail2]
})
after(async () => {
// clean up
await deleteTestUser(username)
})
describe('Get newsletter emails', () => {
const query = `
query {
newsletterEmails {
... on NewsletterEmailsSuccess {
newsletterEmails {
id
address
confirmationCode
}
}
... on NewsletterEmailsError {
errorCodes
}
}
}
`
it('responds with newsletter emails sort by created_at desc', async () => {
const response = await graphqlRequest(query, authToken).expect(200)
expect(response.body.data.newsletterEmails.newsletterEmails).to.eqls(
newsletterEmails
.sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime())
.map((value) => {
return {
id: value.id,
address: value.address,
confirmationCode: value.confirmationCode,
}
})
)
})
it('responds status code 400 when invalid query', async () => {
const invalidQuery = `
query {
newsletterEmails {
}
}
`
return graphqlRequest(invalidQuery, authToken).expect(400)
})
it('responds status code 500 when invalid user', async () => {
const invalidAuthToken = 'Fake token'
return graphqlRequest(query, invalidAuthToken).expect(500)
})
})
describe('Create newsletter email', () => {
const query = `
mutation {
createNewsletterEmail {
... on CreateNewsletterEmailSuccess {
newsletterEmail {
id
address
}
}
... on CreateNewsletterEmailError {
errorCodes
}
}
}
`
it('responds with status code 200', async () => {
const response = await graphqlRequest(query, authToken).expect(200)
const newsletterEmail = await getNewsletterEmail(
response.body.data.createNewsletterEmail.id
)
expect(newsletterEmail).not.to.be.undefined
})
it('responds status code 400 when invalid query', async () => {
const invalidQuery = `
mutation {
createNewsletterEmail()
}
`
return graphqlRequest(invalidQuery, authToken).expect(400)
})
it('responds status code 500 when invalid user', async () => {
const invalidAuthToken = 'Fake token'
return graphqlRequest(query, invalidAuthToken).expect(500)
})
})
describe('Delete newsletter email', () => {
let newsletterEmailId = 'Newsletter email id'
let query: string
beforeEach(() => {
query = `
mutation {
deleteNewsletterEmail(newsletterEmailId: "${newsletterEmailId}") {
... on DeleteNewsletterEmailSuccess {
newsletterEmail {
id
address
}
}
... on DeleteNewsletterEmailError {
errorCodes
}
}
}
`
})
context('when newsletter email exists', () => {
before(() => {
newsletterEmailId = newsletterEmails[0].id
})
it('responds with status code 200', async () => {
const response = await graphqlRequest(query, authToken).expect(200)
const newsletterEmail = await getNewsletterEmail(
response.body.data.deleteNewsletterEmail.newsletterEmail.id
)
expect(newsletterEmail).to.be.undefined
})
})
context('when newsletter email not exists', () => {
before(() => {
newsletterEmailId = generateFakeUuid()
})
it('responds with error code NOT_FOUND', async () => {
const response = await graphqlRequest(query, authToken).expect(200)
expect(response.body.data.deleteNewsletterEmail.errorCodes).to.eql([
DeleteNewsletterEmailErrorCode.NotFound,
])
})
})
it('responds status code 400 when invalid query', async () => {
const invalidQuery = `
mutation {
deleteNewsletterEmail()
}
`
return graphqlRequest(invalidQuery, authToken).expect(400)
})
it('responds status code 500 when invalid user', async () => {
const invalidAuthToken = 'Fake token'
return graphqlRequest(query, invalidAuthToken).expect(500)
})
})
})