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