diff --git a/script/IPCM.s.sol b/script/IPCM.s.sol index a83c9cd..a353b5f 100644 --- a/script/IPCM.s.sol +++ b/script/IPCM.s.sol @@ -1,5 +1,5 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.13; +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.22; import {Script, console} from "forge-std/Script.sol"; import {IPCM} from "../src/IPCM.sol"; @@ -12,7 +12,7 @@ contract IPCMScript is Script { function run() public { vm.startBroadcast(); - ipcm = new IPCM(); + ipcm = new IPCM(msg.sender); vm.stopBroadcast(); } diff --git a/src/IPCM.sol b/src/IPCM.sol index 940b4fa..8067ee7 100644 --- a/src/IPCM.sol +++ b/src/IPCM.sol @@ -1,14 +1,22 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.13; +// SPDX-License-Identifier: MIT +// Compatible with OpenZeppelin Contracts ^5.0.0 +pragma solidity ^0.8.22; -contract IPCM { - uint256 public number; +import {Ownable} from "../lib/openzeppelin-contracts/contracts/access/Ownable.sol"; - function setNumber(uint256 newNumber) public { - number = newNumber; +contract IPCM is Ownable { + constructor(address owner) Ownable(owner) {} + + string private cidMapping; + + event MappingUpdated(string value); + + function setValue(string memory value) public onlyOwner { + cidMapping = value; + emit MappingUpdated(value); } - function increment() public { - number++; + function getValue() public view returns (string memory) { + return cidMapping; } } diff --git a/test/IPCM.t.sol b/test/IPCM.t.sol index 0be02cb..95db2b4 100644 --- a/test/IPCM.t.sol +++ b/test/IPCM.t.sol @@ -1,13 +1,42 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.13; +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.22; import {Test, console} from "forge-std/Test.sol"; import {IPCM} from "../src/IPCM.sol"; contract IPCMTest is Test { IPCM public ipcm; + address owner = address(1); + string testCid = "QmTest123"; function setUp() public { - ipcm = new IPCM(); + ipcm = new IPCM(owner); + vm.startPrank(owner); + } + + function testSetValue() public { + ipcm.setValue(testCid); + assertEq(ipcm.getValue(), testCid); + } + + function testOnlyOwnerCanSetValue() public { + vm.stopPrank(); + vm.startPrank(address(2)); + vm.expectRevert(); + ipcm.setValue(testCid); + } + + function testEmitsEvent() public { + emit IPCM.MappingUpdated(testCid); + ipcm.setValue(testCid); + } + + function testGetValue() public { + string memory emptyValue = ipcm.getValue(); + assertEq(emptyValue, ""); + + ipcm.setValue(testCid); + string memory newValue = ipcm.getValue(); + assertEq(newValue, testCid); } }