Example #1
0
        private void LoadOrdersFromFiles(object sender, EventArgs e)
        {
            string[] filenames = view.GetFilenamesOfOrdersToOpen();

            if (filenames == null)
            {
                return;
            }

            List <Order>  ordersFromFile = new List <Order>();
            List <string> errorMessages  = new List <string>();

            foreach (var file in filenames)
            {
                // get extension of the file, to use proper parser
                string fileExtension = Path.GetExtension(file);

                // try to parse the extension to the predefined enum
                Enum.TryParse(fileExtension.Remove(0, 1).ToUpper(), out FileType fileType);

                //based on the extension of the file, use correct parser to get data and errors regarding parsing
                switch (fileType)
                {
                case FileType.CSV:
                    ordersFromFile = parsers[0].GetOrdersFromFile(file);
                    errorMessages  = ((Parser)parsers[0]).GetErrorMessages();
                    break;

                case FileType.JSON:
                    ordersFromFile = parsers[1].GetOrdersFromFile(file);
                    errorMessages  = ((Parser)parsers[1]).GetErrorMessages();
                    break;

                case FileType.XML:
                    ordersFromFile = parsers[2].GetOrdersFromFile(file);
                    errorMessages  = ((Parser)parsers[2]).GetErrorMessages();
                    break;

                default:
                    view.AppendErrorToLogs("Unsupported file extension, please check inserted files !");
                    break;
                }

                // insert read orders into database
                viewModel.AddNewOrders(ordersFromFile);

                // append errors about data which was incorrect during parsing
                view.AppendErrorsToLogs(errorMessages);

                // fetch all inserted orders into database
                List <Order> orders = viewModel.GetAllRequests();

                // update view
                view.UpdateDataGriedView(orders);
            }
        }
Example #2
0
        public void GetNumberOfOrders_OrdersExistInDatabase_NumberOfOrdersIsReturned()
        {
            //Arrange
            var viewModel   = new OrderViewModel();
            var ordersToAdd = OrderCreator.CreateOrders_TwoOrdersWithSameReuquestId();

            viewModel.AddNewOrders(ordersToAdd);

            //Action
            int numberOfOrders = viewModel.GetNumberOfOrders();

            //Assert
            Assert.AreEqual(2, numberOfOrders);
        }
Example #3
0
        public void GetNumberOfRequestsGroupedByName_OrdersExistInDatabase_GrouppedRequestsAreReturned()
        {
            //Arrange
            var viewModel   = new OrderViewModel();
            var ordersToAdd = OrderCreator.CreateOrdersForGroupByNameTest();

            viewModel.AddNewOrders(ordersToAdd);

            //Action
            var groupedOrders = viewModel.GetNumberOfOrdersGroupedByName();

            //Assert
            // only 3 orders should be returned because two orders referee to same name
            Assert.AreEqual(3, groupedOrders.Count);
        }
Example #4
0
        public void FetchAllOrdersForSpecificClient_OrdersExistInDatabase_OrdersForClientAreReturned()
        {
            //Arrange
            var    viewModel = new OrderViewModel();
            string clientId  = "id1";
            var    orderForSpecificCLientToAdd = OrderCreator.CreateOrders_ForSpecificCLient_TwoOrdersWithSameRequestId(clientId);

            viewModel.AddNewOrders(orderForSpecificCLientToAdd);

            //Action
            var clientOrders = viewModel.GetAllOrdersForSpecificClient(clientId);

            //Assert
            Assert.AreEqual(1, clientOrders.Count);
        }
Example #5
0
        public void GetNumberOfRequestsGroupedByNameForSpecificClient_OrdersExistInDatabase_GrouppedRequestsAreReturned()
        {
            //Arrange
            var viewModel   = new OrderViewModel();
            var ordersToAdd = OrderCreator.CreateOrdersForGroupByNameTest();

            viewModel.AddNewOrders(ordersToAdd);


            var groupedOrdersForClient = viewModel.GetNumberOfOrdersGroupedByNameForSpecificClient("id1");

            // Assert
            // Only 2 orders should be returned because two orders referee to same name
            Assert.AreEqual(2, groupedOrdersForClient.Count);
        }
