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); }
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); }
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); }
public void Remove(Models.Transfer entity) { using (var uow = new UnitOfWork(ctx)) { uow.transferRepository.Delete(entity); } }
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); }
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); } } }
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); }
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); } }
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); }
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); }
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); }
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); }
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); }
public async Task SendToServiceBusQueueAsync(Models.Transfer transfer, string reqUrl) { await ServiceBusClient.SendPostMessageAsync_Target(transfer, reqUrl); }
public async Task SendToServiceBusQueueAsync(Models.Transfer transfer, Guid customerId, string reqUrl) { await ServiceBusClient.SendPatchMessageAsync(transfer, customerId, reqUrl); }
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)); }