# Yearn Affiliate Full and Half Withdraw Test
### strategy-yearn-usdc.test.sol
```solidity=
pragma solidity ^0.6.7;
import "../../lib/hevm.sol";
import "../../lib/user.sol";
import "../../lib/test-approx.sol";
import "../../../interfaces/yearn-strategy.sol";
import "../../../interfaces/curve.sol";
import "../../../interfaces/uniswapv2.sol";
import "../../../pickle-jar.sol";
import "../../../controller-v4.sol";
import "../../lib/test-defi-base.sol";
import "../../../strategies/yearn/strategy-yearn-usdc-v2.sol";
import "../../../strategies/convex/strategy-sushi-cvx-eth-lp.sol";
contract StrategyYearnUsdcV2Test is DSTestDefiBase {
address want;
address governance;
address strategist;
address timelock;
address devfund;
address treasury;
PickleJar pickleJar;
ControllerV4 controller;
IYearnStrategy strategy;
function setUp() public {
want = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
governance = address(this);
strategist = address(this);
devfund = address(new User());
treasury = address(new User());
timelock = address(this);
controller = new ControllerV4(
governance,
strategist,
timelock,
devfund,
treasury
);
strategy = IYearnStrategy(
address(
new StrategyYearnUsdcV2(
governance,
strategist,
address(controller),
timelock
)
)
);
pickleJar = new PickleJar(
strategy.want(),
governance,
timelock,
address(controller)
);
controller.setJar(strategy.want(), address(pickleJar));
controller.approveStrategy(strategy.want(), address(strategy));
controller.setStrategy(strategy.want(), address(strategy));
// Set time
hevm.warp(startTime);
}
function _getWant(uint256 wantAmount) public {
_getERC20(want, wantAmount);
}
// **** Tests ****
function test_withdraw_all() public {
uint256 decimals = ERC20(want).decimals();
_getWant(4000 * (10**decimals));
uint256 _want = IERC20(want).balanceOf(address(this));
IERC20(want).safeApprove(address(pickleJar), 0);
IERC20(want).safeApprove(address(pickleJar), _want);
uint256 _before = IERC20(want).balanceOf(address(this));
pickleJar.deposit(_want);
pickleJar.earn();
// Checking withdraw
pickleJar.withdrawAll();
uint256 _after = IERC20(want).balanceOf(address(this));
assertEqApprox(_after, _before);
}
function test_withdraw_half() public {
uint256 decimals = ERC20(want).decimals();
_getWant(4000 * (10**decimals));
uint256 _want = IERC20(want).balanceOf(address(this));
IERC20(want).safeApprove(address(pickleJar), 0);
IERC20(want).safeApprove(address(pickleJar), _want);
uint256 _before = IERC20(want).balanceOf(address(this));
pickleJar.deposit(_want);
pickleJar.earn();
// Checking withdraw
pickleJar.withdraw(_want.div(2));
uint256 _after = IERC20(want).balanceOf(address(this));
assertEqApprox(_after, _before.div(2));
}
}
```
### Dapp Tools Test Command
`DAPP_TEST_NUMBER=$(seth block-number) DAPP_TEST_TIMESTAMP=$(date +%s) DAPP_TEST_BALANCE_CREATE=10000000000000000000000000 dapp test --rpc-url http://localhost:8545 -m yearn-usdc -v`
### Result
