public void Add_ShouldOccurException_WhenCollectionOfToppingsIsEmpty()
        {
            var order = new Order
            {
                OrdersPizzas = new List<OrdersPizzas>()
            };

            Assert.Throws<ArgumentException>(() => _sut.Add(order));
        }
        public void Add_ShouldPersistPizzaInRepository()
        {
            var order = new Order()
            {
                OrdersPizzas = new List<OrdersPizzas>
                {
                    new OrdersPizzas()
                }
            };

            _sut.Add(order);

            A.CallTo(() => _orderRepository.Persist(A<Order>._))
                .MustHaveHappened();
        }
        public async void GetOrder_ShouldReturnStatusCodeOk_WhenTheOrderWasFound()
        {
            var order = new Order
            {
                Id = 1,
                Address = "Poznań",
                Price = 10.2M,
                Status = "InProgress"
            };

            A.CallTo(() => _orderService.Get(A<int>._)).Returns(order);

            var result = _sut.GetOrder(int.MaxValue);

            var response = await result.ExecuteAsync(CancellationToken.None);
            Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
        }
        public Order Add(Order order)
        {
            if (order.OrdersPizzas == null || !order.OrdersPizzas.Any())
            {
                throw new ArgumentException("The order has to contain pizzas.");
            }

            order.Status = OrderStatuses.Created.ToString();
            order.CreationDate = DateTimeOffset.Now;

            var orderDb = _orderRepository.Persist(order);
            if (orderDb != null && orderDb.Id.HasValue)
            {
                return _orderRepository.GetById(orderDb.Id.Value);
            }

            return null;
        }
        public void Add_ShouldReturnNotNullAndCallGet_WhenPersistReturnedNotNull()
        {
            var order = new Order()
            {
                Id = 1,
                OrdersPizzas = new List<OrdersPizzas>
                {
                    new OrdersPizzas()
                }
            };
            A.CallTo(() => _orderRepository.Persist(A<Order>._))
                .Returns(order);

            var result = _sut.Add(order);

            A.CallTo(() => _orderRepository.Persist(A<Order>._))
                .MustHaveHappened();
            Assert.That(result, Is.Not.Null);
            A.CallTo(() => _orderRepository.GetById(A<int>._))
                .MustHaveHappened();
        }
        public async void PutOrder_ShouldReturnStatusCodeOk_WhenOrderWasUpdate()
        {
                var order = new Order
            {
                Id = 1,
                Address = "Poznań",
                Price = 10.2M,
                Status = "Created"
            };

            var orderModel = new OrderModel
            {
                Id = 1,
                Address = "Poznań",
                Price = 10.2M,
                Status = "InProgress"
            };
        
            A.CallTo(() => _orderService.Update(int.MaxValue, "InProgress")).Returns(order);

            var result = _sut.UpdateOrder(int.MaxValue, orderModel);

            var response = await result.ExecuteAsync(CancellationToken.None);
            Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
        }
        public void Add_ShouldReturnNull_WhenPersistReturnedNull()
        {
            var order = new Order()
            {
                OrdersPizzas = new List<OrdersPizzas>
                {
                    new OrdersPizzas()
                }
            };

            A.CallTo(() => _orderRepository.Persist(A<Order>._))
                .Returns(null);

            var result = _sut.Add(order);

            A.CallTo(() => _orderRepository.Persist(A<Order>._))
                .MustHaveHappened();
            Assert.That(result, Is.Null);
        }
        public void Add_ShouldOccurException_WhenCollectionOfToppingsIsNull()
        {
            var order = new Order();

            Assert.Throws<ArgumentException>(() => _sut.Add(order));
        }