Exemplo n.º 1
0
        public void TransferHandler_Execute_AccountNotFoundException()
        {
            var accountHandler = new Moq.Mock <IAccountHandler>();

            var ammount       = new Models.Money();
            var origin        = new Models.Account();
            var destiny       = new Models.Account();
            var transactionId = Guid.NewGuid();

            var transaction = new Models.Transfer()
            {
                Ammount = ammount,
                Origin  = origin,
                Destiny = destiny
            };

            accountHandler
            .Setup(a => a.BlockAmmount(origin, ammount))
            .Returns(transactionId);

            accountHandler
            .Setup(a => a.SendMoney(destiny, ammount, transactionId))
            .Throws(new AccountNotFoundException());

            var    transferHandler = new TransferHandler(accountHandler.Object);
            Action throwException  = () => transferHandler.Execute(transaction);

            Assert.Throws <AccountNotFoundException>(throwException);

            accountHandler.Verify(a => a.BlockAmmount(origin, ammount), Moq.Times.Once);
            accountHandler.Verify(a => a.SendMoney(destiny, ammount, transactionId), Moq.Times.Once);
            accountHandler.Verify(a => a.ConfirmTransaction(transactionId), Moq.Times.Never);
            accountHandler.Verify(a => a.RevertTransaction(transactionId), Moq.Times.Once);
        }
Exemplo n.º 2
0
        public void TransferHandler_Execute_Succesfull()
        {
            var accountHandler = new Moq.Mock <IAccountHandler>();

            var ammount       = new Models.Money();
            var origin        = new Models.Account();
            var destiny       = new Models.Account();
            var transactionId = Guid.NewGuid();

            var transaction = new Models.Transfer()
            {
                Ammount = ammount,
                Origin  = origin,
                Destiny = destiny
            };

            accountHandler
            .Setup(a => a.BlockAmmount(origin, ammount))
            .Returns(transactionId);

            var transferHandler         = new TransferHandler(accountHandler.Object);
            var proccessedTransactionId = transferHandler.Execute(transaction);

            Assert.Equal(transactionId, proccessedTransactionId);

            accountHandler.Verify(a => a.BlockAmmount(origin, ammount), Moq.Times.Once);
            accountHandler.Verify(a => a.SendMoney(destiny, ammount, transactionId), Moq.Times.Once);
            accountHandler.Verify(a => a.ConfirmTransaction(transactionId), Moq.Times.Once);
            accountHandler.Verify(a => a.RevertTransaction(Moq.It.IsAny <Guid>()), Moq.Times.Never);
        }
Exemplo n.º 3
0
        public void TransferHandler_Execute_NotEnoughMoneyException()
        {
            var accountHandler = new Moq.Mock <IAccountHandler>();

            var ammount = new Models.Money();
            var origin  = new Models.Account();

            var transaction = new Models.Transfer()
            {
                Ammount = ammount,
                Origin  = origin,
                Destiny = new Models.Account()
            };

            accountHandler
            .Setup(a => a.BlockAmmount(origin, ammount))
            .Throws(new NotEnoughMoneyException());

            var    transferHandler = new TransferHandler(accountHandler.Object);
            Action throwException  = () => transferHandler.Execute(transaction);

            Assert.Throws <NotEnoughMoneyException>(throwException);

            accountHandler.Verify(a => a.BlockAmmount(origin, ammount), Moq.Times.Once);
            accountHandler.Verify(a => a.SendMoney(Moq.It.IsAny <Models.Account>(), Moq.It.IsAny <Models.Money>(), Moq.It.IsAny <Guid>()), Moq.Times.Never);
            accountHandler.Verify(a => a.ConfirmTransaction(Moq.It.IsAny <Guid>()), Moq.Times.Never);
            accountHandler.Verify(a => a.RevertTransaction(Moq.It.IsAny <Guid>()), Moq.Times.Never);
        }
Exemplo n.º 4
0
 public void Remove(Models.Transfer entity)
 {
     using (var uow = new UnitOfWork(ctx))
     {
         uow.transferRepository.Delete(entity);
     }
 }
