@@ -18,6 +18,7 @@ contract StakeManagerTest is Test {
18
18
address internal stakeToken;
19
19
address internal deployer;
20
20
address internal testUser = makeAddr ("testUser " );
21
+ address internal testUser2 = makeAddr ("testUser2 " );
21
22
22
23
function setUp () public virtual {
23
24
Deploy deployment = new Deploy ();
@@ -40,8 +41,10 @@ contract StakeManagerTest is Test {
40
41
vm.prank (owner);
41
42
vault = vaultFactory.createVault ();
42
43
43
- vm.prank (deployer);
44
- stakeManager.setVault (address (vault).codehash);
44
+ if (! stakeManager.isVault (address (vault).codehash)) {
45
+ vm.prank (deployer);
46
+ stakeManager.setVault (address (vault).codehash);
47
+ }
45
48
}
46
49
}
47
50
@@ -71,6 +74,32 @@ contract StakeTest is StakeManagerTest {
71
74
vm.expectRevert (StakeManager.StakeManager__InvalidLockupPeriod.selector );
72
75
userVault.stake (100 , lockTime);
73
76
}
77
+
78
+ function test_StakeWithoutLockUpTimeMintsMultiplierPoints () public {
79
+ // ensure user has funds
80
+ deal (stakeToken, testUser, 1000 );
81
+ StakeVault userVault = _createTestVault (testUser);
82
+
83
+ vm.startPrank (testUser);
84
+ ERC20 (stakeToken).approve (address (userVault), 100 );
85
+
86
+ // stake without lockup time
87
+ userVault.stake (100 , 0 );
88
+
89
+ (, , uint256 multiplierPoints , , , ) = stakeManager.accounts (address (userVault));
90
+
91
+ // total multiplier poitn supply
92
+ assertEq (stakeManager.multiplierSupply (), 100 );
93
+ // user multiplier points
94
+ assertEq (multiplierPoints, 100 );
95
+
96
+ userVault.unstake (100 );
97
+
98
+ // multiplierpoints are burned after unstaking
99
+ (, , multiplierPoints, , , ) = stakeManager.accounts (address (userVault));
100
+ assertEq (stakeManager.multiplierSupply (), 0 );
101
+ assertEq (multiplierPoints, 0 );
102
+ }
74
103
}
75
104
76
105
contract UnstakeTest is StakeManagerTest {
@@ -215,3 +244,44 @@ contract ExecuteAccountTest is StakeManagerTest {
215
244
stakeManager.executeAccount (address (userVault), currentEpoch + 1 );
216
245
}
217
246
}
247
+
248
+ contract UserFlowsTest is StakeManagerTest {
249
+
250
+ function setUp () public override {
251
+ StakeManagerTest.setUp ();
252
+ }
253
+
254
+ function test_StakedSupplyShouldIncreaseAndDecreaseAgain () public {
255
+ // ensure users have funds
256
+ deal (stakeToken, testUser, 1000 );
257
+ deal (stakeToken, testUser2, 1000 );
258
+
259
+ StakeVault userVault = _createTestVault (testUser);
260
+ StakeVault user2Vault = _createTestVault (testUser2);
261
+
262
+ vm.startPrank (testUser);
263
+ // approve user vault to spend user tokens
264
+ ERC20 (stakeToken).approve (address (userVault), 100 );
265
+ userVault.stake (100 , 0 );
266
+ vm.stopPrank ();
267
+
268
+ vm.startPrank (testUser2);
269
+ ERC20 (stakeToken).approve (address (user2Vault), 100 );
270
+ user2Vault.stake (100 , 0 );
271
+ vm.stopPrank ();
272
+
273
+ assertEq (ERC20 (stakeToken).balanceOf (address (userVault)), 100 );
274
+ assertEq (ERC20 (stakeToken).balanceOf (address (user2Vault)), 100 );
275
+ assertEq (stakeManager.stakeSupply (), 200 );
276
+
277
+ vm.startPrank (testUser);
278
+ userVault.unstake (100 );
279
+ assertEq (ERC20 (stakeToken).balanceOf (address (userVault)), 0 );
280
+ assertEq (stakeManager.stakeSupply (), 100 );
281
+
282
+ vm.startPrank (testUser2);
283
+ user2Vault.unstake (100 );
284
+ assertEq (ERC20 (stakeToken).balanceOf (address (user2Vault)), 0 );
285
+ assertEq (stakeManager.stakeSupply (), 0 );
286
+ }
287
+ }
0 commit comments