mirror of
https://github.com/vacp2p/staking-reward-streamer.git
synced 2026-01-09 21:18:01 -05:00
test(XPNFTToken): add tests to NFTMetadataGeneratorSVG
This commit is contained in:
@@ -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)));
|
||||
}
|
||||
}
|
||||
|
||||
62
test/nft-metadata-generators/NFTMetadataGeneratorSVG.t.sol
Normal file
62
test/nft-metadata-generators/NFTMetadataGeneratorSVG.t.sol
Normal 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>");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user