public void CommandMustBeExecutedOnAggregateWithMatchingEnrollmentId()
        {
            var enrollment    = new EnrollmentAggregate(EnrollmentAggregate.EnrollmentId.New);
            var recordingUser = new ApplicationUser()
            {
                Id = Guid.NewGuid()
            };

            var command = new RecordContact.Command()
            {
                EnrollmentId         = EnrollmentAggregate.EnrollmentId.New.GetGuid(),
                CommunicationChannel = CommunicationChannel.OutgoingEmail,
                Content         = "ala ma kota",
                AdditionalNotes = "notatka testowa"
            };

            Assert.Throws <AggregateMismatchException>(() => enrollment.RecordContact(
                                                           new RecordContact.Command()
            {
                EnrollmentId         = EnrollmentAggregate.EnrollmentId.New.GetGuid(),
                CommunicationChannel = CommunicationChannel.OutgoingEmail,
                Content         = "ala ma kota",
                AdditionalNotes = "notatka testowa"
            },
                                                           recordingUser));
        }
        public void CommandMustContain_EnrollmentId_CommunicationChannel_Content_fields()
        {
            var enrollment = new EnrollmentAggregate(EnrollmentAggregate.EnrollmentId.New);
            var command    = new RecordContact.Command()
            {
                EnrollmentId = enrollment.Id.GetGuid()
            };

            var result = enrollment.RecordContact(command, new Models.Users.ApplicationUser());

            Assert.False(result.IsSuccess);
            var error = Assert.IsType <Error.ValidationFailed>(result.Error);

            Assert.Equal(2, error.Failures.Count);
        }
        public void AfterRegisteringContact_EnrollmentEmitsContactOccuredEvent()
        {
            // 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 recordingUser = new ApplicationUser()
            {
                Id = Guid.NewGuid()
            };

            // Act
            var result = enrollment.RecordContact(new RecordContact.Command()
            {
                EnrollmentId         = id.GetGuid(),
                CommunicationChannel = CommunicationChannel.OutgoingEmail,
                Content         = "ala ma kota",
                AdditionalNotes = "notatka testowa"
            },
                                                  recordingUser);

            // Assert
            Assert.True(result.IsSuccess);
            var uncommittedEvent = Assert.Single(enrollment.UncommittedEvents, e => e.AggregateEvent is ContactOccured);
            var @event           = Assert.IsType <ContactOccured>(uncommittedEvent.AggregateEvent);

            Assert.Equal(recordingUser.Id, @event.RecordingUserId);
            Assert.Equal(CommunicationChannel.OutgoingEmail, @event.CommunicationChannel);
            Assert.Equal("ala ma kota", @event.Content);
            Assert.Equal("notatka testowa", @event.AdditionalNotes);
        }
        public void CommandMustSpecifyExistingEnrollmentId()
        {
            // Arrange
            var id            = EnrollmentAggregate.EnrollmentId.New;
            var enrollment    = new EnrollmentAggregate(id);
            var recordingUser = new ApplicationUser()
            {
                Id = Guid.NewGuid()
            };

            var command = new RecordContact.Command()
            {
                EnrollmentId         = id.GetGuid(),
                CommunicationChannel = CommunicationChannel.OutgoingEmail,
                Content         = "ala ma kota",
                AdditionalNotes = "notatka testowa"
            };

            var result = enrollment.RecordContact(command, recordingUser);

            Assert.False(result.IsSuccess);
            Assert.IsType <Error.ResourceNotFound>(result.Error);
        }