public void PatchWithVacancyDetail_VacancyNotFound()
        {
            var candidateId      = Guid.NewGuid();
            var candidateService = new Mock <ICandidateService>();
            var apprenticeshipVacancyProvider = new Mock <IApprenticeshipVacancyProvider>();

            apprenticeshipVacancyProvider.Setup(p => p.GetVacancyDetailViewModel(candidateId, ValidVacancyId)).Returns((ApprenticeshipVacancyDetailViewModel)null);
            candidateService.Setup(cs => cs.GetApplication(candidateId, ValidVacancyId)).Returns(new ApprenticeshipApplicationDetail());

            var viewModel = new ApprenticeshipApplicationProviderBuilder()
                            .With(candidateService).With(apprenticeshipVacancyProvider).Build()
                            .GetApplicationViewModel(candidateId, ValidVacancyId);

            viewModel.Should().NotBeNull();
            viewModel.Status.Should().Be(ApplicationStatuses.ExpiredOrWithdrawn);
            viewModel.ViewModelMessage.Should().Be(MyApplicationsPageMessages.ApprenticeshipNoLongerAvailable);
            viewModel.HasError().Should().BeTrue();
        }
        public void Ok()
        {
            var candidateId      = Guid.NewGuid();
            var candidateService = new Mock <ICandidateService>();
            var apprenticeshipVacancyProvider = new Mock <IApprenticeshipVacancyProvider>();

            apprenticeshipVacancyProvider.Setup(p => p.GetVacancyDetailViewModel(candidateId, ValidVacancyId)).Returns(new ApprenticeshipVacancyDetailViewModel());
            candidateService.Setup(cs => cs.CreateApplication(candidateId, ValidVacancyId)).Returns(new ApprenticeshipApplicationDetail());
            candidateService.Setup(cs => cs.GetApprenticeshipApplications(candidateId, It.IsAny <bool>())).Returns(new ApprenticeshipApplicationSummary[0]);
            var viewModel = new ApprenticeshipApplicationProviderBuilder()
                            .With(candidateService).With(apprenticeshipVacancyProvider).Build()
                            .CreateApplicationViewModel(candidateId, ValidVacancyId);

            viewModel.Should().NotBeNull();
            viewModel.Status.Should().Be(ApplicationStatuses.Unknown);
            viewModel.ViewModelMessage.Should().BeNullOrEmpty();
            viewModel.HasError().Should().BeFalse();
        }
        public void CreateApplicationReturnsVacancyStatusesLive()
        {
            var candidateId      = Guid.NewGuid();
            var candidateService = new Mock <ICandidateService>();
            var apprenticeshipVacancyDetailProvider = new Mock <IApprenticeshipVacancyDetailProvider>();

            candidateService.Setup(cs => cs.CreateApplication(candidateId, ValidVacancyId)).Returns(new ApprenticeshipApplicationDetail {
                VacancyStatus = VacancyStatuses.Live
            });
            apprenticeshipVacancyDetailProvider.Setup(p => p.GetVacancyDetailViewModel(candidateId, ValidVacancyId)).Returns(new VacancyDetailViewModel {
                VacancyStatus = VacancyStatuses.Live
            });
            var viewModel = new ApprenticeshipApplicationProviderBuilder()
                            .With(candidateService).With(apprenticeshipVacancyDetailProvider).Build()
                            .GetOrCreateApplicationViewModel(candidateId, ValidVacancyId);

            viewModel.Should().NotBeNull();
            viewModel.Status.Should().Be(ApplicationStatuses.Unknown);
            viewModel.ViewModelMessage.Should().BeNullOrEmpty();
            viewModel.HasError().Should().BeFalse();
        }
        public void CreateApplicationReturnsVacancyStatusesUnavailable()
        {
            var candidateId      = Guid.NewGuid();
            var candidateService = new Mock <ICandidateService>();
            var apprenticeshipVacancyProvider = new Mock <IApprenticeshipVacancyProvider>();

            candidateService.Setup(cs => cs.CreateApplication(candidateId, ValidVacancyId)).Returns(new ApprenticeshipApplicationDetail {
                VacancyStatus = VacancyStatuses.Unavailable
            });
            candidateService.Setup(cs => cs.GetApprenticeshipApplications(candidateId, It.IsAny <bool>())).Returns(new ApprenticeshipApplicationSummary[0]);
            apprenticeshipVacancyProvider.Setup(p => p.GetVacancyDetailViewModel(candidateId, ValidVacancyId)).Returns(new ApprenticeshipVacancyDetailViewModel {
                VacancyStatus = VacancyStatuses.Unavailable
            });

            var viewModel = new ApprenticeshipApplicationProviderBuilder()
                            .With(candidateService).With(apprenticeshipVacancyProvider).Build()
                            .CreateApplicationViewModel(candidateId, ValidVacancyId);

            viewModel.Should().NotBeNull();
            viewModel.Status.Should().Be(ApplicationStatuses.ExpiredOrWithdrawn);
            viewModel.ViewModelMessage.Should().Be(MyApplicationsPageMessages.ApprenticeshipNoLongerAvailable);
            viewModel.HasError().Should().BeTrue();
        }