-
Notifications
You must be signed in to change notification settings - Fork 68
Expand file tree
/
Copy pathtestUtils.js
More file actions
149 lines (137 loc) · 3.68 KB
/
Copy pathtestUtils.js
File metadata and controls
149 lines (137 loc) · 3.68 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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
const uuid = require('uuid');
const log = require("loglevel");
const Crypto = require('crypto');
const generator = require('generate-password');
const { expect } = require('chai');
const JWTService = require("../../server/services/JWTService");
const Transfer = require("../../server/models/Transfer");
const TrustRelationship = require("../../server/models/TrustRelationship");
const knex = require("../../server/database/knex");
/*
* register the user, create password hash, and apiKey
*/
async function register(user){
const sha512 = function(password, salt){
const hash = Crypto.createHmac('sha512', salt); /** Hashing algorithm sha512 */
hash.update(password);
const value = hash.digest('hex');
return value;
};
const salt = Crypto.randomBytes(32).toString('base64') // create a secure salt
const passwordHash = sha512(user.password, salt)
const apiKey = generator.generate({
length: 32,
numbers: true
});
await knex('api_key')
.insert({
key: apiKey,
tree_token_api_access: true,
hash: 'test',
salt: 'test',
name: 'test',
});
// wallet
const result = await knex('wallet')
.insert({
id: uuid.v4(),
name: user.name,
password: passwordHash,
salt,
}).returning("*");
log.info("registered wallet:", result);
return {
...result[0],
apiKey,
// restore password
password: user.password,
};
}
/*
* create the user, apiKey, then login, return
* token
*/
async function registerAndLogin(user){
const userRegistered = await register(user);
const jwtService = new JWTService();
const token = jwtService.sign(userRegistered);
userRegistered.token = token;
expect(userRegistered).property("apiKey").a("string");
return userRegistered;
}
async function clear() {
log.debug('clear tables');
await knex('api_key').del();
await knex('transaction').del();
await knex('token').del();
await knex('wallet').del();
await knex('wallet_trust').del();
await knex('transfer').del();
}
/*
* Add a token to a wallet
*/
async function addToken(wallet, token){
expect(token).property("value").a("number");
const result = await knex("token")
.insert({
...token,
wallet_id: wallet.id,
}).returning("*");
expect(result[0]).property("id").eq(token.id);
expect(result[0]).property("wallet_id").eq(wallet.id);
return result[0];
}
/*
* Directly pending a token send request
*/
async function sendAndPend(
walletSender,
walletReceiver,
bundleSize,
){
const result = await knex("transfer")
.insert({
id: uuid.v4(),
originator_wallet_id: walletSender.id,
source_wallet_id: walletSender.id,
destination_wallet_id: walletReceiver.id,
type: Transfer.TYPE.send,
parameters: {
bundleSize,
},
state: Transfer.STATE.pending,
active: true,
}).returning("*");
expect(result[0]).property("id").a("string");
return result[0];
}
async function getTokenById(id){
const tokens = await knex("token").where("id", id);
return tokens[0];
}
async function trustASendToB(walletA, walletB){
const result = await knex("wallet_trust")
.insert({
id: uuid.v4(),
actor_wallet_id: walletA.id,
target_wallet_id: walletB.id,
originator_wallet_id: walletA.id,
type: TrustRelationship.ENTITY_TRUST_TYPE.send,
request_type: TrustRelationship.ENTITY_TRUST_REQUEST_TYPE.send,
state: TrustRelationship.ENTITY_TRUST_STATE_TYPE.trusted,
active: true,
}).returning("*");
expect(result[0]).property("id").a("string");
return result[0];
}
module.exports = {
register,
registerAndLogin,
clear,
sendAndPend,
addToken,
getTokenById,
trustASendToB,
getKnex: () => knex,
}