Exemplo n.º 5
0
        public static async Task SendPatchMessageAsync(Models.Transfer transfer, Guid customerId, string reqUrl)
        {
            var tokenProvider    = TokenProvider.CreateSharedAccessSignatureTokenProvider(KeyName, AccessKey);
            var messagingFactory = MessagingFactory.Create(BaseAddress, tokenProvider);
            var sender           = messagingFactory.CreateMessageSender(QueueName);
            var messageModel     = new MessageModel
            {
                TitleMessage     = "Transfer record modification for {" + customerId + "} at " + DateTime.UtcNow,
                CustomerGuid     = customerId,
                LastModifiedDate = transfer.LastModifiedDate,
                URL           = reqUrl,
                IsNewCustomer = false,
                TouchpointId  = transfer.LastModifiedTouchpointId
            };

            var msg = new BrokeredMessage(new MemoryStream(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(messageModel))))
            {
                ContentType = "application/json",
                MessageId   = customerId + " " + DateTime.UtcNow
            };

            await CheckAndCreateSubscription(transfer);

            await sender.SendAsync(msg);
        }
Exemplo n.º 6
0
        public Models.Transfer Add(Models.Transfer entity)
        {
            using (var uow = new UnitOfWork(ctx))
            {
                if (entity.Agency != null)
                {
                    entity.AgencyId = entity.Agency.Id;
                }
                entity.Agency    = null; // in order not to save related entities in db because they already exist // i don't need these nulls because i don't work with enities
                entity.PartnerId = entity.Partner.Id;
                var vehicle = uow.vehicleRepository.GetById(entity.Partner.VehicleId);
                entity.Partner   = null;
                entity.VehicleId = vehicle.Id;

                uow.transferRepository.Add(entity);

                if (uow.Complete())
                {
                    logger.LogInformation("new transfer created");
                    return(entity);
                }
                else
                {
                    logger.LogError("new transfer has not been created");
                    return(null);
                }
            }
        }
Exemplo n.º 7
0
        public static async Task SendPatchMessageAsync(Models.Transfer transfer, Guid customerId, string reqUrl)
        {
            var connectionString = GetConnectionString();

            var queueClient  = new QueueClient(connectionString, QueueName);
            var messageModel = new MessageModel
            {
                TitleMessage     = "Transfer record modification for {" + customerId + "} at " + DateTime.UtcNow,
                CustomerGuid     = customerId,
                LastModifiedDate = transfer.LastModifiedDate,
                URL           = reqUrl,
                IsNewCustomer = false,
                TouchpointId  = transfer.LastModifiedTouchpointId
            };

            var msg = new Message(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(messageModel)))
            {
                ContentType = "application/json",
                MessageId   = customerId + " " + DateTime.UtcNow
            };

            await CheckAndCreateSubscription(transfer);

            await queueClient.SendAsync(msg);
        }
        public async Task <Subscriptions> CreateSubscriptionAsync(Models.Transfer transfer)
        {
            if (transfer == null)
            {
                return(null);
            }

            var subscription = new Subscriptions
            {
                SubscriptionId   = Guid.NewGuid(),
                CustomerId       = transfer.CustomerId,
                TouchPointId     = transfer.TargetTouchpointId,
                Subscribe        = true,
                LastModifiedDate = transfer.LastModifiedDate,
            };

            if (!transfer.LastModifiedDate.HasValue)
            {
                subscription.LastModifiedDate = DateTime.Now;
            }

            var documentDbProvider = new DocumentDBProvider();

            var response = await documentDbProvider.CreateSubscriptionsAsync(subscription);

            return(response.StatusCode == HttpStatusCode.Created ? (dynamic)response.Resource : (Guid?)null);
        }
Exemplo n.º 9
0
 public Models.Transfer Update(Models.Transfer entity, object id)
 {
     using (var uow = new UnitOfWork(ctx))
     {
         var updated = uow.transferRepository.Update(entity, id);
         uow.Complete();
         return(updated);
     }
 }
