예제 #1
0
        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
            });
        }
예제 #2
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.");
        }