Skip to content

Commit 412f488

Browse files
Add tests for TokenService
1 parent 60792fb commit 412f488

File tree

4 files changed

+89
-13
lines changed

4 files changed

+89
-13
lines changed

lib/token-service.js

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,32 @@
11
'use strict'
22

33
const moment = require('moment')
4-
const uid = require('uid-safe').sync
5-
const extend = require('extend')
4+
const ulid = require('ulid')
65

76
class TokenService {
87
constructor () {
98
this.tokens = {}
109
}
11-
generate (opts = {}) {
12-
const token = uid(20)
13-
this.tokens[token] = {
10+
11+
generate (data = {}) {
12+
const token = ulid()
13+
14+
const value = {
1415
exp: moment().add(20, 'minutes')
1516
}
16-
this.tokens[token] = extend(this.tokens[token], opts)
17+
18+
this.tokens[token] = Object.assign({}, value, data)
1719

1820
return token
1921
}
22+
2023
verify (token) {
2124
const now = new Date()
22-
if (this.tokens[token] && now < this.tokens[token].exp) {
23-
return this.tokens[token]
25+
26+
let tokenValue = this.tokens[token]
27+
28+
if (tokenValue && now < tokenValue.exp) {
29+
return tokenValue
2430
} else {
2531
return false
2632
}

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,13 @@
5252
"jsonld": "^0.4.5",
5353
"li": "^1.0.1",
5454
"mime-types": "^2.1.11",
55-
"moment": "^2.13.0",
55+
"moment": "^2.18.1",
5656
"negotiator": "^0.6.0",
5757
"node-fetch": "^1.6.3",
5858
"node-forge": "^0.6.38",
5959
"nodemailer": "^3.1.4",
6060
"nomnom": "^1.8.1",
61-
"oidc-auth-manager": "^0.5.0",
61+
"oidc-auth-manager": "^0.5.4",
6262
"oidc-op-express": "^0.0.3",
6363
"rdflib": "^0.15.0",
6464
"recursive-readdir": "^2.1.0",
@@ -69,7 +69,7 @@
6969
"solid-permissions": "^0.5.1",
7070
"solid-ws": "^0.2.3",
7171
"string": "^3.3.0",
72-
"uid-safe": "^2.1.1",
72+
"ulid": "^0.1.0",
7373
"uuid": "^3.0.0",
7474
"valid-url": "^1.0.9",
7575
"vhost": "^3.0.2",

test/integration/authentication-oidc.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -208,8 +208,6 @@ describe('Authentication API (OIDC)', () => {
208208
done(err)
209209
})
210210
})
211-
212-
it('At /login, enter WebID & password -> redirect back to /foo')
213211
})
214212

215213
describe('Post-logout page (GET /goodbye)', () => {

test/unit/token-service.js

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
'use strict'
2+
3+
const moment = require('moment')
4+
const chai = require('chai')
5+
const expect = chai.expect
6+
const dirtyChai = require('dirty-chai')
7+
chai.use(dirtyChai)
8+
chai.should()
9+
10+
const TokenService = require('../../lib/token-service')
11+
12+
describe('TokenService', () => {
13+
describe('constructor()', () => {
14+
it('should init with an empty tokens store', () => {
15+
let service = new TokenService()
16+
17+
expect(service.tokens).to.exist()
18+
})
19+
})
20+
21+
describe('generate()', () => {
22+
it('should generate a new token and return a token key', () => {
23+
let service = new TokenService()
24+
25+
let token = service.generate()
26+
let value = service.tokens[token]
27+
28+
expect(token).to.exist()
29+
expect(value).to.have.property('exp')
30+
})
31+
})
32+
33+
describe('verify()', () => {
34+
it('should return false for expired tokens', () => {
35+
let service = new TokenService()
36+
37+
let token = service.generate()
38+
39+
service.tokens[token].exp = moment().subtract(40, 'minutes')
40+
41+
expect(service.verify(token)).to.be.false()
42+
})
43+
44+
it('should return false for non-existent tokens', () => {
45+
let service = new TokenService()
46+
47+
let token = 'invalid token 123'
48+
49+
expect(service.verify(token)).to.be.false()
50+
})
51+
52+
it('should return the token value if token not expired', () => {
53+
let service = new TokenService()
54+
55+
let token = service.generate()
56+
57+
expect(service.verify(token)).to.be.ok()
58+
})
59+
})
60+
61+
describe('remove()', () => {
62+
it('should remove a generated token from the service', () => {
63+
let service = new TokenService()
64+
65+
let token = service.generate()
66+
67+
service.remove(token)
68+
69+
expect(service.tokens[token]).to.not.exist()
70+
})
71+
})
72+
})

0 commit comments

Comments
 (0)