public void Edit_Post_Saves_A_Valid_Customer_And_Redirects_To_Details_Of_The_Customer()
        {
           /*
           *   Arrange 
           * 1º - Create a dummy list of customers
           * 2º - Initialize stub of SICustomerManagementService
           * 3º - Create controller to test
           */

            Customer customer = new Customer() { CustomerCode = "A0001" };
            IList<Customer> customers = new List<Customer>();
            
            bool changeCustomerWasCalled = false;
            
            SICustomerManagementService customerService = new SICustomerManagementService();
            customerService.ChangeCustomerCustomer = x => changeCustomerWasCalled = true;
            
            CustomerController controller = new CustomerController(customerService);

            //Act
            RedirectToRouteResult result = controller.Edit(customer) as RedirectToRouteResult;

            //Assert
            Assert.IsNotNull(result);
            Assert.IsTrue(changeCustomerWasCalled);
            Assert.AreEqual("Details", result.RouteValues["action"]);

            //Asp.Net MVC convention to say "Same Controller"
            Assert.IsNull(result.RouteValues["controller"]);
            Assert.AreEqual("A0001", result.RouteValues["customerCode"]);
        }
        public void Edit_Post_Returns_Edit_View_With_An_Invalid_Customer()
        {
           /*
           *   Arrange 
           * 1º - Create a dummy list of customers
           * 2º - Initialize stub of SICustomerManagementService
           * 3º - Create controller to test
           */

            Customer customer = new Customer() { CustomerCode = "A0001" };
            SICustomerManagementService customerService = new SICustomerManagementService();
            
            CustomerController controller = new CustomerController(customerService);
            
            ModelState state = new ModelState();
            state.Value = new ValueProviderResult("A0001", "A0001", CultureInfo.CurrentCulture);
            state.Errors.Add("Invalid Customer Code");
            controller.ModelState.Add("CustomerCode", state);

            //Act
            ViewResult result = controller.Edit(customer) as ViewResult;

            //Assert
            Assert.IsNotNull(result);
            Assert.AreEqual("A0001", result.ViewData.ModelState["CustomerCode"].Value.AttemptedValue);
            Assert.AreEqual("", result.ViewName);
        }
        public void Edit_Get_Returns_The_Correct_Customer_To_Edit()
        {
           /*
           *   Arrange 
           * 1º - Create a dummy list of customers
           * 2º - Initialize stub of SICustomerManagementService
           * 3º - Create controller to test
           */

            Customer customer = new Customer() { CustomerCode = "A0001" };
            IList<Customer> customers = new List<Customer>();
            
            SICustomerManagementService customerService = new SICustomerManagementService();
            customerService.FindCustomerByCodeString = x => customer;

            CustomerController controller = new CustomerController(customerService);

            //Act
            ViewResult result = controller.Edit("A0001") as ViewResult;

            //Assert
            Assert.IsNotNull(result);

            Customer model = result.ViewData.Model as Customer;
            Assert.IsNotNull(model);

            Assert.AreSame(customer, model);

            Assert.AreEqual("", result.ViewName);

        }