non-fungible-apps/contracts/test/foundry/FleekERC721/AccessPoints.t.sol

140 lines
5.3 KiB
Solidity

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
import "./TestBase.sol";
import {Strings} from "@openzeppelin/contracts/utils/Strings.sol";
import {FleekAccessControl} from "contracts/FleekAccessControl.sol";
contract Test_FleekERC721_AccessPoint is Test_FleekERC721_Base {
using Strings for address;
uint256 internal tokenId;
function assertAccessPointJSON(
string memory accessPointName,
string memory _tokenId,
string memory score,
string memory nameVerified,
string memory contentVerified,
address owner
) internal {
string memory current = CuT.getAccessPointJSON(accessPointName);
// prettier-ignore
string memory expectedJSON = string(abi.encodePacked('{"tokenId":', _tokenId, ',"score":', score, ',"nameVerified":', nameVerified, ',"contentVerified":', contentVerified, ',"owner":"', owner.toHexString(), '"}'));
assertEq(current, expectedJSON);
}
function setUp() public {
baseSetUp();
tokenId = mintDefault(deployer);
}
function test_getAccessPointJSON() public {
string memory accessPointName = "accesspoint.com";
CuT.addAccessPoint(tokenId, accessPointName);
assertAccessPointJSON(accessPointName, "0", "0", "false", "false", deployer);
}
function test_removeAccessPoint() public {
string memory accessPointName = "accesspoint.com";
CuT.addAccessPoint(tokenId, accessPointName);
CuT.removeAccessPoint(accessPointName);
expectRevertWithInvalidAP();
CuT.getAccessPointJSON(accessPointName);
}
function test_cannotRemoveNonexistentAccessPoint() public {
expectRevertWithInvalidAP();
CuT.removeAccessPoint("accesspoint.com");
}
function test_cannotTwiceRemoveAccessPoint() public {
string memory accessPointName = "accesspoint.com";
CuT.addAccessPoint(tokenId, accessPointName);
CuT.removeAccessPoint(accessPointName);
expectRevertWithInvalidAP();
CuT.removeAccessPoint(accessPointName);
}
function test_isAccessPointNameVerified() public {
string memory accessPointName = "accesspoint.com";
CuT.addAccessPoint(tokenId, accessPointName);
assertFalse(CuT.isAccessPointNameVerified(accessPointName));
CuT.setAccessPointNameVerify(accessPointName, true);
}
function test_increaseAccessPointScore() public {
string memory accessPointName = "accesspoint.com";
CuT.addAccessPoint(tokenId, accessPointName);
assertAccessPointJSON(accessPointName, "0", "0", "false", "false", deployer);
CuT.increaseAccessPointScore(accessPointName);
assertAccessPointJSON(accessPointName, "0", "1", "false", "false", deployer);
CuT.increaseAccessPointScore(accessPointName);
assertAccessPointJSON(accessPointName, "0", "2", "false", "false", deployer);
}
function test_cannotDecreaseAccessPointScoreToMinusOne() public {
string memory accessPointName = "accesspoint.com";
CuT.addAccessPoint(tokenId, accessPointName);
assertAccessPointJSON(accessPointName, "0", "0", "false", "false", deployer);
expectRevertWithMinimalScore();
CuT.decreaseAccessPointScore(accessPointName);
}
function test_decreaseAccessPointScore() public {
string memory accessPointName = "accesspoint.com";
CuT.addAccessPoint(tokenId, accessPointName);
assertAccessPointJSON(accessPointName, "0", "0", "false", "false", deployer);
CuT.increaseAccessPointScore(accessPointName);
assertAccessPointJSON(accessPointName, "0", "1", "false", "false", deployer);
CuT.decreaseAccessPointScore(accessPointName);
assertAccessPointJSON(accessPointName, "0", "0", "false", "false", deployer);
}
function test_appAccessPoints() public {
CuT.addAccessPoint(tokenId, "accesspoint1.com");
CuT.addAccessPoint(tokenId, "accesspoint2.com");
CuT.addAccessPoint(tokenId, "accesspoint3.com");
string[] memory accessPoints = CuT.appAccessPoints(tokenId);
assertEq(accessPoints[0], "accesspoint1.com");
assertEq(accessPoints[1], "accesspoint2.com");
assertEq(accessPoints[2], "accesspoint3.com");
assertEq(accessPoints.length, 3);
}
function test_cannotAddAccessPointToNonexistentToken() public {
expectRevertWithInvalidTokenId();
CuT.addAccessPoint(1, "accesspoint.com");
}
function test_setAccessPointVerifiesWithCorrectRole() public {
string memory accessPointName = "accesspoint.com";
address randomAddress = address(12);
CuT.addAccessPoint(tokenId, accessPointName);
vm.startPrank(randomAddress);
expectRevertWithTokenRole();
CuT.setAccessPointNameVerify(accessPointName, true);
expectRevertWithTokenRole();
CuT.setAccessPointContentVerify(accessPointName, true);
vm.stopPrank();
CuT.grantTokenRole(tokenId, FleekAccessControl.Roles.Controller, randomAddress);
vm.startPrank(randomAddress);
CuT.setAccessPointNameVerify(accessPointName, true);
CuT.setAccessPointContentVerify(accessPointName, true);
vm.stopPrank();
assertAccessPointJSON(accessPointName, "0", "0", "true", "true", deployer);
}
}