private Details.PastTrainingParticipant BuildPastParticipant(EnrollmentReadModel readModel, Training subject) { return(new Details.PastTrainingParticipant() { Id = readModel.Id.GetGuid(), FullName = readModel.FullName, Email = readModel.Email, Phone = readModel.PhoneNumber, HasLecturerRights = readModel.HasLecturerRights, IsUnreported = readModel.TrainingResult == null, IsInvited = readModel.SelectedTraining != null, CanRecordTrainingResults = readModel.CanReportTrainingResults && readModel.TrainingResult == null && readModel.SelectedTraining != null && readModel.SelectedTraining.ID == subject.ID, CanRecordTrainingResultsConditionally = readModel.CanReportTrainingResultsConditionally && (readModel.SelectedTraining == null || readModel.SelectedTraining.ID != subject.ID) && readModel.TrainingResult == null, HasResignedPermanently = readModel.HasResignedPermanently, HasResignedTemporarily = readModel.HasResignedTemporarilyAsOf(subject.StartDateTime.ToInstant()), ResignationEndDate = readModel.HasResignedTemporarilyAsOf(subject.StartDateTime.ToInstant()) ? readModel.ResumeDate : null, ChoseAnotherTraining = readModel.SelectedTraining != null && readModel.SelectedTraining.ID != subject.ID, WasAbsent = readModel.TrainingResult == Recruitment.Enrollments.RecordTrainingResults.TrainingResult.Absent, WasPresentAndAcceptedAsLecturer = readModel.TrainingResult == Recruitment.Enrollments.RecordTrainingResults.TrainingResult.PresentAndAcceptedAsLecturer, WasPresentButDidNotAcceptedAsLecturer = readModel.TrainingResult == Recruitment.Enrollments.RecordTrainingResults.TrainingResult.PresentButNotAcceptedAsLecturer, }); }
private Details.CurrentTrainingParticipant BuildCurrentTrainingParticipant(EnrollmentReadModel readModel, Training subject) { return(new Details.CurrentTrainingParticipant() { Id = readModel.Id.GetGuid(), FullName = readModel.FullName, Email = readModel.Email, Phone = readModel.PhoneNumber, HasLecturerRights = readModel.HasLecturerRights, ChoseAnotherTraining = readModel.SelectedTraining?.ID != subject.ID, HasResignedPermanently = readModel.HasResignedPermanently, HasResignedTemporarily = readModel.HasResignedTemporarilyAsOf(_clock.GetCurrentInstant()), ResignationEndDate = readModel.HasResignedTemporarilyAsOf(_clock.GetCurrentInstant()) ? readModel.ResumeDate : null }); }
private Details.FutureTrainingParticipant BuildFutureParticipant(EnrollmentReadModel readModel, Training subject) { return(new Details.FutureTrainingParticipant() { Id = readModel.Id.GetGuid(), FullName = readModel.FullName, Email = readModel.Email, Phone = readModel.PhoneNumber, HasAccepted = readModel.SelectedTraining != null, HasLecturerRights = readModel.HasLecturerRights, HasResignedPermanently = readModel.HasResignedPermanently, HasResignedTemporarily = readModel.HasResignedTemporarilyAsOf(_clock.GetCurrentInstant()), ResignationEndDate = readModel.HasResignedTemporarilyAsOf(_clock.GetCurrentInstant()) ? readModel.ResumeDate : null, CanBeInvited = readModel.SelectedTraining == null && readModel.HasResignedPermanently == false && readModel.HasResignedTemporarilyAsOf(_clock.GetCurrentInstant()) == false, ChoseAnotherTraining = readModel.SelectedTraining != null && readModel.SelectedTraining.ID != subject.ID }); }
public async Task If_candidate_prefers_training__PreferringCandidates_contain_that_candidate() { // Arrange var trainerId = Guid.NewGuid(); var sourceTraining = new Training("Papieska 21/37", "Wadowice", now.Plus(aWeek), now.Plus(aWeek + anHour), trainerId); sourceTraining.GetType().GetProperty(nameof(sourceTraining.ID)).SetValue(sourceTraining, 1); var trainingRepo = Mock.Of <ITrainingRepository>( repo => repo.GetById(1) == Task.FromResult(Maybe <Training> .From(sourceTraining)), MockBehavior.Strict); var trainerProvider = Mock.Of <ITrainerProvider>( provider => provider.GetTrainerDetails(trainerId) == Task.FromResult(Maybe <TrainerDetails> .From( new TrainerDetails() { Guid = trainerId, Name = "Andrzej Strzelba" })), MockBehavior.Strict); var enrollment = new EnrollmentReadModel() { Id = EnrollmentAggregate.EnrollmentId.New, PreferredTrainings = new[] { new EnrollmentReadModel.TrainingSummary() { ID = 1 } } }; var enrollmentRepo = Mock.Of <IEnrollmentRepository>( repo => repo.Query() == new[] { enrollment }.AsQueryable(), MockBehavior.Strict); var handler = new DetailsHandler(clock, trainingRepo, trainerProvider, enrollmentRepo); // Act var result = await handler.Handle(new Details.Query() { TrainingId = 1 }, CancellationToken.None); // Assert Assert.True(result.HasValue); Assert.Equal(TrainingTiming.Future, result.Value.Timing); var futureTraining = Assert.IsType <Details.FutureTrainingDetails>(result.Value); var candidate = Assert.Single(futureTraining.PreferringCandidates); Assert.Equal(enrollment.Id.GetGuid(), candidate.Id); }
public async Task If_user_has_confirmed_email_that_can_be_correlated_to_recruitment_form_from_current_edition_then_factory_creates_ClaimsPrincipal_with_Candidate_claim() { // Arrange var clock = NodaTime.SystemClock.Instance; var enrollmentId = EnrollmentAggregate.EnrollmentId.New; var user = new ApplicationUser() { Email = "*****@*****.**", EmailConfirmed = true }; var userClaimPrincipalFactory = Mock.Of <IUserClaimsPrincipalFactory <ApplicationUser> >(f => f.CreateAsync(It.IsAny <ApplicationUser>()) == Task.FromResult(new ClaimsPrincipal())); var enrollment = new EnrollmentReadModel() { Id = enrollmentId, Email = EmailAddress.Parse("*****@*****.**"), Campaign = new EnrollmentReadModel.CampaignSummary() { Id = 1 } }; var enrollmentRepo = Mock.Of <IEnrollmentRepository>( handler => handler.Query() == new[] { enrollment }.AsQueryable(), MockBehavior.Strict ); var campaign = new Campaign( startDateTime: clock.GetOffsetDateTime().Minus(NodaTime.Duration.FromDays(7)), endDateTime: clock.GetOffsetDateTime().Plus(NodaTime.Duration.FromDays(7)), editionId: 1); var campaignRepo = Mock.Of <ICampaignRepository>(repo => repo.GetById(1) == Task.FromResult(campaign), MockBehavior.Strict); var edition = new EditionDetails() { StartDateTime = clock.GetCurrentInstant().Minus(NodaTime.Duration.FromDays(30)), EndDateTime = clock.GetCurrentInstant().Plus(NodaTime.Duration.FromDays(30)) }; var editionRepo = Mock.Of <IEditionProvider>(provider => provider.GetEdition(1) == Task.FromResult(Maybe <EditionDetails> .From(edition)), MockBehavior.Strict); var principalFactory = new CandidateUserClaimPrincipalFactory(userClaimPrincipalFactory, enrollmentRepo, campaignRepo, editionRepo, clock); // Act var principal = await principalFactory.CreateAsync(user); //Assert var claim = Assert.Single(principal.Claims, claim => claim.Type == SharedKernel.ClaimTypes.Candidate); Assert.Equal(enrollmentId.GetGuid().ToString(), claim.Value); }
public async Task If_candidate_was_invited_to_training__AvailableCandidates_do_not_contain_that_candidate() { // Arrange var trainerId = Guid.NewGuid(); (var campaignRepo, var trainingRepo, var trainerProvider) = BuildMocks(trainerId, 1, 1); var enrollment = new EnrollmentReadModel() { Id = EnrollmentAggregate.EnrollmentId.New, PreferredTrainings = new[] { new EnrollmentReadModel.TrainingSummary() { ID = 1 } }, SelectedTraining = new EnrollmentReadModel.TrainingSummary() { ID = 1 } }; var enrollmentRepo = Mock.Of <IEnrollmentRepository>( repo => repo.Query() == new[] { enrollment }.AsQueryable(), MockBehavior.Strict); var handler = new DetailsHandler(clock, trainingRepo, trainerProvider, enrollmentRepo); // Act var result = await handler.Handle(new Details.Query() { TrainingId = 1 }, CancellationToken.None); // Assert Assert.True(result.HasValue); Assert.Equal(TrainingTiming.Future, result.Value.Timing); var futureTraining = Assert.IsType <Details.FutureTrainingDetails>(result.Value); Assert.Empty(futureTraining.AvailableCandidates); }
public Task Update(EnrollmentReadModel entry) => throw new NotSupportedException();