public void OnUpdateСтрокаЗаказа_НоваяСНаличиемНаСкладе_ТоварыРезервируются()
        {
            // Arrange
            var товар  = new Товар();
            var строка = new СтрокаЗаказа
            {
                Количество = 4,
                Товар      = товар,
                Заказ      = new Заказ
                {
                    егион = new  егион
                    {
                        Код = "59"
                    }
                }
            };

            бс.DiscountService = Mock.Of <IDiscountService>();

            var whMock = new Mock <IWarehouseService>();

            whMock.Setup(x => x.CanReserveProduct(товар, 4)).Returns(true);
            бс.WarehouseService = whMock.Object;

            // Act
            бс.OnUpdateСтрокаЗаказа(строка);

            // Assert
            whMock.Verify(x => x.ReserveProduct(товар, 4));
        }
        public void OnUpdateСтрокаЗаказа_НоваяСНедостаткомНаСкладе_ГенерируетсяИсключение()
        {
            // Arrange
            var товар  = new Товар();
            var строка = new СтрокаЗаказа
            {
                Количество = 10,
                Товар      = товар,
                Заказ      = new Заказ
                {
                    егион = new  егион
                    {
                        Код = "59"
                    }
                }
            };

            бс.DiscountService  = Mock.Of <IDiscountService>();
            бс.WarehouseService = Mock.Of <IWarehouseService>(ws => ws.CanReserveProduct(товар, 10) == false);

            // Act
            var exception = Assert.Throws <Exception>(() => бс.OnUpdateСтрокаЗаказа(строка));

            // Assert
            Assert.Equal("Недостаточно товара на складах.", exception.Message);
        }
        public void OnUpdateСтрокаЗаказа_Новая_ВычисляетСумму()
        {
            // Arrange
            var строка = new СтрокаЗаказа
            {
                Количество = 2,
                Товар      = new Товар
                {
                    Цена = 100
                },
                Заказ = new Заказ
                {
                    егион = new  егион
                    {
                        Код = "59"
                    }
                }
            };
            var discountServiceMock = new Mock <IDiscountService>();

            discountServiceMock
            .Setup(x => x.GetDiscount(It.IsAny <СтрокаЗаказа>()))
            .Returns(1m);
            бс.DiscountService = discountServiceMock.Object;

            // Act
            бс.OnUpdateСтрокаЗаказа(строка);

            // Assert
            Assert.Equal(300, строка.Сумма);
        }
        public void OnUpdateСтрокаЗаказа_Новая_ВычисляетЦенуСНалогом()
        {
            // Arrange
            var строка = new СтрокаЗаказа
            {
                Количество = 1,
                Товар      = new Товар
                {
                    Цена = 100
                },
                Заказ = new Заказ
                {
                    егион = new  егион
                    {
                        Код = "59"
                    }
                }
            };

            бс.DiscountService = Mock.Of <IDiscountService>();

            // Act
            бс.OnUpdateСтрокаЗаказа(строка);

            // Assert
            Assert.Equal(150, строка.ЦенаСНалогами);
        }
        public void GetDiscount_ВипКлиент_Скидка20Процентов(СтрокаЗаказа строкаЗаказа)
        {
            // Arrange
            var discountService = new PersonalDiscountService();

            // Act
            var discount = discountService.GetDiscount(строкаЗаказа);

            // Assert
            Assert.Equal(0.75m, discount);
        }
        public void GetDiscount_ОбычныйКлиент_БезСкидки(СтрокаЗаказа строкаЗаказа)
        {
            // Arrange
            var discountService = new PersonalDiscountService();

            // Act
            var discount = discountService.GetDiscount(строкаЗаказа);

            // Assert
            Assert.Equal(1, discount);
        }
        public void GetDiscount_ОптовыйЗаказ_Скидка20Процентов_Theory(int count)
        {
            // Arrange
            var discountService = new SimpleDiscountService();
            var строкаЗаказа    = new СтрокаЗаказа
            {
                Количество = count
            };

            // Act
            var discount = discountService.GetDiscount(строкаЗаказа);

            // Assert
            Assert.Equal(0.8m, discount);
        }
        public void GetDiscount_РозничныйЗаказ_БезСкидки_Theory(int count)
        {
            // Arrange
            var discountService = new SimpleDiscountService();
            var строкаЗаказа    = new СтрокаЗаказа
            {
                Количество = count
            };

            // Act
            var discount = discountService.GetDiscount(строкаЗаказа);

            // Assert
            Assert.Equal(1, discount);
        }
        public void OnUpdateСтрокаЗаказа_НоваяСНаличиемНаСкладе_УспешноВыполняется()
        {
            // Arrange
            var товар  = new Товар();
            var строка = new СтрокаЗаказа
            {
                Количество = 4,
                Товар      = товар,
                Заказ      = new Заказ
                {
                    егион = new  егион
                    {
                        Код = "59"
                    }
                }
            };

            бс.DiscountService  = Mock.Of <IDiscountService>();
            бс.WarehouseService = Mock.Of <IWarehouseService>(ws => ws.CanReserveProduct(товар, 4) == true);

            // Act
            бс.OnUpdateСтрокаЗаказа(строка);
        }