Esempio n. 1
0
        public async Task Simulation_Originate()
        {
            var monitor = ConnectIdentity("IdentityID");

            simulation.SetBalance("IdentityID", 100);

            var task = new CreateContractTask
            {
                ManagerID      = "IdentityID",
                SourceID       = "IdentityID",
                Name           = "Identity",
                TransferAmount = TransferAmount,
                NetworkFee     = NetworkFee,
                StorageFee     = StorageFee,
                ServiceFee     = ServiceFee,
            };

            task = simulation.PrepareCreateContract(task);

            await simulation.Hub.WhenPendingSent;

            monitor.AssertCount(0);

            task = simulation.CreateContract(task, "InstanceID");

            await simulation.Hub.WhenPendingSent;

            monitor.AssertCount(2);

            var transferPending = monitor.Single <TransactionPendingEvent>();

            Assert.AreEqual(
                -task.TotalAmount,
                transferPending.Amount
                );

            var originatePending = monitor.Single <OriginatePendingEvent>();

            Assert.AreEqual(
                task.TransferAmount,
                originatePending.Amount
                );

            monitor.Clear();

            simulation.CreateBlock();
            await simulation.Hub.WhenPendingSent;

            monitor.AssertCount(2);

            // Source
            var balanceChanged = monitor.Single <BalanceChangedEvent>();

            var expectedBalance = StartBalance - task.TotalAmount;

            Assert.AreEqual(expectedBalance, balanceChanged.Balance);

            var entry = balanceChanged.Entry;

            Assert.IsNotNull(entry);

            // Destination
            var originate = monitor.Single <OriginateEvent>();

            Assert.AreEqual(
                task.TransferAmount,
                originate.Balance
                );

            entry = originate.Entry;
            Assert.IsNotNull(entry);
        }