public void Create_ValidCommand_Each_Customer_Should_Be_Assigned_An_Id()
        {
            //Arrange
            List <CustomerCreateCommand> customerCreateCommandList =
                new List <CustomerCreateCommand>()
            {
                new CustomerCreateCommand()
                {
                    FirstName = "Mohamed",
                    LastName  = "Ahmed"
                },
                new CustomerCreateCommand()
                {
                    FirstName = "Adel",
                    LastName  = "Mostafa"
                },
                new CustomerCreateCommand()
                {
                    FirstName = "Ahmed",
                    LastName  = "Kamal"
                }
            };

            var mockRepository = new Mock <ICustomerRepository>();
            var mockIdFactory  = new Mock <IIdFactory>();

            var i = 1;

            mockRepository.Setup(x => x.Save(It.IsAny <Customer>()));
            mockIdFactory.Setup(x => x.Create())
            .Returns(() => i)
            .Callback(() => i++);

            CustomerService_5 customerService = new CustomerService_5(
                mockRepository.Object,
                mockIdFactory.Object
                );

            //Act
            customerService.Create(customerCreateCommandList);

            //Assert
            mockRepository.Verify(x => x.Save(It.IsAny <Customer>()), Times.Exactly(customerCreateCommandList.Count));
            mockIdFactory.Verify(x => x.Create(), Times.Exactly(customerCreateCommandList.Count));
        }
        public void Create_ValidCommand_Each_Customer_Should_Be_Assigned_An_Id()
        {
            //Arrange
               List<CustomerCreateCommand> customerCreateCommandList =
                new List<CustomerCreateCommand>()
                {
                    new CustomerCreateCommand()
                        {
                            FirstName = "Mohamed",
                            LastName = "Ahmed"
                        },
                        new CustomerCreateCommand()
                        {
                            FirstName = "Adel",
                            LastName = "Mostafa"
                        },
                        new CustomerCreateCommand()
                        {
                            FirstName = "Ahmed",
                            LastName = "Kamal"
                        }
                };

            var mockRepository = new Mock<ICustomerRepository>();
            var mockIdFactory = new Mock<IIdFactory>();

            var i = 1;
            mockRepository.Setup(x => x.Save(It.IsAny<Customer>()));
            mockIdFactory.Setup(x => x.Create())
                .Returns(() => i)
                .Callback(() => i++);

            CustomerService_5 customerService = new CustomerService_5(
                mockRepository.Object,
                mockIdFactory.Object
                );

            //Act
            customerService.Create(customerCreateCommandList);

            //Assert
            mockRepository.Verify(x => x.Save(It.IsAny<Customer>()),Times.Exactly(customerCreateCommandList.Count));
            mockIdFactory.Verify(x => x.Create(), Times.Exactly(customerCreateCommandList.Count));
        }