Exemplo n.º 1
0
        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.");
        }
Exemplo n.º 2
0
        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.");
        }
Exemplo n.º 3
0
        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.");
        }
Exemplo n.º 4
0
        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.");
        }
Exemplo n.º 5
0
        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.");
        }
Exemplo n.º 6
0
        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.");
        }
Exemplo n.º 7
0
        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.");
        }
Exemplo n.º 8
0
        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.");
        }
Exemplo n.º 9
0
        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.");
        }