@@ -1109,12 +1109,46 @@ contract BidderRegistryTest is Test {
11091109 assertEq (balanceAfter, 9 ether + 3 wei, "bidder should have received all available amount " );
11101110 }
11111111
1112+ function test_bidderStakingAndWithdrawCycle () public {
1113+ test_withdrawAsBidder_AssertDepositStateWithEscrowedAmount ();
1114+
1115+ address provider1 = vm.addr (8 );
1116+ address provider2 = vm.addr (9 );
1117+ address [] memory providers = new address [](2 );
1118+ providers[0 ] = provider1;
1119+ providers[1 ] = provider2;
1120+
1121+ IBidderRegistry.Deposit memory deposit1Before = getDepositStruct (bidder, provider1);
1122+ IBidderRegistry.Deposit memory deposit2Before = getDepositStruct (bidder, provider2);
1123+
1124+ vm.deal (bidder, 25 ether + 1 wei);
1125+
1126+ vm.expectEmit (true , true , true , true );
1127+ emit IBidderRegistry.BidderDeposited (bidder, provider1, 12.5 ether);
1128+ vm.expectEmit (true , true , true , true );
1129+ emit IBidderRegistry.BidderDeposited (bidder, provider2, 12.5 ether + 1 wei);
1130+ vm.prank (bidder);
1131+ bidderRegistry.depositEvenlyAsBidder {value: 25 ether + 1 wei }(providers);
1132+
1133+ IBidderRegistry.Deposit memory deposit1After = getDepositStruct (bidder, provider1);
1134+ IBidderRegistry.Deposit memory deposit2After = getDepositStruct (bidder, provider2);
1135+ assertTrue (deposit1After.exists, "deposit1 should exist " );
1136+ assertTrue (deposit2After.exists, "deposit2 should exist " );
1137+ assertEq (deposit1After.availableAmount, deposit1Before.availableAmount + 12.5 ether, "deposit1 should have 12.5 ether more than before " );
1138+ assertEq (deposit2After.availableAmount, deposit2Before.availableAmount + 12.5 ether + 1 wei, "deposit2 should have 12.5 ether + 1 wei more than before " );
1139+ assertEq (deposit1After.escrowedAmount, deposit1Before.escrowedAmount, "deposit1 should have same escrowed amount as before " );
1140+ assertEq (deposit2After.escrowedAmount, deposit2Before.escrowedAmount, "deposit2 should have same escrowed amount as before " );
1141+ assertFalse (deposit1After.withdrawalRequestOccurrence.exists, "deposit1 should have no withdrawal request " );
1142+ assertFalse (deposit2After.withdrawalRequestOccurrence.exists, "deposit2 should have no withdrawal request " );
1143+
1144+ vm.prank (bidderRegistry.preconfManager ());
1145+ bidderRegistry.openBid (keccak256 ("commitment " ), 1 ether, bidder, provider1);
1146+ }
1147+
11121148 function getDepositStruct (address bidderArg , address providerArg ) public view returns (IBidderRegistry.Deposit memory deposit ) {
11131149 (deposit.exists, deposit.availableAmount, deposit.escrowedAmount, deposit.withdrawalRequestOccurrence) = bidderRegistry.deposits (bidderArg, providerArg);
11141150 return deposit;
11151151 }
1116-
1117- // TODO: Test staking/withdraw cycle for bidder to same provider
11181152}
11191153
11201154contract IncorrectBidderContract {
0 commit comments