public async Task Command_must_specify_at_least_one_training() { var sp = new ServiceProviderBuilder().BuildServiceProvider(ConfigureServices); using (var scope = sp.CreateScope()) { var engine = scope.ServiceProvider.GetRequiredService <ISzlemEngine>(); var command = new SubmitRecruitmentForm.Command() { FirstName = "Andrzej", LastName = "Strzelba", Email = EmailAddress.Parse("*****@*****.**"), PhoneNumber = Consts.FakePhoneNumber, AboutMe = "ala ma kota", Region = "Wolne Miasto Gdańsk", PreferredLecturingCities = new[] { "Wolne Miasto Gdańsk" }, PreferredTrainingIds = Array.Empty <int>(), GdprConsentGiven = true }; var result = await engine.Execute(command); Assert.True(result.IsFailure); var error = Assert.IsType <Error.ValidationFailed>(result.Error); AssertHelpers.SingleError(nameof(command.PreferredTrainingIds), SubmitRecruitmentForm_ErrorMessages.PreferredTrainingsMustBeSpecified, error.Failures); } }
public async Task Valid_command_emits_single_EmailSent_event_when_EmailService_sends_email() { var sp = new ServiceProviderBuilder().BuildServiceProvider(ConfigureServices); using (var scope = sp.CreateScope()) { var engine = scope.ServiceProvider.GetRequiredService <ISzlemEngine>(); var command = new SubmitRecruitmentForm.Command() { FirstName = "Andrzej", LastName = "Strzelba", Email = EmailAddress.Parse("*****@*****.**"), PhoneNumber = Consts.FakePhoneNumber, AboutMe = "ala ma kota", Region = "Wolne Miasto Gdańsk", PreferredLecturingCities = new[] { "Wadowice" }, PreferredTrainingIds = new[] { 1 }, GdprConsentGiven = true }; var result = await engine.Execute(command); Assert.True(result.IsSuccess); var eventStore = scope.ServiceProvider.GetRequiredService <EventFlow.EventStores.IEventStore>(); var events = await eventStore.LoadAllEventsAsync(EventFlow.EventStores.GlobalPosition.Start, 2, System.Threading.CancellationToken.None); var domainEvent = Assert.Single(events.DomainEvents, ev => ev.EventType == typeof(EmailSent)); var ev = Assert.IsType <EmailSent>(domainEvent.GetAggregateEvent()); Assert.Equal(SubmitRecruitmentFormHandler.MessageTitle, ev.Subject); } }
public async Task Command_MustContain_SubmissionDate_FirstName_LastName_EmailAddress_PhoneNumber_AboutMe() { var sp = new ServiceProviderBuilder().BuildServiceProvider(ConfigureServices); using (var scope = sp.CreateScope()) { var engine = scope.ServiceProvider.GetRequiredService <ISzlemEngine>(); var command = new SubmitRecruitmentForm.Command() { PreferredTrainingIds = new[] { 1 }, GdprConsentGiven = true }; var result = await engine.Execute(command); Assert.True(result.IsFailure); var error = Assert.IsType <Error.ValidationFailed>(result.Error); Assert.Collection(error.Failures, error => AssertHelpers.SingleError(nameof(command.FirstName), SubmitRecruitmentForm_ErrorMessages.FirstNameIsRequired, error), error => AssertHelpers.SingleError(nameof(command.LastName), SubmitRecruitmentForm_ErrorMessages.LastNameIsRequired, error), error => AssertHelpers.SingleError(nameof(command.Email), SubmitRecruitmentForm_ErrorMessages.EmailIsRequired, error), error => AssertHelpers.SingleError(nameof(command.PhoneNumber), SubmitRecruitmentForm_ErrorMessages.PhoneNumberIsRequired, error), error => AssertHelpers.SingleError(nameof(command.AboutMe), SubmitRecruitmentForm_ErrorMessages.AboutMeIsRequired, error), error => AssertHelpers.SingleError(nameof(command.Region), SubmitRecruitmentForm_ErrorMessages.RegionIsRequired, error), error => AssertHelpers.SingleError(nameof(command.PreferredLecturingCities), SubmitRecruitmentForm_ErrorMessages.PreferredLecturingCities_must_be_specified, error) ); } }
public async Task Trainings_happening_at_the_moment_of_query_have_Timing_flag_set_to_HappeningNow() { var clock = NodaTime.Testing.FakeClock.FromUtc(2019, 08, 01); var sp = new ServiceProviderBuilder().BuildServiceProvider(services => { ConfigureServices(services); services.Remove <NodaTime.IClock>(); services.AddSingleton <NodaTime.IClock>(clock); }); using (var scope = sp.CreateScope()) { var dbSessionProvider = scope.ServiceProvider.GetRequiredService <DbSessionProvider>(); var campaign = new Campaign( startDateTime: new NodaTime.LocalDateTime(2019, 09, 01, 12, 00).InMainTimezone().ToOffsetDateTime(), endDateTime: new NodaTime.LocalDateTime(2019, 09, 30, 12, 00).InMainTimezone().ToOffsetDateTime(), editionId: 1, name: "campaign"); campaign.ScheduleTraining(new Training( "Papieska 1", "Wadowice", new NodaTime.LocalDateTime(2019, 10, 01, 12, 00).InMainTimezone().ToOffsetDateTime(), new NodaTime.LocalDateTime(2019, 10, 01, 16, 00).InMainTimezone().ToOffsetDateTime(), trainerID)); campaign.ScheduleTraining(new Training( "Papieska 2", "Sosnowiec", new NodaTime.LocalDateTime(2019, 11, 01, 12, 00).InMainTimezone().ToOffsetDateTime(), new NodaTime.LocalDateTime(2019, 11, 01, 16, 00).InMainTimezone().ToOffsetDateTime(), trainerID)); var session = dbSessionProvider.CreateSession(); await session.SaveAsync(campaign); Assert.Equal(1, campaign.Id); } clock.Reset(NodaTime.Instant.FromDateTimeUtc(new DateTime(2019, 10, 01, 14, 00, 00, DateTimeKind.Utc))); using (var scope = sp.CreateScope()) { var mediator = scope.ServiceProvider.GetRequiredService <IMediator>(); var results = await mediator.Send(new Recruitment.Trainings.Index.Query()); var singleResult = Assert.Single(results, x => x.Timing == Recruitment.Trainings.TrainingTiming.Future); Assert.Equal("Sosnowiec", singleResult.City); } }
public async Task After_executing_command_enrollments_contain_that_submission() { var sp = new ServiceProviderBuilder().BuildServiceProvider(ConfigureServices); using (var scope = sp.CreateScope()) { var engine = scope.ServiceProvider.GetRequiredService <ISzlemEngine>(); var command = new SubmitRecruitmentForm.Command() { FirstName = "Andrzej", LastName = "Strzelba", Email = EmailAddress.Parse("*****@*****.**"), PhoneNumber = Consts.FakePhoneNumber, AboutMe = "ala ma kota", Region = "Wolne Miasto Gdańsk", PreferredLecturingCities = new[] { "Wadowice" }, PreferredTrainingIds = new[] { 1 }, GdprConsentGiven = true }; var result = await engine.Execute(command); Assert.True(result.IsSuccess); } using (var scope = sp.CreateScope()) { var engine = scope.ServiceProvider.GetRequiredService <ISzlemEngine>(); var results = await engine.Query(new GetSubmissions.Query()); var readModel = Assert.Single(results); var id = EnrollmentAggregate.EnrollmentId.With(readModel.Id); Assert.Equal("Andrzej", readModel.FirstName); Assert.Equal("Strzelba", readModel.LastName); Assert.Equal(EmailAddress.Parse("*****@*****.**"), readModel.Email); Assert.Equal(Consts.FakePhoneNumber, readModel.PhoneNumber); Assert.Equal("ala ma kota", readModel.AboutMe); Assert.Equal(1, readModel.Campaign.ID); Assert.Equal("Wolne Miasto Gdańsk", readModel.Region); var preferredTraining = Assert.Single(readModel.PreferredTrainings); Assert.Equal(1, preferredTraining.ID); Assert.Single(readModel.PreferredLecturingCities, "Wadowice"); } }
public async Task Query_with_specified_coordinator_returns_trainings_conducted_by_that_coordinator() { var sp = new ServiceProviderBuilder().BuildServiceProvider(ConfigureServices); using (var scope = sp.CreateScope()) { var dbSessionProvider = scope.ServiceProvider.GetRequiredService <DbSessionProvider>(); var campaign = new Campaign( startDateTime: new NodaTime.LocalDateTime(2019, 09, 01, 12, 00).InMainTimezone().ToOffsetDateTime(), endDateTime: new NodaTime.LocalDateTime(2019, 09, 30, 12, 00).InMainTimezone().ToOffsetDateTime(), editionId: 1, name: "campaign"); campaign.ScheduleTraining(new Training( "Papieska 1", "Wadowice", new NodaTime.LocalDateTime(2019, 10, 01, 12, 00).InMainTimezone().ToOffsetDateTime(), new NodaTime.LocalDateTime(2019, 10, 01, 16, 00).InMainTimezone().ToOffsetDateTime(), trainerID)); campaign.ScheduleTraining(new Training( "Papieska 2", "Sosnowiec", new NodaTime.LocalDateTime(2019, 10, 01, 12, 00).InMainTimezone().ToOffsetDateTime(), new NodaTime.LocalDateTime(2019, 10, 01, 16, 00).InMainTimezone().ToOffsetDateTime(), Guid.NewGuid())); var session = dbSessionProvider.CreateSession(); await session.SaveAsync(campaign); Assert.Equal(1, campaign.Id); } using (var scope = sp.CreateScope()) { var mediator = scope.ServiceProvider.GetRequiredService <IMediator>(); var results = await mediator.Send(new Recruitment.Trainings.Index.Query() { CoordinatorId = trainerID }); var singleResult = Assert.Single(results); Assert.Equal("Wadowice", singleResult.City); Assert.Equal(trainerID, singleResult.CoordinatorID); } }
public async Task Query_with_specified_From_returns_trainings_beginning_after_that_instant() { var sp = new ServiceProviderBuilder().BuildServiceProvider(ConfigureServices); using (var scope = sp.CreateScope()) { var dbSessionProvider = scope.ServiceProvider.GetRequiredService <DbSessionProvider>(); var campaign = new Campaign( startDateTime: new NodaTime.LocalDateTime(2019, 09, 01, 12, 00).InMainTimezone().ToOffsetDateTime(), endDateTime: new NodaTime.LocalDateTime(2019, 09, 30, 12, 00).InMainTimezone().ToOffsetDateTime(), editionId: 1, name: "campaign"); campaign.ScheduleTraining(new Training( "Papieska 1", "Wadowice", new NodaTime.LocalDateTime(2019, 10, 01, 12, 00).InMainTimezone().ToOffsetDateTime(), new NodaTime.LocalDateTime(2019, 10, 01, 16, 00).InMainTimezone().ToOffsetDateTime(), trainerID)); campaign.ScheduleTraining(new Training( "Papieska 2", "Wadowice", new NodaTime.LocalDateTime(2019, 10, 15, 12, 00).InMainTimezone().ToOffsetDateTime(), new NodaTime.LocalDateTime(2019, 10, 15, 16, 00).InMainTimezone().ToOffsetDateTime(), trainerID)); var session = dbSessionProvider.CreateSession(); await session.SaveAsync(campaign); Assert.Equal(1, campaign.Id); } using (var scope = sp.CreateScope()) { var mediator = scope.ServiceProvider.GetRequiredService <IMediator>(); var results = await mediator.Send(new Recruitment.Trainings.Index.Query() { From = new NodaTime.LocalDateTime(2019, 10, 01, 13, 00).InMainTimezone().ToOffsetDateTime().ToInstant() }); var singleResult = Assert.Single(results); Assert.Equal("Papieska 2", singleResult.Address); } }
public async Task Empty_repository_returns_no_trainings() { var sp = new ServiceProviderBuilder().BuildServiceProvider(ConfigureServices); using (var scope = sp.CreateScope()) { var dbSession = scope.ServiceProvider.GetRequiredService <DbSessionProvider>(); var campaign = new Campaign( startDateTime: new NodaTime.LocalDateTime(2019, 09, 01, 12, 00).InMainTimezone().ToOffsetDateTime(), endDateTime: new NodaTime.LocalDateTime(2019, 09, 01, 12, 00).InMainTimezone().ToOffsetDateTime(), editionId: 1, name: "test"); } using (var scope = sp.CreateScope()) { var mediator = scope.ServiceProvider.GetRequiredService <IMediator>(); var results = await mediator.Send(new Recruitment.Trainings.Index.Query()); Assert.Empty(results); } }
public async Task Querying_for_existing_enrollment_returns_that_enrollment_events() { var sp = new ServiceProviderBuilder().BuildServiceProvider(ConfigureServices); using (var scope = sp.CreateScope()) { var engine = scope.ServiceProvider.GetRequiredService <ISzlemEngine>(); var command = new SubmitRecruitmentForm.Command() { FirstName = "Andrzej", LastName = "Strzelba", Email = EmailAddress.Parse("*****@*****.**"), PhoneNumber = Consts.FakePhoneNumber, AboutMe = "ala ma kota", Region = "Wolne Miasto Gdańsk", PreferredLecturingCities = new[] { "Wadowice" }, PreferredTrainingIds = new[] { 1 }, GdprConsentGiven = true }; var result = await engine.Execute(command); Assert.True(result.IsSuccess); } using (var scope = sp.CreateScope()) { var engine = scope.ServiceProvider.GetRequiredService <ISzlemEngine>(); var enrollments = await engine.Query(new GetSubmissions.Query()); var result = await engine.Query(new GetEnrollmentDetails.QueryByEnrollmentId() { EnrollmentID = enrollments.Single().Id }); Assert.True(result.IsSuccess); var enrollment = result.Value; Assert.Contains(enrollment.Events, evt => evt.GetType() == typeof(GetEnrollmentDetails.RecruitmentFormSubmittedEventData)); } }
public async Task If_no_campaign_is_currently_open__handler_returns_Maybe_None() { var sp = new ServiceProviderBuilder().BuildServiceProvider(ConfigureServices); using (var scope = sp.CreateScope()) { var dbSession = scope.ServiceProvider.GetRequiredService <DbSessionProvider>(); await dbSession.CreateSession().SaveAsync(new Campaign( startDateTime: NodaTime.SystemClock.Instance.GetOffsetDateTime().Plus(NodaTime.Duration.FromDays(7)), endDateTime: NodaTime.SystemClock.Instance.GetOffsetDateTime().Plus(NodaTime.Duration.FromDays(14)), editionId: 1, name: "test")); } using (var scope = sp.CreateScope()) { var mediator = scope.ServiceProvider.GetRequiredService <IMediator>(); var query = new GetCurrentCampaign.Query(); var result = await mediator.Send(query); Assert.True(result.HasNoValue); } }
public async Task CampaignsCannotOverlap() { var sp = new ServiceProviderBuilder().BuildServiceProvider(ConfigureServices); using (var scope = sp.CreateScope()) { var engine = sp.GetRequiredService <SharedKernel.ISzlemEngine>(); var command = new Create.Command() { Name = "test", StartDateTime = new NodaTime.LocalDateTime(2019, 09, 01, 12, 00, 00).InMainTimezone().ToOffsetDateTime(), EndDateTime = new NodaTime.LocalDateTime(2019, 10, 01, 12, 00, 00).InMainTimezone().ToOffsetDateTime(), EditionID = 1 }; var result = await engine.Execute(command); } using (var scope = sp.CreateScope()) { var engine = sp.GetRequiredService <SharedKernel.ISzlemEngine>(); var command = new Create.Command() { Name = "test", StartDateTime = new NodaTime.LocalDateTime(2019, 09, 01, 12, 00, 00).InMainTimezone().ToOffsetDateTime(), EndDateTime = new NodaTime.LocalDateTime(2019, 10, 01, 12, 00, 00).InMainTimezone().ToOffsetDateTime(), EditionID = 1 }; var result = await engine.Execute(command); Assert.False(result.IsSuccess); var error = Assert.IsType <Error.DomainError>(result.Error); Assert.Equal(Create.ErrorMessages.CampaignsCannotOverlap, error.Message); } }
public async Task Querying_for_nonexistent_enrollment_returns_not_found_failure() { var sp = new ServiceProviderBuilder().BuildServiceProvider(ConfigureServices); using (var scope = sp.CreateScope()) { var engine = scope.ServiceProvider.GetRequiredService <ISzlemEngine>(); var result = await engine.Query(new GetEnrollmentDetails.QueryByEnrollmentId() { EnrollmentID = Guid.Empty }); Assert.False(result.IsSuccess); var error = Assert.IsType <Szlem.Domain.Error.ResourceNotFound>(result.Error); } }
public async Task Valid_command_emits_single_EmailSendingFailed_event_when_EmailService_fails_to_send_email() { var sp = new ServiceProviderBuilder().BuildServiceProvider(services => { ConfigureServices(services); var failingEmailMock = new Mock <IEmailService>(); failingEmailMock .Setup(x => x.CreateMessage(It.IsAny <EmailAddress>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <bool>(), It.IsAny <IEnumerable <EmailAttachment> >())) .Returns((EmailAddress email, string subject, string body, bool isHtml, IEnumerable <EmailAttachment> attachments) => new SucceedingEmailService().CreateMessage(email, subject, body, isHtml, attachments)); failingEmailMock.Setup(x => x.Send(It.IsAny <EmailMessage>(), CancellationToken.None)).Returns(Task.FromResult(Result.Failure("error"))); services.Remove <IEmailService>(); services.AddSingleton(failingEmailMock.Object); }); using (var scope = sp.CreateScope()) { var engine = scope.ServiceProvider.GetRequiredService <ISzlemEngine>(); var command = new SubmitRecruitmentForm.Command() { FirstName = "Andrzej", LastName = "Strzelba", Email = EmailAddress.Parse("*****@*****.**"), PhoneNumber = Consts.FakePhoneNumber, AboutMe = "ala ma kota", Region = "woj. małopolskie", PreferredLecturingCities = new[] { "Wadowice" }, PreferredTrainingIds = new[] { 1 }, GdprConsentGiven = true }; var result = await engine.Execute(command); Assert.True(result.IsSuccess); var eventStore = scope.ServiceProvider.GetRequiredService <EventFlow.EventStores.IEventStore>(); var events = await eventStore.LoadAllEventsAsync(EventFlow.EventStores.GlobalPosition.Start, 2, CancellationToken.None); var domainEvent = Assert.Single(events.DomainEvents, ev => ev.EventType == typeof(EmailSendingFailed)); var ev = Assert.IsType <EmailSendingFailed>(domainEvent.GetAggregateEvent()); Assert.Equal(SubmitRecruitmentFormHandler.MessageTitle, ev.Subject); } }
public async Task Valid_command_emits_single_RecruitmentFormSubmitted_event() { var sp = new ServiceProviderBuilder().BuildServiceProvider(ConfigureServices); using (var scope = sp.CreateScope()) { var engine = scope.ServiceProvider.GetRequiredService <ISzlemEngine>(); var command = new SubmitRecruitmentForm.Command() { FirstName = "Andrzej", LastName = "Strzelba", Email = EmailAddress.Parse("*****@*****.**"), PhoneNumber = Consts.FakePhoneNumber, AboutMe = "ala ma kota", Region = "małopolskie", PreferredLecturingCities = new[] { "Wadowice" }, PreferredTrainingIds = new[] { 1 }, GdprConsentGiven = true }; var result = await engine.Execute(command); Assert.True(result.IsSuccess); var eventStore = scope.ServiceProvider.GetRequiredService <EventFlow.EventStores.IEventStore>(); var events = await eventStore.LoadAllEventsAsync(EventFlow.EventStores.GlobalPosition.Start, 2, System.Threading.CancellationToken.None); var domainEvent = Assert.Single(events.DomainEvents, ev => ev.EventType == typeof(RecruitmentFormSubmitted)); var e = Assert.IsType <RecruitmentFormSubmitted>(domainEvent.GetAggregateEvent()); Assert.Equal("Andrzej", e.FirstName); Assert.Equal("Strzelba", e.LastName); Assert.Equal("*****@*****.**", e.Email.ToString()); Assert.Equal(Consts.FakePhoneNumber, e.PhoneNumber); Assert.Equal("ala ma kota", e.AboutMe); Assert.Equal("małopolskie", e.Region); Assert.Single(e.PreferredLecturingCities, "Wadowice"); Assert.Single(e.PreferredTrainingIds, 1); Assert.True(e.GdprConsentGiven); } }
public async Task TrainingCannotBeAddedAfterCampaignStart() { var clock = NodaTime.Testing.FakeClock.FromUtc(2019, 08, 30); var sp = new ServiceProviderBuilder().BuildServiceProvider(services => { ConfigureServices(services); //services.Remove<NodaTime.IClock>(); services.AddSingleton <NodaTime.IClock>(clock); }); await CreateCampaign(sp, new Create.Command() { Name = "test", EditionID = 1, StartDateTime = new NodaTime.LocalDateTime(2019, 09, 01, 12, 00).InMainTimezone().ToOffsetDateTime(), EndDateTime = new NodaTime.LocalDateTime(2019, 09, 30, 12, 00).InMainTimezone().ToOffsetDateTime() }); using (var scope = sp.CreateScope()) { clock.AdvanceDays(3); var engine = scope.ServiceProvider.GetRequiredService <Szlem.SharedKernel.ISzlemEngine>(); var command = new ScheduleTraining.Command { City = "Watykan", Address = "Papieska 21/37", StartDateTime = new NodaTime.LocalDateTime(2019, 09, 15, 10, 00), EndDateTime = new NodaTime.LocalDateTime(2019, 09, 15, 15, 00), CampaignID = 1 }; var result = await engine.Execute(command); Assert.True(result.IsFailure); var error = Assert.IsType <Error.DomainError>(result.Error); Assert.Equal(ErrorMessages.CannotScheduleTrainingAfterCampaignStart, error.Message); } }
public async Task Query_with_specified_CampaignId_returns_trainings_from_that_campaign() { var sp = new ServiceProviderBuilder().BuildServiceProvider(ConfigureServices); using (var scope = sp.CreateScope()) { var dbSessionProvider = scope.ServiceProvider.GetRequiredService <DbSessionProvider>(); var campaign = new Campaign( startDateTime: new NodaTime.LocalDateTime(2019, 09, 01, 12, 00).InMainTimezone().ToOffsetDateTime(), endDateTime: new NodaTime.LocalDateTime(2019, 09, 30, 12, 00).InMainTimezone().ToOffsetDateTime(), editionId: 1, name: "campaign"); campaign.ScheduleTraining(new Training( "Papieska 1", "Wadowice", new NodaTime.LocalDateTime(2019, 10, 01, 12, 00).InMainTimezone().ToOffsetDateTime(), new NodaTime.LocalDateTime(2019, 10, 01, 16, 00).InMainTimezone().ToOffsetDateTime(), trainerID)); campaign.ScheduleTraining(new Training( "Papieska 11", "Wadowice", new NodaTime.LocalDateTime(2019, 10, 02, 12, 00).InMainTimezone().ToOffsetDateTime(), new NodaTime.LocalDateTime(2019, 10, 02, 16, 00).InMainTimezone().ToOffsetDateTime(), trainerID)); var campaign2 = new Campaign( startDateTime: new NodaTime.LocalDateTime(2019, 10, 01, 12, 00).InMainTimezone().ToOffsetDateTime(), endDateTime: new NodaTime.LocalDateTime(2019, 10, 30, 12, 00).InMainTimezone().ToOffsetDateTime(), editionId: 1, name: "campaign2"); campaign2.ScheduleTraining(new Training( "Papieska 2", "Wadowice", new NodaTime.LocalDateTime(2019, 11, 01, 12, 00).InMainTimezone().ToOffsetDateTime(), new NodaTime.LocalDateTime(2019, 11, 01, 16, 00).InMainTimezone().ToOffsetDateTime(), trainerID)); campaign2.ScheduleTraining(new Training( "Papieska 22", "Wadowice", new NodaTime.LocalDateTime(2019, 11, 01, 12, 00).InMainTimezone().ToOffsetDateTime(), new NodaTime.LocalDateTime(2019, 11, 01, 16, 00).InMainTimezone().ToOffsetDateTime(), trainerID)); var session = dbSessionProvider.CreateSession(); await session.SaveAsync(campaign); Assert.Equal(1, campaign.Id); await session.SaveAsync(campaign2); Assert.Equal(2, campaign2.Id); } using (var scope = sp.CreateScope()) { var mediator = scope.ServiceProvider.GetRequiredService <IMediator>(); var results = await mediator.Send(new Recruitment.Trainings.Index.Query() { CampaignIds = new[] { 1 } }); Assert.Equal(2, results.Count); Assert.Collection(results, first => Assert.Equal("Papieska 1", first.Address), second => Assert.Equal("Papieska 11", second.Address) ); } }
public async Task Querying_for_existing_enrollment_returns_that_enrollment_summary() { var sp = new ServiceProviderBuilder().BuildServiceProvider(ConfigureServices); using (var scope = sp.CreateScope()) { var engine = scope.ServiceProvider.GetRequiredService <ISzlemEngine>(); var command = new SubmitRecruitmentForm.Command() { FirstName = "Andrzej", LastName = "Strzelba", Email = EmailAddress.Parse("*****@*****.**"), PhoneNumber = Consts.FakePhoneNumber, AboutMe = "ala ma kota", Region = "Wolne Miasto Gdańsk", PreferredLecturingCities = new[] { "Wadowice" }, PreferredTrainingIds = new[] { 1, 2 }, GdprConsentGiven = true }; var result = await engine.Execute(command); Assert.True(result.IsSuccess); } using (var scope = sp.CreateScope()) { var engine = scope.ServiceProvider.GetRequiredService <ISzlemEngine>(); var enrollments = await engine.Query(new GetSubmissions.Query()); var result = await engine.Query(new GetEnrollmentDetails.QueryByEnrollmentId() { EnrollmentID = enrollments.Single().Id }); Assert.True(result.IsSuccess); var enrollment = result.Value; Assert.Equal(enrollments.Single().Id, enrollment.ID); Assert.Equal("Andrzej", enrollment.FirstName); Assert.Equal("Strzelba", enrollment.LastName); Assert.Equal(EmailAddress.Parse("*****@*****.**"), enrollment.Email); Assert.Equal(Consts.FakePhoneNumber, enrollment.PhoneNumber); Assert.Single(enrollment.PreferredLecturingCities, "Wadowice"); Assert.Collection(enrollment.PreferredTrainings, first => { Assert.Equal(1, first.ID); Assert.Equal(trainerID, first.CoordinatorID); Assert.Equal("Jan Paweł II", first.CoordinatorName); Assert.Equal("Wadowice", first.City); }, second => { Assert.Equal(2, second.ID); Assert.Equal(trainerID, second.CoordinatorID); Assert.Equal("Jan Paweł II", second.CoordinatorName); Assert.Equal("Wadowice", second.City); }); enrollment.IsCurrentSubmission.Should().BeTrue(); enrollment.IsOldSubmission.Should().BeFalse(); enrollment.CanRecordTrainingResults.Should().BeFalse(); } }