private Campaign BuildPastCampaign(int id) { var campaign = new Impl.Entities.Campaign(now.Minus(3 * aWeek), now.Minus(2 * aWeek), editionId: 1); campaign.GetType().GetProperty(nameof(campaign.Id)).SetValue(campaign, id); return(campaign); }
private void ConfigureServices(IServiceCollection services) { var campaign = new Impl.Entities.Campaign(CreateOffsetDateTimeDaysInTheFuture(-7), CreateOffsetDateTimeDaysInTheFuture(+7), 1, "kampania testowa"); var training = BuildScheduledTraining(1, CreateOffsetDateTimeDaysInTheFuture(14), CreateOffsetDateTimeDaysInTheFuture(15)); campaign.ScheduleTraining(training); var campaign2 = new Impl.Entities.Campaign(CreateOffsetDateTimeDaysInTheFuture(30), CreateOffsetDateTimeDaysInTheFuture(60), 1, "kampania testowa"); var training2 = BuildScheduledTraining(2, CreateOffsetDateTimeDaysInTheFuture(45), CreateOffsetDateTimeDaysInTheFuture(46)); campaign2.ScheduleTraining(training); campaign.GetType().GetProperty(nameof(campaign.Id)).SetValue(campaign, 1); campaign2.GetType().GetProperty(nameof(campaign2.Id)).SetValue(campaign2, 2); var campaignRepoMock = new Mock <Impl.Repositories.ICampaignRepository>(); campaignRepoMock.Setup(repo => repo.GetById(1)).ReturnsAsync(campaign); campaignRepoMock.Setup(repo => repo.GetById(2)).ReturnsAsync(campaign2); campaignRepoMock.Setup(repo => repo.GetAll()).ReturnsAsync(new[] { campaign, campaign2 }); var trainingRepoMock = new Mock <Impl.Repositories.ITrainingRepository>(); trainingRepoMock .Setup(repo => repo.GetByIds(It.IsAny <IReadOnlyCollection <int> >())) .ReturnsAsync( (IReadOnlyCollection <int> query) => new[] { training, training2 }.Where(y => query.Contains(y.ID)).ToArray() ); services.Remove <Impl.Repositories.ICampaignRepository>(); services.Remove <Impl.Repositories.ITrainingRepository>(); services.AddSingleton <Impl.Repositories.ICampaignRepository>(campaignRepoMock.Object); services.AddSingleton <Impl.Repositories.ITrainingRepository>(sp => trainingRepoMock.Object); }
public async Task When_recruitment_form_is_submitted_repo_contains_its_readmodel() { // Arrange var repo = new EnrollmentRepository(); var campaign = new Impl.Entities.Campaign(now.Minus(aWeek), now.Plus(aWeek), editionId: 1); campaign.GetType().GetProperty(nameof(campaign.Id)).SetValue(campaign, 1); var training = new Impl.Entities.Training("Papieska 21/37", "Wadowice", now.Plus(2 * aWeek), now.Plus(2 * aWeek + anHour), Guid.NewGuid()); training.GetType().GetProperty(nameof(training.ID)).SetValue(training, 1); campaign.ScheduleTraining(training); var campaignRepo = Mock.Of <ICampaignRepository>(mock => mock.GetById(1) == Task.FromResult(campaign), MockBehavior.Strict); var trainingRepo = Mock.Of <ITrainingRepository>(MockBehavior.Strict); var readStoreManager = new ReadStoreManager(repo, campaignRepo, trainingRepo); // Act var @event = new RecruitmentFormSubmitted( now.ToInstant(), "Andrzej", "Strzelba", EmailAddress.Parse("*****@*****.**"), PhoneNumber.Parse("505551888"), "no elo", campaignID: 1, region: "Wolne Miasto Gdańsk", preferredLecturingCities: new[] { "Rumia", "Reda", "Wejherowo" }, preferredTrainingIds: new[] { 1 }, gdprConsentGiven: true); var domainEvent = new DomainEvent <EnrollmentAggregate, EnrollmentAggregate.EnrollmentId, RecruitmentFormSubmitted>(@event, new Metadata(), DateTimeOffset.Now, EnrollmentAggregate.EnrollmentId.New, 1); await readStoreManager.UpdateReadStoresAsync(new[] { domainEvent }, CancellationToken.None); // Assert var enrollment = Assert.Single(repo.Query()); Assert.Equal("Andrzej Strzelba", enrollment.FullName); Assert.Equal(EmailAddress.Parse("*****@*****.**"), enrollment.Email); Assert.Equal(PhoneNumber.Parse("505551888"), enrollment.PhoneNumber); Assert.Equal("no elo", enrollment.AboutMe); Assert.Equal("Wolne Miasto Gdańsk", enrollment.Region); Assert.Equal(1, enrollment.Campaign.Id); Assert.Null(enrollment.ResumeDate); Assert.Collection(enrollment.PreferredLecturingCities, first => Assert.Equal("Rumia", first), second => Assert.Equal("Reda", second), third => Assert.Equal("Wejherowo", third)); var preferredTraining = Assert.Single(enrollment.PreferredTrainings); Assert.Equal("Wadowice", preferredTraining.City); }
public async Task When_training_invitation_is_refused__readmodel_does_not_contain_training_ID() { // Arrange var id = EnrollmentAggregate.EnrollmentId.New; var repo = new EnrollmentRepository(); var campaign = new Impl.Entities.Campaign(now.Minus(3 * aWeek), now.Minus(2 * aWeek), editionId: 1); campaign.GetType().GetProperty(nameof(campaign.Id)).SetValue(campaign, 1); var training = new Impl.Entities.Training("Papieska 21/37", "Wadowice", now.Minus(2 * aWeek + anHour), now.Minus(2 * aWeek), Guid.NewGuid()); training.GetType().GetProperty(nameof(training.ID)).SetValue(training, 1); campaign.ScheduleTraining(training); var campaignRepo = Mock.Of <ICampaignRepository>(mock => mock.GetById(1) == Task.FromResult(campaign), MockBehavior.Strict); var trainingRepo = Mock.Of <ITrainingRepository>(mock => mock.GetById(1) == Task.FromResult(Maybe <Training> .From(training)), MockBehavior.Strict); await repo.Insert(new EnrollmentReadModel() { Id = id, SelectedTraining = new EnrollmentReadModel.TrainingSummary() { ID = 1 } }); var readStoreManager = new ReadStoreManager(repo, campaignRepo, trainingRepo); // Act await readStoreManager.UpdateReadStoresAsync(new[] { new DomainEvent <EnrollmentAggregate, EnrollmentAggregate.EnrollmentId, CandidateRefusedTrainingInvitation>( new CandidateRefusedTrainingInvitation( Guid.NewGuid(), Recruitment.Enrollments.CommunicationChannel.IncomingPhone, string.Empty, string.Empty), new Metadata(), DateTimeOffset.Now, id, 1), }, CancellationToken.None); // Assert var enrollment = Assert.Single(repo.Query()); Assert.Equal(id, enrollment.Id); Assert.Null(enrollment.SelectedTraining); }
public async Task When_queried_with_flag_HasResigned_set_to_false__results_contains_enrollments_with_temporary_resignations_with_past_ResumeDate() { // Arrange var newCampaign = new Impl.Entities.Campaign(now.Minus(aWeek), now.Plus(aWeek), editionId: 1); newCampaign.GetType().GetProperty(nameof(newCampaign.Id)).SetValue(newCampaign, 1); var training = new Impl.Entities.Training("Papieska 21/37", "Wadowice", now.Plus(2 * aWeek), now.Plus(2 * aWeek + anHour), Guid.NewGuid()); training.GetType().GetProperty(nameof(training.ID)).SetValue(training, 1); newCampaign.ScheduleTraining(training); var campaignRepo = Mock.Of <ICampaignRepository>(mock => mock.GetById(1) == Task.FromResult(newCampaign) && mock.GetAll() == Task.FromResult(new[] { newCampaign } as IReadOnlyCollection <Impl.Entities.Campaign>), MockBehavior.Strict); var repo = new EnrollmentRepository(); await repo.Insert(new EnrollmentReadModel() { Id = EnrollmentAggregate.EnrollmentId.New, Campaign = new EnrollmentReadModel.CampaignSummary() { Id = 1 }, PreferredTrainings = Array.Empty <EnrollmentReadModel.TrainingSummary>(), PreferredLecturingCities = Array.Empty <string>(), HasResignedTemporarily = true, ResumeDate = now.Minus(aDay).Date }); var queryHandler = new GetSubmissionsQueryHandler(repo, campaignRepo, clock); // Act var results = await queryHandler.Handle(new Recruitment.Enrollments.GetSubmissions.Query() { HasResigned = false }, CancellationToken.None); // Assert var summary = Assert.Single(results); Assert.False(summary.HasResignedTemporarily); Assert.Null(summary.ResumeDate); }
public async Task When_recruitment_form_from_past_recruitment_campaign_is_submitted__its_summary_has_flag_IsNewSubmission_set_to_true() { // Arrange var oldCampaign = new Impl.Entities.Campaign(now.Minus(Duration.FromDays(30)), now.Minus(Duration.FromDays(25)), editionId: 1); oldCampaign.GetType().GetProperty(nameof(oldCampaign.Id)).SetValue(oldCampaign, 1); var newCampaign = new Impl.Entities.Campaign(now.Minus(aWeek), now.Plus(aWeek), editionId: 1); newCampaign.GetType().GetProperty(nameof(newCampaign.Id)).SetValue(newCampaign, 2); var training = new Impl.Entities.Training("Papieska 21/37", "Wadowice", now.Plus(2 * aWeek), now.Plus(2 * aWeek + anHour), Guid.NewGuid()); training.GetType().GetProperty(nameof(training.ID)).SetValue(training, 1); newCampaign.ScheduleTraining(training); var campaignRepo = Mock.Of <ICampaignRepository>(mock => mock.GetById(1) == Task.FromResult(oldCampaign) && mock.GetById(2) == Task.FromResult(newCampaign) && mock.GetAll() == Task.FromResult(new[] { oldCampaign, newCampaign } as IReadOnlyCollection <Impl.Entities.Campaign>), MockBehavior.Strict); var repo = new EnrollmentRepository(); await repo.Insert(new EnrollmentReadModel() { Id = EnrollmentAggregate.EnrollmentId.New, Campaign = new EnrollmentReadModel.CampaignSummary() { Id = 1 }, PreferredTrainings = Array.Empty <EnrollmentReadModel.TrainingSummary>(), PreferredLecturingCities = Array.Empty <string>() }); var queryHandler = new GetSubmissionsQueryHandler(repo, campaignRepo, clock); // Act var result = await queryHandler.Handle(new Recruitment.Enrollments.GetSubmissions.Query(), CancellationToken.None); // Assert var summary = Assert.Single(result); Assert.True(summary.Campaign.ID == 1); Assert.True(summary.IsOldSubmission); }
public async Task When_temporary_resignation_is_recorded_without_providing_end_date__readmodel_has_no_suspension_end_date() { // Arrange var id = EnrollmentAggregate.EnrollmentId.New; var repo = new EnrollmentRepository(); var campaign = new Impl.Entities.Campaign(now.Minus(3 * aWeek), now.Minus(2 * aWeek), editionId: 1); campaign.GetType().GetProperty(nameof(campaign.Id)).SetValue(campaign, 1); var training = new Impl.Entities.Training("Papieska 21/37", "Wadowice", now.Minus(2 * aWeek + anHour), now.Minus(2 * aWeek), Guid.NewGuid()); training.GetType().GetProperty(nameof(training.ID)).SetValue(training, 1); campaign.ScheduleTraining(training); var campaignRepo = Mock.Of <ICampaignRepository>(mock => mock.GetById(1) == Task.FromResult(campaign), MockBehavior.Strict); var trainingRepo = Mock.Of <ITrainingRepository>(MockBehavior.Strict); await repo.Insert(new EnrollmentReadModel() { Id = id }); var readStoreManager = new ReadStoreManager(repo, campaignRepo, trainingRepo); // Act await readStoreManager.UpdateReadStoresAsync(new[] { new DomainEvent <EnrollmentAggregate, EnrollmentAggregate.EnrollmentId, CandidateResignedTemporarily>( new CandidateResignedTemporarily( Guid.NewGuid(), Recruitment.Enrollments.CommunicationChannel.IncomingPhone, string.Empty, string.Empty, resumeDate: null), new Metadata(), DateTimeOffset.Now, id, 1), }, CancellationToken.None); // Assert var enrollment = Assert.Single(repo.Query()); Assert.Equal(id, enrollment.Id); Assert.True(enrollment.HasResignedTemporarily); Assert.Null(enrollment.ResumeDate); }
public async Task When_candidate_obtains_lecturer_rights_Readmodel_has_flag_HasLecturerRigths_set_to_true() { // Arrange var id = EnrollmentAggregate.EnrollmentId.New; var repo = new EnrollmentRepository(); var campaign = new Impl.Entities.Campaign(now.Minus(3 * aWeek), now.Minus(2 * aWeek), editionId: 1); campaign.GetType().GetProperty(nameof(campaign.Id)).SetValue(campaign, 1); var training = new Impl.Entities.Training("Papieska 21/37", "Wadowice", now.Minus(2 * aWeek + anHour), now.Minus(2 * aWeek), Guid.NewGuid()); training.GetType().GetProperty(nameof(training.ID)).SetValue(training, 1); campaign.ScheduleTraining(training); var campaignRepo = Mock.Of <ICampaignRepository>(mock => mock.GetById(1) == Task.FromResult(campaign), MockBehavior.Strict); var trainingRepo = Mock.Of <ITrainingRepository>(MockBehavior.Strict); await repo.Insert(new EnrollmentReadModel() { Id = id }); var readStoreManager = new ReadStoreManager(repo, campaignRepo, trainingRepo); // Act await readStoreManager.UpdateReadStoresAsync(new[] { new DomainEvent <EnrollmentAggregate, EnrollmentAggregate.EnrollmentId, CandidateObtainedLecturerRights>( new CandidateObtainedLecturerRights(Guid.NewGuid(), "zdobył uprawnienia"), new Metadata(), DateTimeOffset.Now, id, 1), }, CancellationToken.None); // Assert var enrollment = Assert.Single(repo.Query()); Assert.Equal(id, enrollment.Id); Assert.True(enrollment.HasLecturerRights); }
private void ConfigureServices(IServiceCollection services) { var trainerProvider = new MockTrainerProvider(new[] { new TrainerDetails() { Guid = trainerID, Name = "Jan Paweł II" } }); var campaign = new Impl.Entities.Campaign(CreateOffsetDateTime(-7), CreateOffsetDateTime(+7), 1, "kampania testowa"); campaign.GetType().GetProperty(nameof(campaign.Id)).SetValue(campaign, 1); var training = new Impl.Entities.Training( address: "Papieska 21/37", city: "Wadowice", startDateTime: CreateOffsetDateTime(14), endDateTime: CreateOffsetDateTime(15), coordinatorId: trainerID); training.GetType().GetProperty(nameof(training.ID)).SetValue(training, 1); campaign.ScheduleTraining(training); var training2 = new Impl.Entities.Training( address: "Papieska 21/37", city: "Wadowice", startDateTime: CreateOffsetDateTime(45), endDateTime: CreateOffsetDateTime(46), coordinatorId: trainerID); training2.GetType().GetProperty(nameof(training.ID)).SetValue(training2, 2); campaign.ScheduleTraining(training2); var campaignRepoMock = new Mock <Impl.Repositories.ICampaignRepository>(); campaignRepoMock.Setup(repo => repo.GetById(1)).ReturnsAsync(campaign); campaignRepoMock.Setup(repo => repo.GetAll()).ReturnsAsync(new[] { campaign }); var trainingRepoMock = new Mock <Impl.Repositories.ITrainingRepository>(); trainingRepoMock .Setup(repo => repo.GetByIds(It.IsAny <IReadOnlyCollection <int> >())) .ReturnsAsync( (IReadOnlyCollection <int> query) => new[] { training, training2 }.Where(y => query.Contains(y.ID)).ToArray() ); var userAccessor = Mock.Of <IUserAccessor>(ua => ua.GetUser() == Task.FromResult(new ApplicationUser() { })); var authService = Mock.Of <IAuthorizationService>(service => service.AuthorizeAsync(It.IsAny <System.Security.Claims.ClaimsPrincipal>(), It.IsAny <object>(), It.IsAny <IEnumerable <IAuthorizationRequirement> >()) == Task.FromResult(AuthorizationResult.Success())); var userStore = Mock.Of <IUserStore <ApplicationUser> >( um => um.FindByIdAsync(It.IsAny <string>(), It.IsAny <CancellationToken>()) == Task.FromResult(new ApplicationUser()), MockBehavior.Strict); services.Remove <Impl.Repositories.ICampaignRepository>(); services.Remove <Impl.Repositories.ITrainingRepository>(); services.Remove <ITrainerProvider>(); services.AddSingleton <Impl.Repositories.ICampaignRepository>(campaignRepoMock.Object); services.AddSingleton <Impl.Repositories.ITrainingRepository>(sp => trainingRepoMock.Object); services.AddSingleton <ITrainerProvider>(trainerProvider); services.AddSingleton(userAccessor); services.AddSingleton(authService); services.AddSingleton(new UserManager <ApplicationUser>(userStore, null, null, null, null, null, null, null, null)); }