Skip to content

Commit ded49d2

Browse files
committed
Added fuzz testing for getMilestone
1 parent e9c9b47 commit ded49d2

File tree

2 files changed

+32
-4
lines changed

2 files changed

+32
-4
lines changed

packages/foundry/contracts/KDONft.sol

+8-4
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ contract KDONft is ERC721 {
3737
// STATE VARIABLES
3838
//////////////
3939
uint256 public s_nextTokenId;
40-
mapping(address child => TaskMilestone taskMilestone) public s_childLastNftMinted;
40+
mapping(address child => TaskMilestone taskMilestone) public
41+
s_childLastNftMinted;
4142

4243
constructor() ERC721("KiddoPerks NFT", "KDONft") {
4344
s_nextTokenId = 0;
@@ -48,7 +49,10 @@ contract KDONft is ERC721 {
4849
* @param to Address of the user to mint the NFT for.
4950
* @param numTasksCompleted Number of tasks the user has completed.
5051
*/
51-
function mintNft(address to, uint256 numTasksCompleted) public hasCompletedMinTasks(numTasksCompleted) {
52+
function mintNft(
53+
address to,
54+
uint256 numTasksCompleted
55+
) public hasCompletedMinTasks(numTasksCompleted) {
5256
TaskMilestone currentTaskMilestone = _getMilestone(numTasksCompleted);
5357
if (s_childLastNftMinted[to] == currentTaskMilestone) {
5458
revert KDONft__CannotMintNFTMoreThanOnce(to);
@@ -81,8 +85,8 @@ contract KDONft is ERC721 {
8185
*/
8286
function _getMilestone(
8387
uint256 numTasksCompleted
84-
) internal pure hasCompletedMinTasks(numTasksCompleted) returns (TaskMilestone) {
85-
if (numTasksCompleted >= FIVE) {
88+
) public pure hasCompletedMinTasks(numTasksCompleted) returns (TaskMilestone) {
89+
if (numTasksCompleted >= HUNDRED) {
8690
return TaskMilestone.HUNDRED;
8791
} else if (numTasksCompleted >= FIFTY) {
8892
return TaskMilestone.FIFTY;

packages/foundry/test/KDONft.t.sol

+24
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,28 @@ contract KDONftTest is Test {
1010
function setUp() public {
1111
kdoNft = new KDONft();
1212
}
13+
14+
function testFuzz_GetMilestone(
15+
uint256 _numTasksCompleted
16+
) public {
17+
uint256 numTasksCompleted = bound(_numTasksCompleted, 0, 200);
18+
19+
KDONft.TaskMilestone expectedMilestone;
20+
if (numTasksCompleted >= 100) {
21+
expectedMilestone = KDONft.TaskMilestone.HUNDRED;
22+
} else if (numTasksCompleted >= 50) {
23+
expectedMilestone = KDONft.TaskMilestone.FIFTY;
24+
} else if (numTasksCompleted >= 20) {
25+
expectedMilestone = KDONft.TaskMilestone.TWENTY;
26+
} else if (numTasksCompleted >= 10) {
27+
expectedMilestone = KDONft.TaskMilestone.TEN;
28+
} else if (numTasksCompleted >= 5) {
29+
expectedMilestone = KDONft.TaskMilestone.FIVE;
30+
} else {
31+
vm.expectRevert(KDONft.KDONft__MinimumTasksCompletedRequired.selector);
32+
kdoNft._getMilestone(numTasksCompleted);
33+
return;
34+
}
35+
assert(kdoNft._getMilestone(numTasksCompleted) == expectedMilestone);
36+
}
1337
}

0 commit comments

Comments
 (0)