Example #1
0
        private void SetupTransferable(NxtTransferable transferable, decimal balance, string accountRs, bool addToTransferables = true)
        {
            if (transferable != Nxt.Singleton && addToTransferables)
            {
                transferables.AddTransferable(transferable);
            }

            Dictionary <NxtTransferable, decimal> accountBalances;

            if (!balances.TryGetValue(accountRs, out accountBalances))
            {
                accountBalances = new Dictionary <NxtTransferable, decimal>();
                balances.Add(accountRs, accountBalances);
            }

            accountBalances.Add(transferable, balance);

            nxtConnectorMock.Setup(connector => connector.GetBalance(
                                       It.Is <NxtTransferable>(t => t == transferable),
                                       It.Is <string>(a => a == accountRs)))
            .ReturnsAsync(balance);

            nxtConnectorMock.Setup(connector => connector.GetBalances(
                                       It.Is <string>(a => a == accountRs),
                                       It.IsAny <IList <NxtTransferable> >()))
            .ReturnsAsync(accountBalances);
        }
Example #2
0
        private async Task TipTransferableShouldSendMessageToRecipient(NxtTransferable transferable)
        {
            const decimal tipAmount       = 42;
            var           expectedMessage = transferable.RecipientMessage.Replace("{sender}", $"<@{TestConstants.SenderAccount.SlackId}>").Replace("{amount}", $"{tipAmount}");

            slackConnectorMock.Setup(c => c.GetInstantMessageId(It.Is <string>(id => id == recipientUser.Id))).ReturnsAsync(imSession.Id);

            await SetupSuccessfulTipTransferable(transferable, transferable.Name, tipAmount);

            slackConnectorMock.Verify(c => c.SendMessage(imSession.Id, expectedMessage, true));
        }
Example #3
0
        private async Task TipTransferableShouldReturnNotEnoughNxtFunds(NxtTransferable transferable, string recipient, int recipientCount = 1, decimal nxtBalance = 0.9M)
        {
            transferables.AddTransferable(transferable);
            SetupNxtAccount(TestConstants.SenderAccount, nxtBalance);
            var message = CreateChannelMessage($"tipper tip {recipient} 42 {transferable.Name}");

            await slackHandler.TipBotChannelCommand(message, slackUser, channelSession);

            slackConnectorMock.Verify(c => c.SendMessage(channelSession.Id,
                                                         It.Is <string>(input => input.Equals(MessageConstants.NotEnoughFundsNeedFee(nxtBalance, recipientCount))), true));
        }
Example #4
0
        private async Task WithdrawTransferableShouldReturnNotEnoughNxtFunds(NxtTransferable transferable)
        {
            const decimal balance = 0.9M;

            transferables.AddTransferable(transferable);
            SetupNxtAccount(TestConstants.SenderAccount, balance);

            await slackHandler.InstantMessageCommand($"withdraw {TestConstants.RecipientAccount.NxtAccountRs} 42 {transferable.Name}", slackUser, imSession);

            slackConnectorMock.Verify(c => c.SendMessage(imSession.Id,
                                                         It.Is <string>(input => input.Equals(MessageConstants.NotEnoughFundsNeedFee(balance, 1))), true));
        }
Example #5
0
        private async Task BalanceShouldReturnCorrectTransferableBalance(NxtTransferable transferable)
        {
            const decimal expectedBalance = 42M;

            SetupNxtAccount(TestConstants.SenderAccount, 1);
            SetupTransferable(transferable, expectedBalance, TestConstants.SenderAccount.NxtAccountRs);

            await slackHandler.InstantMessageCommand("balance", slackUser, imSession);

            slackConnectorMock.Verify(c => c.SendMessage(imSession.Id,
                                                         It.Is <string>(input => input.Contains(MessageConstants.CurrentBalance(expectedBalance, transferable, false))), true));
        }
Example #6
0
        private async Task SetupSuccessfulTipTransferable(NxtTransferable transferable, string unit, decimal tipAmount, string comment = "")
        {
            const decimal nxtBalance = 1M;
            const decimal balance    = 100M;

            SetupNxtAccount(TestConstants.SenderAccount, nxtBalance);
            SetupNxtAccount(TestConstants.RecipientAccount, 0);
            SetupTransferable(transferable, balance, TestConstants.SenderAccount.NxtAccountRs);
            var message = CreateChannelMessage($"tipper tip <@{TestConstants.RecipientAccount.SlackId}> 42 {unit} {comment}");

            nxtConnectorMock.Setup(c => c.Transfer(
                                       It.Is <NxtAccount>(a => a == TestConstants.SenderAccount),
                                       It.Is <string>(r => r == TestConstants.RecipientAccount.NxtAccountRs),
                                       It.Is <NxtTransferable>(tran => tran == transferable),
                                       It.Is <decimal>(amount => amount == tipAmount),
                                       It.IsAny <string>(),
                                       It.IsAny <string>()))
            .ReturnsAsync(txId);

            await slackHandler.TipBotChannelCommand(message, slackUser, channelSession);
        }
Example #7
0
        private async Task WithdrawTransferableShouldSucceed(NxtTransferable transferable, string unit, bool supportedTransferable = true)
        {
            const decimal nxtBalance     = 1M;
            const decimal balance        = 100M;
            const decimal withdrawAmount = 42;

            SetupNxtAccount(TestConstants.SenderAccount, nxtBalance);
            SetupTransferable(transferable, balance, TestConstants.SenderAccount.NxtAccountRs, supportedTransferable);
            nxtConnectorMock.Setup(c => c.Transfer(
                                       It.Is <NxtAccount>(a => a == TestConstants.SenderAccount),
                                       It.Is <string>(r => r == TestConstants.RecipientAccount.NxtAccountRs),
                                       It.Is <NxtTransferable>(tran => tran == transferable),
                                       It.Is <decimal>(amount => amount == withdrawAmount),
                                       It.IsAny <string>(),
                                       It.IsAny <string>()))
            .ReturnsAsync(txId);

            await slackHandler.InstantMessageCommand($"withdraw {TestConstants.RecipientAccount.NxtAccountRs} {withdrawAmount} {unit}", slackUser, imSession);

            slackConnectorMock.Verify(c => c.SendMessage(imSession.Id,
                                                         It.Is <string>(input => input.Equals(MessageConstants.Withdraw(withdrawAmount, transferable.Name, txId))), false));
        }
Example #8
0
        private async Task TipTransferrableShouldSendMessageToSenderWhenRecipientHasZeroNxt(NxtTransferable transferable)
        {
            const decimal tipAmount       = 42;
            var           expectedMessage = MessageConstants.RecipientDoesNotHaveAnyNxtHint(TestConstants.RecipientAccount.SlackId, transferable.Name);

            slackConnectorMock.Setup(c => c.GetInstantMessageId(It.Is <string>(id => id == TestConstants.SenderAccount.SlackId))).ReturnsAsync(imSession.Id);

            await SetupSuccessfulTipTransferable(transferable, transferable.Name, tipAmount);

            slackConnectorMock.Verify(c => c.SendMessage(imSession.Id, expectedMessage, true));
        }