-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
chore(XPNFTToken): add NFTMetadataGeneratorURL
- Loading branch information
1 parent
5a71ed7
commit f36d85a
Showing
2 changed files
with
75 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
// SPDX-License-Identifier: MIT | ||
pragma solidity ^0.8.26; | ||
|
||
import { Strings } from "@openzeppelin/contracts/utils/Strings.sol"; | ||
import { BaseNFTMetadataGenerator } from "./BaseNFTMetadataGenerator.sol"; | ||
|
||
contract NFTMetadataGeneratorURL is BaseNFTMetadataGenerator { | ||
string public urlPrefix; | ||
string public urlSuffix; | ||
|
||
constructor(address nft, string memory _urlPrefix, string memory _urlSuffix) BaseNFTMetadataGenerator(nft) { | ||
urlPrefix = _urlPrefix; | ||
urlSuffix = _urlSuffix; | ||
} | ||
|
||
function setURLStrings(string memory _urlPrefix, string memory _urlSuffix) external onlyOwner { | ||
urlPrefix = _urlPrefix; | ||
urlSuffix = _urlSuffix; | ||
} | ||
|
||
function generateImageURI(address account, uint256) internal view override returns (string memory) { | ||
return string(abi.encodePacked(urlPrefix, Strings.toHexString(account), urlSuffix)); | ||
} | ||
} |
51 changes: 51 additions & 0 deletions
51
test/nft-metadata-generators/NFTMetadataGeneratorURL.t.sol
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
// 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 { NFTMetadataGeneratorURL } from "../../src/nft-metadata-generators/NFTMetadataGeneratorURL.sol"; | ||
|
||
contract NFTMetadataGeneratorURLTest is Test { | ||
MockToken erc20Token; | ||
NFTMetadataGeneratorURL metadataGenerator; | ||
|
||
address alice = makeAddr("alice"); | ||
|
||
function setUp() public { | ||
erc20Token = new MockToken("Test", "TEST"); | ||
metadataGenerator = new NFTMetadataGeneratorURL(address(erc20Token), "http://test.local/images/", ".jpg"); | ||
|
||
erc20Token.mint(alice, 10e18); | ||
} | ||
|
||
function testGenerateMetadata() public view { | ||
string memory expectedMetadata = "data:application/json;base64,"; | ||
bytes memory json = abi.encodePacked( | ||
"{\"name\":\"XPNFT Token 0x328809bc894f92807417d2dad6b7c998c1afdac6\",", | ||
"\"description\":\"This is a XPNFT token for address 0x328809bc894f92807417d2dad6b7c998c1afdac6 with balance 10000000000000000000\",", | ||
"\"image\":\"http://test.local/images/0x328809bc894f92807417d2dad6b7c998c1afdac6.jpg\"}" | ||
); | ||
expectedMetadata = string(abi.encodePacked(expectedMetadata, Base64.encode(json))); | ||
|
||
string memory metadata = metadataGenerator.generate(alice, erc20Token.balanceOf(alice)); | ||
assertEq(metadata, expectedMetadata); | ||
} | ||
|
||
function testSetBaseURL() public { | ||
string memory newURLPrefix = "http://new-test.local/images/"; | ||
string memory newURLSuffix = ".png"; | ||
|
||
metadataGenerator.setURLStrings(newURLPrefix, newURLSuffix); | ||
|
||
assertEq(metadataGenerator.urlPrefix(), newURLPrefix); | ||
assertEq(metadataGenerator.urlSuffix(), newURLSuffix); | ||
} | ||
|
||
function testSetBaseURLRevert() public { | ||
vm.prank(alice); | ||
vm.expectPartialRevert(Ownable.OwnableUnauthorizedAccount.selector); | ||
metadataGenerator.setURLStrings("http://new-test.local/images/", ".png"); | ||
} | ||
} |