// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.23; import { Test, console2 } from "forge-std/Test.sol"; import { DappIndexer } from "src/DappIndexer.sol"; contract DappIndexerTest is Test { DappIndexer public dappIdxr; string[] public dappsURI; function setUp() public { dappIdxr = new DappIndexer(address(this), address(this)); dappsURI = vm.envString("dapps", ' '); } function testAddDapp() public { bytes32 CID1; bytes32 CID2; (CID1, CID2) = stringToBytes32Pair(dappsURI[0]); // Add Dapp console2.log("Bytes32 first:"); console2.logBytes32(CID1); console2.log("Bytes32 second:"); console2.logBytes32(CID2); console2.log(Bytes32PairToString(CID1, CID2)); dappIdxr.addDapp(bytes32("Dapp01"), DappIndexer.PackedCID(CID1, CID2)); // retrive Dapp DappIndexer.PackedCID memory dapp1 = dappIdxr.getCID(bytes32("Dapp01")); assertEq(CID1, dapp1.CID1); assertEq(CID2, dapp1.CID2); //string memory retrivedDapp = Bytes32PairToString(dapp1.CID1, dapp1.CID2); //assertEq(dappsURI[0], retrivedDapp[0:59]); } function Bytes32PairToString(bytes32 part1, bytes32 part2) public pure returns (string memory) { // Concatenate the two bytes32 variables bytes memory concatenatedBytes = abi.encodePacked(part1, part2); // Convert the concatenated bytes to a string string memory str = string(concatenatedBytes); return str; } function stringToBytes32Pair(string memory source) public pure returns (bytes32 part1, bytes32 part2) { bytes memory sourceBytes = bytes(source); require(sourceBytes.length == 59, "URI string must equal to 59 bytes"); assembly { // Load the first 32 bytes of the string data part1 := mload(add(sourceBytes, 32)) // Load the second 32 bytes of the string data part2 := mload(add(sourceBytes, 64)) } } }