Example #6
0
        public void GetAveragePriceOfOrder_OrdersExistInDatabase_AveragePriceIsReturned()
        {
            //Arrange
            var viewModel   = new OrderViewModel();
            var ordersToAdd = OrderCreator.CreateOrders_TwoOrdersWithSameReuquestId();

            viewModel.AddNewOrders(ordersToAdd);
            decimal average = 269.6m;  // calculated based on the orders added into database
                                       // first request => 12 * 12.2 + 10 * 10 = 246.4, second request => 24 * 12.2 = 292.8
                                       // Average = 269.6
            decimal averagePrice = viewModel.GetAveragePriceOfOrder();

            //Assert
            Assert.AreEqual(average, averagePrice);
        }
Example #7
0
        public void FetchAllOrders_OrdersAreInDatabase_AllOrdersAreReturned()
        {
            //Arrange
            var viewModel = new OrderViewModel();
            // create three orders where 2 refere to same request id
            var ordersToAdd = OrderCreator.CreateOrders_TwoOrdersWithSameReuquestId();

            // add them to database
            viewModel.AddNewOrders(ordersToAdd);

            //Action
            var orders = viewModel.GetAllOrders();

            //Assert
            Assert.IsTrue(2 == orders.Count);
        }
Example #8
0
        public void GetTotalPriceOfOrders_OrdersExistInDatabase_NumberOfOrdersIsReturned()
        {
            //Arrange
            var viewModel   = new OrderViewModel();
            var ordersToAdd = OrderCreator.CreateOrders_TwoOrdersWithSameReuquestId();

            viewModel.AddNewOrders(ordersToAdd);
            decimal result = 539.2m;       // calculated based on the orders added into database
                                           // first request => 12 * 12.2m = 146.4, second request => 24 * 12.2 = 292.8, third request => 10*10 = 100
                                           // sum = 539.2
            //Action
            decimal totalPriceOfOrders = viewModel.GetTotalPriceOfOrders();

            //Assert
            Assert.AreEqual(result, totalPriceOfOrders);
        }
Example #9
0
        public void GetNumberOfOrdersForSpecificClient_OrdersExistInDatabase_NumberOfOrdersIsReturned()
        {
            //Arrange
            var    viewModel   = new OrderViewModel();
            string clientId    = "id1";
            var    ordersToAdd = OrderCreator.CreateOrders_ForSpecificCLient_TwoOrdersWithSameRequestId(clientId);

            viewModel.AddNewOrders(ordersToAdd);

            //Action
            int numberOfOrdersForClient = viewModel.GetNumberOfOrdersForSpecificClient(clientId);

            //Assert
            // There are three orders in database, but only two refere to client id ("id1"), and those two orders
            // refere to same request_id so in fact client has only one order
            Assert.AreEqual(1, numberOfOrdersForClient);
        }
Example #10
0
        public void GetTotalPriceOfOrdersForSpecificClient_OrdersExistInDatabase_NumberOfOrdersIsReturned()
        {
            //Arrange
            string clientId    = "id1";
            var    viewModel   = new OrderViewModel();
            var    ordersToAdd = OrderCreator.CreateOrders_ForSpecificCLient_TwoOrdersWithSameRequestId(clientId);

            viewModel.AddNewOrders(ordersToAdd);
            decimal result = 246.4m;      // calculated based on the orders added into database for specific client
                                          // first request => 12 * 12.2 + 10 * 10 = 246.4 because first and second order have same request_id
                                          // sum = 246.4


            //Action
            decimal totalPriceOfOrdersForClient = viewModel.GetTotalPriceOfOrdersForSpecificClient("id1");

            //Assert
            Assert.AreEqual(result, totalPriceOfOrdersForClient);
        }
Example #11
0
        public void GetAveragePriceOfOrderOfSpecificClient_OrdersExistInDatabase_AveragePriceIsReturned()
        {
            //Arrange
            var    viewModel   = new OrderViewModel();
            string clientId    = "id1";
            var    ordersToAdd = OrderCreator.CreateOrders_ForSpecificCLient_TwoOrdersWithSameRequestId(clientId);
            var    orderWithDifferentRequestIdForSameClient = OrderCreator.CreateOrder(clientId, 2, "Roll", 2, 4m);

            viewModel.AddNewOrder(orderWithDifferentRequestIdForSameClient);
            viewModel.AddNewOrders(ordersToAdd);
            decimal average = 127.2m;    // calculated based on the orders added into database for specific client
                                         // first request => 12 * 12.2 + 10 * 10 = 246.4 because first and second order have same request_id
                                         // second request => 2 * 4 = 8
                                         // average = 127.2

            //Action
            decimal averagePrice = viewModel.GetAveragePriceOfOrderOfSpecificClient("id1");

            //Assert
            Assert.AreEqual(average, averagePrice);
        }