/// <summary> /// Simulate calls or sms /// </summary> private void Simulate() { string error = CanSimulate(); if (error != null) { MessageBox.Show(error, "", MessageBoxButton.OK, MessageBoxImage.Error); return; } int.TryParse(Count, out int count); int.TryParse(CallToCenter, out int callToCenter); Enum.TryParse(SelectedSendTo, out SimulateSendTo selectedEnumValue); SimulateDTO simulateDTO = new SimulateDTO() { IdentityCard = _lastIdCardSearch, LineId = SelectedLine, IsSms = IsSms, NumberOfCallsOrSms = count, SendTo = selectedEnumValue, CallToCenter = callToCenter }; if (!IsSms) { int.TryParse(MinDuration, out int minDuration); int.TryParse(MaxDuration, out int maxDuration); simulateDTO.MinDuration = minDuration; simulateDTO.MaxDuration = maxDuration; } _simulatorManager.Simulate(simulateDTO); }
public void SimulateCallsOrSms_SendSmsWithStatusFriends_ReturnTrue() { //arrange SimulateDTO simulateDTO = new SimulateDTO() { LineId = 1, SendTo = SimulateSendTo.Friends, IsSms = true }; Customer customer = _data.GetCustomerWithLinesAndPackage(); Line line = _data.GetLineWithPackageAndFriend(); List <Line> lines = _data.GetLines(1); _mock.Setup(s => s.Customer.GetActiveCustomerWithLines(It.IsAny <string>())) .Returns(customer); _mock.Setup(s => s.Line.GetLineWithPackageAndFriends(It.IsAny <int>())) .Returns(line); _mock.Setup(s => s.Line.GetAll()) .Returns(lines); _mock.Setup(s => s.Sms.Add(new Sms())); _manager = new SimulatorManager(_mock.Object); //act var res = _manager.SimulateCallsOrSms(simulateDTO); //assert Assert.AreEqual(true, res); }
/// <summary> /// Get the destination numbers according to the selected group of send to /// </summary> /// <param name="simulateDTO">Simulate details</param> /// <param name="customer">Customer details</param> /// <param name="line">Line details</param> /// <returns>List of destination number if succeeded otherwise null</returns> private List <string> GetDestinationNumbers(SimulateDTO simulateDTO, Customer customer, Line line) { List <string> numbers = new List <string>(); switch (simulateDTO.SendTo) { case SimulateSendTo.Friends: { if (line.Package.Friends.FirstNumber != null) { numbers.Add(line.Package.Friends.FirstNumber); } if (line.Package.Friends.SecondNumber != null) { numbers.Add(line.Package.Friends.SecondNumber); } if (line.Package.Friends.ThirdNumber != null) { numbers.Add(line.Package.Friends.ThirdNumber); } return(numbers); } case SimulateSendTo.Family: { return(customer.Lines.Where((l) => l.LineNumber != line.LineNumber).Select((x) => x.LineNumber).ToList()); } case SimulateSendTo.General: //Get destination numbers without family and friends { simulateDTO.SendTo = SimulateSendTo.Family; List <string> family = GetDestinationNumbers(simulateDTO, customer, line); simulateDTO.SendTo = SimulateSendTo.Friends; List <string> friends = GetDestinationNumbers(simulateDTO, customer, line); simulateDTO.SendTo = SimulateSendTo.All; List <string> all = GetDestinationNumbers(simulateDTO, customer, line); return(all.Except(family).Except(friends).ToList()); } case SimulateSendTo.All: { try { IEnumerable <Line> lines; lines = _unitOfWork.Line.GetAll(); var linesNumber = lines.Where(l => l.LineNumber != line.LineNumber).Select(l => l.LineNumber).ToList(); return(linesNumber); } catch (Exception e) { _logger.Log($"{Messages.messageFor[MessageType.GeneralDbFaild]} Execption details: {e.Message}"); throw new FaildToConnectDbExeption(Messages.messageFor[MessageType.GeneralDbFaild]); } } default: return(null); } }
/// <summary> /// Create SimulateDTO model to simulate calls or sms /// </summary> static SimulateDTO CreateSimulateDTO(int simulateOption, string identityCard, int lineId) { Random r = new Random(); SimulateDTO simulateDTO; if (simulateOption == 1) { simulateDTO = new SimulateDTO() { IsSms = false, CallToCenter = 2, IdentityCard = identityCard, MinDuration = r.Next(1, 100), MaxDuration = r.Next(100, 1000), LineId = lineId, NumberOfCallsOrSms = r.Next(100, 500), SendTo = SimulateSendTo.All }; } else { simulateDTO = new SimulateDTO() { IsSms = true, CallToCenter = 2, IdentityCard = identityCard, LineId = lineId, NumberOfCallsOrSms = r.Next(100, 500), SendTo = SimulateSendTo.All }; } return(simulateDTO); }
public IHttpActionResult Simulate(SimulateDTO simulateDTO) { if (simulateDTO == null) { return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.NoContent, "Sorry, we could not get the data"))); } try { _simulatorManager.SimulateCallsOrSms(simulateDTO); return(Ok()); } catch (NotFoundException e) { return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.NoContent, e.Message))); } catch (FaildToConnectDbExeption e) { return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Something went wrong"))); } catch (Exception) { return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Something went wrong"))); } }
static void Main(string[] args) { Console.ForegroundColor = ConsoleColor.Yellow; Console.Title = "Console Simulator"; while (true) { Console.WriteLine("Click -1 to generate payment to this month OR enter to continue"); if (Console.ReadLine() == "-1") { GeneratePayments(); } else { int simulateOption; Console.WriteLine("Simulate calls or sms \n"); Console.WriteLine("type customer identity card"); string identityCard = Console.ReadLine(); Console.WriteLine(); var linesId = GetLines(identityCard); if (linesId != null) { int lineId; do { Console.WriteLine("select line id"); linesId.ForEach(i => Console.Write("{0}\t", i)); Console.WriteLine(); int.TryParse(Console.ReadLine(), out lineId); } while (!linesId.Contains(lineId)); Console.WriteLine(); do { Console.WriteLine("Click 1 to simulate calls, Click 2 to simulate sms"); int.TryParse(Console.ReadLine(), out simulateOption); } while (simulateOption != 1 && simulateOption != 2); SimulateDTO simulateDTO = CreateSimulateDTO(simulateOption, identityCard, lineId); Simulate(simulateDTO); } } Console.WriteLine(); Console.WriteLine(); Console.WriteLine(); } }
/// <summary> /// Simulate calls or sms to a specific line /// </summary> /// <param name="simulateDTO">Simulate detalis</param> /// <returns>True if succeeded otherwise false</returns> public bool SimulateCallsOrSms(SimulateDTO simulateDTO) { Customer selectedCustomer; Line selectedLine; try { selectedCustomer = _unitOfWork.Customer.GetActiveCustomerWithLines(simulateDTO.IdentityCard); selectedLine = _unitOfWork.Line.GetLineWithPackageAndFriends(simulateDTO.LineId); selectedCustomer.CallsToCenter += simulateDTO.CallToCenter; _unitOfWork.Complete(); } catch (Exception e) { _logger.Log($"{Messages.messageFor[MessageType.GeneralDbFaild]} Execption details: {e.Message}"); throw new FaildToConnectDbExeption(Messages.messageFor[MessageType.GeneralDbFaild]); } List <string> destinationNumbers = GetDestinationNumbers(simulateDTO, selectedCustomer, selectedLine); if (destinationNumbers == null) { throw new NotFoundException("destination number"); } if (simulateDTO.IsSms) { for (int i = 0; i < simulateDTO.NumberOfCallsOrSms; i++) { string destination = destinationNumbers[_destinationRand.Next(destinationNumbers.Count)]; AddSms(simulateDTO.LineId, destination); } return(true); } else { for (int i = 0; i < simulateDTO.NumberOfCallsOrSms; i++) { string destination = destinationNumbers[_destinationRand.Next(destinationNumbers.Count)]; int douration = _durationRand.Next(simulateDTO.MinDuration, simulateDTO.MaxDuration + 1); AddCall(simulateDTO.LineId, destination, douration); } return(true); } }
/// <summary> /// Sending to api SimulateDTO model to simulate calls or sms /// </summary> /// <param name="simulateDTO">simulateDTO model</param> internal void Simulate(SimulateDTO simulateDTO) { try { using (var http = new HttpClient()) { var result = http.PostAsJsonAsync($"{_baseUrl}/simulator", simulateDTO).Result; if (result.IsSuccessStatusCode) { MessageBox.Show("Simulation passed successfully"); } else { string message = result.Content.ReadAsAsync <ResponseMessage>().Result.Message; MessageBox.Show(Application.Current.MainWindow, message, "", MessageBoxButton.OK, MessageBoxImage.Error); } } } catch (Exception e) { MessageBox.Show("server error"); } }
/// <summary> /// Sending to api SimulateDTO model to simulate calls or sms /// </summary> /// <param name="simulateDTO">simulateDTO model</param> static void Simulate(SimulateDTO simulateDTO) { try { using (var http = new HttpClient()) { var result = http.PostAsJsonAsync($"http://localhost:54377/api/simulator", simulateDTO).Result; if (result.IsSuccessStatusCode) { Console.WriteLine("Simulation passed successfully"); } else { string message = result.Content.ReadAsAsync <ResponseMessage>().Result.Message; Console.WriteLine(message); } } } catch (Exception e) { Console.WriteLine("server error"); } }