forked from nodeSolidServer/node-solid-server
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patherror-pages.js
More file actions
127 lines (105 loc) · 3.88 KB
/
error-pages.js
File metadata and controls
127 lines (105 loc) · 3.88 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
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
'use strict'
const chai = require('chai')
const sinon = require('sinon')
const { expect } = chai
chai.use(require('sinon-chai'))
chai.use(require('dirty-chai'))
chai.should()
const errorPages = require('../../lib/handlers/error-pages')
describe('handlers/error-pages', () => {
describe('handler()', () => {
it('should use the custom error handler if available', () => {
let ldp = { errorHandler: sinon.stub() }
let req = { app: { locals: { ldp } } }
let res = { status: sinon.stub(), send: sinon.stub() }
let err = {}
let next = {}
errorPages.handler(err, req, res, next)
expect(ldp.errorHandler).to.have.been.calledWith(err, req, res, next)
expect(res.status).to.not.have.been.called()
expect(res.send).to.not.have.been.called()
})
it('defaults to status code 500 if none is specified in the error', () => {
let ldp = { noErrorPages: true }
let req = { app: { locals: { ldp } } }
let res = { status: sinon.stub(), send: sinon.stub() }
let err = { message: 'Unspecified error' }
let next = {}
errorPages.handler(err, req, res, next)
expect(res.status).to.have.been.calledWith(500)
expect(res.send).to.have.been.calledWith('Unspecified error\n')
})
})
describe('requiresSelectProvider()', () => {
it('should only apply to 401 error codes', () => {
let authMethod = 'oidc'
let req = { accepts: sinon.stub().withArgs('text/html').returns(true) }
expect(errorPages.requiresSelectProvider(authMethod, 404, req))
.to.equal(false)
expect(errorPages.requiresSelectProvider(authMethod, 401, req))
.to.equal(true)
})
it('should only apply to oidc auth method', () => {
let statusCode = 401
let req = { accepts: sinon.stub().withArgs('text/html').returns(true) }
expect(errorPages.requiresSelectProvider('tls', statusCode, req))
.to.equal(false)
expect(errorPages.requiresSelectProvider('oidc', statusCode, req))
.to.equal(true)
})
it('should only apply to html requests', () => {
let authMethod = 'oidc'
let statusCode = 401
let htmlReq = { accepts: sinon.stub().withArgs('text/html').returns(true) }
let nonHtmlReq = { accepts: sinon.stub().withArgs('text/html').returns(false) }
expect(errorPages.requiresSelectProvider(authMethod, statusCode, nonHtmlReq))
.to.equal(false)
expect(errorPages.requiresSelectProvider(authMethod, statusCode, htmlReq))
.to.equal(true)
})
})
describe('sendErrorResponse()', () => {
it('should send http status code and error message', () => {
let statusCode = 404
let error = {
message: 'Error description'
}
let res = {
status: sinon.stub(),
send: sinon.stub()
}
errorPages.sendErrorResponse(statusCode, res, error)
expect(res.status).to.have.been.calledWith(404)
expect(res.send).to.have.been.calledWith('Error description\n')
})
})
describe('setAuthenticateHeader()', () => {
it('should do nothing for a non-implemented auth method', () => {
let err = {}
let req = {
app: { locals: { authMethod: null } }
}
let res = {
set: sinon.stub()
}
errorPages.setAuthenticateHeader(req, res, err)
expect(res.set).to.not.have.been.called()
})
})
describe('sendErrorPage()', () => {
it('falls back the default sendErrorResponse if no page is found', () => {
let statusCode = 400
let res = {
status: sinon.stub(),
send: sinon.stub()
}
let err = { message: 'Error description' }
let ldp = { errorPages: './' }
return errorPages.sendErrorPage(statusCode, res, err, ldp)
.then(() => {
expect(res.status).to.have.been.calledWith(400)
expect(res.send).to.have.been.calledWith('Error description\n')
})
})
})
})