Skip to content

Commit 94a0251

Browse files
committed
Added more tests on KDONft
1 parent ded49d2 commit 94a0251

File tree

3 files changed

+56
-2
lines changed

3 files changed

+56
-2
lines changed

packages/foundry/contracts/KDONft.sol

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ contract KDONft is ERC721 {
1717
error KDONft__CannotMintNFTMoreThanOnce(address who);
1818

1919
enum TaskMilestone {
20+
NONE, // Needed to first comparison. If not, first comparison will revert.
2021
FIVE,
2122
TEN,
2223
TWENTY,

packages/foundry/contracts/KiddoPerks.sol

+2-2
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ contract KiddoPerks is Ownable {
127127
token.mint(by, taskCompleted.tokensReward);
128128
emit TokenMinted(by, taskCompleted.tokensReward);
129129

130-
s_childNumTasksCompleted[by] += 1;
130+
s_childNumTasksCompleted[by]++;
131131
}
132132

133133
function removeTask(
@@ -284,7 +284,7 @@ contract KiddoPerks is Ownable {
284284
msg.sender, numTaskCompletedByChild
285285
);
286286
}
287-
nft.mintNft(msg.sender, s_childNumTasksCompleted[msg.sender]);
287+
nft.mintNft(msg.sender, numTaskCompletedByChild);
288288
}
289289

290290
/**

packages/foundry/test/KDONft.t.sol

+53
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ import { KDONft } from "../contracts/KDONft.sol";
77
contract KDONftTest is Test {
88
KDONft kdoNft;
99

10+
address immutable CHILD_ONE = makeAddr("baby1");
11+
address immutable CHILD_TWO = makeAddr("baby2");
12+
1013
function setUp() public {
1114
kdoNft = new KDONft();
1215
}
@@ -34,4 +37,54 @@ contract KDONftTest is Test {
3437
}
3538
assert(kdoNft._getMilestone(numTasksCompleted) == expectedMilestone);
3639
}
40+
41+
function testMintNftSuccess() public {
42+
uint256 tasksCompleted = 10;
43+
44+
kdoNft.mintNft(CHILD_ONE, tasksCompleted);
45+
46+
assertEq(kdoNft.ownerOf(0), CHILD_ONE);
47+
assertEq(kdoNft.s_nextTokenId(), 1);
48+
49+
assertEq(
50+
uint256(kdoNft.s_childLastNftMinted(CHILD_ONE)),
51+
uint256(KDONft.TaskMilestone.TEN)
52+
);
53+
}
54+
55+
function testMintRevertIfTasksBelowMinimum() public {
56+
uint256 tasksCompleted = 4;
57+
58+
vm.expectRevert(KDONft.KDONft__MinimumTasksCompletedRequired.selector);
59+
kdoNft.mintNft(CHILD_ONE, tasksCompleted);
60+
}
61+
62+
function testMintNftRevertIfSameMilestone() public {
63+
uint256 tasksCompleted = 10;
64+
65+
kdoNft.mintNft(CHILD_ONE, tasksCompleted);
66+
67+
vm.expectRevert(
68+
abi.encodeWithSelector(
69+
KDONft.KDONft__CannotMintNFTMoreThanOnce.selector, CHILD_ONE
70+
)
71+
);
72+
kdoNft.mintNft(CHILD_ONE, tasksCompleted);
73+
}
74+
75+
function testMintNftMultipleMilestones() public {
76+
kdoNft.mintNft(CHILD_ONE, 10);
77+
assertEq(kdoNft.ownerOf(0), CHILD_ONE);
78+
assertEq(
79+
uint256(kdoNft.s_childLastNftMinted(CHILD_ONE)),
80+
uint256(KDONft.TaskMilestone.TEN)
81+
);
82+
83+
kdoNft.mintNft(CHILD_ONE, 20);
84+
assertEq(kdoNft.ownerOf(1), CHILD_ONE);
85+
assertEq(
86+
uint256(kdoNft.s_childLastNftMinted(CHILD_ONE)),
87+
uint256(KDONft.TaskMilestone.TWENTY)
88+
);
89+
}
3790
}

0 commit comments

Comments
 (0)