Exemplo n.º 10
0
 static public Models.Transfer MakeCryptoTransfer(string fromaccountid, string toaccountid, double amount, string reference)
 {
     Models.Transfer transfer = new Models.Transfer();
     transfer.amount        = amount;
     transfer.completed     = "COMPLETED";
     transfer.currency      = "BTC";
     transfer.description   = reference;
     transfer.from_account  = fromaccountid;
     transfer.status        = "COMPLETED";
     transfer.other_account = toaccountid;
     return(transfer);
 }
Exemplo n.º 11
0
        static public Models.Transfer Transfer(string fromaccountid, string toaccountid, double amount, string reference)
        {
            var client      = new HttpClient();
            var queryString = HttpUtility.ParseQueryString(string.Empty);

            // Request headers
            client.DefaultRequestHeaders.Add("Track-ID", "4a9c41d5be483dd5bbbbaaaa");
            client.DefaultRequestHeaders.Add("Auth-Provider-Name", "01040939298400");
            client.DefaultRequestHeaders.Add("Auth-ID", "123456789");
            client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", "");
            client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", "d4af6bd7a1164d8eb6c6fca3c72a809a");

            // Request parameters
            //queryString["subscription-key"] = "{string}";
            var uri        = string.Format("http://api.bocapi.net/v1/api/banks/bda8eb884efcef7082792d45/accounts/{0}/make-transaction", fromaccountid);
            var webrequest = (HttpWebRequest)System.Net.WebRequest.Create(uri);

            webrequest.Headers.Add("Track-ID", "4a9c41d5be483dd5bbbbaaaa");
            webrequest.Headers.Add("Auth-Provider-Name", "01040939298400");
            webrequest.Headers.Add("Auth-ID", "123456789");
            webrequest.Headers.Add("Ocp-Apim-Subscription-Key", "");
            webrequest.Headers.Add("Ocp-Apim-Subscription-Key", "d4af6bd7a1164d8eb6c6fca3c72a809a");
            //HttpResponseMessage response;
            string body = "{ \"description\": \"" + reference + "\" , \"challenge_type\": \"" + reference + "\", \"from\": {\"account_id\": \"" + fromaccountid + "\", \"bank_id\": \"bda8eb884efcef7082792d45\"  },  \"to\": {  \"account_id\": \"" + toaccountid + "\", \"bank_id\": \"bda8eb884efcef7082792d45\"  },  \"value\": {  \"currency\": \"EUR\", \"amount\": " + amount.ToString().Replace(",", ".") + "} }";//,,,,amount.ToString());

            // string body = "{ \"description\": \"test\" , \"challenge_type\": \"test\", \"from\": {\"account_id\": \"ea67f7c3c695b3dc9c1afb37\", \"bank_id\": \"bda8eb884efcef7082792d45\"  },  \"to\": {  \"account_id\": \"bda8eb884efcea209b2a6287\", \"bank_id\": \"bda8eb884efcef7082792d45\"  },  \"value\": {  \"currency\": \"EUR\", \"amount\": 10.0} }";
            // Request body
            byte[]          byteData       = Encoding.UTF8.GetBytes(body);
            Models.Transfer transferResult = new Models.Transfer();

            webrequest.Method        = "POST";
            webrequest.ContentType   = "application/json";
            webrequest.ContentLength = byteData.Length;
            using (var stream = webrequest.GetRequestStream())
            {
                stream.Write(byteData, 0, byteData.Length);
            }



            //using (var content = new ByteArrayContent(byteData))
            //{
            //    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            using (var response = webrequest.GetResponse())
                using (var reader = new StreamReader(response.GetResponseStream()))
                {
                    //var result = ;
                    dynamic results = JsonConvert.DeserializeObject <dynamic>(reader.ReadToEnd());
                    transferResult.status = results.status.Value;
                }
            // }
            return(transferResult);
        }
