UNPKG

2.75 kBJavaScriptView Raw
1var dedent = require('dedent')
2var rimraf = require('rimraf')
3var path = require('path')
4var tape = require('tape')
5var fs = require('fs')
6var os = require('os')
7var http = require('http')
8
9var bankai = require('../http')
10
11var tmpDirname, tmpScriptname
12
13function cleanup () {
14 rimraf.sync(tmpDirname)
15}
16
17function 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
56tape('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})