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); }
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)); }
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)); }
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)); }
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)); }
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); }
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)); }
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)); }