Example #1
0
 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,
     });
 }
Example #2
0
 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
     });
 }
Example #3
0
 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();