contract FindingsTest is Test {
Credibility credTokenContract;
OneShot oneShotTokenContract;
RapBattle rapBattleContract;
Streets streetsContract;
address defender;
address challenger;
function setUp() public {
credTokenContract = new Credibility();
oneShotTokenContract = new OneShot();
rapBattleContract = new RapBattle(address(oneShotTokenContract), address(credTokenContract));
streetsContract = new Streets(address(oneShotTokenContract), address(credTokenContract));
defender = makeAddr("Defender");
challenger = makeAddr("Challenger");
credTokenContract.setStreetsContract(address(streetsContract));
oneShotTokenContract.setStreetsContract(address(streetsContract));
}
function readyPlayersForBattle() internal returns(uint256 defenderTokenId, uint256 challengerTokenId) {
vm.startPrank(defender);
defenderTokenId = oneShotTokenContract.getNextTokenId();
oneShotTokenContract.mintRapper();
oneShotTokenContract.approve(address(streetsContract), defenderTokenId);
streetsContract.stake(defenderTokenId);
vm.stopPrank();
vm.startPrank(challenger);
challengerTokenId = oneShotTokenContract.getNextTokenId();
oneShotTokenContract.mintRapper();
oneShotTokenContract.approve(address(streetsContract), challengerTokenId);
streetsContract.stake(challengerTokenId);
vm.stopPrank();
vm.warp(4 days);
vm.prank(defender);
streetsContract.unstake(defenderTokenId);
vm.prank(challenger);
streetsContract.unstake(challengerTokenId);
}
function testRapperBattlesWonNeverUpdates() public {
(uint256 defenderTokenId, uint256 challengerTokenId) = readyPlayersForBattle();
uint256 _credBet = 3;
IOneShot.RapperStats memory previousDefenderRapStats = oneShotTokenContract.getRapperStats(challengerTokenId) ;
vm.startPrank(defender);
credTokenContract.approve(address(rapBattleContract), _credBet);
oneShotTokenContract.approve(address(rapBattleContract), defenderTokenId);
rapBattleContract.goOnStageOrBattle(defenderTokenId, _credBet);
vm.stopPrank();
uint256 previousDefenderBal = credTokenContract.balanceOf(defender);
vm.startPrank(challenger);
credTokenContract.approve(address(rapBattleContract), _credBet);
oneShotTokenContract.approve(address(rapBattleContract), challengerTokenId);
vm.recordLogs();
rapBattleContract.goOnStageOrBattle(challengerTokenId, _credBet);
vm.stopPrank();
assertGt(credTokenContract.balanceOf(defender), previousDefenderBal);
IOneShot.RapperStats memory currentDefenderRapStats = oneShotTokenContract.getRapperStats(defenderTokenId);
console.log("currentDefenderRapStats.battlesWon = ", currentDefenderRapStats.battlesWon);
console.log("previousDefenderRapStats.battlesWon ", previousDefenderRapStats.battlesWon);
assertGt(currentDefenderRapStats.battlesWon, previousDefenderRapStats.battlesWon);
}
}