public void GetDeliveryDates_EmptyPostalCode_ReturnsEmptyList()
        {
            var products = new List <Product>()
            {
                new Product
                {
                    ProductId     = 1,
                    Name          = "Gurka",
                    ProductType   = ProductType.Normal,
                    DaysInAdvance = 2,
                    DeliveryDays  = new List <DayOfWeek>()
                    {
                        DayOfWeek.Tuesday, DayOfWeek.Sunday, DayOfWeek.Friday
                    }
                },

                new Product
                {
                    ProductId     = 2,
                    Name          = "Äpple",
                    ProductType   = ProductType.Normal,
                    DaysInAdvance = 3,
                    DeliveryDays  = new List <DayOfWeek>()
                    {
                        DayOfWeek.Tuesday, DayOfWeek.Sunday, DayOfWeek.Friday
                    }
                },
            };

            var deliveryDateService = new DeliveryDateService();
            var result = deliveryDateService.GetDeliveryDates("", products);

            Assert.Empty(result);
        }
        public void GetDeliveryDates_ValidListOfProducts_ReturnsListOfDelvieryDates()
        {
            var products = new List <Product>()
            {
                new Product
                {
                    ProductId     = 1,
                    Name          = "Gurka",
                    ProductType   = ProductType.Normal,
                    DaysInAdvance = 2,
                    DeliveryDays  = new List <DayOfWeek>()
                    {
                        DayOfWeek.Tuesday, DayOfWeek.Sunday, DayOfWeek.Friday
                    }
                },

                new Product
                {
                    ProductId     = 2,
                    Name          = "Äpple",
                    ProductType   = ProductType.Normal,
                    DaysInAdvance = 3,
                    DeliveryDays  = new List <DayOfWeek>()
                    {
                        DayOfWeek.Tuesday, DayOfWeek.Sunday, DayOfWeek.Friday
                    }
                },
            };

            var deliveryDateService = new DeliveryDateService();
            var result = deliveryDateService.GetDeliveryDates("54143", products);

            Assert.NotEmpty(result);
        }
        public void GetAvailableDeliveryDays_NoValidDays_ReturnsEmptyListOfDays()
        {
            var products = new List <Product>()
            {
                new Product
                {
                    ProductId     = 1,
                    Name          = "Gurka",
                    ProductType   = ProductType.Normal,
                    DaysInAdvance = 2,
                    DeliveryDays  = new List <DayOfWeek>()
                    {
                        DayOfWeek.Tuesday
                    }
                },

                new Product
                {
                    ProductId     = 2,
                    Name          = "Äpple",
                    ProductType   = ProductType.Normal,
                    DaysInAdvance = 3,
                    DeliveryDays  = new List <DayOfWeek>()
                    {
                        DayOfWeek.Monday
                    }
                },
            };

            var deliveryDateService = new DeliveryDateService();
            var result = deliveryDateService.GetAvailableDeliveryDays(products);

            Assert.Empty(result);
        }
        public void GetDeliveryDates_ExternalAndTemporaryProducts_ReturnsEmptyList()
        {
            var products = new List <Product>()
            {
                new Product
                {
                    ProductId     = 1,
                    Name          = "Gurka",
                    ProductType   = ProductType.External,
                    DaysInAdvance = 7,
                    DeliveryDays  = new List <DayOfWeek>()
                    {
                        DayOfWeek.Monday, DayOfWeek.Tuesday, DayOfWeek.Sunday, DayOfWeek.Friday
                    }
                },

                new Product
                {
                    ProductId     = 1,
                    Name          = "Gurka",
                    ProductType   = ProductType.Temporary,
                    DaysInAdvance = 2,
                    DeliveryDays  = new List <DayOfWeek>()
                    {
                        DayOfWeek.Monday, DayOfWeek.Tuesday, DayOfWeek.Sunday, DayOfWeek.Friday
                    }
                },
            };

            var deliveryDateService = new DeliveryDateService();
            var deliveryDates       = deliveryDateService.GetDeliveryDates("54146", products);

            Assert.Empty(deliveryDates);
        }
        public void GetAvailableDeliveryDays_OnlyMonday_ReturnsListOfDays()
        {
            var products = new List <Product>()
            {
                new Product
                {
                    ProductId     = 1,
                    Name          = "Gurka",
                    ProductType   = ProductType.Normal,
                    DaysInAdvance = 2,
                    DeliveryDays  = new List <DayOfWeek>()
                    {
                        DayOfWeek.Monday, DayOfWeek.Tuesday
                    }
                },

                new Product
                {
                    ProductId     = 2,
                    Name          = "Äpple",
                    ProductType   = ProductType.Normal,
                    DaysInAdvance = 3,
                    DeliveryDays  = new List <DayOfWeek>()
                    {
                        DayOfWeek.Monday
                    }
                },
            };

            var deliveryDateService = new DeliveryDateService();
            var result = deliveryDateService.GetAvailableDeliveryDays(products);

            Assert.True(result.Contains(DayOfWeek.Monday) && !result.Contains(DayOfWeek.Tuesday));
        }
        public void GetDeliveryDates_EmptyListOfProducts_ReturnsEmptyList()
        {
            var deliveryDateService = new DeliveryDateService();
            var result = deliveryDateService.GetDeliveryDates("54146", new List <Product>());

            Assert.Empty(result);
        }
        static void Main(string[] args)
        {
            var productRepository = new ProductRepository();
            var validProducts     = productRepository.ValidateProducts(productRepository.GetProducts());

            if (validProducts)
            {
                List <ProductDeliveryDate> deliveryDates = new DeliveryDateService()
                                                           .GetDeliveryDates("54146", productRepository.GetProducts());

                var json = JsonConvert.SerializeObject(deliveryDates, Formatting.Indented);
                Console.Write(json);
            }
            else
            {
                Console.WriteLine("The product list was not valid.");
            }
        }