From 3fa061b43e7758174cf86e729db5641473903627 Mon Sep 17 00:00:00 2001 From: Oshioke Salaki Date: Sat, 10 Feb 2024 15:11:03 +0000 Subject: [PATCH] test: withdraw fails when attempted before set withdraw time --- src/bwc_staking_contract.cairo | 3 +- .../test_bwc_staking_contract.cairo | 38 ++++++++++++++++--- 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/src/bwc_staking_contract.cairo b/src/bwc_staking_contract.cairo index b093896..71bb3e5 100644 --- a/src/bwc_staking_contract.cairo +++ b/src/bwc_staking_contract.cairo @@ -77,6 +77,7 @@ mod BWCStakingContract { ///////////////// mod Errors { const INSUFFICIENT_FUND: felt252 = 'STAKE: Insufficient fund'; + const INVALID_WITHDRAW_TIME: felt252 = 'Not yet time to withdraw'; const INSUFFICIENT_BALANCE: felt252 = 'STAKE: Insufficient balance'; const ADDRESS_ZERO: felt252 = 'STAKE: Address zero'; const NOT_TOKEN_ADDRESS: felt252 = 'STAKE: Not token address'; @@ -198,7 +199,7 @@ mod BWCStakingContract { assert( amount <= stake_amount, Errors::WITHDRAW_AMOUNT_NOT_ALLOWED ); // Staker cannot withdraw more than staked amount - assert(self.is_time_to_withdraw(stake_time), 'Not yet time to withdraw'); + assert(self.is_time_to_withdraw(stake_time), Errors::INVALID_WITHDRAW_TIME); assert( reward_contract.balance_of(address_this) >= amount, 'Not enough reward token to send' diff --git a/src/tests/bwc_staking_contract/test_bwc_staking_contract.cairo b/src/tests/bwc_staking_contract/test_bwc_staking_contract.cairo index a41f901..47c1dbe 100644 --- a/src/tests/bwc_staking_contract/test_bwc_staking_contract.cairo +++ b/src/tests/bwc_staking_contract/test_bwc_staking_contract.cairo @@ -4,13 +4,10 @@ use core::result::ResultTrait; use core::option::OptionTrait; use basic_staking_dapp::bwc_staking_contract::{IStake, BWCStakingContract, IStakeDispatcher}; use basic_staking_dapp::erc20_token::{IERC20, ERC20, IERC20Dispatcher}; -use starknet::ContractAddress; +use starknet::{ContractAddress, get_block_timestamp}; use starknet::contract_address::contract_address_const; use core::array::ArrayTrait; -use snforge_std::{declare, ContractClassTrait, fs::{FileTrait, read_txt}}; -use snforge_std::{start_prank, stop_prank, CheatTarget}; - -use snforge_std::PrintTrait; +use snforge_std::{declare, ContractClassTrait, fs::{FileTrait, read_txt}, start_prank, stop_prank, CheatTarget, start_warp, PrintTrait}; use core::traits::{Into, TryInto}; use starknet::syscalls::deploy_syscall; use starknet::SyscallResultTrait; @@ -253,6 +250,37 @@ fn test_invalid_withdrawal_amount() { } +#[test] +#[should_panic(expected: ('Not yet time to withdraw',))] +fn test_invalid_withdraw_time() { + let (staking_contract_address, bwc_contract_address, receipt_contract_address, reward_contract_address) = + deploy_contract(); + let receipt_dispatcher = IERC20Dispatcher { contract_address: receipt_contract_address }; + let stake_dispatcher = IStakeDispatcher { contract_address: staking_contract_address }; + let bwc_dispatcher = IERC20Dispatcher { contract_address: bwc_contract_address }; + let reward_dispatcher = IERC20Dispatcher { contract_address: reward_contract_address }; + + + start_prank(CheatTarget::One(bwc_contract_address), Account::admin()); + bwc_dispatcher.transfer(Account::user1(), 35); + stop_prank(CheatTarget::One(bwc_contract_address)); + + start_prank(CheatTarget::One(receipt_contract_address), Account::admin()); + receipt_dispatcher.transfer(staking_contract_address, 20); + stop_prank(CheatTarget::One(receipt_contract_address)); + + start_prank(CheatTarget::One(bwc_contract_address), Account::user1()); + bwc_dispatcher.approve(staking_contract_address, 10); + stop_prank(CheatTarget::One(bwc_contract_address)); + + start_prank(CheatTarget::One(staking_contract_address), Account::user1()); + stake_dispatcher.stake(6); + stake_dispatcher.withdraw(5); +} + + + +