DECANFT-SC/test/DCO2s.t.sol

219 lines
11 KiB
Solidity
Raw Normal View History

2023-11-21 22:45:27 +00:00
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.23;
2023-11-30 06:48:48 +00:00
import {Test, console} from "forge-std/Test.sol";
2023-11-21 22:45:27 +00:00
import {DCO2s} from "../src/DCO2s.sol";
contract DCO2sTest is Test {
DCO2s public dco2sc;
2023-12-04 23:28:06 +00:00
string public baseURL;
2023-11-21 22:45:27 +00:00
function setUp() public {
dco2sc = new DCO2s(address(this), address(this), "DCO2s", "DCO2");
2023-12-04 23:28:06 +00:00
baseURL = "https://gateway.decentralizedscience.org/ipfs/";
2023-11-21 22:45:27 +00:00
}
// @notice this code safe mints an NFT to address 0x1
function testMint() public {
address to = address(0x1);
dco2sc.safeMint(to,"bafkreibc6p3y36yjmeqqnttqfrpb2yttxa6aonoywxwdxl7nqym4jj3jwa");
assertEq(dco2sc.ownerOf(0), to, "Token should be minted to specified address.");
}
2023-12-04 23:28:06 +00:00
function testMintFromEnv() public {
address to = address(0x1);
string memory nft0 = vm.envString("nfts");
dco2sc.safeMint(to,nft0);
2023-12-04 23:28:06 +00:00
assertEq(dco2sc.ownerOf(0), to, "Token should be minted to specified address.");
}
// @notice: here we test getting the Base and full URIS
function testGetURI68() public {
string[] memory URIs = vm.envString("nfts", ' ');
dco2sc.safeMint(address(1), URIs[68]);
2023-12-04 23:28:06 +00:00
string memory tokenURI = dco2sc.tokenURI(0);
//console.log(tokenURI);
assertEq(tokenURI, string.concat(baseURL, URIs[68]));
2023-12-04 23:28:06 +00:00
}
2023-11-21 22:45:27 +00:00
// @notice: here we test getting the Base and full URIS
2023-11-30 06:48:48 +00:00
function testGetURI() public {
string memory URI = "bafkreibc6p3y36yjmeqqnttqfrpb2yttxa6aonoywxwdxl7nqym4jj3jwa";
dco2sc.safeMint(address(1), URI);
string memory tokenURI = dco2sc.tokenURI(0);
//console.log(tokenURI);
2023-12-04 23:28:06 +00:00
assertEq(tokenURI, string.concat(baseURL,URI));
2023-11-30 06:48:48 +00:00
}
// @notice: checkFailed token Index
function testFailTokenIndex() view public {
2023-11-30 06:48:48 +00:00
dco2sc.tokenURI(0);
}
// @notice: checkFailed token Index
//function testTokenIndex() public {
// vm.expectRevert(bytes("ERC721NonexistentToken(0)"));
// dco2sc.tokenURI(0);
//}
2023-11-21 22:45:27 +00:00
// @notice use basic Enumerable properties totalSupply
function testEnumerableTotalSupply() public {
string[5] memory nfts = [
"bafkreibc6p3y36yjmeqqnttqfrpb2yttxa6aonoywxwdxl7nqym4jj3jwa",
"bafkreifqztiwfutjik4wfs3gyfdyrff7cugi4mcctluunrrbp5cgareisq",
"bafkreibffiehtv4ntajq5vjwpl7q44i6cjbg54lm5hkoa665ue2taspiyu",
"bafkreidcf5baqb5wevs6vyd7dtd3j7rzrq65uyqasj4dbkcy5na4ig3ay",
"bafkreiglyvpxwrxdvruit3oiw2lvkxqqxn7ojquw4gl7ck6szewz6t6cam"];
for(uint i; i < nfts.length; i++){
dco2sc.safeMint(address(1), nfts[i]);
}
assertEq(nfts.length, dco2sc.totalSupply());
}
// @notice use the basic Enumerable property tokenByIndex
2023-12-04 23:28:06 +00:00
function testEnumerableTokenByIndex() public {
string[5] memory nfts = [
"bafkreibc6p3y36yjmeqqnttqfrpb2yttxa6aonoywxwdxl7nqym4jj3jwa",
"bafkreifqztiwfutjik4wfs3gyfdyrff7cugi4mcctluunrrbp5cgareisq",
"bafkreibffiehtv4ntajq5vjwpl7q44i6cjbg54lm5hkoa665ue2taspiyu",
"bafkreidcf5baqb5wevs6vyd7dtd3j7rzrq65uyqasj4dbkcy5na4ig3ay",
2023-12-04 23:28:06 +00:00
"bafkreiglyvpxwrxdvruit3oiw2lvkxqqxn7ojquw4gl7ck6szewz6t6cam"];
for(uint i; i < nfts.length; i++){
dco2sc.safeMint(address(1), nfts[i]);
}
assertEq(nfts.length, dco2sc.totalSupply());
// Test for token By Index 4
uint tokenID = dco2sc.tokenByIndex(4);
assertEq(nfts[4], nfts[tokenID]);
// Test for token By Index 3
tokenID = dco2sc.tokenByIndex(3);
assertEq(nfts[3], nfts[tokenID]);
}
// @notice use the basic Enumerable property TokenOfOwnerByIndex
function testEnumerableTokenOfOwnerByIndex() public {
string[5] memory nfts = [
"bafkreibc6p3y36yjmeqqnttqfrpb2yttxa6aonoywxwdxl7nqym4jj3jwa",
"bafkreifqztiwfutjik4wfs3gyfdyrff7cugi4mcctluunrrbp5cgareisq",
"bafkreibffiehtv4ntajq5vjwpl7q44i6cjbg54lm5hkoa665ue2taspiyu",
"bafkreidcf5baqb5wevs6vyd7dtd3j7rzrq65uyqasj4dbkcy5na4ig3ay",
"bafkreiglyvpxwrxdvruit3oiw2lvkxqqxn7ojquw4gl7ck6szewz6t6cam"];
for(uint i; i < nfts.length; i++){
if(i % 2 == 0) {
dco2sc.safeMint(address(1), nfts[i]);
} else {
dco2sc.safeMint(address(2), nfts[i]);
}
}
// Get the balance of NFTs of the account 1
uint account1_balance = dco2sc.balanceOf(address(1));
assertEq(account1_balance, 3);
for(uint i; i < account1_balance; i++){
// get the TokenID from account NFTs Index
uint token_id = dco2sc.tokenOfOwnerByIndex(address(1), i);
// console.log("Token ID ", token_id, " has URI: ", dco2sc.tokenURI(token_id));
assertEq(dco2sc.tokenURI(token_id), string.concat(baseURL, nfts[token_id]));
}
2023-12-04 23:28:06 +00:00
}
2023-11-21 22:45:27 +00:00
2023-11-21 22:45:27 +00:00
// @notice: testFailMintToZeroAddress test that cannot safe mint to address 0
function testFailMintToZeroAddress() public {
2023-11-30 06:48:48 +00:00
dco2sc.safeMint(address(0),"bafkreibc6p3y36yjmeqqnttqfrpb2yttxa6aonoywxwdxl7nqym4jj3jwa");
2023-11-21 22:45:27 +00:00
}
// @notice testMintAll mints all the NFTs URIS and distribute to wallets
// then it assertEq that it is properly minted to the wallet and the correct URI
// function testMintAll() public {
// string[68] memory NFts = ["bafkreibc6p3y36yjmeqqnttqfrpb2yttxa6aonoywxwdxl7nqym4jj3jwa",
// "bafkreidcf5baqb5wevs6avyd7dtd3j7rzrq65uyqasj4dbkcy6na4ig3ay",
// "bafkreibffiehtv4ntajq5vjwpl7q44i6cjbg54lm5hkoa665ue2taspiyu",
// "bafkreifqztiwfutjik4wfs3gyfdyrff7cugi4mcctluunrrbp5cgareisq",
// "bafkreiglyvpxwrxdvruit3oiw2lvkxqqxn7ojquw4gl7ck6szewz6t6cam",
// "bafkreiakd4xtuw3toe4wnez2ndmdadqv3oszaoffoha4tw2hqr3sjnsmge",
// "bafkreigx2isd63yflf6toeg7nfqw33hf6vvllcxfnzn7ymd7u4okflivbi",
// "bafkreidrsjlcajbz35crgs6dpog6ophcochrgrrqgejxfye4m6lbw5mdde",
// "bafkreihwi7xoak3p3mmofdln4pc4wqkkbdwyyz2yxbpfvpzvvxa2ogbaxi",
// "bafkreiclhcy3n5iq3ka2jwxhvedpdewonwoujgu77y7rgnkddheioemcsi",
// "bafkreic3vdshhst65qtzkwfbqzfpmuqbsyizxguarixobrp3scwaiq5jre",
// "bafkreifv5xyis2kuveyfoc662zxeol2zdyiue4h3sznosef7ihrsmjexwm",
// "bafkreifqyk6255h2ppobog33fzifsosbcnn2tanqi3ezjcwis6gya4sfoi",
// "bafkreigend4j42oanbjxltwuyizmufdhqbngf6fbe5hgnlxs3yhzgpvay4",
// "bafkreiextgvmtg23rx3lq2s6psebqln6ojlgosc544jch72baq3yt3dryu",
// "bafkreihlkfwt5ntpnwf3c37d4lsf4y6czxojyffqet5ujvzw374x7ainoi",
// "bafkreievuhvdru7p3lxht3of67xdri6urrrsjxr2e6rzulwg2574ye3dji",
// "bafkreidqa6xuekp34iu7cqmngdbe7knzia47s7gwn3zczr5vwso57nrtx4",
// "bafkreiglo5jhcem4ogswylqi37bx2wmn65cy6blwbwxcvuzklpfr6vhmke",
// "bafkreibz353bqq76gjvswt7eebyffi3nkke5bzrvsjzem3is6x4ptpnqvi",
// "bafkreif2dohcblqea4t4z5qjfxtdzz6vmtxs4325yuf6jz6e2sdxf366ni",
// "bafkreib265gzsjgprktabq4c3glrdl5noebegibwupchwuwbswohum3ap4",
// "bafkreicfaqdpgnrnebvqxyvg7s7eqgipbw5bg3hdticvghcpivjmvjx364",
// "bafkreiabmontlvf2ah3vngpaf3cmg5ejinyqe6yl5pcl4lfrtvduwnuqcq",
// "bafkreidvyf5txqmcizexdexdaqsbr4fxclcpfn6npgkngm6rclaszjll4q",
// "bafkreib4wysvkug2bbzfpuey7hazqkezqtstv2n3yzccw7z77n2urcb6ye",
// "bafkreiailtryy3cg7anain2evahiaox6babpxd4dp4kl67jqeoabh6ndwi",
// "bafkreid32knw3kptbognoamqxcu5a2r3hzlzcb5a4tbouzfob5j2hhww6y",
// "bafkreifprm74saobjxnang72smgtrevwvsxyps46kbc6ehhk3veqqpprte",
// "bafkreif6wbrqmlqihivdasweh5opjjixinupsqfqmyflo2he3tdibx26mq",
// "bafkreig75yruw2hkfqdfhmjm7lfenojvgv6emxfgkwolajhnjsokcc3vv4",
// "bafkreihxvojrjrzigupwtncsrwsswju4cwh2sz5z2evqt6qlgcd7siptqi",
// "bafkreifmcjsvyou6ml6khq7d7iglchh4a4clqvzf7t4ky6sxyoml6ixvj4",
// "bafkreieyrrsp4lgoqqfrynp64cdif2jrnnzwc3lv4j5wlm4glszhjltp24",
// "bafkreicpw7ytfbzakmg23wkuhrpumcdtoh75po7j6fu627vru3hgl6kpay",
// "bafkreifrdsfw2vazhleexjkcd6f6t73aqvrobq5nwyeqa2rmykqtsef2o4",
// "bafkreicdmr2bet7omb3u5zrgvubq2nxwbzlo6kqkjy6swey4u5yavqsf3y",
// "bafkreihupkyebtf3rybziatp7p242gbyza7rf7s6noj3wun6fwd2sr6qhq",
// "bafkreibrlybbkiiutohvwj3q6j3drs7llaxliz7dhiflipq34e4guzcbhu",
// "bafkreieuseajoxy4ouo2u2upxz7lssoivcb63r64ada6n6pbxtupwnp6fa",
// "bafkreid53wwrea4erd5hm7gjgkgpp6oddjqnctffewf3nay2grs2nhmh5y",
// "bafkreigzrzugp7aqn6u6yqyaeu7v5lou4ldvkc5gfstr3p3otaf4afg56y",
// "bafkreibqdmemeh57bkszki7oypxelqlihuy26eaeoi664epsqr5543q3je",
// "bafkreiga4wd7vxjn46eovsktpmg2ugrd545sckdu2ibytvyjmj44rxjo5a",
// "bafkreibef52rjpwrhfoaewbb4x7w5nthexsxzanoh5g7l3wzikubw6t4j4",
// "bafkreihbkxbmbxk5xcujr3vwoo3qnnkubqmrkytjml76f2be4rfdi3kwiy",
// "bafkreibh5fgjwuzcnyrpdcyxzpcjndrppeelgrjccfq2s7jg52dvcmk4cy",
// "bafkreiea7k7u6kq76a4zysht5ri62jabvbuf6uk2emptxua2lkfmpleqqu",
// "bafkreibietep53mtdq5kpk442x5djcaiwkirgltemomaaa6in6j375agfe",
// "bafkreifwho3vue5x3yus3bcl2vs46b2ehgnhokmk4363dyptcqkcjuwtwm",
// "bafkreicb662izefhwuvv7u6yh4rav76od4r4nkm6h7mgkflb77bt5wkimm",
// "bafkreihlls4pkcjtjaasxmvctafrslucawm5lrffz5ho57azdaiapo2evq",
// "bafkreih4ncyemyptx3nxe5qvxn6keiv7m36avhg5t2z6uvohs22he6q5zi",
// "bafkreibxx4deq65og67be3oliqz2u4j6tacczarf74lbusbblflnp3c46a",
// "bafkreibyegb4yn3yzxsnq5rggwra2x4nnd4eojvzdtxnl6lixq4f7cbdmm",
// "bafkreiaygw7455yt6siqsqjs5bfhrrbxa5ezlktcwdnyeqikuq66irm5me",
// "bafkreiaqj7xiukqacs6genv7s5bewucuag3d2lnn6kwqmkcnsngtrn2p5i",
// "bafkreigm4czjurpcdgqapwj3ilzg7o3qx6wiyfd74hitm5hklyxbx52ujy",
// "bafkreifgtz7hpaeuendeah37ny363ppx3klctkycol665lk65nkolvtj7q",
// "bafkreicje4abjqh52oz35ble2yvasjkxemsptjnvla73greqzz5jwfkhiu",
// "bafkreiebelxzjwxdvyvvj6cmqcn6cdnetrfxnw4bf4zaqkbh4myvu3a6qu",
// "bafkreibg5fatnupr4u66zp5xabgyav65aik3bwv7ms73xjig37qz7ffura",
// "bafkreigkgv36pc4gc35vlm7axlrtvbpwxl54pnq6mjovvre7n6vsqyfrp4",
// "bafkreiekiefyw55qxsoqvbv2zbrjhbvrybo5qsamhsvk6rst4kzxmrxioq",
// "bafkreifv2zmtj54mezqqbdfcc6z2anexctcumvs64abo2cvqgo47d6qk4q",
// "bafkreibjlhludpjooxikum7cjw7c6rczgwbekaiusjm4xu5nyodwr3zjnm",
// "bafkreib5z3fllsfv32fjhgvkao3csi4r2dhsegji52aqmfp4x2s6qb7734",
// "bafkreiajnquwgsapxpesee4yyjz3hbwkopbr5pkpydbhjo4iwcpxolzrfy"];
// for ( uint i; i < NFts.length; i++) {
// dco2sc.safeMint(address(i+1), NFts[i]);
// }
// // assert that each NFT gets minted with the proper URI
// // and addrress
// for ( uint i; i < NFts.length; i++) {
// assertEq(NFTs[i], dco2sc.)
// }
// }
}