public void CancelSale_Success() { SetupMessage(creator, 0); var store = new NFTStore(mContractState.Object); var saleInfo = new SaleInfo { Price = 100, Seller = tokenOwner }; SetSaleInfo(saleInfo); SetupMessage(tokenOwner, 0); SetupSafeTransferToken(contract, tokenOwner, tokenId, TransferResult.Succeed()); store.CancelSale(tokenContract, tokenId); store.GetSaleInfo(tokenContract, tokenId) .Should() .Be(default(SaleInfo)); VerifyLog(new TokenSaleCanceledLog { Contract = tokenContract, TokenId = tokenId, Seller = tokenOwner }); }
public void Buy_Token_Buying_Success() { SetupMessage(creator, 0); var store = new NFTStore(mContractState.Object); var saleInfo = new SaleInfo { Price = 100, Seller = tokenOwner }; SetSaleInfo(saleInfo); SetupMessage(buyer, 100); SetupSafeTransferToken(contract, buyer, tokenId, TransferResult.Succeed()); SetupTransfer(tokenOwner, 100, TransferResult.Succeed()); store.Buy(tokenContract, tokenId); VerifyLog(new TokenPurchasedLog { Contract = tokenContract, TokenId = tokenId, Seller = tokenOwner, Buyer = buyer }); store.GetSaleInfo(tokenContract, tokenId) .Should() .Be(default(SaleInfo)); }
public void OnNonFungibleTokenReceived_Operator_Mint_And_Sell_Token_Success() { SetupMessage(creator, 0); var store = new NFTStore(mContractState.Object); SetupMessage(tokenContract, 0); SetupGetOwnerOfToken(TransferResult.Succeed(contract)); var price = 5_00_000_000ul; var priceBytes = BitConverter.GetBytes(price); mSerializer.Setup(m => m.ToUInt64(priceBytes)).Returns(price); store.OnNonFungibleTokenReceived(operatorAddress, Address.Zero, tokenId, priceBytes) .Should() .BeTrue(); store.GetSaleInfo(tokenContract, tokenId) .Should() .Be(new SaleInfo { Price = price, Seller = operatorAddress }); VerifyLog(new TokenOnSaleLog { Contract = tokenContract, TokenId = tokenId, Seller = operatorAddress, Operator = operatorAddress, Price = price }); }
public void Constructor_Set_Properties_Success() { SetupMessage(creator, 0); var store = new NFTStore(mContractState.Object); Assert.Equal(1ul, store.CreatedAt); }
public void Buy_Token_Is_Not_On_Sale_Fails() { SetupMessage(creator, 0); var store = new NFTStore(mContractState.Object); store.Invoking(s => s.Buy(tokenContract, tokenId)) .Should() .Throw <SmartContractAssertException>() .WithMessage("The token is not on sale."); }
public void CancelSale_Sending_Coins_Fails() { SetupMessage(creator, 0); var store = new NFTStore(mContractState.Object); SetupMessage(tokenOwner, 100); store.Invoking(s => s.CancelSale(tokenContract, tokenId)) .Should() .Throw <SmartContractAssertException>() .WithMessage("The method is not payable."); }
public void OnNonFungibleTokenReceived_Sending_Coins_Fails() { SetupMessage(creator, 0); var store = new NFTStore(mContractState.Object); SetupMessage(tokenContract, 10); var price = 5_00_000_000ul; store.Invoking(s => s.OnNonFungibleTokenReceived(tokenOwner, tokenOwner, tokenId, BitConverter.GetBytes(price))) .Should() .Throw <SmartContractAssertException>() .WithMessage("The method is not payable."); }
public void OnNonFungibleTokenReceived_GetOwner_Call_Raise_Exception_Fails() { SetupMessage(creator, 0); var store = new NFTStore(mContractState.Object); SetupGetOwnerOfToken(TransferResult.Failed()); SetupMessage(tokenContract, 0); var price = 5_00_000_000ul; var priceBytes = BitConverter.GetBytes(price); mSerializer.Setup(m => m.ToUInt64(priceBytes)).Returns(price); store.Invoking(s => s.OnNonFungibleTokenReceived(tokenOwner, tokenOwner, tokenId, priceBytes)) .Should() .Throw <SmartContractAssertException>() .WithMessage("OwnerOf method call failed."); }
public void OnNonFungibleTokenReceived_Called_By_None_Contract_Fails() { SetupMessage(creator, 0); state.SetIsContract(tokenContract, false); var store = new NFTStore(mContractState.Object); SetupMessage(tokenContract, 0); var price = 5_00_000_000ul; var priceBytes = BitConverter.GetBytes(price); mSerializer.Setup(m => m.ToUInt64(priceBytes)).Returns(price); store.Invoking(s => s.OnNonFungibleTokenReceived(tokenOwner, tokenOwner, tokenId, priceBytes)) .Should() .Throw <SmartContractAssertException>() .WithMessage("The Caller is not a contract."); }
public void OnNonFungibleTokenReceived_Selling_Already_OnSale_Token_Fails() { SetupMessage(creator, 0); var store = new NFTStore(mContractState.Object); SetupMessage(tokenContract, 0); SetupGetOwnerOfToken(TransferResult.Succeed(contract)); var price = 5_00_000_000ul; var priceBytes = BitConverter.GetBytes(price); mSerializer.Setup(m => m.ToUInt64(priceBytes)).Returns(price); store.OnNonFungibleTokenReceived(tokenOwner, tokenOwner, tokenId, priceBytes); store.Invoking(s => s.OnNonFungibleTokenReceived(tokenOwner, tokenOwner, tokenId, priceBytes)) .Should() .Throw <SmartContractAssertException>() .WithMessage("The token is already on sale."); }
public void Buy_Transferred_Amount_Deos_Not_Match_Token_Price_Fails() { SetupMessage(creator, 0); var store = new NFTStore(mContractState.Object); var saleInfo = new SaleInfo { Price = 100, Seller = tokenOwner }; SetSaleInfo(saleInfo); SetupMessage(buyer, 90); store.Invoking(s => s.Buy(tokenContract, tokenId)) .Should() .Throw <SmartContractAssertException>() .WithMessage("Transferred amount is not matching exact price of the token."); }
public void CancelSale_Called_By_None_Token_Owner_Or_Operator_Fails() { SetupMessage(creator, 0); var store = new NFTStore(mContractState.Object); var saleInfo = new SaleInfo { Price = 100, Seller = tokenOwner }; SetSaleInfo(saleInfo); SetupMessage(attacker, 0); SetupIsApprovedForAll(tokenOwner, attacker, TransferResult.Succeed(false)); store.Invoking(s => s.CancelSale(tokenContract, tokenId)) .Should() .Throw <SmartContractAssertException>() .WithMessage("The caller is not owner of the token nor approved for all."); }
public void CancelSale_SafeTokenTransfer_Returns_False_Fails() { SetupMessage(creator, 0); var store = new NFTStore(mContractState.Object); var saleInfo = new SaleInfo { Price = 100, Seller = tokenOwner }; SetSaleInfo(saleInfo); SetupMessage(tokenOwner, 0); SetupSafeTransferToken(contract, tokenOwner, tokenId, TransferResult.Failed()); store.Invoking(s => s.CancelSale(tokenContract, tokenId)) .Should() .Throw <SmartContractAssertException>() .WithMessage("The token transfer failed."); }