-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathapp.test.js
More file actions
51 lines (44 loc) · 2.3 KB
/
app.test.js
File metadata and controls
51 lines (44 loc) · 2.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
require('jest-matcher-one-of')
const puppeteer = require('puppeteer')
const portfinder = require('portfinder')
const {StatusCodes} = require("http-status-codes");
jest.setTimeout(60*1000) // Initial download might be slow
let port = null, server = null, browser = null
beforeAll(async () => {
port = await portfinder.getPortPromise()
server = await require('./app').then(app => app.listen(port))
browser = await puppeteer.launch()
})
afterAll(async () => {
await browser.close()
await server.close()
})
contains = str => page => expect(page.content()).resolves.toContain(str)
actualPaperOn = page => expect(page.$eval('img', el => el.id))
serves = (url, text) => [StatusCodes.OK , url, contains(text)]
doesNotServe = (url) => [StatusCodes.NOT_FOUND , url, contains(`Cannot GET ${url}`)]
showsPaper = (url, papers) => [StatusCodes.OK , url, page => papers ? actualPaperOn(page).resolves.toBeOneOf(papers) : actualPaperOn(page).resolves.not.toBeNull()]
doesNotShowPaper = (url, paper) => [StatusCodes.OK , url, page => paper ? actualPaperOn(page).resolves.not.toBe(paper) : actualPaperOn(page).rejects.toThrow()]
test.each([
serves('/', 'emulator'),
serves('/archive', 'archive'),
showsPaper('/latest'),
// doesNotShowPaper('/latest?prev=NYT', 'NYT'), // TODO: Fixme!
showsPaper('/latest?papers=NYT', ['NYT']),
showsPaper('/latest?papers=NYT&prev=NYT', ['NYT']),
showsPaper('/latest?papers=NYT&prev=INVALID', ['NYT']),
showsPaper('/latest?papers=NYT,WSJ', ['NYT', 'WSJ']),
// showsPaper('/latest?papers=NYT,WSJ&prev=NYT', ['WSJ']), // TODO: Fixme!
showsPaper('/latest?papers=NYT,WSJ&prev=WSJ', ['NYT']),
showsPaper('/latest?papers=NYT,INVALID', ['NYT']),
doesNotShowPaper('/latest?papers=INVALID'),
doesNotShowPaper('/latest?deviceId=INVALID'),
showsPaper('/latest?deviceId=2a002800-0c47-3133-3633-333400000000'),
doesNotShowPaper('/latest?deviceId=2a002800-0c47-3133-3633-333400000000&prev=WSJ', ['WSJ']),
doesNotServe('/latest/INVALID'),
doesNotServe('/INVALID')
])('%i: %s', (statusCode, path, check) => browser.newPage().then(page => Promise.all([
page.setCacheEnabled(false),
page.goto(`http://127.0.0.1:${port}${[path]}`).then(res => expect(res.status()).toBe(statusCode)),
page.waitForNetworkIdle().then(_ => check(page))
])))