Exemplo n.º 12
0
        public static async Task CheckAndCreateSubscription(Models.Transfer transfer)
        {
            var subscriptions = await _subscriptionHelper.GetSubscriptionsAsync(transfer.CustomerId);

            var doesSubscriptionExist = subscriptions != null && subscriptions.Any(x =>
                                                                                   x.CustomerId == transfer.CustomerId &&
                                                                                   x.TouchPointId == transfer.TargetTouchpointId);

            if (doesSubscriptionExist == false)
            {
                await _subscriptionHelper.CreateSubscriptionAsync(transfer);
            }
        }
        public void Setup()
        {
            _transfer = new Models.Transfer();

            _request = new DefaultHttpRequest(new DefaultHttpContext());

            _log                               = new Mock <ILogger>();
            _resourceHelper                    = new Mock <IResourceHelper>();
            _httpRequestMessageHelper          = new Mock <IHttpRequestHelper>();
            _getTransferByIdHttpTriggerService = new Mock <IGetTransferByIdHttpTriggerService>();
            _jsonHelper                        = new JsonHelper();
            _responseHelper                    = new HttpResponseMessageHelper();
            _function                          = new GetTransferByIdHttpTrigger.Function.GetTransferByIdHttpTrigger(_resourceHelper.Object, _httpRequestMessageHelper.Object, _getTransferByIdHttpTriggerService.Object, _responseHelper, _jsonHelper);
        }
Exemplo n.º 14
0
        public async Task <Models.Transfer> CreateAsync(Models.Transfer transfer)
        {
            if (transfer == null)
            {
                return(null);
            }

            transfer.SetDefaultValues();

            var documentDbProvider = new DocumentDBProvider();

            var response = await documentDbProvider.CreateTransferAsync(transfer);

            return(response.StatusCode == HttpStatusCode.Created ? (dynamic)response.Resource : null);
        }
        public async Task <ResourceResponse <Document> > CreateTransferAsync(Models.Transfer transfer)
        {
            var collectionUri = DocumentDBHelper.CreateDocumentCollectionUri();

            var client = DocumentDBClient.CreateDocumentClient();

            if (client == null)
            {
                return(null);
            }

            var response = await client.CreateDocumentAsync(collectionUri, transfer);

            return(response);
        }
        public async Task <ResourceResponse <Document> > UpdateTransferAsync(Models.Transfer transfer)
        {
            var documentUri = DocumentDBHelper.CreateDocumentUri(transfer.TransferId.GetValueOrDefault());

            var client = DocumentDBClient.CreateDocumentClient();

            if (client == null)
            {
                return(null);
            }

            var response = await client.ReplaceDocumentAsync(documentUri, transfer);

            return(response);
        }
