Skip to content

Commit

Permalink
chore(NFTMetadataGeneratorSVG): add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
gravityblast committed Oct 9, 2024
1 parent 84a547d commit 5a71ed7
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 11 deletions.
22 changes: 11 additions & 11 deletions src/nft-metadata-generators/NFTMetadataGeneratorSVG.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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)));
}
}
61 changes: 61 additions & 0 deletions test/nft-metadata-generators/NFTMetadataGeneratorSVG.t.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
// 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 =
"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>");
}
}

0 comments on commit 5a71ed7

Please sign in to comment.