1
+ const Multisend = artifacts . require ( 'Multisend.sol' ) ;
2
+
3
+ contract ( 'Multisend' , function ( accounts ) {
4
+ beforeEach ( async function ( ) {
5
+ this . multisend = await Multisend . new ( ) ;
6
+ } )
7
+ describe ( 'multisend' , function ( ) {
8
+ let recipients1 = [ "0x709b248f7B839078724B4E40904fBD7B694ba1Dc" , "0xB9b727B4B37157103541FAeF8E8A48451d7aC18D" ] ;
9
+ let recipients2 = [ "0xB9b727B4B37157103541FAeF8E8A48451d7aC18D" , "0xB9b727B4B37157103541FAeF8E8A48451d7aC18D" ] ;
10
+ let recipients3 = [ ] ;
11
+ for ( let i = 1 ; i <= 301 ; i ++ ) {
12
+ recipients3 . push ( "0xB9b727B4B37157103541FAeF8E8A48451d7aC18D" ) ;
13
+ }
14
+ let amounts1 = [ 100 , 200 ] ;
15
+ let amounts2 = [ ] ;
16
+ for ( let i = 1 ; i <= 301 ; i ++ ) {
17
+ amounts2 . push ( i + 1 ) ;
18
+ }
19
+ let amounts3 = [ 100 , 0 ]
20
+ let payload1 = "" ;
21
+ let payload2 = "testPayload" ;
22
+ let wrongRecipients1 = [ "0x709b248f7B839078724B4E40904fBD7B694ba1Dc" ,
23
+ "0xB9b727B4B37157103541FAeF8E8A48451d7aC18D" , "0xB9b727B4B37157103541FAeF8E8A48451d7aC18D" ] ;
24
+ let wrongRecipients2 = [ "0xB9b727B4B37157103541FAeF8E8A48451d7aC18C" , "0xB9b727B4B37157103541FAeF8E8A48451d7aC18D" ] ;
25
+ let wrongAmounts1 = [ 100 , 200 , 400 ] ;
26
+ let wrongAmounts2 = [ 100 , - 200 ] ;
27
+ let emptyArray = [ ] ;
28
+ let tx ;
29
+ it ( 'should emit two Transfer events and one payload event' , async function ( ) {
30
+ tx = await this . multisend . multiSend ( recipients1 , amounts1 , payload1 , { from : accounts [ 0 ] , value : 300 } ) ;
31
+ const { logs } = tx ;
32
+ assert . equal ( logs . length , 3 ) ;
33
+ for ( let i = 0 ; i < 2 ; i ++ ) {
34
+ assert . equal ( logs [ i ] . event , 'Transfer' ) ;
35
+ assert . equal ( logs [ i ] . args . recipient , recipients1 [ i ] ) ;
36
+ assert . equal ( logs [ i ] . args . amount , amounts1 [ i ] ) ;
37
+ }
38
+ assert . equal ( logs [ 2 ] . event , 'Payload' ) ;
39
+ assert . equal ( logs [ 2 ] . args . payload , payload1 ) ;
40
+ } )
41
+ it ( 'should emit two Transfer events and one payload event' , async function ( ) {
42
+ tx = await this . multisend . multiSend ( recipients2 , amounts1 , payload2 , { from : accounts [ 0 ] , value : 300 } ) ;
43
+ const { logs } = tx ;
44
+ assert . equal ( logs . length , 3 ) ;
45
+ for ( let i = 0 ; i < 2 ; i ++ ) {
46
+ assert . equal ( logs [ i ] . event , 'Transfer' ) ;
47
+ assert . equal ( logs [ i ] . args . recipient , recipients2 [ i ] ) ;
48
+ assert . equal ( logs [ i ] . args . amount , amounts1 [ i ] ) ;
49
+ }
50
+ assert . equal ( logs [ 2 ] . event , 'Payload' ) ;
51
+ assert . equal ( logs [ 2 ] . args . payload , payload2 ) ;
52
+ } )
53
+ it ( 'should emit two Transfer events and one payload event' , async function ( ) {
54
+ tx = await this . multisend . multiSend ( recipients2 , amounts3 , payload2 , { from : accounts [ 0 ] , value : 100 } ) ;
55
+ const { logs } = tx ;
56
+ assert . equal ( logs . length , 3 ) ;
57
+ for ( let i = 0 ; i < 2 ; i ++ ) {
58
+ assert . equal ( logs [ i ] . event , 'Transfer' ) ;
59
+ assert . equal ( logs [ i ] . args . recipient , recipients2 [ i ] ) ;
60
+ assert . equal ( logs [ i ] . args . amount , amounts3 [ i ] ) ;
61
+ }
62
+ assert . equal ( logs [ 2 ] . event , 'Payload' ) ;
63
+ assert . equal ( logs [ 2 ] . args . payload , payload2 ) ;
64
+ } )
65
+ it ( 'should emit two Transfer events and one Rufund event and one payload event' , async function ( ) {
66
+ tx = await this . multisend . multiSend ( recipients1 , amounts1 , payload2 , { from : accounts [ 0 ] , value : 315 } ) ;
67
+ const { logs } = tx ;
68
+ assert . equal ( logs . length , 4 ) ;
69
+ for ( let i = 0 ; i < 2 ; i ++ ) {
70
+ assert . equal ( logs [ i ] . event , 'Transfer' ) ;
71
+ assert . equal ( logs [ i ] . args . recipient , recipients1 [ i ] ) ;
72
+ assert . equal ( logs [ i ] . args . amount , amounts1 [ i ] ) ;
73
+ }
74
+ assert . equal ( logs [ 2 ] . event , 'Refund' ) ;
75
+ assert . equal ( logs [ 2 ] . args . refund , 15 ) ;
76
+ assert . equal ( logs [ 3 ] . event , 'Payload' ) ;
77
+ assert . equal ( logs [ 3 ] . args . payload , payload2 ) ;
78
+ } )
79
+ it ( 'failed due to not enougn token' , async function ( ) {
80
+ let Error ;
81
+ try {
82
+ await this . multisend . multiSend ( recipients1 , amounts1 , payload2 , { from : accounts [ 0 ] , value : 215 } ) ;
83
+ assert . fail ( ) ;
84
+ } catch ( error ) {
85
+ Error = error ;
86
+ }
87
+ assert . notEqual ( Error , undefined , 'Exception thrown' ) ;
88
+ assert . isAbove ( Error . message . search ( 'not enough token' ) , - 1 ) ;
89
+ } )
90
+ it ( 'failed due to more recipients' , async function ( ) {
91
+ let Error ;
92
+ try {
93
+ await this . multisend . multiSend ( wrongRecipients1 , amounts1 , payload2 , { from : accounts [ 0 ] , value : 300 } ) ;
94
+ assert . fail ( ) ;
95
+ } catch ( error ) {
96
+ Error = error ;
97
+ }
98
+ assert . notEqual ( Error , undefined , 'Exception thrown' ) ;
99
+ assert . isAbove ( Error . message . search ( 'parameters not match' ) , - 1 ) ;
100
+ } )
101
+ it ( 'failed due to more amounts' , async function ( ) {
102
+ let Error ;
103
+ try {
104
+ await this . multisend . multiSend ( recipients1 , wrongAmounts1 , payload2 , { from : accounts [ 0 ] , value : 300 } ) ;
105
+ assert . fail ( ) ;
106
+ } catch ( error ) {
107
+ Error = error ;
108
+ }
109
+ assert . notEqual ( Error , undefined , 'Exception thrown' ) ;
110
+ assert . isAbove ( Error . message . search ( 'parameters not match' ) , - 1 ) ;
111
+
112
+ } )
113
+ it ( 'failed due to invalid recipient' , async function ( ) {
114
+ let Error ;
115
+ try {
116
+ await this . multisend . multiSend ( wrongRecipients2 , amounts1 , payload2 , { from : accounts [ 0 ] , value : 300 } ) ;
117
+ assert . fail ( ) ;
118
+ } catch ( error ) {
119
+ Error = error ;
120
+ }
121
+ assert . notEqual ( Error , undefined , 'Exception thrown' ) ;
122
+ } )
123
+ it ( 'failed due to invalid amounts' , async function ( ) {
124
+ let Error ;
125
+ try {
126
+ await this . multisend . multiSend ( recipients1 , wrongAmounts2 , payload2 , { from : accounts [ 0 ] , value : 300 } ) ;
127
+ assert . fail ( ) ;
128
+ } catch ( error ) {
129
+ Error = error ;
130
+ }
131
+ assert . notEqual ( Error , undefined , 'Exception thrown' ) ;
132
+ } )
133
+ it ( 'failed due to empty recipients' , async function ( ) {
134
+ let Error ;
135
+ try {
136
+ await this . multisend . multiSend ( emptyArray , amounts1 , payload2 , { from : accounts [ 0 ] , value : 300 } ) ;
137
+ assert . fail ( ) ;
138
+ } catch ( error ) {
139
+ Error = error ;
140
+ }
141
+ assert . notEqual ( Error , undefined , 'Exception thrown' ) ;
142
+ assert . isAbove ( Error . message . search ( 'parameters not match' ) , - 1 ) ;
143
+ } )
144
+ it ( 'failed due to empty amounts' , async function ( ) {
145
+ let Error ;
146
+ try {
147
+ await this . multisend . multiSend ( recipients1 , emptyArray , payload2 , { from : accounts [ 0 ] , value : 300 } ) ;
148
+ assert . fail ( ) ;
149
+ } catch ( error ) {
150
+ Error = error ;
151
+ }
152
+ assert . notEqual ( Error , undefined , 'Exception thrown' ) ;
153
+ assert . isAbove ( Error . message . search ( 'parameters not match' ) , - 1 ) ;
154
+ } )
155
+ it ( 'failed due to too many recipients' , async function ( ) {
156
+ let Error ;
157
+ try {
158
+ await this . multisend . multiSend ( recipients3 , amounts2 , payload2 , { from : accounts [ 0 ] , value : 300000 } ) ;
159
+ assert . fail ( ) ;
160
+ } catch ( error ) {
161
+ Error = error ;
162
+ }
163
+ assert . notEqual ( Error , undefined , 'Exception thrown' ) ;
164
+ assert . isAbove ( Error . message . search ( 'number of recipients is larger than 300' ) , - 1 ) ;
165
+ } )
166
+ } )
167
+ } )
0 commit comments