Exemplo n.º 17
0
        public async Task <Models.Transfer> UpdateAsync(Models.Transfer transfer, TransferPatch transferPatch)
        {
            if (transferPatch == null)
            {
                return(null);
            }

            transferPatch.SetDefaultValues();
            transfer.Patch(transferPatch);

            var documentDbProvider = new DocumentDBProvider();
            var response           = await documentDbProvider.UpdateTransferAsync(transfer);

            var responseStatusCode = response.StatusCode;

            return(responseStatusCode == HttpStatusCode.OK ? transfer : null);
        }
        public void Setup()
        {
            _transfer = new Models.Transfer()
            {
                TargetTouchpointId = "0000000002", Context = "some context"
            };

            _request = new DefaultHttpRequest(new DefaultHttpContext());

            _log                            = new Mock <ILogger>();
            _resourceHelper                 = new Mock <IResourceHelper>();
            _httpRequestMessageHelper       = new Mock <IHttpRequestHelper>();
            _validate                       = new Validate();
            _postTransferHttpTriggerService = new Mock <IPostTransferHttpTriggerService>();
            _jsonHelper                     = new JsonHelper();
            _responseHelper                 = new HttpResponseMessageHelper();
            _function                       = new PostTransferHttpTrigger.Function.PostTransferHttpTrigger(_resourceHelper.Object, _httpRequestMessageHelper.Object, _validate, _postTransferHttpTriggerService.Object, _responseHelper, _jsonHelper);
        }
        public void Setup()
        {
            _transfer = Substitute.For <Models.Transfer>();

            _request = new HttpRequestMessage()
            {
                Content    = new StringContent(string.Empty),
                RequestUri =
                    new Uri($"http://localhost:7071/api/Customers/7E467BDB-213F-407A-B86A-1954053D3C24/" +
                            $"Interactions/aa57e39e-4469-4c79-a9e9-9cb4ef410382/" +
                            $"Transfer/d5369b9a-6959-4bd3-92fc-1583e72b7e51")
            };

            _log                               = Substitute.For <ILogger>();
            _resourceHelper                    = Substitute.For <IResourceHelper>();
            _httpRequestMessageHelper          = Substitute.For <IHttpRequestMessageHelper>();
            _getTransferByIdHttpTriggerService = Substitute.For <IGetTransferByIdHttpTriggerService>();
            _httpRequestMessageHelper.GetTouchpointId(_request).Returns("0000000001");
        }
        public void Setup()
        {
            _transfer      = Substitute.For <Models.Transfer>();
            _transferPatch = Substitute.For <TransferPatch>();

            _request = new HttpRequestMessage()
            {
                Content    = new StringContent(string.Empty),
                RequestUri =
                    new Uri($"http://localhost:7071/api/Customers/7E467BDB-213F-407A-B86A-1954053D3C24/" +
                            $"Transfer/1e1a555c-9633-4e12-ab28-09ed60d51cb3")
            };

            _log                             = Substitute.For <ILogger>();
            _resourceHelper                  = Substitute.For <IResourceHelper>();
            _validate                        = Substitute.For <IValidate>();
            _httpRequestMessageHelper        = Substitute.For <IHttpRequestMessageHelper>();
            _patchTransferHttpTriggerService = Substitute.For <IPatchTransferHttpTriggerService>();
            _httpRequestMessageHelper.GetTouchpointId(_request).Returns("0000000001");
            _httpRequestMessageHelper.GetApimURL(_request).Returns("http://localhost:7071/");
        }
        public void Setup()
        {
            _transfer = new Models.Transfer()
            {
                LastModifiedTouchpointId = "0000000001"
            };
            _transferPatch = new TransferPatch()
            {
                LastModifiedTouchpointId = "0000000001", TargetTouchpointId = "0000000002"
            };

            _request = new DefaultHttpRequest(new DefaultHttpContext());

            _log                             = new Mock <ILogger>();
            _resourceHelper                  = new Mock <IResourceHelper>();
            _validate                        = new Validate();
            _httpRequestMessageHelper        = new Mock <IHttpRequestHelper>();
            _patchTransferHttpTriggerService = new Mock <IPatchTransferHttpTriggerService>();
            _jsonHelper                      = new JsonHelper();
            _responseHelper                  = new HttpResponseMessageHelper();
            _function                        = new PatchTransferHttpTrigger.Function.PatchTransferHttpTrigger(_resourceHelper.Object, _httpRequestMessageHelper.Object, _validate, _patchTransferHttpTriggerService.Object, _responseHelper, _jsonHelper);
        }
Exemplo n.º 22
0
 public async Task SendToServiceBusQueueAsync(Models.Transfer transfer, string reqUrl)
 {
     await ServiceBusClient.SendPostMessageAsync_Target(transfer, reqUrl);
 }
Exemplo n.º 23
0
 public async Task SendToServiceBusQueueAsync(Models.Transfer transfer, Guid customerId, string reqUrl)
 {
     await ServiceBusClient.SendPatchMessageAsync(transfer, customerId, reqUrl);
 }
