From c2a2dcc6d9958b739585d150a84d923899996630 Mon Sep 17 00:00:00 2001 From: Matt Masurka Date: Thu, 21 Jul 2022 17:44:46 -0700 Subject: [PATCH] soundNft -> soundEdition (#15) --- contracts/SoundCreator/SoundCreatorV1.sol | 6 +- tests/SoundCreator.t.sol | 28 +-- tests/SoundNft/metadata.t.sol | 282 ++++++---------------- tests/TestConfig.sol | 11 +- 4 files changed, 90 insertions(+), 237 deletions(-) diff --git a/contracts/SoundCreator/SoundCreatorV1.sol b/contracts/SoundCreator/SoundCreatorV1.sol index cdeb6ba7..af070f4b 100644 --- a/contracts/SoundCreator/SoundCreatorV1.sol +++ b/contracts/SoundCreator/SoundCreatorV1.sol @@ -55,14 +55,14 @@ contract SoundCreatorV1 { IMetadataModule _metadataModule, string memory _baseURI, string memory _contractURI - ) external returns (address soundNft) { + ) external returns (address soundEdition) { // todo: if signature provided, pass it to SoundRegistry.register(); // todo: implement extension configurations // todo: research if we can get any gas savings by using a more minimal version of Clones lib - soundNft = Clones.clone(nftImplementation); + soundEdition = Clones.clone(nftImplementation); - ISoundEditionV1(soundNft).initialize(msg.sender, _name, _symbol, _metadataModule, _baseURI, _contractURI); + ISoundEditionV1(soundEdition).initialize(msg.sender, _name, _symbol, _metadataModule, _baseURI, _contractURI); // todo: emit event } diff --git a/tests/SoundCreator.t.sol b/tests/SoundCreator.t.sol index 8a30d963..81ccf2ea 100644 --- a/tests/SoundCreator.t.sol +++ b/tests/SoundCreator.t.sol @@ -8,36 +8,24 @@ import "../contracts/SoundCreator/SoundCreatorV1.sol"; contract SoundCreatorTests is TestConfig { // Tests that the factory deploys function test_deploysSoundCreator() public { - SoundEditionV1 soundNftImplementation = new SoundEditionV1(); + SoundEditionV1 soundEditionImplementation = new SoundEditionV1(); address soundRegistry = address(123); - SoundCreatorV1 _soundCreator = new SoundCreatorV1( - address(soundNftImplementation), - soundRegistry - ); + SoundCreatorV1 _soundCreator = new SoundCreatorV1(address(soundEditionImplementation), soundRegistry); assert(address(_soundCreator) != address(0)); assertEq(address(_soundCreator.soundRegistry()), soundRegistry); - assertEq( - address(_soundCreator.nftImplementation()), - address(soundNftImplementation) - ); + assertEq(address(_soundCreator.nftImplementation()), address(soundEditionImplementation)); } // Tests that the factory creates a new sound NFT function test_createSound() public { - SoundEditionV1 soundNft = SoundEditionV1( - soundCreator.createSound( - SONG_NAME, - SONG_SYMBOL, - METADATA_MODULE, - BASE_URI, - CONTRACT_URI - ) + SoundEditionV1 soundEdition = SoundEditionV1( + soundCreator.createSound(SONG_NAME, SONG_SYMBOL, METADATA_MODULE, BASE_URI, CONTRACT_URI) ); - assert(address(soundNft) != address(0)); - assertEq(soundNft.name(), SONG_NAME); - assertEq(soundNft.symbol(), SONG_SYMBOL); + assert(address(soundEdition) != address(0)); + assertEq(soundEdition.name(), SONG_NAME); + assertEq(soundEdition.symbol(), SONG_SYMBOL); } } diff --git a/tests/SoundNft/metadata.t.sol b/tests/SoundNft/metadata.t.sol index cdbb7084..2201b962 100644 --- a/tests/SoundNft/metadata.t.sol +++ b/tests/SoundNft/metadata.t.sol @@ -6,12 +6,8 @@ import "openzeppelin/utils/Strings.sol"; import "../TestConfig.sol"; import "../mocks/MockMetadataModule.sol"; -contract SoundNft_metadata is TestConfig { - event MetadataFrozen( - IMetadataModule _metadataModule, - string baseURI_, - string _contractURI - ); +contract SoundEdition_metadata is TestConfig { + event MetadataFrozen(IMetadataModule _metadataModule, string baseURI_, string _contractURI); event BaseURISet(string baseURI_); event ContractURISet(string _contractURI); event MetadataModuleSet(IMetadataModule _metadataModule); @@ -22,41 +18,26 @@ contract SoundNft_metadata is TestConfig { // Generates tokenURI using baseURI if no metadata module is selected function test_baseURIWhenNoMetadataModule() public { // deploy new sound contract - MockSoundEditionV1 soundNft = MockSoundEditionV1( - soundCreator.createSound( - SONG_NAME, - SONG_SYMBOL, - IMetadataModule(address(0)), - BASE_URI, - CONTRACT_URI - ) + MockSoundEditionV1 soundEdition = MockSoundEditionV1( + soundCreator.createSound(SONG_NAME, SONG_SYMBOL, IMetadataModule(address(0)), BASE_URI, CONTRACT_URI) ); // mint NFTs - soundNft.mint(2); + soundEdition.mint(2); uint256 tokenId = 1; - string memory expectedTokenURI = string.concat( - BASE_URI, - Strings.toString(tokenId) - ); - assertEq(soundNft.tokenURI(tokenId), expectedTokenURI); + string memory expectedTokenURI = string.concat(BASE_URI, Strings.toString(tokenId)); + assertEq(soundEdition.tokenURI(tokenId), expectedTokenURI); } // Should successfully return contract URI for the collection function test_contractURI() public { // deploy new sound contract - MockSoundEditionV1 soundNft = MockSoundEditionV1( - soundCreator.createSound( - SONG_NAME, - SONG_SYMBOL, - METADATA_MODULE, - BASE_URI, - CONTRACT_URI - ) + MockSoundEditionV1 soundEdition = MockSoundEditionV1( + soundCreator.createSound(SONG_NAME, SONG_SYMBOL, METADATA_MODULE, BASE_URI, CONTRACT_URI) ); - assertEq(soundNft.contractURI(), CONTRACT_URI); + assertEq(soundEdition.contractURI(), CONTRACT_URI); } // Generate tokenURI using the metadata module @@ -64,50 +45,32 @@ contract SoundNft_metadata is TestConfig { MockMetadataModule metadataModule = new MockMetadataModule(); // deploy new sound contract - MockSoundEditionV1 soundNft = MockSoundEditionV1( - soundCreator.createSound( - SONG_NAME, - SONG_SYMBOL, - metadataModule, - BASE_URI, - CONTRACT_URI - ) + MockSoundEditionV1 soundEdition = MockSoundEditionV1( + soundCreator.createSound(SONG_NAME, SONG_SYMBOL, metadataModule, BASE_URI, CONTRACT_URI) ); // mint NFTs - soundNft.mint(2); + soundEdition.mint(2); uint256 tokenId = 1; string memory expectedTokenURI = "MOCK"; - assertEq(soundNft.tokenURI(tokenId), expectedTokenURI); + assertEq(soundEdition.tokenURI(tokenId), expectedTokenURI); } function test_tokenURIRevertsWhenTokenIdDoesntExist() public { // deploy new sound contract - MockSoundEditionV1 soundNft = MockSoundEditionV1( - soundCreator.createSound( - SONG_NAME, - SONG_SYMBOL, - METADATA_MODULE, - BASE_URI, - CONTRACT_URI - ) + MockSoundEditionV1 soundEdition = MockSoundEditionV1( + soundCreator.createSound(SONG_NAME, SONG_SYMBOL, METADATA_MODULE, BASE_URI, CONTRACT_URI) ); vm.expectRevert(URIQueryForNonexistentToken.selector); - soundNft.tokenURI(2); + soundEdition.tokenURI(2); } function test_setBaseURIRevertsForNonOwner() public { // deploy new sound contract - MockSoundEditionV1 soundNft = MockSoundEditionV1( - soundCreator.createSound( - SONG_NAME, - SONG_SYMBOL, - METADATA_MODULE, - BASE_URI, - CONTRACT_URI - ) + MockSoundEditionV1 soundEdition = MockSoundEditionV1( + soundCreator.createSound(SONG_NAME, SONG_SYMBOL, METADATA_MODULE, BASE_URI, CONTRACT_URI) ); string memory newBaseURI = "https://abc.com/"; @@ -115,83 +78,56 @@ contract SoundNft_metadata is TestConfig { address caller = getRandomAccount(1); vm.prank(caller); vm.expectRevert("Ownable: caller is not the owner"); - soundNft.setBaseURI(newBaseURI); + soundEdition.setBaseURI(newBaseURI); } function test_setBaseURIRevertsWhenMetadataFrozen() public { // deploy new sound contract - MockSoundEditionV1 soundNft = MockSoundEditionV1( - soundCreator.createSound( - SONG_NAME, - SONG_SYMBOL, - METADATA_MODULE, - BASE_URI, - CONTRACT_URI - ) + MockSoundEditionV1 soundEdition = MockSoundEditionV1( + soundCreator.createSound(SONG_NAME, SONG_SYMBOL, METADATA_MODULE, BASE_URI, CONTRACT_URI) ); // Freeze Metadata - soundNft.freezeMetadata(); + soundEdition.freezeMetadata(); string memory newBaseURI = "https://abc.com/"; vm.expectRevert(MetadataIsFrozen.selector); - soundNft.setBaseURI(newBaseURI); + soundEdition.setBaseURI(newBaseURI); } function test_setBaseURISuccess() public { // deploy new sound contract - MockSoundEditionV1 soundNft = MockSoundEditionV1( - soundCreator.createSound( - SONG_NAME, - SONG_SYMBOL, - METADATA_MODULE, - BASE_URI, - CONTRACT_URI - ) + MockSoundEditionV1 soundEdition = MockSoundEditionV1( + soundCreator.createSound(SONG_NAME, SONG_SYMBOL, METADATA_MODULE, BASE_URI, CONTRACT_URI) ); // mint NFTs - soundNft.mint(2); + soundEdition.mint(2); uint256 tokenId = 1; string memory newBaseURI = "https://abc.com/"; - soundNft.setBaseURI(newBaseURI); + soundEdition.setBaseURI(newBaseURI); - string memory expectedTokenURI = string.concat( - newBaseURI, - Strings.toString(tokenId) - ); - assertEq(soundNft.tokenURI(tokenId), expectedTokenURI); + string memory expectedTokenURI = string.concat(newBaseURI, Strings.toString(tokenId)); + assertEq(soundEdition.tokenURI(tokenId), expectedTokenURI); } function test_setBaseURIEmitsEvent() public { // deploy new sound contract - MockSoundEditionV1 soundNft = MockSoundEditionV1( - soundCreator.createSound( - SONG_NAME, - SONG_SYMBOL, - METADATA_MODULE, - BASE_URI, - CONTRACT_URI - ) + MockSoundEditionV1 soundEdition = MockSoundEditionV1( + soundCreator.createSound(SONG_NAME, SONG_SYMBOL, METADATA_MODULE, BASE_URI, CONTRACT_URI) ); string memory newBaseURI = "https://abc.com/"; vm.expectEmit(false, false, false, true); emit BaseURISet(newBaseURI); - soundNft.setBaseURI(newBaseURI); + soundEdition.setBaseURI(newBaseURI); } function test_setContractURIRevertsForNonOwner() public { // deploy new sound contract - MockSoundEditionV1 soundNft = MockSoundEditionV1( - soundCreator.createSound( - SONG_NAME, - SONG_SYMBOL, - METADATA_MODULE, - BASE_URI, - CONTRACT_URI - ) + MockSoundEditionV1 soundEdition = MockSoundEditionV1( + soundCreator.createSound(SONG_NAME, SONG_SYMBOL, METADATA_MODULE, BASE_URI, CONTRACT_URI) ); string memory newContractURI = "https://abc.com/"; @@ -199,76 +135,52 @@ contract SoundNft_metadata is TestConfig { address caller = getRandomAccount(1); vm.prank(caller); vm.expectRevert("Ownable: caller is not the owner"); - soundNft.setContractURI(newContractURI); + soundEdition.setContractURI(newContractURI); } function test_setContractURIRevertsWhenMetadataFrozen() public { // deploy new sound contract - MockSoundEditionV1 soundNft = MockSoundEditionV1( - soundCreator.createSound( - SONG_NAME, - SONG_SYMBOL, - METADATA_MODULE, - BASE_URI, - CONTRACT_URI - ) + MockSoundEditionV1 soundEdition = MockSoundEditionV1( + soundCreator.createSound(SONG_NAME, SONG_SYMBOL, METADATA_MODULE, BASE_URI, CONTRACT_URI) ); // Freeze Metadata - soundNft.freezeMetadata(); + soundEdition.freezeMetadata(); string memory newContractURI = "https://abc.com/"; vm.expectRevert(MetadataIsFrozen.selector); - soundNft.setContractURI(newContractURI); + soundEdition.setContractURI(newContractURI); } function test_setContractURISuccess() public { // deploy new sound contract - MockSoundEditionV1 soundNft = MockSoundEditionV1( - soundCreator.createSound( - SONG_NAME, - SONG_SYMBOL, - METADATA_MODULE, - BASE_URI, - CONTRACT_URI - ) + MockSoundEditionV1 soundEdition = MockSoundEditionV1( + soundCreator.createSound(SONG_NAME, SONG_SYMBOL, METADATA_MODULE, BASE_URI, CONTRACT_URI) ); string memory newContractURI = "https://abc.com/"; - soundNft.setContractURI(newContractURI); + soundEdition.setContractURI(newContractURI); - assertEq(soundNft.contractURI(), newContractURI); + assertEq(soundEdition.contractURI(), newContractURI); } function test_setContractURIEmitsEvent() public { // deploy new sound contract - MockSoundEditionV1 soundNft = MockSoundEditionV1( - soundCreator.createSound( - SONG_NAME, - SONG_SYMBOL, - METADATA_MODULE, - BASE_URI, - CONTRACT_URI - ) + MockSoundEditionV1 soundEdition = MockSoundEditionV1( + soundCreator.createSound(SONG_NAME, SONG_SYMBOL, METADATA_MODULE, BASE_URI, CONTRACT_URI) ); string memory newContractURI = "https://abc.com/"; vm.expectEmit(false, false, false, true); emit ContractURISet(newContractURI); - soundNft.setContractURI(newContractURI); + soundEdition.setContractURI(newContractURI); } function test_setMetadataModuleRevertsForNonOwner() public { // deploy new sound contract - MockSoundEditionV1 soundNft = MockSoundEditionV1( - soundCreator.createSound( - SONG_NAME, - SONG_SYMBOL, - METADATA_MODULE, - BASE_URI, - CONTRACT_URI - ) + MockSoundEditionV1 soundEdition = MockSoundEditionV1( + soundCreator.createSound(SONG_NAME, SONG_SYMBOL, METADATA_MODULE, BASE_URI, CONTRACT_URI) ); MockMetadataModule newMetadataModule = new MockMetadataModule(); @@ -276,136 +188,94 @@ contract SoundNft_metadata is TestConfig { address caller = getRandomAccount(1); vm.prank(caller); vm.expectRevert("Ownable: caller is not the owner"); - soundNft.setMetadataModule(newMetadataModule); + soundEdition.setMetadataModule(newMetadataModule); } function test_setMetadataModuleRevertsWhenMetadataFrozen() public { // deploy new sound contract - MockSoundEditionV1 soundNft = MockSoundEditionV1( - soundCreator.createSound( - SONG_NAME, - SONG_SYMBOL, - METADATA_MODULE, - BASE_URI, - CONTRACT_URI - ) + MockSoundEditionV1 soundEdition = MockSoundEditionV1( + soundCreator.createSound(SONG_NAME, SONG_SYMBOL, METADATA_MODULE, BASE_URI, CONTRACT_URI) ); // Freeze Metadata - soundNft.freezeMetadata(); + soundEdition.freezeMetadata(); MockMetadataModule newMetadataModule = new MockMetadataModule(); vm.expectRevert(MetadataIsFrozen.selector); - soundNft.setMetadataModule(newMetadataModule); + soundEdition.setMetadataModule(newMetadataModule); } function test_setMetadataModuleSuccess() public { // deploy new sound contract - MockSoundEditionV1 soundNft = MockSoundEditionV1( - soundCreator.createSound( - SONG_NAME, - SONG_SYMBOL, - IMetadataModule(address(0)), - BASE_URI, - CONTRACT_URI - ) + MockSoundEditionV1 soundEdition = MockSoundEditionV1( + soundCreator.createSound(SONG_NAME, SONG_SYMBOL, IMetadataModule(address(0)), BASE_URI, CONTRACT_URI) ); // mint NFTs - soundNft.mint(2); + soundEdition.mint(2); uint256 tokenId = 1; MockMetadataModule newMetadataModule = new MockMetadataModule(); - soundNft.setMetadataModule(newMetadataModule); + soundEdition.setMetadataModule(newMetadataModule); string memory expectedTokenURI = "MOCK"; - assertEq(soundNft.tokenURI(tokenId), expectedTokenURI); + assertEq(soundEdition.tokenURI(tokenId), expectedTokenURI); } function test_setMetadataModuleEmitsEvent() public { // deploy new sound contract - MockSoundEditionV1 soundNft = MockSoundEditionV1( - soundCreator.createSound( - SONG_NAME, - SONG_SYMBOL, - IMetadataModule(address(0)), - BASE_URI, - CONTRACT_URI - ) + MockSoundEditionV1 soundEdition = MockSoundEditionV1( + soundCreator.createSound(SONG_NAME, SONG_SYMBOL, IMetadataModule(address(0)), BASE_URI, CONTRACT_URI) ); MockMetadataModule newMetadataModule = new MockMetadataModule(); vm.expectEmit(false, false, false, true); emit MetadataModuleSet(newMetadataModule); - soundNft.setMetadataModule(newMetadataModule); + soundEdition.setMetadataModule(newMetadataModule); } function test_freezeMetadataRevertsForNonOwner() public { // deploy new sound contract - MockSoundEditionV1 soundNft = MockSoundEditionV1( - soundCreator.createSound( - SONG_NAME, - SONG_SYMBOL, - METADATA_MODULE, - BASE_URI, - CONTRACT_URI - ) + MockSoundEditionV1 soundEdition = MockSoundEditionV1( + soundCreator.createSound(SONG_NAME, SONG_SYMBOL, METADATA_MODULE, BASE_URI, CONTRACT_URI) ); address caller = getRandomAccount(1); vm.prank(caller); vm.expectRevert("Ownable: caller is not the owner"); - soundNft.freezeMetadata(); + soundEdition.freezeMetadata(); } function test_freezeMetadataRevertsIfAlreadyFrozen() public { // deploy new sound contract - MockSoundEditionV1 soundNft = MockSoundEditionV1( - soundCreator.createSound( - SONG_NAME, - SONG_SYMBOL, - METADATA_MODULE, - BASE_URI, - CONTRACT_URI - ) + MockSoundEditionV1 soundEdition = MockSoundEditionV1( + soundCreator.createSound(SONG_NAME, SONG_SYMBOL, METADATA_MODULE, BASE_URI, CONTRACT_URI) ); - soundNft.freezeMetadata(); + soundEdition.freezeMetadata(); vm.expectRevert(MetadataIsFrozen.selector); - soundNft.freezeMetadata(); + soundEdition.freezeMetadata(); } function test_freezeMetadataSuccess() public { // deploy new sound contract - MockSoundEditionV1 soundNft = MockSoundEditionV1( - soundCreator.createSound( - SONG_NAME, - SONG_SYMBOL, - METADATA_MODULE, - BASE_URI, - CONTRACT_URI - ) + MockSoundEditionV1 soundEdition = MockSoundEditionV1( + soundCreator.createSound(SONG_NAME, SONG_SYMBOL, METADATA_MODULE, BASE_URI, CONTRACT_URI) ); - soundNft.freezeMetadata(); + soundEdition.freezeMetadata(); - assertEq(soundNft.isMetadataFrozen(), true); + assertEq(soundEdition.isMetadataFrozen(), true); } function test_freezeMetadataEmitsEvent() public { // deploy new sound contract - MockSoundEditionV1 soundNft = MockSoundEditionV1( - soundCreator.createSound( - SONG_NAME, - SONG_SYMBOL, - METADATA_MODULE, - BASE_URI, - CONTRACT_URI - ) + MockSoundEditionV1 soundEdition = MockSoundEditionV1( + soundCreator.createSound(SONG_NAME, SONG_SYMBOL, METADATA_MODULE, BASE_URI, CONTRACT_URI) ); vm.expectEmit(false, false, false, true); emit MetadataFrozen(METADATA_MODULE, BASE_URI, CONTRACT_URI); - soundNft.freezeMetadata(); + soundEdition.freezeMetadata(); } } diff --git a/tests/TestConfig.sol b/tests/TestConfig.sol index a585f26e..bcf99dca 100644 --- a/tests/TestConfig.sol +++ b/tests/TestConfig.sol @@ -21,22 +21,17 @@ contract TestConfig is Test { // Set up called before each test function setUp() public { // Deploy SoundEdition implementation - MockSoundEditionV1 soundNftImplementation = new MockSoundEditionV1(); + MockSoundEditionV1 soundEditionImplementation = new MockSoundEditionV1(); // todo: deploy registry here address soundRegistry = address(123); - soundCreator = new SoundCreatorV1( - address(soundNftImplementation), - soundRegistry - ); + soundCreator = new SoundCreatorV1(address(soundEditionImplementation), soundRegistry); } // Returns a random address funded with ETH function getRandomAccount(uint256 num) public returns (address) { - address addr = address( - uint160(uint256(keccak256(abi.encodePacked(num)))) - ); + address addr = address(uint160(uint256(keccak256(abi.encodePacked(num))))); // Fund with some ETH vm.deal(addr, 1e19);