1 | var dedent = require('dedent')
|
2 | var rimraf = require('rimraf')
|
3 | var path = require('path')
|
4 | var tape = require('tape')
|
5 | var fs = require('fs')
|
6 | var os = require('os')
|
7 | var http = require('http')
|
8 |
|
9 | var bankai = require('../http')
|
10 |
|
11 | var tmpDirname, tmpScriptname
|
12 |
|
13 | function cleanup () {
|
14 | rimraf.sync(tmpDirname)
|
15 | }
|
16 |
|
17 | function setup () {
|
18 | var script = dedent`
|
19 | var css = require('sheetify')
|
20 | var html = require('bel')
|
21 | css\`
|
22 | .foo { color: blue }
|
23 | \`
|
24 | html\`<foo class="foo">hello</foo>\`
|
25 | `
|
26 |
|
27 | var file = dedent`
|
28 | hello planet
|
29 | `
|
30 |
|
31 | var dirname = 'manifest-pipeline-' + (Math.random() * 1e4).toFixed()
|
32 | tmpDirname = path.join(os.tmpdir(), dirname)
|
33 | var assetDirname = path.join(tmpDirname, 'assets')
|
34 | var assetSubdirname = path.join(assetDirname, 'images')
|
35 |
|
36 | tmpScriptname = path.join(tmpDirname, 'index.js')
|
37 | var tmpFilename = path.join(assetDirname, 'file.txt')
|
38 | var tmpAssetJsFilename = path.join(assetDirname, 'file.js')
|
39 | var tmpAssetCssFilename = path.join(assetDirname, 'file.css')
|
40 | var tmpJsonFilename = path.join(assetDirname, 'file.json')
|
41 | var tmpJpgFilename = path.join(assetDirname, 'file.jpg')
|
42 | var tmpJpgSubFilename = path.join(assetSubdirname, 'file.jpg')
|
43 |
|
44 | fs.mkdirSync(tmpDirname)
|
45 | fs.mkdirSync(assetDirname)
|
46 | fs.mkdirSync(assetSubdirname)
|
47 | fs.writeFileSync(tmpScriptname, script)
|
48 | fs.writeFileSync(tmpFilename, file)
|
49 | fs.writeFileSync(tmpAssetJsFilename, file)
|
50 | fs.writeFileSync(tmpAssetCssFilename, file)
|
51 | fs.writeFileSync(tmpJsonFilename, file)
|
52 | fs.writeFileSync(tmpJpgFilename, file)
|
53 | fs.writeFileSync(tmpJpgSubFilename, file)
|
54 | }
|
55 |
|
56 | tape('should route urls appropriately', function (assert) {
|
57 | setup()
|
58 | var handler = bankai(tmpScriptname, { watch: false, quiet: true })
|
59 | var server = http.createServer(function (req, res) {
|
60 | handler(req, res, function () {
|
61 | res.statusCode = 404
|
62 | res.end('not found')
|
63 | })
|
64 | })
|
65 |
|
66 | server.listen(3030, function () {
|
67 | console.log('listening on port 3030')
|
68 | })
|
69 |
|
70 | assert.on('end', cleanup)
|
71 |
|
72 | var urls = [
|
73 | '/bundle.js',
|
74 | '/bundle.js?cache=busted',
|
75 | '/bundle.css',
|
76 | '/bundle.css?cache=busted',
|
77 | '/assets/file.txt',
|
78 | '/assets/file.txt?cache=busted',
|
79 | '/assets/file.json',
|
80 | '/assets/file.css',
|
81 | '/assets/file.css?cache=busted',
|
82 | '/assets/file.js',
|
83 | '/assets/file.js?cache=busted',
|
84 | '/assets/file.json?cache=busted',
|
85 | '/assets/file.jpg',
|
86 | '/assets/file.jpg?cache=busted',
|
87 | '/assets/images/file.jpg',
|
88 | '/assets/images/file.jpg?cache=busted'
|
89 | ]
|
90 |
|
91 | var count = 0
|
92 | urls.forEach(function (url) {
|
93 | http.get('http://localhost:3030' + url, function (res) {
|
94 | assert.equal(res.statusCode, 200, url)
|
95 | if (++count === urls.length) {
|
96 | server.close()
|
97 | assert.end()
|
98 | }
|
99 | })
|
100 | })
|
101 | })
|