1
- var LifCrowdsale = artifacts . require ( './LifCrowdsale.sol' ) ;
1
+ var LifCrowdsale = artifacts . require ( './LifCrowdsale.sol' ) ,
2
+ LifToken = artifacts . require ( './LifToken.sol' ) ;
2
3
3
4
let help = require ( './helpers' ) ;
4
5
5
6
var latestTime = require ( './helpers/latestTime' ) ;
6
- var { duration} = require ( './helpers/increaseTime' ) ;
7
+ var { duration, increaseTimeTestRPCTo} = require ( './helpers/increaseTime' ) ;
8
+
9
+ const defaultTimeDelta = duration . days ( 1 ) ; // time delta used in time calculations (for start, end1 & end2)
7
10
8
- const defaultStart = latestTime ( ) + duration . days ( 1 ) ;
9
11
const defaults = {
10
- start : defaultStart ,
11
- end1 : defaultStart + duration . days ( 1 ) ,
12
- end2 : defaultStart + duration . days ( 2 ) ,
13
12
rate1 : 100 ,
14
13
rate2 : 110 ,
15
14
setWeiLockSeconds : duration . minutes ( 30 ) ,
@@ -20,9 +19,9 @@ const defaults = {
20
19
contract ( 'LifToken Crowdsale' , function ( accounts ) {
21
20
22
21
async function createCrowdsale ( params ) {
23
- const startTimestamp = params . start === undefined ? defaults . start : params . start ,
24
- end1Timestamp = params . end1 === undefined ? defaults . end1 : params . end1 ,
25
- end2Timestamp = params . end2 === undefined ? defaults . end2 : params . end2 ,
22
+ const startTimestamp = params . start === undefined ? ( latestTime ( ) + defaultTimeDelta ) : params . start ,
23
+ end1Timestamp = params . end1 === undefined ? ( startTimestamp + defaultTimeDelta ) : params . end1 ,
24
+ end2Timestamp = params . end2 === undefined ? ( end1Timestamp + defaultTimeDelta ) : params . end2 ,
26
25
rate1 = params . rate1 === undefined ? defaults . rate1 : params . rate1 ,
27
26
rate2 = params . rate2 === undefined ? defaults . rate2 : params . rate2 ,
28
27
setWeiLockSeconds = params . setWeiLockSeconds === undefined ? defaults . setWeiLockSeconds : params . setWeiLockSeconds ,
@@ -39,11 +38,19 @@ contract('LifToken Crowdsale', function(accounts) {
39
38
}
40
39
41
40
it ( 'can create a Crowdsale' , async function ( ) {
42
- const crowdsale = await createCrowdsale ( { } ) ;
43
-
44
- assert . equal ( defaults . start , parseInt ( await crowdsale . startTimestamp . call ( ) ) ) ;
45
- assert . equal ( defaults . end1 , parseInt ( await crowdsale . end1Timestamp . call ( ) ) ) ;
46
- assert . equal ( defaults . end2 , parseInt ( await crowdsale . end2Timestamp . call ( ) ) ) ;
41
+ const start = latestTime ( ) + defaultTimeDelta ,
42
+ end1 = start + defaultTimeDelta ,
43
+ end2 = end1 + defaultTimeDelta ;
44
+
45
+ const crowdsale = await createCrowdsale ( {
46
+ start : start ,
47
+ end1 : end1 ,
48
+ end2 : end2
49
+ } ) ;
50
+
51
+ assert . equal ( start , parseInt ( await crowdsale . startTimestamp . call ( ) ) ) ;
52
+ assert . equal ( end1 , parseInt ( await crowdsale . end1Timestamp . call ( ) ) ) ;
53
+ assert . equal ( end2 , parseInt ( await crowdsale . end2Timestamp . call ( ) ) ) ;
47
54
assert . equal ( defaults . rate1 , parseInt ( await crowdsale . rate1 . call ( ) ) ) ;
48
55
assert . equal ( defaults . rate2 , parseInt ( await crowdsale . rate2 . call ( ) ) ) ;
49
56
assert . equal ( accounts [ defaults . foundationWalletIndex ] , parseInt ( await crowdsale . foundationWallet . call ( ) ) ) ;
@@ -79,16 +86,20 @@ contract('LifToken Crowdsale', function(accounts) {
79
86
80
87
it ( 'fails to create a Crowdsale with end timestamp not after start timestamp' , async function ( ) {
81
88
try {
82
- await createCrowdsale ( { end1 : defaults . start } ) ;
89
+ const start = latestTime ( ) + defaultTimeDelta ;
90
+ await createCrowdsale ( { start : start , end1 : start } ) ;
83
91
assert ( false , 'create crowdsale should have thrown' ) ;
84
92
} catch ( e ) {
85
93
if ( ! help . isInvalidOpcodeEx ( e ) ) throw e ;
86
94
}
87
95
} ) ;
88
96
89
97
it ( 'fails to create a Crowdsale with end2 timestamp not after end1 timestamp' , async function ( ) {
98
+ const start = latestTime ( ) + defaultTimeDelta ,
99
+ end1 = start + defaultTimeDelta ;
100
+
90
101
try {
91
- await createCrowdsale ( { end2 : defaults . end1 } ) ;
102
+ await createCrowdsale ( { start : start , end1 : end1 , end2 : end1 } ) ;
92
103
assert ( false , 'create crowdsale should have thrown' ) ;
93
104
} catch ( e ) {
94
105
if ( ! help . isInvalidOpcodeEx ( e ) ) throw e ;
@@ -121,4 +132,116 @@ contract('LifToken Crowdsale', function(accounts) {
121
132
if ( ! help . isInvalidOpcodeEx ( e ) ) throw e ;
122
133
}
123
134
} ) ;
135
+
136
+ it ( 'returns the current rate at different points in time' , async function ( ) {
137
+ const start = latestTime ( ) + defaultTimeDelta ,
138
+ end1 = start + defaultTimeDelta ,
139
+ end2 = end1 + defaultTimeDelta ,
140
+ crowdsale = await createCrowdsale ( {
141
+ start : start ,
142
+ end1 : end1 ,
143
+ end2 : end2
144
+ } ) ;
145
+
146
+ assert . equal ( 0 , parseInt ( await crowdsale . getRate ( ) ) ) ;
147
+
148
+ await increaseTimeTestRPCTo ( start ) ;
149
+
150
+ assert . equal ( defaults . rate1 , parseInt ( await crowdsale . getRate ( ) ) ) ;
151
+
152
+ await increaseTimeTestRPCTo ( end1 - 2 ) ;
153
+ assert . equal ( defaults . rate1 , parseInt ( await crowdsale . getRate ( ) ) ,
154
+ 'rate should still be rate1 close but before end1 timestamp' ) ;
155
+
156
+ await increaseTimeTestRPCTo ( end1 + 1 ) ;
157
+ assert . equal ( defaults . rate2 , parseInt ( await crowdsale . getRate ( ) ) ,
158
+ 'rate should be rate 2 between end1 and end2' ) ;
159
+
160
+ await increaseTimeTestRPCTo ( end2 - 2 ) ;
161
+ assert . equal ( defaults . rate2 , parseInt ( await crowdsale . getRate ( ) ) ,
162
+ 'rate should be rate 2 close but before end2 timestamp' ) ;
163
+
164
+ await increaseTimeTestRPCTo ( end2 + 1 ) ;
165
+ assert . equal ( 0 , parseInt ( await crowdsale . getRate ( ) ) ,
166
+ 'rate should be 0 after end2 timestamp' ) ;
167
+ } ) ;
168
+
169
+ /// buyTokens
170
+
171
+ it ( 'handles a buyTokens tx fine' , async function ( ) {
172
+ const crowdsale = await createCrowdsale ( { } ) ;
173
+ await crowdsale . setWeiPerUSDinTGE ( 10000 ) ;
174
+ await increaseTimeTestRPCTo ( latestTime ( ) + defaultTimeDelta + 2 ) ;
175
+ await crowdsale . buyTokens ( accounts [ 6 ] , { value : 1000 , from : accounts [ 5 ] } ) ;
176
+
177
+ assert . equal ( 1000 , await crowdsale . purchases ( accounts [ 6 ] ) ) ;
178
+ } ) ;
179
+
180
+ it ( 'fails on buyTokens from address(0)' , async function ( ) {
181
+ const crowdsale = await createCrowdsale ( { } ) ;
182
+ await crowdsale . setWeiPerUSDinTGE ( 10000 ) ;
183
+ await increaseTimeTestRPCTo ( latestTime ( ) + defaultTimeDelta + 2 ) ;
184
+ try {
185
+ await crowdsale . buyTokens ( help . zeroAddress , { value : 1000 , from : accounts [ 5 ] } ) ;
186
+ assert ( false , 'should have thrown' ) ;
187
+ } catch ( e ) {
188
+ assert ( help . isInvalidOpcodeEx ( e ) ) ;
189
+ }
190
+ } ) ;
191
+
192
+ /// addPrivatePresaleTokens
193
+ it ( 'handles an addPrivatePresaleTokens tx fine' , async function ( ) {
194
+ const crowdsale = await createCrowdsale ( { } ) ,
195
+ rate = defaults . rate1 + 10 ,
196
+ token = LifToken . at ( await crowdsale . token ( ) ) ;
197
+
198
+ await crowdsale . setWeiPerUSDinTGE ( 10000 ) ;
199
+ await crowdsale . addPrivatePresaleTokens ( accounts [ 3 ] , 1000 , rate ,
200
+ { from : accounts [ 0 ] } ) ;
201
+
202
+ assert . equal ( 1000 * rate , parseInt ( await token . balanceOf ( accounts [ 3 ] ) ) ,
203
+ 'should mint the tokens to beneficiary on addPrivatePresaleTokens' ) ;
204
+ } ) ;
205
+
206
+ it ( 'fails on a addPrivatePresaleTokens tx with address(0) as benef.' , async function ( ) {
207
+ const crowdsale = await createCrowdsale ( { } ) ,
208
+ rate = defaults . rate1 + 10 ;
209
+
210
+ await crowdsale . setWeiPerUSDinTGE ( 10000 ) ;
211
+ try {
212
+ await crowdsale . addPrivatePresaleTokens ( help . zeroAddress , 1000 , rate ,
213
+ { from : accounts [ 0 ] } ) ;
214
+ assert ( false ) ;
215
+ } catch ( e ) {
216
+ assert ( help . isInvalidOpcodeEx ( e ) ) ;
217
+ }
218
+ } ) ;
219
+
220
+ it ( 'fails on a addPrivatePresaleTokens tx with low rate' , async function ( ) {
221
+ const crowdsale = await createCrowdsale ( { } ) ,
222
+ rate = defaults . rate1 - 10 ;
223
+
224
+ await crowdsale . setWeiPerUSDinTGE ( 10000 ) ;
225
+ try {
226
+ await crowdsale . addPrivatePresaleTokens ( accounts [ 3 ] , 1000 , rate ,
227
+ { from : accounts [ 0 ] } ) ;
228
+ assert ( false ) ;
229
+ } catch ( e ) {
230
+ assert ( help . isInvalidOpcodeEx ( e ) ) ;
231
+ }
232
+ } ) ;
233
+
234
+ it ( 'fails on a addPrivatePresaleTokens tx with weiSent == 0' , async function ( ) {
235
+ const crowdsale = await createCrowdsale ( { } ) ,
236
+ rate = defaults . rate1 + 10 ;
237
+
238
+ await crowdsale . setWeiPerUSDinTGE ( 10000 ) ;
239
+ try {
240
+ await crowdsale . addPrivatePresaleTokens ( accounts [ 3 ] , 0 , rate ,
241
+ { from : accounts [ 0 ] } ) ;
242
+ assert ( false ) ;
243
+ } catch ( e ) {
244
+ assert ( help . isInvalidOpcodeEx ( e ) ) ;
245
+ }
246
+ } ) ;
124
247
} ) ;
0 commit comments