Skip to content

Commit ac22052

Browse files
committed
HSC test
1 parent 0a05760 commit ac22052

File tree

3 files changed

+90
-4
lines changed

3 files changed

+90
-4
lines changed

foundry.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@ libs = ["lib"]
77

88
remappings = [
99
"@openzeppelin/=lib/openzeppelin-contracts/",
10-
"@openzeppelin-upgradeable/=lib/openzeppelin-contracts-upgradeable/"
10+
"@openzeppelin-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts"
1111
]

src/HammerSupplyChain.sol

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
// SPDX-License-Identifier: MIT
22
pragma solidity ^0.8.19;
33

4-
import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
5-
import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol";
6-
import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
4+
import "@openzeppelin-upgradeable/proxy/utils/Initializable.sol";
5+
import "@openzeppelin-upgradeable/proxy/utils/UUPSUpgradeable.sol";
6+
import "@openzeppelin-upgradeable/access/OwnableUpgradeable.sol";
77
import "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol";
88

99
/**

test/HammerSupplyChainTest.t.sol

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.19;
3+
4+
import "forge-std/Test.sol";
5+
import "../src/HammerSupplyChain.sol";
6+
7+
contract HammerSupplyChainTest is Test {
8+
HammerSupplyChainFactory factory;
9+
address handleContract;
10+
address shaftContract;
11+
address headContract;
12+
address hammerContract;
13+
14+
address owner = address(0x1);
15+
address customer = address(0x2);
16+
17+
function setUp() public {
18+
vm.startPrank(owner);
19+
20+
factory = new HammerSupplyChainFactory();
21+
22+
// Deploy the supply chain
23+
(handleContract, shaftContract, headContract, hammerContract) = factory.deploySupplyChain(
24+
// Handle parameters
25+
"Wood", "Premium", 0.05 ether, 10,
26+
// Shaft parameters
27+
"Metal", "Standard", 0.08 ether, 10,
28+
// Head parameters
29+
"Steel", "Heavy-Duty", 0.12 ether, 10
30+
);
31+
32+
vm.stopPrank();
33+
}
34+
35+
function testComponentInventory() public {
36+
assertEq(HammerHandle(handleContract).getInventoryCount(), 10);
37+
assertEq(HammerShaft(shaftContract).getInventoryCount(), 10);
38+
assertEq(HammerHead(headContract).getInventoryCount(), 10);
39+
}
40+
41+
function testAssembleHammer() public {
42+
vm.startPrank(owner);
43+
44+
// Owner must have enough funds to purchase components
45+
vm.deal(owner, 1 ether);
46+
47+
CompletedHammer(hammerContract).assembleHammer("Claw Hammer", 0.3 ether);
48+
49+
assertEq(CompletedHammer(hammerContract).getAvailableHammers(), 1);
50+
assertEq(HammerHandle(handleContract).getInventoryCount(), 9);
51+
assertEq(HammerShaft(shaftContract).getInventoryCount(), 9);
52+
assertEq(HammerHead(headContract).getInventoryCount(), 9);
53+
54+
vm.stopPrank();
55+
}
56+
57+
function testPurchaseHammer() public {
58+
vm.startPrank(owner);
59+
vm.deal(owner, 1 ether);
60+
61+
// Assemble a hammer first
62+
CompletedHammer(hammerContract).assembleHammer("Claw Hammer", 0.3 ether);
63+
64+
vm.stopPrank();
65+
66+
// Customer purchases the hammer
67+
vm.startPrank(customer);
68+
vm.deal(customer, 0.5 ether);
69+
70+
uint256 hammerIdPurchased = CompletedHammer(hammerContract).purchaseHammer{value: 0.3 ether}();
71+
72+
// Check hammer details
73+
(,,, string memory hammerType,,bool isAvailable) = CompletedHammer(hammerContract).getHammerDetails(hammerIdPurchased);
74+
75+
assertEq(hammerType, "Claw Hammer");
76+
assertEq(isAvailable, false);
77+
assertEq(CompletedHammer(hammerContract).getAvailableHammers(), 0);
78+
79+
vm.stopPrank();
80+
}
81+
82+
function testUpgradeContract() public {
83+
// ToDo: Implement tests for the upgrade functionality
84+
// This would involve deploying a new implementation contract and using the upgradeTo function
85+
}
86+
}

0 commit comments

Comments
 (0)