/// <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);
        }
Example #2
0
        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);
            }
        }
Example #4
0
        /// <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);
        }
Example #5
0
        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")));
            }
        }
Example #6
0
        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");
     }
 }
Example #9
0
 /// <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");
     }
 }