public async Task GetOrdersAsync_CanSearchByCreatedByAsync(string createdBy)
        {
            // Arrange
            var search = new SearchOrderParametersVm {
                CreatedBy = createdBy
            };

            // Action
            var orders = await _service.GetOrdersAsync(search, null);

            // Assert
            Assert.NotEmpty(orders);
            Assert.All(orders, order => order.CreatedBy.Contains(createdBy));
        }
        public async Task GetOrdersAsync_CanSearchByCustomerAsync(string customer)
        {
            // Arrange
            var search = new SearchOrderParametersVm {
                CustomerName = customer
            };

            // Action
            var orders = await _service.GetOrdersAsync(search, null);

            // Assert
            Assert.NotEmpty(orders);
            Assert.All(orders, order => order.CustomerName.Contains(customer));
        }
        public async Task GetOrdersAsync_CanSearchByStatusAsync(OrderStatus status)
        {
            // Arrange
            var search = new SearchOrderParametersVm {
                Status = status
            };

            // Action
            var orders = await _service.GetOrdersAsync(search, null);

            // Assert
            Assert.NotEmpty(orders);
            Assert.All(orders, order => order.Status.Equals(status));
        }
        public async Task GetOrdersAsync_ShouldSortIdDescendinglyByDefaultAsync()
        {
            // Arrange
            var search = new SearchOrderParametersVm();

            // Action
            var orders = await _service.GetOrdersAsync(search, null);

            // Assert
            Assert.NotEmpty(orders);
            Assert.True(orders.ElementAt(1).Id <= orders.ElementAt(0).Id);
            Assert.True(orders.ElementAt(2).Id <= orders.ElementAt(1).Id);
            Assert.True(orders.ElementAt(3).Id <= orders.ElementAt(2).Id);
        }
        public async Task GetOrdersAsync_CanSortByTotalAsync()
        {
            // Arrange
            var search = new SearchOrderParametersVm();
            var sort   = new Sort {
                Predicate = "OrderTotal", Reverse = true
            };

            // Action
            var orders = await _service.GetOrdersAsync(search, sort);

            // Assert
            Assert.NotEmpty(orders);
            Assert.True(orders.ElementAt(1).Total <= orders.ElementAt(0).Total);
            Assert.True(orders.ElementAt(2).Total <= orders.ElementAt(1).Total);
            Assert.True(orders.ElementAt(3).Total <= orders.ElementAt(2).Total);
        }
        public async Task GetOrdersAsync_CanSearchByCreatedOnAsync()
        {
            // Arrange
            const string DateFormat = "dd/MM/yyyy";

            var search = new SearchOrderParametersVm
            {
                CreatedOn = new PeriodVm
                {
                    After  = new DateTime(2018, 12, 1),
                    Before = new DateTime(2019, 1, 1)
                }
            };

            // Action
            var orders = await _service.GetOrdersAsync(search, null);

            // Assert
            Assert.NotEmpty(orders);
            Assert.True(orders.All(order => DateTime.ParseExact(order.CreatedOn, DateFormat, CultureInfo.InvariantCulture) >= search.CreatedOn.After));
            Assert.True(orders.All(order => DateTime.ParseExact(order.CreatedOn, DateFormat, CultureInfo.InvariantCulture) <= search.CreatedOn.Before));
        }