Exemplo n.º 24
0
        public ActionResult Booking(string customer_id, string first_name, string last_name, char gender, string age, string email, string phone_number, string address, string city, string id, string pickupdate, string dropoffdate, string returncity, string pickupcity)
        {
            if (string.IsNullOrEmpty(customer_id))
                ModelState.AddModelError("customer_id" + id, "*Required Passport Number");

            if (string.IsNullOrEmpty(first_name))
                ModelState.AddModelError("first_name", "*Required First Name");
            if (string.IsNullOrEmpty(last_name))
                ModelState.AddModelError("last_name", "*Required Last Name");
            if (string.IsNullOrEmpty(age))
                ModelState.AddModelError("age", "*Required Age");
            if (string.IsNullOrEmpty(email))
                ModelState.AddModelError("email", "*Required Email");

            int anAge;
            int cid;
            if (!int.TryParse(age, out anAge))
                ModelState.AddModelError("age", "*Age should be number");
            if (!int.TryParse(customer_id, out cid))
                ModelState.AddModelError("customer_id", "*Passport should be number");

            if (anAge < 18 || anAge > 100)
                ModelState.AddModelError("age", "Age should be between 18 and 100");
            if (string.IsNullOrEmpty(phone_number))
                ModelState.AddModelError("phone_number", "*Required Phone number");
            if (string.IsNullOrEmpty(address))
                ModelState.AddModelError("address", "*Required Address");
            if (string.IsNullOrEmpty(city))
                ModelState.AddModelError("city", "*Required City");

            if (ModelState.IsValid)
            {
                Models.Transfer t = new Models.Transfer();
                t.customer_id = cid; t.first_name = first_name; t.last_name = last_name; t.age = anAge; t.gender = gender; t.email = email; t.address = address; t.city = city; t.phone_number = phone_number;
                t.vehicle_id = id; t.pickupdate = pickupdate; t.dropoffdate = dropoffdate; t.returncity = returncity; t.pickupcity = pickupcity;
                return RedirectToAction("Payment", t);
            }

            return View();
        }
        public IHttpActionResult GetTransfer(string id, string merchantid, double amount, string reference, string currency)
        {
            // double amount = 12;
            //string reference = "testrransfer";
            DataAccess.User     user;
            DataAccess.Merchant merchant;
            // Retrieve User and Merchant account id's from database
            using (DataAccess.CodeDuoTestEntities entities = new DataAccess.CodeDuoTestEntities())
            {
                int idint   = int.Parse(id);
                int merchid = int.Parse(merchantid);
                user     = entities.Users.FirstOrDefault(e => e.Id == idint);
                merchant = entities.Merchants.FirstOrDefault(m => m.Id == merchid);
            }

            string fromaccountid = user.AccountId;   //"e863600a86656f979d646e83";

            string toaccountid = merchant.AccountId; //"e863600a86656f979d646e83";
            var    transfer    = new Models.Transfer();

            switch (currency)
            {
            case "EUR":
                transfer = DataAccess.bocApi.Transfer(fromaccountid, toaccountid, amount, reference);
                break;

            case "BTC":
                transfer = DataAccess.bitCoinAPI.MakeCryptoTransfer(fromaccountid, toaccountid, amount, reference);
                break;

            default:
                break;
            }

            // var accountBalance = DataAccess.bocApi.GetAccountBalance(id, "5710bba5d42604e4072d1e92");
            if (transfer == null)
            {
                return(NotFound());
            }

            //Store Transaction details in SQL database
            // insert
            using (DataAccess.CodeDuoTestEntities entities = new DataAccess.CodeDuoTestEntities())
            {
                DataAccess.Transaction newTransaction = new DataAccess.Transaction();
                newTransaction.Amount            = (decimal)amount;
                newTransaction.CreatedDate       = DateTime.Now;
                newTransaction.Currency          = currency;
                newTransaction.FromAccountId     = user.IBAN;
                newTransaction.MerchantId        = merchant.Id;
                newTransaction.MerchantReference = reference;
                newTransaction.Status            = transfer.status;
                newTransaction.ToAccountId       = merchant.IBAN;
                newTransaction.UserId            = user.Id;
                if (currency == "BTC")
                {
                    newTransaction.FromAccountId = "";
                    newTransaction.ToAccountId   = "";
                }
                var customers = entities.Transactions.Add(newTransaction);

                entities.SaveChanges();
            }
            if (transfer.status == "COMPLETED")
            {
                transfer.status = "SUCCESS";
            }
            else
            {
                transfer.status = "FAILED";
            }


            return(Ok(transfer));
        }