Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #5
0
        /// <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);
        }