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