@@ -8,6 +8,7 @@ const ERC20Mock = artifacts.require("./ERC20Mock.sol");
88const ActionMock = artifacts . require ( "./ActionMock.sol" ) ;
99const DxDaoSchemeConstraints = artifacts . require ( "./DxDaoSchemeConstraints.sol" ) ;
1010const SimpleSchemeConstraints = artifacts . require ( "./SimpleSchemeConstraints.sol" ) ;
11+ const Redeemer = artifacts . require ( "./Redeemer.sol" ) ;
1112
1213class GenericSchemeParams {
1314 constructor ( ) {
@@ -291,6 +292,76 @@ contract('GenericSchemeMultiCall', function(accounts) {
291292 } ) ;
292293 } ) ;
293294
295+ it ( "redeemer should fail if not executed from votingMachine" , async function ( ) {
296+ var actionMock = await ActionMock . new ( ) ;
297+ var standardTokenMock = await ERC20Mock . new ( accounts [ 0 ] , 1000 ) ;
298+ var testSetup = await setup ( accounts , [ actionMock . address ] , 0 , true , standardTokenMock . address ) ;
299+ const encodeABI = await new web3 . eth . Contract ( actionMock . abi ) . methods . withoutReturnValue ( testSetup . org . avatar . address ) . encodeABI ( ) ;
300+ var tx = await testSetup . genericSchemeMultiCall . proposeCalls ( [ actionMock . address ] , [ encodeABI ] , [ 0 ] , helpers . NULL_HASH ) ;
301+ var proposalId = await helpers . getValueFromLogs ( tx , '_proposalId' ) ;
302+ var redeemer = await Redeemer . new ( ) ;
303+ var redeemRewards = await redeemer . redeemGenericSchemeMultiCall . call (
304+ testSetup . genericSchemeMultiCall . address ,
305+ testSetup . genericSchemeParams . votingMachine . genesisProtocol . address ,
306+ proposalId ,
307+ accounts [ 0 ] ) ;
308+ assert . equal ( redeemRewards [ 0 ] [ 1 ] , 0 ) ; //redeemRewards[0] gpRewards
309+ assert . equal ( redeemRewards [ 0 ] [ 2 ] , 0 ) ;
310+ assert . equal ( redeemRewards . executed , false ) ;
311+ assert . equal ( redeemRewards . winningVote , 0 ) ; // Cannot redeem, so will not get the winning vote
312+ tx = await redeemer . redeemGenericSchemeMultiCall (
313+ testSetup . genericSchemeMultiCall . address ,
314+ testSetup . genericSchemeParams . votingMachine . genesisProtocol . address ,
315+ proposalId ,
316+ accounts [ 0 ] ) ;
317+ await testSetup . genericSchemeMultiCall . getPastEvents ( 'ProposalExecuted' , {
318+ fromBlock : tx . blockNumber ,
319+ toBlock : 'latest'
320+ } )
321+ . then ( function ( events ) {
322+ assert . equal ( events . length , 0 ) ;
323+ } ) ;
324+ } ) ;
325+
326+ it ( "execute proposeVote -positive decision - execute with redeemer" , async function ( ) {
327+ var actionMock = await ActionMock . new ( ) ;
328+ var standardTokenMock = await ERC20Mock . new ( accounts [ 0 ] , 1000 ) ;
329+ var testSetup = await setup ( accounts , [ actionMock . address ] , 0 , true , standardTokenMock . address ) ;
330+ var value = 50000 ;
331+ var callData = await createCallToActionMock ( testSetup . org . avatar . address , actionMock ) ;
332+ var tx = await testSetup . genericSchemeMultiCall . proposeCalls ( [ actionMock . address , actionMock . address ] , [ callData , callData ] , [ value , value ] , helpers . NULL_HASH ) ;
333+ var proposalId = await helpers . getValueFromLogs ( tx , '_proposalId' ) ;
334+ //transfer some eth to avatar
335+ await web3 . eth . sendTransaction ( { from :accounts [ 0 ] , to :testSetup . org . avatar . address , value : web3 . utils . toWei ( '1' , "ether" ) } ) ;
336+ assert . equal ( await web3 . eth . getBalance ( actionMock . address ) , 0 ) ;
337+ await testSetup . genericSchemeParams . votingMachine . genesisProtocol . vote ( proposalId , 1 , 0 , helpers . NULL_ADDRESS , { from :accounts [ 2 ] } ) ;
338+ var redeemer = await Redeemer . new ( ) ;
339+ var redeemRewards = await redeemer . redeemGenericSchemeMultiCall . call (
340+ testSetup . genericSchemeMultiCall . address ,
341+ testSetup . genericSchemeParams . votingMachine . genesisProtocol . address ,
342+ proposalId ,
343+ accounts [ 0 ] ) ;
344+ assert . equal ( redeemRewards [ 0 ] [ 1 ] , 0 ) ; //redeemRewards[0] gpRewards
345+ assert . equal ( redeemRewards [ 0 ] [ 2 ] , 60 ) ;
346+ assert . equal ( redeemRewards . executed , false ) ; // GP already executed by vote
347+ assert . equal ( redeemRewards . winningVote , 1 ) ;
348+ tx = await redeemer . redeemGenericSchemeMultiCall (
349+ testSetup . genericSchemeMultiCall . address ,
350+ testSetup . genericSchemeParams . votingMachine . genesisProtocol . address ,
351+ proposalId ,
352+ accounts [ 0 ] ) ;
353+ await testSetup . genericSchemeMultiCall . getPastEvents ( 'ProposalExecuted' , {
354+ fromBlock : tx . blockNumber ,
355+ toBlock : 'latest'
356+ } )
357+ . then ( function ( events ) {
358+ assert . equal ( events [ 0 ] . event , "ProposalExecuted" ) ;
359+ assert . equal ( events [ 0 ] . args . _proposalId , proposalId ) ;
360+ } ) ;
361+ assert . equal ( await web3 . eth . getBalance ( actionMock . address ) , value * 2 ) ;
362+ } ) ;
363+
364+
294365 it ( "schemeconstrains eth value exceed limit" , async function ( ) {
295366 var actionMock = await ActionMock . new ( ) ;
296367 var standardTokenMock = await ERC20Mock . new ( accounts [ 0 ] , 1000 ) ;
0 commit comments