public MutatingOrderBuilder WithOrderLine(Product product, int orderedQuantity, int? storedQuantity = null)
 {
     return WithOrderLine(new OrderLine
     {
         Product = product,
         Quantity = orderedQuantity
     }, storedQuantity);
 }
 public IOrderWithShopPart WithOrderLine(Product product, int orderedQuantity, int? storedQuantity = null)
 {
     return WithOrderLine(new OrderLine
     {
         Product = product,
         Quantity = orderedQuantity
     }, storedQuantity);
 }
        public void OrdersService_PayOrder_WithInitiatedOrderUsingStandardMethod_StatusChangedToPaid()
        {
            //ARRANGE
            var clientsRepository = new ClientsRepositoryInMemory();
            var ordersRepository = new OrderRepositoryInMemory();
            var storageItemsRepository = new StorageItemsRepositoryInMemory();
            var mailService = new MailService();

            var address = new Address
            {
                AddressLine = "RandomStreet 1",
                City = "RandomCity",
                PostalCode = "RandomPostalCode",
                IsDefault = true
            };

            var email = new Email
            {
                EmailString = "*****@*****.**",
                IsDefault = true
            };

            var client = new Client
            {
                Addresses = new List<Address>{ address },
                Balance = 100,
                Emails = new List<Email>{ email },
                FirstName = "RandomFirstName",
                Id = 1,
                LastName = "RandomLastName",
                MiddleName = "RandomMiddleName"
            };

            var shopAddress = new Address
            {
                AddressLine = "RandomStreet 1",
                City = "RandomCity",
                PostalCode = "RandomPostalCode",
                IsDefault = true
            };

            var shop = new Shop
            {
                CompanyNumber = "00001",
                Address = shopAddress,
                Title = "RandomTitle"
            };

            var product = new Product
            {
                Id = 1,
                Price = 10,
                Title = "RandomTitle1",
            };

            var storageItem = new StorageItem
            {
                Id = 1,
                Product = product,
                Quantity = 2
            };

            var orderLine = new OrderLine
            {
                Product = product,
                Quantity = 2
            };

            var order = new Order
            {
                Status = OrderStatus.Initiated,
                CreationDate = DateTime.Now,
                FinishDate = null,
                Id = 1,
                Initiator = client,
                Notes = string.Empty,
                Shop = shop,
                OrderLines = new List<OrderLine> {orderLine}
            };

            ordersRepository.Orders = new List<Order> {order};
            clientsRepository.Clients = new List<Client> {client};
            storageItemsRepository.StorageItems = new List<StorageItem> {storageItem};

            //ACT
            var ordersService = new OrdersService(ordersRepository, storageItemsRepository, clientsRepository, mailService);
            ordersService.PayOrder(order.Id, client.Id);

            //ASSERT
            order = ordersRepository.Orders.First(p => p.Id == order.Id);
            client = clientsRepository.Clients.First(p => p.Id == client.Id);

            Assert.That(order.Status, Is.EqualTo(OrderStatus.Paid));
            Assert.That(client.Balance, Is.EqualTo(80m));
        }