-
Notifications
You must be signed in to change notification settings - Fork 27
/
Copy pathtestutils.js
136 lines (115 loc) · 3.38 KB
/
testutils.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
const fs = require('fs')
const expressa = require('../')
const request = require('supertest')
const util = require('../util')
// See https://stackoverflow.com/questions/18052762/remove-directory-which-is-not-empty
const deleteFolderRecursive = function(path) {
if (fs.existsSync(path)) {
fs.readdirSync(path).forEach(function(file) {
const curPath = path + '/' + file
if (fs.lstatSync(curPath).isDirectory()) { // recurse
deleteFolderRecursive(curPath)
} else { // delete file
fs.unlinkSync(curPath)
}
})
fs.rmdirSync(path)
}
}
deleteFolderRecursive('testdata')
fs.mkdirSync('testdata')
exports.api = expressa.api({
file_storage_path: 'testdata'
})
const express = require('express')
const randomstring = require('randomstring')
exports.app = express()
exports.app.use(exports.api)
const tokens = {
admin: ''
}
exports.setAdminToken = function(token) {
tokens.admin = token
}
exports.getUserWithPermissions = async function(api, permissions) {
const service = request(exports.app)
if (typeof permissions === 'string') {
permissions = [permissions]
}
permissions = permissions || []
const permissionsMap = {}
permissions.forEach(function (permission) {
permissionsMap[permission] = true
})
const randId = randomstring.generate(12)
const roleName = 'role' + randId
const role = {
_id: roleName,
permissions: permissionsMap
}
const roleRes = await service.post('/role')
.set('x-access-token', tokens.admin)
.send(role)
.expect(200)
const user = {
email: 'test' + randId + '@example.com',
password: '123',
}
const registerRes = await service.post('/users/register')
.send(user)
.expect(200)
const updateRes = await service.post(`/users/${registerRes.body.id}/update`)
.send({ $push: { roles: roleName } })
.set('x-access-token', tokens.admin)
.expect(200)
const loginRes = await service.post('/users/login')
.send(user)
.expect(200)
user._id = loginRes.body.uid
return loginRes.body.token
}
exports.getAccessKeyForUserWithPermissions = async function(api, permissions) {
const service = request(exports.app)
if (typeof permissions === 'string') {
permissions = [permissions]
}
permissions = permissions || []
const permissionsMap = {}
permissions.forEach(function (permission) {
permissionsMap[permission] = true
})
const randId = randomstring.generate(12)
const roleName = 'role' + randId
const role = {
_id: roleName,
permissions: permissionsMap
}
const roleRes = await service.post('/role')
.set('x-access-token', tokens.admin)
.send(role)
.expect(200)
const user = {
email: 'test' + randId + '@example.com',
password: '123',
}
const registerRes = await service.post('/users/register')
.send(user)
.expect(200)
const updateRes = await service.post(`/users/${registerRes.body.id}/update`)
.send({ $push: { roles: roleName } })
.set('x-access-token', tokens.admin)
.expect(200)
const accessKey = randomstring.generate(8)
await exports.api.db.access_keys.create({
user_collection: 'users',
user_id: registerRes.body.id,
key: accessKey,
expires_at: '2032-01-01T00:00:00'
})
return accessKey
}
exports.clone = util.clone
exports.sleep = function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms))
}
exports.generateDocumentId = util.generateDocumentId