@@ -7,6 +7,9 @@ import { KDONft } from "../contracts/KDONft.sol";
7
7
contract KDONftTest is Test {
8
8
KDONft kdoNft;
9
9
10
+ address immutable CHILD_ONE = makeAddr ("baby1 " );
11
+ address immutable CHILD_TWO = makeAddr ("baby2 " );
12
+
10
13
function setUp () public {
11
14
kdoNft = new KDONft ();
12
15
}
@@ -34,4 +37,54 @@ contract KDONftTest is Test {
34
37
}
35
38
assert (kdoNft._getMilestone (numTasksCompleted) == expectedMilestone);
36
39
}
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
+ }
37
90
}
0 commit comments