test(XPNFTToken): add tests to NFTMetadataGeneratorSVG

This commit is contained in:
Andrea Franz
2024-10-09 18:21:33 +02:00
parent b5517a2828
commit 9253b0bd55
2 changed files with 73 additions and 11 deletions

View File

@@ -7,23 +7,23 @@ import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";
import { BaseNFTMetadataGenerator } from "./BaseNFTMetadataGenerator.sol";
contract NFTMetadataGeneratorSVG is BaseNFTMetadataGenerator {
string private _imagePrefix = "";
string private _imageSuffix = "";
string public imagePrefix = "";
string public imageSuffix = "";
constructor(address nft, string memory imagePrefix, string memory imageSuffix) BaseNFTMetadataGenerator(nft) {
_imagePrefix = imagePrefix;
_imageSuffix = imageSuffix;
constructor(address nft, string memory _imagePrefix, string memory _imageSuffix) BaseNFTMetadataGenerator(nft) {
imagePrefix = _imagePrefix;
imageSuffix = _imageSuffix;
}
function setImageStrings(string memory imagePrefix, string memory imageSuffix) external onlyOwner {
_imagePrefix = imagePrefix;
_imageSuffix = imageSuffix;
function setImageStrings(string memory _imagePrefix, string memory _imageSuffix) external onlyOwner {
imagePrefix = _imagePrefix;
imageSuffix = _imageSuffix;
}
function generateImageURI(address, uint256 balance) internal view override returns (string memory) {
string memory text = Strings.toString(balance / 10e18);
bytes memory svg = abi.encodePacked(_imagePrefix, text, _imageSuffix);
string memory text = Strings.toString(balance / 1e18);
bytes memory svg = abi.encodePacked(imagePrefix, text, imageSuffix);
return Base64.encode(svg);
return string(abi.encodePacked("data:image/svg+xml;base64,", Base64.encode(svg)));
}
}

View File

@@ -0,0 +1,62 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;
import { Test, console } from "forge-std/Test.sol";
import { Base64 } from "@openzeppelin/contracts/utils/Base64.sol";
import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";
import { MockToken } from "../mocks/MockToken.sol";
import { NFTMetadataGeneratorSVG } from "../../src/nft-metadata-generators/NFTMetadataGeneratorSVG.sol";
contract NFTMetadataGeneratorSVGTest is Test {
MockToken erc20Token;
NFTMetadataGeneratorSVG metadataGenerator;
address alice = makeAddr("alice");
function setUp() public {
erc20Token = new MockToken("Test", "TEST");
metadataGenerator = new NFTMetadataGeneratorSVG(address(erc20Token), "<svg>", "</svg>");
erc20Token.mint(alice, 10e18);
}
function testGenerateMetadata() public view {
string memory expectedName = "XPNFT Token 0x328809bc894f92807417d2dad6b7c998c1afdac6";
string memory expectedDescription =
// solhint-disable-next-line
"This is a XPNFT token for address 0x328809bc894f92807417d2dad6b7c998c1afdac6 with balance 10000000000000000000";
string memory encodedImage = Base64.encode(abi.encodePacked("<svg>10</svg>"));
string memory expectedImage = string(abi.encodePacked("data:image/svg+xml;base64,", encodedImage));
bytes memory expectedMetadata = abi.encodePacked(
"{\"name\":\"",
expectedName,
"\",",
"\"description\":\"",
expectedDescription,
"\",",
"\"image\":\"",
expectedImage,
"\"}"
);
string memory metadata = metadataGenerator.generate(alice, 10e18);
assertEq(metadata, string(abi.encodePacked("data:application/json;base64,", Base64.encode(expectedMetadata))));
}
function testSetImageStrings() public {
assertEq(metadataGenerator.imagePrefix(), "<svg>");
assertEq(metadataGenerator.imageSuffix(), "</svg>");
metadataGenerator.setImageStrings("<new-svg>", "</new-svg>");
assertEq(metadataGenerator.imagePrefix(), "<new-svg>");
assertEq(metadataGenerator.imageSuffix(), "</new-svg>");
}
function testSetImageStringsRevert() public {
vm.prank(alice);
vm.expectPartialRevert(Ownable.OwnableUnauthorizedAccount.selector);
metadataGenerator.setImageStrings("<new-svg>", "</new-svg>");
}
}