public void Given_valid_viewmodel_post_When_create_employee_Then_should_call_the_correct_methods()
        {
            // Given
            var controller = CreateEmployeeController();
            var employeeViewModel = EmployeeViewModelBuilder
                                    .Create()
                                    .WithEmployeeReference("Tester")
                                    .WithTitle("Mr")
                                    .WithForename("Barry")
                                    .WithSurname("Scott")
                                    .WithNationalityId(1)
                                    .WithSex("Male")
                                    .Build();


            var response = new AddEmployeeResponse{Success = true};

            _employeeService
                    .Setup(x => x.Add(It.IsAny<AddEmployeeRequest>()))
                    .Returns(response);

            // When
            controller.Create(employeeViewModel);

            // Then
            _employeeService.Verify(x => x.Add(MatchesEmployeeViewModelProperties(employeeViewModel)));
            

        }
        public void Given_valid_viewmodel_post_When_create_employee_Then_should_return_correct_result()
        {
            // Given
            var controller = CreateEmployeeController();
            var request = EmployeeViewModelBuilder
                                    .Create()
                                    .Build();

            var response = new AddEmployeeResponse()
                               {
                                   EmployeeId = Guid.NewGuid(), Success = true
                               };

            _employeeService.Setup(x => x.Add(It.IsAny<AddEmployeeRequest>())).Returns(response);

            // When
            var result = controller.Create(request) as RedirectToRouteResult;

            // Then
            Assert.That(result.RouteValues["action"], Is.EqualTo("Index"));
            Assert.That(result.RouteValues["controller"], Is.EqualTo("Employee"));
            Assert.That(result.RouteValues["employeeId"], Is.EqualTo(response.EmployeeId));
        }
        public void Given_Valid_employee_details_When_Create_is_called_Then_EmployeeService_CreateUser_is_Called()
        {
            // Given
            var controller = CreateEmployeeController();

            Guid employeeId = Guid.NewGuid();
            Guid userRoleId = Guid.NewGuid();
            long userSiteId = 1234;

            var request = EmployeeViewModelBuilder
                                    .Create()
                                    .WithEmployeeId(employeeId)
                                    .WithTitle("Mr")
                                    .WithForename("Fred")
                                    .WithSurname("Flintstone") 
                                    .WithSex("Male")                                  
                                    .WithUserRoleId(userRoleId)
                                    .WithUserSiteId(userSiteId)
                                    .Build();

            var  employeeDto = new EmployeeDto
            {
                Id = employeeId,
                MainContactDetails = new EmployeeContactDetailDto
                {
                    Email = "*****@*****.**",
                    Telephone2 = "333444555"
                }
            };

            _employeeService
                .Setup(x => x.GetEmployee(It.IsAny<Guid>(), It.IsAny<long>()))
                .Returns(employeeDto);
                        

            var response = new AddEmployeeResponse()
            {
                EmployeeId = Guid.NewGuid(),
                Success = true
            };

            _employeeService
                .Setup(x => x.Add(It.IsAny<AddEmployeeRequest>()))
                .Returns(response);

            // When
            ActionResult result = controller.Update(request);

            // Then
            _employeeService.Verify( x => x.CreateUser( It.Is<CreateEmployeeAsUserRequest>(
                    y =>    y.RoleId == userRoleId
                        &&  y.SiteId == userSiteId
                        &&  y.EmployeeId == employeeId
                )));             
        }