public void Notify_WithTransaction_BroadcastsSuccessfully() { var signals = new Mock <ISignals>(); var notification = new TransactionNotification(signals.Object); notification.Notify(new Transaction()); signals.Verify(s => s.SignalTransaction(It.IsAny <Transaction>()), Times.Once); }
public void Notify_WithNullTransaction_DoesntBroadcast() { var signals = new Mock <ISignals>(); var notification = new TransactionNotification(signals.Object); notification.Notify(null); signals.Verify(s => s.SignalTransaction(It.IsAny <Transaction>()), Times.Never); }
public void NotifyWithNullTransactionDoesntBroadcast() { var signals = new Mock <ISignals>(); var signalerMock = new Mock <ISignaler <Transaction> >(); signals.Setup(s => s.Transactions).Returns(signalerMock.Object); var notification = new TransactionNotification(signals.Object); notification.Notify(null); signalerMock.Verify(s => s.Broadcast(It.IsAny <Transaction>()), Times.Never); }
public void NotifyWithTransactionBroadcastsSuccessfully() { var signals = new Mock <ISignals>(); var signalerMock = new Mock <ISignaler <Transaction> >(); signals.Setup(s => s.Transactions).Returns(signalerMock.Object); var notification = new TransactionNotification(signals.Object); notification.Notify(new Transaction()); signalerMock.Verify(s => s.Broadcast(It.IsAny <Transaction>()), Times.Once); }
/// <summary> /// Parses a transaction notification record. /// </summary> /// <remarks> /// A null item may be added. /// </remarks> private void ParseTransactionNotificationRecord() { TransactionNotification transactionNotification = TransactionNotificationParser.Parse(Line, NumberOfTransactionNotificationRecords++); if (transactionNotification == null) { Log.Error("Record in line #{0} from file \"{1}\" could not be parsed.", null, (int)ResultCode.CorruptSettlementRecord, LineNumber, FileName); } Extract.TransactionNotificationRecords.Add(transactionNotification); }
/// <summary> /// Parses the specified record text into a transaction notification object if possible. /// </summary> /// <param name="record"> /// The record text to parse into a transaction notification object. /// </param> /// <param name="recordNumber"> /// The number of the record of this type from the extract file being parsed. /// </param> /// <returns> /// * The TransactionNotification object if successful. /// * Else returns null. /// </returns> internal TransactionNotification Parse(string record, int recordNumber) { TransactionNotification result = new TransactionNotification(); RecordNumber = recordNumber; int recordPos = 0; bool recordValid = true; string stringField = null; DateTime dateField = DateTime.MinValue; decimal decimalField = Decimal.MinValue; ParsingUtilities parsingUtilities = new ParsingUtilities(RecordTypeDescriptor, RecordNumber, FileName, ExtractConstants.TimeFieldLength, Log); // RecordType recordValid = parsingUtilities.VerifyString(record, ref recordPos, "Record Type", RecordType, ExtractConstants.RecordTypeLength, recordValid); // ProviderId recordValid = parsingUtilities.PopulateString(record, ref recordPos, out stringField, ExtractConstants.ProviderIdLength, recordValid); result.ProviderId = stringField; // ProviderLevelNumber recordValid = parsingUtilities.VerifyString(record, ref recordPos, "Hierarchy Level No.", ExtractConstants.ProviderLevelNumber, ExtractConstants.ProviderLevelNumberLength, recordValid); // LocationMid recordValid = parsingUtilities.PopulateString(record, ref recordPos, out stringField, ExtractConstants.LocationMidLength, recordValid); result.LocationMid = stringField; // ChainId recordValid = parsingUtilities.PopulateString(record, ref recordPos, out stringField, ExtractConstants.ChainIdLength, recordValid); result.ChainId = stringField; // CorporateId recordValid = parsingUtilities.PopulateString(record, ref recordPos, out stringField, ExtractConstants.CorporateIdLength, recordValid); result.CorporateId = stringField; // TerminalId recordValid = parsingUtilities.PopulateString(record, ref recordPos, out stringField, ExtractConstants.TerminalIdLength, recordValid); result.TerminalId = stringField; // BankMarker recordValid = parsingUtilities.PopulateString(record, ref recordPos, out stringField, ExtractConstants.BankMarkerLength, recordValid); result.BankMarker = stringField; // CardSuffix recordValid = parsingUtilities.PopulateString(record, ref recordPos, out stringField, ExtractConstants.CardSuffixLength, recordValid); result.CardSuffix = stringField; // ConsumerId recordValid = parsingUtilities.PopulateString(record, ref recordPos, out stringField, ExtractConstants.ConsumerIdLength, recordValid); result.ConsumerId = stringField; // TransactionNotificationType recordValid = parsingUtilities.PopulateString(record, ref recordPos, out stringField, ExtractConstants.TransactionNotificationTypeLength, recordValid); TransactionNotificationType transactionNotificationType; recordValid = DetermineTransactionNotificationType(stringField, "Transaction Type", out transactionNotificationType, recordValid); result.TransactionNotificationType = transactionNotificationType; // TransactionDateTime recordValid = parsingUtilities.PopulateDateTime(record, ref recordPos, "Transaction Date\" and \"Transaction Time", out dateField, true, true, recordValid); result.TransactionDateTime = dateField; // TransactionAmount recordValid = parsingUtilities.PopulateDecimal(record, ref recordPos, "Transaction Amount", out decimalField, ExtractConstants.TransactionAmountLength, recordValid); result.TransactionAmount = decimalField; // CurrencyCode recordValid = parsingUtilities.PopulateString(record, ref recordPos, out stringField, ExtractConstants.CurrencyCodeLength, recordValid); result.CurrencyCode = stringField; // InvoiceId recordValid = parsingUtilities.PopulateString(record, ref recordPos, out stringField, ExtractConstants.InvoiceIdLength, recordValid); result.InvoiceId = stringField; // AcquirerReferenceNumber recordValid = parsingUtilities.PopulateString(record, ref recordPos, out stringField, ExtractConstants.AcquirerReferenceNumberLength, recordValid); result.AcquirerReferenceNumber = stringField; // Record end parsingUtilities.VerifyRecordEnd(record, ref recordPos, FillerLength, true, recordValid); // If the record is not valid, return a null value. if (recordValid == false) { result = null; } return(result); }
public async Task NotifyWhenCompleteAsync(string transactionHash, string email, TransactionNotification notification) { var web3 = new Web3("https://ropsten.infura.io/v3/913e53891f9b4a6d84c1046d2f3ab0ad"); var receipt = await web3.Eth.TransactionManager.TransactionReceiptService.PollForReceiptAsync(transactionHash); Console.WriteLine(receipt.ContractAddress); RestClient client = new RestClient(); client.BaseUrl = new Uri("https://api.mailgun.net/v3"); client.Authenticator = new HttpBasicAuthenticator("api", _config.GetSection("Mailgun")["ApiKey"]); RestRequest request = new RestRequest(); request.AddParameter("domain", "mg.torus.onl", ParameterType.UrlSegment); request.Resource = "{domain}/messages"; request.AddParameter("from", "Torus Notifications <*****@*****.**>"); request.AddParameter("to", email); switch (notification) { case TransactionNotification.ContractDeployment: request.AddParameter("subject", "Your organization on Torus is ready"); request.AddParameter("text", $"Deploy completed. This copy sucks. " + $"Contract ID: {receipt.ContractAddress} at https://torus-ui.azurewebsites.net/{receipt.ContractAddress}"); break; case TransactionNotification.SharesSend: request.AddParameter("subject", "Your shares have on Torus have been sent"); request.AddParameter("text", $"Shares sent. This copy sucks. " + $"Transaction hash: {receipt.TransactionHash}."); break; default: throw new InvalidOperationException( $"Unexpected [{nameof(notification)}] value: '{notification}'."); } request.Method = Method.POST; var response = await client.ExecuteAsync(request); }