@@ -45,6 +45,8 @@ contract("Korporatio", (accounts) => {
45
45
let tokenLocking ;
46
46
47
47
let korporatio ;
48
+ let createApplication ;
49
+ let createFreeApplication ;
48
50
let version ;
49
51
50
52
let reputationTree ;
@@ -62,6 +64,7 @@ contract("Korporatio", (accounts) => {
62
64
const USER0 = accounts [ 0 ] ;
63
65
const USER1 = accounts [ 1 ] ;
64
66
const USER2 = accounts [ 2 ] ;
67
+ const USER3 = accounts [ 3 ] ;
65
68
const MINER = accounts [ 5 ] ;
66
69
67
70
before ( async ( ) => {
@@ -82,10 +85,13 @@ contract("Korporatio", (accounts) => {
82
85
await colony . installExtension ( KORPORATIO , version ) ;
83
86
const korporatioAddress = await colonyNetwork . getExtensionInstallation ( KORPORATIO , colony . address ) ;
84
87
korporatio = await Korporatio . at ( korporatioAddress ) ;
88
+ createApplication = korporatio . methods [ "createApplication(bytes,bytes,uint256,bytes32[],bytes,bytes,uint256,bytes32[])" ] ;
89
+ createFreeApplication = korporatio . methods [ "createApplication()" ] ;
85
90
86
91
await colony . setArchitectureRole ( 1 , UINT256_MAX , USER0 , 1 , true ) ;
87
92
await colony . setArbitrationRole ( 1 , UINT256_MAX , USER1 , 1 , true ) ;
88
93
await colony . setAdministrationRole ( 1 , UINT256_MAX , USER1 , 1 , true ) ;
94
+ await colony . setRootRole ( USER2 , true ) ;
89
95
await colony . setArbitrationRole ( 1 , UINT256_MAX , korporatio . address , 1 , true ) ;
90
96
91
97
await token . mint ( USER0 , WAD ) ;
@@ -173,9 +179,7 @@ contract("Korporatio", (accounts) => {
173
179
174
180
it ( "cannot create applications unless initialised" , async ( ) => {
175
181
await checkErrorRevert (
176
- korporatio . createApplication ( domain1Key , domain1Value , domain1Mask , domain1Siblings , user0Key , user0Value , user0Mask , user0Siblings , {
177
- from : USER0 ,
178
- } ) ,
182
+ createApplication ( domain1Key , domain1Value , domain1Mask , domain1Siblings , user0Key , user0Value , user0Mask , user0Siblings , { from : USER0 } ) ,
179
183
"korporatio-not-initialised"
180
184
) ;
181
185
} ) ;
@@ -185,7 +189,7 @@ contract("Korporatio", (accounts) => {
185
189
beforeEach ( async ( ) => {
186
190
await colony . approveStake ( korporatio . address , 1 , WAD , { from : USER0 } ) ;
187
191
188
- await korporatio . initialise ( WAD . divn ( 100 ) , SECONDS_PER_DAY , { from : USER0 } ) ;
192
+ await korporatio . initialise ( WAD . divn ( 100 ) , WAD . divn ( 100 ) , SECONDS_PER_DAY , { from : USER0 } ) ;
189
193
} ) ;
190
194
191
195
it ( "can query for configuration params" , async ( ) => {
@@ -197,11 +201,11 @@ contract("Korporatio", (accounts) => {
197
201
} ) ;
198
202
199
203
it ( "cannot set configuration params if not root architect" , async ( ) => {
200
- await checkErrorRevert ( korporatio . initialise ( WAD . divn ( 100 ) , SECONDS_PER_DAY , { from : USER1 } ) , "korporatio-not-root-architect" ) ;
204
+ await checkErrorRevert ( korporatio . initialise ( WAD . divn ( 100 ) , WAD . divn ( 100 ) , SECONDS_PER_DAY , { from : USER1 } ) , "korporatio-not-root-architect" ) ;
201
205
} ) ;
202
206
203
207
it ( "can create an application" , async ( ) => {
204
- await korporatio . createApplication ( domain1Key , domain1Value , domain1Mask , domain1Siblings , user0Key , user0Value , user0Mask , user0Siblings , {
208
+ await createApplication ( domain1Key , domain1Value , domain1Mask , domain1Siblings , user0Key , user0Value , user0Mask , user0Siblings , {
205
209
from : USER0 ,
206
210
} ) ;
207
211
@@ -216,7 +220,7 @@ contract("Korporatio", (accounts) => {
216
220
} ) ;
217
221
218
222
it ( "can create a free application if root or admin" , async ( ) => {
219
- await korporatio . createFreeApplication ( { from : USER1 } ) ;
223
+ await createFreeApplication ( { from : USER1 } ) ;
220
224
221
225
const applicationId = await korporatio . getNumApplications ( ) ;
222
226
const application = await korporatio . getApplication ( applicationId ) ;
@@ -225,14 +229,14 @@ contract("Korporatio", (accounts) => {
225
229
expect ( application . cancelledAt ) . to . eq . BN ( UINT256_MAX ) ;
226
230
227
231
// Must have root or admin role
228
- await checkErrorRevert ( korporatio . createFreeApplication ( { from : USER2 } ) , "korporatio-must-submit-stake" ) ;
232
+ await checkErrorRevert ( createFreeApplication ( { from : USER3 } ) , "korporatio-must-submit-stake" ) ;
229
233
} ) ;
230
234
231
235
it ( "cannot create an application with insufficient rep" , async ( ) => {
232
- await korporatio . initialise ( WAD , SECONDS_PER_DAY , { from : USER0 } ) ;
236
+ await korporatio . initialise ( new BN ( 1 ) , WAD , SECONDS_PER_DAY , { from : USER0 } ) ;
233
237
234
238
await checkErrorRevert (
235
- korporatio . createApplication ( domain1Key , domain1Value , domain1Mask , domain1Siblings , user0Key , user0Value , user0Mask , user0Siblings , {
239
+ createApplication ( domain1Key , domain1Value , domain1Mask , domain1Siblings , user0Key , user0Value , user0Mask , user0Siblings , {
236
240
from : USER0 ,
237
241
} ) ,
238
242
"korporatio-insufficient-rep"
@@ -243,17 +247,17 @@ contract("Korporatio", (accounts) => {
243
247
await colony . deprecateExtension ( KORPORATIO , true ) ;
244
248
245
249
await checkErrorRevert (
246
- korporatio . createApplication ( domain1Key , domain1Value , domain1Mask , domain1Siblings , user0Key , user0Value , user0Mask , user0Siblings , {
250
+ createApplication ( domain1Key , domain1Value , domain1Mask , domain1Siblings , user0Key , user0Value , user0Mask , user0Siblings , {
247
251
from : USER0 ,
248
252
} ) ,
249
253
"colony-extension-deprecated"
250
254
) ;
251
255
252
- await checkErrorRevert ( korporatio . createFreeApplication ( { from : USER1 } ) , "colony-extension-deprecated" ) ;
256
+ await checkErrorRevert ( createFreeApplication ( { from : USER1 } ) , "colony-extension-deprecated" ) ;
253
257
} ) ;
254
258
255
259
it ( "can cancel an application" , async ( ) => {
256
- await korporatio . createApplication ( domain1Key , domain1Value , domain1Mask , domain1Siblings , user0Key , user0Value , user0Mask , user0Siblings , {
260
+ await createApplication ( domain1Key , domain1Value , domain1Mask , domain1Siblings , user0Key , user0Value , user0Mask , user0Siblings , {
257
261
from : USER0 ,
258
262
} ) ;
259
263
@@ -270,7 +274,7 @@ contract("Korporatio", (accounts) => {
270
274
} ) ;
271
275
272
276
it ( "can reclaim a stake" , async ( ) => {
273
- await korporatio . createApplication ( domain1Key , domain1Value , domain1Mask , domain1Siblings , user0Key , user0Value , user0Mask , user0Siblings , {
277
+ await createApplication ( domain1Key , domain1Value , domain1Mask , domain1Siblings , user0Key , user0Value , user0Mask , user0Siblings , {
274
278
from : USER0 ,
275
279
} ) ;
276
280
@@ -288,29 +292,35 @@ contract("Korporatio", (accounts) => {
288
292
expect ( obligation ) . to . be . zero ;
289
293
} ) ;
290
294
291
- it ( "can slash a stake " , async ( ) => {
292
- await korporatio . createApplication ( domain1Key , domain1Value , domain1Mask , domain1Siblings , user0Key , user0Value , user0Mask , user0Siblings , {
295
+ it ( "can delete an application without punishing " , async ( ) => {
296
+ await createApplication ( domain1Key , domain1Value , domain1Mask , domain1Siblings , user0Key , user0Value , user0Mask , user0Siblings , {
293
297
from : USER0 ,
294
298
} ) ;
295
299
296
300
const applicationId = await korporatio . getNumApplications ( ) ;
297
- await korporatio . slashStake ( applicationId , false , { from : USER1 } ) ;
301
+ await korporatio . deleteApplication ( applicationId , false , { from : USER1 } ) ;
298
302
299
303
const obligation = await colony . getObligation ( USER0 , korporatio . address , 1 ) ;
300
304
expect ( obligation ) . to . be . zero ;
305
+
306
+ const lock = await tokenLocking . getUserLock ( token . address , USER0 ) ;
307
+ expect ( lock . balance ) . to . eq . BN ( WAD ) ;
301
308
} ) ;
302
309
303
- it ( "can slash a stake and punish" , async ( ) => {
304
- await korporatio . createApplication ( domain1Key , domain1Value , domain1Mask , domain1Siblings , user0Key , user0Value , user0Mask , user0Siblings , {
310
+ it ( "can delete an application and punish" , async ( ) => {
311
+ await createApplication ( domain1Key , domain1Value , domain1Mask , domain1Siblings , user0Key , user0Value , user0Mask , user0Siblings , {
305
312
from : USER0 ,
306
313
} ) ;
307
314
308
315
const applicationId = await korporatio . getNumApplications ( ) ;
309
- await korporatio . slashStake ( applicationId , true , { from : USER1 } ) ;
316
+ await korporatio . deleteApplication ( applicationId , true , { from : USER1 } ) ;
310
317
311
318
const obligation = await colony . getObligation ( USER0 , korporatio . address , 1 ) ;
312
319
expect ( obligation ) . to . be . zero ;
313
320
321
+ const lock = await tokenLocking . getUserLock ( token . address , USER0 ) ;
322
+ expect ( lock . balance ) . to . eq . BN ( WAD . sub ( WAD . divn ( 100 ) . muln ( 3 ) ) ) ;
323
+
314
324
// Staker gets a reputation penalty
315
325
const addr = await colonyNetwork . getReputationMiningCycle ( false ) ;
316
326
const repCycle = await IReputationMiningCycle . at ( addr ) ;
@@ -323,21 +333,21 @@ contract("Korporatio", (accounts) => {
323
333
} ) ;
324
334
325
335
it ( "cannot slash a nonexistent stake" , async ( ) => {
326
- await checkErrorRevert ( korporatio . slashStake ( 10 , false , { from : USER1 } ) , "korporatio-cannot-slash" ) ;
336
+ await checkErrorRevert ( korporatio . deleteApplication ( 10 , false , { from : USER1 } ) , "korporatio-cannot-slash" ) ;
327
337
} ) ;
328
338
329
339
it ( "cannot slash if not an arbitration user" , async ( ) => {
330
- await korporatio . createApplication ( domain1Key , domain1Value , domain1Mask , domain1Siblings , user0Key , user0Value , user0Mask , user0Siblings , {
340
+ await createApplication ( domain1Key , domain1Value , domain1Mask , domain1Siblings , user0Key , user0Value , user0Mask , user0Siblings , {
331
341
from : USER0 ,
332
342
} ) ;
333
343
334
344
const applicationId = await korporatio . getNumApplications ( ) ;
335
- await checkErrorRevert ( korporatio . slashStake ( applicationId , false , { from : USER2 } ) , "korporatio-caller-not-arbitration" ) ;
345
+ await checkErrorRevert ( korporatio . deleteApplication ( applicationId , false , { from : USER2 } ) , "korporatio-caller-not-arbitration" ) ;
336
346
} ) ;
337
347
338
348
it ( "can reclaim a stake via arbitration if the extension is deleted" , async ( ) => {
339
349
const korporatioAddress = korporatio . address ;
340
- await korporatio . createApplication ( domain1Key , domain1Value , domain1Mask , domain1Siblings , user0Key , user0Value , user0Mask , user0Siblings , {
350
+ await createApplication ( domain1Key , domain1Value , domain1Mask , domain1Siblings , user0Key , user0Value , user0Mask , user0Siblings , {
341
351
from : USER0 ,
342
352
} ) ;
343
353
@@ -357,25 +367,35 @@ contract("Korporatio", (accounts) => {
357
367
expect ( new BN ( lockPre . balance ) ) . to . eq . BN ( lockPost . balance ) ;
358
368
} ) ;
359
369
360
- it ( "can update an application" , async ( ) => {
361
- await korporatio . createFreeApplication ( { from : USER0 } ) ;
370
+ it ( "can update an application as the applicant " , async ( ) => {
371
+ await createFreeApplication ( { from : USER0 } ) ;
362
372
363
373
const applicationId = await korporatio . getNumApplications ( ) ;
364
374
const ipfsHash = soliditySha3 ( "IPFS Hash" ) ;
365
375
366
376
const tx = await korporatio . updateApplication ( applicationId , ipfsHash , { from : USER0 } ) ;
367
377
await expectEvent ( tx , "ApplicationUpdated" , [ applicationId , ipfsHash ] ) ;
368
378
369
- // Cannot update if not applicant
370
- await checkErrorRevert ( korporatio . updateApplication ( applicationId , ipfsHash , { from : USER1 } ) , "korporatio-not-applicant" ) ;
379
+ // Cannot update if not applicant or root
380
+ await checkErrorRevert ( korporatio . updateApplication ( applicationId , ipfsHash , { from : USER1 } ) , "korporatio-not-applicant-or-root " ) ;
371
381
372
382
// Cannot update once cancelled
373
383
await korporatio . cancelApplication ( applicationId , { from : USER0 } ) ;
374
384
await checkErrorRevert ( korporatio . updateApplication ( applicationId , ipfsHash , { from : USER0 } ) , "korporatio-stake-cancelled" ) ;
375
385
} ) ;
376
386
387
+ it ( "can update an application as a root user" , async ( ) => {
388
+ await createFreeApplication ( { from : USER0 } ) ;
389
+
390
+ const applicationId = await korporatio . getNumApplications ( ) ;
391
+ const ipfsHash = soliditySha3 ( "IPFS Hash" ) ;
392
+
393
+ const tx = await korporatio . updateApplication ( applicationId , ipfsHash , { from : USER2 } ) ;
394
+ await expectEvent ( tx , "ApplicationUpdated" , [ applicationId , ipfsHash ] ) ;
395
+ } ) ;
396
+
377
397
it ( "can submit an application" , async ( ) => {
378
- await korporatio . createFreeApplication ( { from : USER0 } ) ;
398
+ await createFreeApplication ( { from : USER0 } ) ;
379
399
380
400
const applicationId = await korporatio . getNumApplications ( ) ;
381
401
@@ -398,7 +418,7 @@ contract("Korporatio", (accounts) => {
398
418
399
419
await voting . initialise ( WAD . divn ( 1000 ) , 0 , 0 , WAD , SECONDS_PER_DAY , SECONDS_PER_DAY , SECONDS_PER_DAY , SECONDS_PER_DAY ) ;
400
420
401
- await korporatio . createFreeApplication ( { from : USER0 } ) ;
421
+ await createFreeApplication ( { from : USER0 } ) ;
402
422
const applicationId = await korporatio . getNumApplications ( ) ;
403
423
404
424
const action = await encodeTxData ( korporatio , "submitApplication" , [ applicationId ] ) ;
@@ -429,9 +449,7 @@ contract("Korporatio", (accounts) => {
429
449
it ( "can submit a stake via metatransactions" , async ( ) => {
430
450
await colony . approveStake ( korporatio . address , 1 , WAD , { from : USER0 } ) ;
431
451
432
- const txData = await korporatio . contract . methods
433
- . createApplication ( domain1Key , domain1Value , domain1Mask , domain1Siblings , user0Key , user0Value , user0Mask , user0Siblings )
434
- . encodeABI ( ) ;
452
+ const txData = await korporatio . contract . methods [ "createApplication()" ] ( ) . encodeABI ( ) ;
435
453
const { r, s, v } = await getMetaTransactionParameters ( txData , USER0 , korporatio . address ) ;
436
454
await korporatio . executeMetaTransaction ( USER0 , txData , r , s , v , { from : USER0 } ) ;
437
455
0 commit comments