@@ -8,6 +8,8 @@ import {HelperConfig} from "script/HelperConfig.s.sol";
88import {DeployOrderContract} from "script/DeployOrderContract.s.sol " ;
99import {ERC20Mock } from "@openzeppelin/contracts/mocks/token/ERC20Mock.sol " ;
1010import {A3AToken} from "../../src/A3Atoken.sol " ;
11+ import {ERC721 } from "@openzeppelin/contracts/token/ERC721/ERC721.sol " ;
12+ import {MerchantNft} from "../../src/MerchantNft.sol " ;
1113
1214contract OrderContractTest is Test {
1315 OrderContract orderContract;
@@ -16,6 +18,7 @@ contract OrderContractTest is Test {
1618 address addressController;
1719 A3AToken a3aToken;
1820 address owner;
21+ MerchantNft merchantNft;
1922
2023
2124 bytes32 constant PROMPT_HASH = keccak256 (abi.encodePacked ("Test Prompt " ));
@@ -35,7 +38,7 @@ contract OrderContractTest is Test {
3538
3639 function setUp () public {
3740 DeployOrderContract deployer = new DeployOrderContract ();
38- (orderContract, helperConfig, a3aToken) = deployer.run ();
41+ (orderContract, helperConfig, a3aToken, merchantNft ) = deployer.run ();
3942 (pyUSD, addressController,,owner) = helperConfig.activeNetworkConfig ();
4043 ERC20Mock (pyUSD).mint (USER, DEFAULT_MINT_AMOUNT);
4144 ERC20Mock (pyUSD).mint (USER2, DEFAULT_MINT_AMOUNT);
@@ -350,6 +353,48 @@ contract OrderContractTest is Test {
350353 assertEq (uint8 (offer.status), uint8 (OrderContract.OrderStatus.Proposed));
351354 }
352355
356+ /*//////////////////////////////////////////////////////////////
357+ MERCHANT NFT TESTS
358+ //////////////////////////////////////////////////////////////*/
359+ function testMerchantNftMintingAndOwnership () public {
360+ // Arrange
361+ uint256 merchantId = 1 ;
362+ // Act
363+ vm.prank (SELLER);
364+ merchantNft.mintNft (merchantId);
365+ // Assert
366+ address ownerOfNft = merchantNft.ownerOf (merchantId);
367+ assertEq (ownerOfNft, SELLER);
368+ bool isMerchant = merchantNft.isMerchant (SELLER, merchantId);
369+ assertTrue (isMerchant);
370+
371+ }
372+
373+
374+ function testMerchantNftRevertsOnDuplicateMint () public {
375+ // Arrange
376+ uint256 merchantId = 1 ;
377+ vm.prank (SELLER);
378+ merchantNft.mintNft (merchantId);
379+ // Act / Assert
380+ vm.prank (USER);
381+ vm.expectRevert (MerchantNft.MerchantNft__MerchantIdAlreadyMinted.selector );
382+ merchantNft.mintNft (merchantId);
383+
384+ }
385+
386+ function testMerchantNftReturnsFalseIfNotOwner () public {
387+ // Arrange
388+ uint256 merchantId = 1 ;
389+ vm.prank (SELLER);
390+ merchantNft.mintNft (merchantId);
391+ // Act
392+ bool isMerchant = merchantNft.isMerchant (USER, merchantId);
393+ // Assert
394+ assertFalse (isMerchant);
395+ }
396+
397+
353398 /*//////////////////////////////////////////////////////////////
354399 USER ORDER MAPPINGS TESTS
355400 //////////////////////////////////////////////////////////////*/
0 commit comments