public void With_valid_command__CanSendTrainingReminder_returns_success() { // Arrange var id = EnrollmentAggregate.EnrollmentId.New; var event1 = new DomainEvent <EnrollmentAggregate, EnrollmentAggregate.EnrollmentId, RecruitmentFormSubmitted>( new RecruitmentFormSubmitted( 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 command = new SendTrainingReminder.Command() { EnrollmentId = id.GetGuid(), TrainingId = 1 }; var training = CreateTrainingWithIdAndOffset(1, Duration.FromHours(12)); // Act var result = enrollment.CanSendTrainingReminder(command, training, SystemClock.Instance.GetCurrentInstant()); // Assert result.IsSuccess.Should().BeTrue(); }
public void Command_cannot_be_issued_earlier_than_24h_before_training() { // 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 command = new SendTrainingReminder.Command() { EnrollmentId = id.GetGuid(), TrainingId = 1 }; var training = CreateTrainingWithIdAndOffset(1, Duration.FromDays(3)); // Act var result = enrollment.CanSendTrainingReminder(command, training, SystemClock.Instance.GetCurrentInstant()); // Assert result.IsSuccess.Should().BeFalse(); var error = result.Error.Should().BeOfType <Error.DomainError>().Subject; error.Message.Should().Be(SendTrainingReminder_Messages.Reminder_cannot_be_sent_earlier_than_24h_before_training); }
public void Command_is_invalid_if_candidate_was_not_invited() { // 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 command = new SendTrainingReminder.Command() { EnrollmentId = id.GetGuid(), TrainingId = 1 }; var training = CreateTrainingWithIdAndOffset(1, Duration.FromHours(12)); // Act var result = enrollment.CanSendTrainingReminder(command, training, SystemClock.Instance.GetCurrentInstant()); // Assert result.IsSuccess.Should().BeFalse(); var error = result.Error.Should().BeOfType <Error.DomainError>().Subject; error.Message.Should().Be(SendTrainingReminder_Messages.Reminder_cannot_be_sent_if_the_candidate_is_not_invited_to_training); }