public ActionResult Create(Application application)
        {
            if (ViewData.ModelState.IsValid)
            {
                application.LastUpdateTimeStamp = DateTime.Now;
                application.LastUpdateUser = GetCurrentUser().Id;
                ActionConfirmation saveOrUpdateConfirmation =
                    _applicationManagementService.SaveOrUpdate(application);

                if (saveOrUpdateConfirmation.WasSuccessful)
                {
                    TempData[ControllerEnums.GlobalViewDataProperty.PageMessage.ToString()] =
                        saveOrUpdateConfirmation.Message;
                    return RedirectToAction("Index");
                }
            }
            else
            {
                application = null;
            }

            ApplicationFormViewModel viewModel =
                _applicationManagementService.CreateFormViewModelFor(application);
            return View(viewModel);
        }
        public void CanDeleteApplication()
        {
            // Establish Context
            var applicationToDelete = new Application();

            _applicationRepository.Expect(r => r.Get(1))
                .Return(applicationToDelete);

            // Act
            ActionConfirmation confirmation =
                _applicationManagementService.Delete(1);

            // Assert
            confirmation.ShouldNotBeNull();
            confirmation.WasSuccessful.ShouldBeTrue();
            confirmation.Value.ShouldBeNull();
        }
 public ApplicationFormViewModel CreateFormViewModelFor(Application application)
 {
     ApplicationFormViewModel viewModel = new ApplicationFormViewModel();
     application.SetHostIdsFromHost();
     viewModel.Application = application;
     LoadViewModel(viewModel);
     if (application.SupportTeamId != null)
     {
         viewModel.SupportTeam = _supportTeamManagementService.Get(application.SupportTeamId.Value);
         if (viewModel.SupportTeam != null && viewModel.SupportTeam.SupervisorId.HasValue)
             viewModel.SupportTeamSupervisor = _personManagementService.Get(viewModel.SupportTeam.SupervisorId.Value);
         if (viewModel.SupportTeamSupervisor != null && viewModel.SupportTeamSupervisor.SupervisorId.HasValue)
             viewModel.SupportTeamAdmin = _personManagementService.Get(viewModel.SupportTeamSupervisor.SupervisorId.Value);
     }
     if (application.SubjectMatterExpertId != null)
         viewModel.SubjectMatterExpert = _personManagementService.Get(application.SubjectMatterExpertId.Value);
     return viewModel;
 }
        public void CanCreateValidApplicationFromForm()
        {
            // Establish Context
            var applicationFromForm = new Application();

            var testUser = PersonInstanceFactory.CreateValidTransientPerson();
            testUser.SetAssignedIdTo(1);
            _authenticationProvider.Expect(r => r.GetLoggedInUser()).Return("testuser");
            _personManagementService.Expect(r => r.GetByUserName(Arg<string>.Is.Anything)).Return(testUser);

            _applicationManagementService.Expect(r => r.SaveOrUpdate(applicationFromForm))
                .Return(ActionConfirmation.CreateSuccessConfirmation("saved"));

            // Act
            RedirectToRouteResult redirectResult =
                _applicationsController.Create(applicationFromForm)
                    .AssertActionRedirect().ToAction("Index");

            // Assert
            _applicationsController.TempData[ControllerEnums.GlobalViewDataProperty.PageMessage.ToString()].ToString()
                .ShouldEqual("saved");
        }
        public void CanUpdateWithValidApplicationFromForm()
        {
            // Establish Context
            Application validApplicationFromForm =
                ApplicationInstanceFactory.CreateValidTransientApplication();
            var validPerson = PersonInstanceFactory.CreateValidTransientPerson();
            validApplicationFromForm.LastUpdateUser = 1;
            validPerson.RoleId = 2;

            // Intentionally empty to ensure successful transfer of values
            var applicationFromDb = new Application { ApplicationName = "Application Name 1", SupportTeamId = 1 };

            _personManagementService.Expect(r => r.Get(Arg<int>.Is.Anything)).Return(validPerson);

            _applicationRepository.Expect(r => r.Get(Arg<int>.Is.Anything))
                .Return(applicationFromDb);
            _personManagementService.Expect(r => r.Get(Arg<int>.Is.Anything)).Return(validPerson);

            // Act
            ActionConfirmation confirmation =
                _applicationManagementService.UpdateWith(validApplicationFromForm, 1);

            // Assert
            confirmation.ShouldNotBeNull();
            confirmation.WasSuccessful.ShouldBeTrue();
            confirmation.Value.ShouldNotBeNull();
            confirmation.Value.ShouldEqual(applicationFromDb);
            confirmation.Value.ShouldEqual(validApplicationFromForm);
        }
        public void CannotUpdateWithInvalidApplicationFromForm()
        {
            // Establish Context
            var invalidApplicationFromForm = new Application();
            var validPerson = PersonInstanceFactory.CreateValidTransientPerson();
            invalidApplicationFromForm.LastUpdateUser = 1;

            // Intentionally empty to ensure successful transfer of values
            var applicationFromDb = new Application();

            _applicationRepository.Expect(r => r.Get(1))
                .Return(applicationFromDb);
            _personManagementService.Expect(r => r.Get(Arg<int>.Is.Anything)).Return(validPerson);

            // Act
            ActionConfirmation confirmation =
                _applicationManagementService.UpdateWith(invalidApplicationFromForm, 1);

            // Assert
            confirmation.ShouldNotBeNull();
            confirmation.WasSuccessful.ShouldBeFalse();
            confirmation.Value.ShouldBeNull();
        }
        public void CannotSaveOrUpdateInvalidApplication()
        {
            // Establish Context
            var invalidApplication = new Application();

            // Act
            ActionConfirmation confirmation =
                _applicationManagementService.SaveOrUpdate(invalidApplication);

            // Assert
            confirmation.ShouldNotBeNull();
            confirmation.WasSuccessful.ShouldBeFalse();
            confirmation.Value.ShouldBeNull();
        }
        private void TransferFormValuesTo(Application applicationToUpdate, Application applicationFromForm)
        {
            var person = _personManagementService.Get(applicationFromForm.LastUpdateUser.Value);
            switch (person.RoleId)
            {
                case 2:
                    applicationToUpdate.ApplicationName = applicationFromForm.ApplicationName;
                    applicationToUpdate.ApplicationDescription = applicationFromForm.ApplicationDescription;
                    applicationToUpdate.Alias = applicationFromForm.Alias;
                    applicationToUpdate.SupportTeamId = applicationFromForm.SupportTeamId;
                    applicationToUpdate.SubjectMatterExpertId = applicationFromForm.SubjectMatterExpertId;
                    applicationToUpdate.MaintenanceExpirationDate = applicationFromForm.MaintenanceExpirationDate;
                    applicationToUpdate.SupervisorNotes = applicationFromForm.SupervisorNotes;
                    applicationToUpdate.SupportStaffNotes = applicationFromForm.SupportStaffNotes;
                    applicationToUpdate.ServiceDeskNotes = applicationFromForm.ServiceDeskNotes;
                    applicationToUpdate.PrimaryUrl = applicationFromForm.PrimaryUrl;
                    applicationToUpdate.DocumentationUrl = applicationFromForm.DocumentationUrl;
                    applicationToUpdate.SetHostsFromHostId(applicationFromForm.HostIds);
                    break;
                case 3:
                    applicationToUpdate.SupportStaffNotes = applicationFromForm.SupportStaffNotes;
                    break;
                default:
                    applicationToUpdate.ServiceDeskNotes = applicationFromForm.ServiceDeskNotes;
                    break;
            }

            applicationToUpdate.LastUpdateTimeStamp = applicationFromForm.LastUpdateTimeStamp;
            applicationToUpdate.LastUpdateUser = applicationFromForm.LastUpdateUser;
        }
        public ActionConfirmation UpdateWith(Application applicationFromForm, int idOfApplicationToUpdate)
        {
            Application applicationToUpdate =
                _applicationRepository.Get(idOfApplicationToUpdate);
            TransferFormValuesTo(applicationToUpdate, applicationFromForm);

            if (applicationToUpdate.IsValid())
            {
                ActionConfirmation updateConfirmation = ActionConfirmation.CreateSuccessConfirmation(
                    "The application was successfully updated.");
                updateConfirmation.Value = applicationToUpdate;

                return updateConfirmation;
            }
            else
            {
                _applicationRepository.DbContext.RollbackTransaction();

                return ActionConfirmation.CreateFailureConfirmation(
                    "The application could not be saved due to missing or invalid information.");
            }
        }
        public ActionConfirmation SaveOrUpdate(Application application)
        {
            if (application.IsValid())
            {
                application.SetHostsFromHostId(application.HostIds);
                _applicationRepository.SaveOrUpdate(application);

                ActionConfirmation saveOrUpdateConfirmation = ActionConfirmation.CreateSuccessConfirmation(
                    "The application was successfully saved.");
                saveOrUpdateConfirmation.Value = application;

                return saveOrUpdateConfirmation;
            }
            else
            {
                _applicationRepository.DbContext.RollbackTransaction();

                return ActionConfirmation.CreateFailureConfirmation(
                    "The application could not be saved due to missing or invalid information.");
            }
        }
        public void CannotUpdateInvalidApplicationFromForm()
        {
            // Establish Context
            var applicationFromForm = new Application();
            var viewModelToExpect = new ApplicationFormViewModel();

            var testUser = PersonInstanceFactory.CreateValidTransientPerson();
            testUser.SetAssignedIdTo(1);
            _authenticationProvider.Expect(r => r.GetLoggedInUser()).Return("testuser");
            _personManagementService.Expect(r => r.GetByUserName(Arg<string>.Is.Anything)).Return(testUser);

            _applicationManagementService.Expect(r => r.UpdateWith(applicationFromForm, 0))
                .Return(ActionConfirmation.CreateFailureConfirmation("not updated"));
            _applicationManagementService.Expect(r => r.CreateFormViewModelFor(applicationFromForm))
                .Return(viewModelToExpect);

            // Act
            ViewResult result =
                _applicationsController.Edit(applicationFromForm).AssertViewRendered();

            // Assert
            result.ViewData.Model.ShouldNotBeNull();
            (result.ViewData.Model as ApplicationFormViewModel).ShouldNotBeNull();
        }