public void Attended_training_must_be_among_trainings_preferred_by_candidate(RecordTrainingResults.TrainingResult trainingResult) { // Arrange var id = EnrollmentAggregate.EnrollmentId.New; var event1 = new DomainEvent <EnrollmentAggregate, EnrollmentAggregate.EnrollmentId, RecruitmentFormSubmitted>( new RecruitmentFormSubmitted( NodaTime.SystemClock.Instance.GetCurrentInstant(), "Andrzej", "Strzelba", EmailAddress.Parse("*****@*****.**"), Consts.FakePhoneNumber, "ala ma kota", 1, "Wolne Miasto Gdańsk", new[] { "Wadowice" }, new[] { 1 }, true), new Metadata(), DateTimeOffset.Now, id, 1 ); var event2 = new DomainEvent <EnrollmentAggregate, EnrollmentAggregate.EnrollmentId, CandidateAcceptedTrainingInvitation>( new CandidateAcceptedTrainingInvitation(Guid.NewGuid(), CommunicationChannel.OutgoingEmail, 1, string.Empty), new Metadata(), DateTimeOffset.Now, id, 2 ); var enrollment = new EnrollmentAggregate(id); enrollment.ApplyEvents(new IDomainEvent[] { event1, event2 }); var recordingCoordinator = new ApplicationUser() { Id = Guid.NewGuid() }; var training = new Training( "Papieska 21/37", "Wadowice", new NodaTime.LocalDateTime(2019, 09, 01, 10, 00).InMainTimezone().ToOffsetDateTime(), new NodaTime.LocalDateTime(2019, 09, 01, 12, 00).InMainTimezone().ToOffsetDateTime(), Guid.NewGuid() ); training.GetType().GetProperty(nameof(Training.ID)).SetValue(training, 2); // Act var result = enrollment.RecordTrainingResults(new RecordTrainingResults.Command() { EnrollmentId = id.GetGuid(), TrainingId = 2, TrainingResult = trainingResult, AdditionalNotes = "notatka testowa" }, recordingCoordinator, new[] { BuildDefaultTraining() }, training, NodaTime.SystemClock.Instance.GetCurrentInstant()); // Assert Assert.False(result.IsSuccess); var error = Assert.IsType <Error.DomainError>(result.Error); Assert.Equal(RecordTrainingResults_Messages.TrainingNotSelectedAsPreferred, error.Message); }
public void If_candidate_was_present_on_the_training_aggregate_contains_CandidateAttendedTraining_event(RecordTrainingResults.TrainingResult trainingResult) { // Arrange var id = EnrollmentAggregate.EnrollmentId.New; var event1 = new DomainEvent <EnrollmentAggregate, EnrollmentAggregate.EnrollmentId, RecruitmentFormSubmitted>( new RecruitmentFormSubmitted( NodaTime.SystemClock.Instance.GetCurrentInstant(), "Andrzej", "Strzelba", EmailAddress.Parse("*****@*****.**"), Consts.FakePhoneNumber, "ala ma kota", 1, "Wolne Miasto Gdańsk", new[] { "Wadowice" }, new[] { 1 }, true), new Metadata(), DateTimeOffset.Now, id, 1 ); var event2 = new DomainEvent <EnrollmentAggregate, EnrollmentAggregate.EnrollmentId, CandidateAcceptedTrainingInvitation>( new CandidateAcceptedTrainingInvitation(Guid.NewGuid(), CommunicationChannel.OutgoingEmail, 1, string.Empty), new Metadata(), DateTimeOffset.Now, id, 2 ); var enrollment = new EnrollmentAggregate(id); enrollment.ApplyEvents(new IDomainEvent[] { event1, event2 }); var recordingCoordinator = new ApplicationUser() { Id = Guid.NewGuid() }; // Act var result = enrollment.RecordTrainingResults(new RecordTrainingResults.Command() { EnrollmentId = id.GetGuid(), TrainingId = 1, TrainingResult = trainingResult, AdditionalNotes = "notatka testowa" }, recordingCoordinator, new[] { BuildDefaultTraining() }, BuildDefaultTraining(), NodaTime.SystemClock.Instance.GetCurrentInstant()); // Assert Assert.True(result.IsSuccess); var uncommittedEvent = Assert.Single(enrollment.UncommittedEvents, e => e.AggregateEvent is CandidateAttendedTraining); var @event = Assert.IsType <CandidateAttendedTraining>(uncommittedEvent.AggregateEvent); Assert.Equal(recordingCoordinator.Id, @event.RecordingCoordinatorID); Assert.Equal(1, @event.TrainingID); Assert.Equal("notatka testowa", @event.AdditionalNotes); }
public void Candidate_can_be_recorded_as_present_on_the_training_if_his_last_answer_to_invitation_was_negative(RecordTrainingResults.TrainingResult trainingResult) { // Arrange var id = EnrollmentAggregate.EnrollmentId.New; var event1 = new DomainEvent <EnrollmentAggregate, EnrollmentAggregate.EnrollmentId, RecruitmentFormSubmitted>( new RecruitmentFormSubmitted( NodaTime.SystemClock.Instance.GetCurrentInstant(), "Andrzej", "Strzelba", EmailAddress.Parse("*****@*****.**"), Consts.FakePhoneNumber, "ala ma kota", 1, "Wolne Miasto Gdańsk", new[] { "Wadowice" }, new[] { 1 }, true), new Metadata(), DateTimeOffset.Now, id, 1 ); var event2 = new DomainEvent <EnrollmentAggregate, EnrollmentAggregate.EnrollmentId, CandidateRefusedTrainingInvitation>( new CandidateRefusedTrainingInvitation(Guid.NewGuid(), CommunicationChannel.OutgoingEmail, "kandydat nie ma czasu", string.Empty), new Metadata(), DateTimeOffset.Now, id, 2 ); var enrollment = new EnrollmentAggregate(id); enrollment.ApplyEvents(new IDomainEvent[] { event1, event2 }); var recordingCoordinator = new ApplicationUser() { Id = Guid.NewGuid() }; // Act var result = enrollment.RecordTrainingResults(new RecordTrainingResults.Command() { EnrollmentId = id.GetGuid(), TrainingId = 1, TrainingResult = trainingResult, AdditionalNotes = "notatka testowa" }, recordingCoordinator, new[] { BuildDefaultTraining() }, BuildDefaultTraining(), NodaTime.SystemClock.Instance.GetCurrentInstant()); // Assert Assert.True(result.IsSuccess); enrollment.UncommittedEvents.Should().Contain(x => x.AggregateEvent.GetType() == typeof(CandidateAttendedTraining)); }
public void Candidate_needs_not_to_have_been_invited_to_training_invitation_to_be_recorded_as_present(RecordTrainingResults.TrainingResult trainingResult) { // Arrange var id = EnrollmentAggregate.EnrollmentId.New; var event1 = new DomainEvent <EnrollmentAggregate, EnrollmentAggregate.EnrollmentId, RecruitmentFormSubmitted>( new RecruitmentFormSubmitted( NodaTime.SystemClock.Instance.GetCurrentInstant(), "Andrzej", "Strzelba", EmailAddress.Parse("*****@*****.**"), Consts.FakePhoneNumber, "ala ma kota", 1, "Wolne Miasto Gdańsk", new[] { "Wadowice" }, new[] { 1 }, true), new Metadata(), DateTimeOffset.Now, id, 1 ); var enrollment = new EnrollmentAggregate(id); enrollment.ApplyEvents(new IDomainEvent[] { event1 }); var recordingCoordinator = new ApplicationUser() { Id = Guid.NewGuid() }; // Act var result = enrollment.RecordTrainingResults(new RecordTrainingResults.Command() { EnrollmentId = id.GetGuid(), TrainingId = 1, AdditionalNotes = "brak notatek", TrainingResult = trainingResult }, recordingCoordinator, new[] { BuildDefaultTraining() }, BuildDefaultTraining(), NodaTime.SystemClock.Instance.GetCurrentInstant()); // Assert Assert.True(result.IsSuccess); }