forked from webpack/webpack-dev-server
/
ContentBase.test.js
138 lines (118 loc) · 3.53 KB
/
ContentBase.test.js
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
'use strict';
const path = require('path');
const request = require('supertest');
const helper = require('./helper');
const config = require('./fixtures/contentbase-config/webpack.config');
require('mocha-sinon');
const contentBasePublic = path.join(__dirname, 'fixtures/contentbase-config/public');
const contentBaseOther = path.join(__dirname, 'fixtures/contentbase-config/other');
describe('ContentBase', () => {
let server;
let req;
afterEach(helper.close);
describe('to directory', () => {
before((done) => {
server = helper.start(config, {
contentBase: contentBasePublic
}, done);
req = request(server.app);
});
it('Request to index', (done) => {
req.get('/')
.expect(200, /Heyo/, done);
});
it('Request to other file', (done) => {
req.get('/other.html')
.expect(200, /Other html/, done);
});
});
describe('to directories', () => {
before((done) => {
server = helper.start(config, {
contentBase: [contentBasePublic, contentBaseOther]
}, done);
req = request(server.app);
});
it('Request to first directory', (done) => {
req.get('/')
.expect(200, /Heyo/, done);
});
it('Request to second directory', (done) => {
req.get('/foo.html')
.expect(200, /Foo!/, done);
});
});
describe('to port', () => {
before((done) => {
server = helper.start(config, {
contentBase: 9099999
}, done);
req = request(server.app);
});
it('Request to page', (done) => {
req.get('/other.html')
.expect('Location', '//localhost:9099999/other.html')
.expect(302, done);
});
});
describe('to external url', () => {
before((done) => {
server = helper.start(config, {
contentBase: 'http://example.com/'
}, done);
req = request(server.app);
});
it('Request to page', (done) => {
req.get('/foo.html')
// TODO: hmm, two slashes seems to be a bug?
.expect('Location', 'http://example.com//foo.html')
.expect(302, done);
});
it('Request to page with search params', (done) => {
req.get('/foo.html?space=ship')
// TODO: hmm, two slashes seems to be a bug?
.expect('Location', 'http://example.com//foo.html?space=ship')
.expect(302, done);
});
});
describe('default to PWD', () => {
before(function before(done) {
this.sinon.stub(process, 'cwd');
process.cwd.returns(contentBasePublic);
server = helper.start(config, {}, done);
req = request(server.app);
});
it('Request to page', (done) => {
req.get('/other.html')
.expect(200, done);
});
});
describe('disable', () => {
before(function before(done) {
// This is a somewhat weird test, but it is important that we mock
// the PWD here, and test if /other.html in our "fake" PWD really is not requested.
this.sinon.stub(process, 'cwd');
process.cwd.returns(contentBasePublic);
server = helper.start(config, {
contentBase: false
}, done);
req = request(server.app);
});
it('Request to page', (done) => {
req.get('/other.html')
.expect(404, done);
});
});
describe('Content type', () => {
before((done) => {
server = helper.start(config, {
contentBase: [contentBasePublic]
}, done);
req = request(server.app);
});
it('Request foo.wasm', (done) => {
req.get('/foo.wasm')
.expect('Content-Type', 'application/wasm', done);
});
});
});