protected MeetingTestData CreateMeetingTestData(MeetingTestDataOptions options)
        {
            var proposalMemberId = options.CreatorId ?? new MemberId(Guid.NewGuid());
            var meetingProposal  = MeetingGroupProposal.ProposeNew(
                "name", "description",
                MeetingGroupLocation.CreateNew("Warsaw", "PL"), proposalMemberId);

            meetingProposal.Accept();

            var meetingGroup = meetingProposal.CreateMeetingGroup();

            meetingGroup.UpdatePaymentInfo(DateTime.Now.AddDays(1));

            var meetingTerm = options.MeetingTerm ??
                              MeetingTerm.CreateNewBetweenDates(DateTime.UtcNow.AddDays(1), DateTime.UtcNow.AddDays(2));

            var rsvpTerm = options.RvspTerm ?? Term.NoTerm;
            var meeting  = meetingGroup.CreateMeeting("title",
                                                      meetingTerm,
                                                      "description",
                                                      MeetingLocation.CreateNew("Name", "Address", "PostalCode", "City"),
                                                      options.AttendeesLimit,
                                                      options.GuestsLimit,
                                                      rsvpTerm,
                                                      MoneyValue.Undefined,
                                                      new List <MemberId>(),
                                                      proposalMemberId);

            DomainEventsTestHelper.ClearAllDomainEvents(meetingGroup);

            return(new MeetingTestData(meetingGroup, meeting));
        }
Example #2
0
        public void CreateMeeting_WhenHostsAreDefinedAndTheyAreNotGroupMembers_BreaksMeetingHostMustBeAMeetingGroupMemberRule()
        {
            var definedProposalMemberId = new MemberId(Guid.NewGuid());
            var meetingGroup            = CreateMeetingGroup(definedProposalMemberId);

            meetingGroup.SetExpirationDate(DateTime.UtcNow.AddDays(1));
            var             hostOne = new MemberId(Guid.NewGuid());
            var             hostTwo = new MemberId(Guid.NewGuid());
            List <MemberId> hosts   = new List <MemberId>();

            hosts.Add(hostOne);
            hosts.Add(hostTwo);

            AssertBrokenRule <MeetingHostMustBeAMeetingGroupMemberRule>(() =>
            {
                meetingGroup.CreateMeeting("title",
                                           MeetingTerm.CreateNewBetweenDates(
                                               new DateTime(2019, 1, 1, 10, 0, 0),
                                               new DateTime(2019, 1, 1, 12, 0, 0)),
                                           "description",
                                           MeetingLocation.CreateNew("Name", "Address", "PostalCode", "City"),
                                           null,
                                           0,
                                           Term.NoTerm,
                                           MoneyValue.Undefined,
                                           hosts,
                                           definedProposalMemberId);
            });
        }
        protected MeetingTestData CreateMeetingTestData(MeetingTestDataOptions options)
        {
            var proposalMemberId = options.CreatorId ?? new MemberId(Guid.NewGuid());
            var meetingProposal  = MeetingGroupProposal.ProposeNew(
                "name",
                "description",
                MeetingGroupLocation.CreateNew("Warsaw", "PL"),
                proposalMemberId);

            meetingProposal.Accept();

            var meetingGroup = meetingProposal.CreateMeetingGroup();

            meetingGroup.SetExpirationDate(DateTime.Now.AddDays(1));

            var meetingTerm = options.MeetingTerm ??
                              MeetingTerm.CreateNewBetweenDates(DateTime.UtcNow.AddDays(1), DateTime.UtcNow.AddDays(2));

            var rsvpTerm = options.RvspTerm ?? Term.NoTerm;
            var meeting  = meetingGroup.CreateMeeting(
                "title",
                meetingTerm,
                "description",
                MeetingLocation.CreateNew("Name", "Address", "PostalCode", "City"),
                options.AttendeesLimit,
                options.GuestsLimit,
                rsvpTerm,
                MoneyValue.Undefined,
                new List <MemberId>(),
                proposalMemberId);

            foreach (var attendee in options.Attendees)
            {
                meetingGroup.JoinToGroupMember(attendee);
                meeting.AddAttendee(meetingGroup, attendee, 0);
            }

            var meetingCommentingConfiguration = meeting.CreateCommentingConfiguration();

            if (options.IsMeetingCommentingEnabled)
            {
                meetingCommentingConfiguration.EnableCommenting(proposalMemberId, meetingGroup);
            }
            else
            {
                meetingCommentingConfiguration.DisableCommenting(proposalMemberId, meetingGroup);
            }

            DomainEventsTestHelper.ClearAllDomainEvents(meetingGroup);

            return(new MeetingTestData(meetingGroup, meeting, meetingCommentingConfiguration));
        }
        public async Task <Unit> Handle(ChangeMeetingMainAttributesCommand request, CancellationToken cancellationToken)
        {
            var meeting = await _meetingRepository.GetByIdAsync(new MeetingId(request.MeetingId));

            meeting.ChangeMainAttributes(request.Title,
                                         MeetingTerm.CreateNewBetweenDates(request.TermStartDate, request.TermStartDate),
                                         request.Description,
                                         MeetingLocation.CreateNew(request.MeetingLocationName, request.MeetingLocationAddress, request.MeetingLocationPostalCode, request.MeetingLocationCity),
                                         MeetingLimits.Create(request.AttendeesLimit, request.GuestsLimit),
                                         Term.CreateNewBetweenDates(request.RSVPTermStartDate, request.RSVPTermEndDate),
                                         request.EventFeeValue.HasValue ? MoneyValue.Of(request.EventFeeValue.Value, request.EventFeeCurrency) : MoneyValue.Undefined,
                                         _memberContext.MemberId);

            return(Unit.Value);
        }
Example #5
0
        public void CreateMeeting_WhenCreatorIsMemberOfGroupAndHostsAreNotDefined_IsSuccessful()
        {
            var definedProposalMemberId = new MemberId(Guid.NewGuid());
            var meetingGroup            = CreateMeetingGroup(definedProposalMemberId);

            meetingGroup.SetExpirationDate(DateTime.UtcNow.AddDays(1));

            var meeting = meetingGroup.CreateMeeting("title",
                                                     MeetingTerm.CreateNewBetweenDates(
                                                         new DateTime(2019, 1, 1, 10, 0, 0),
                                                         new DateTime(2019, 1, 1, 12, 0, 0)),
                                                     "description",
                                                     MeetingLocation.CreateNew("Name", "Address", "PostalCode", "City"),
                                                     null,
                                                     0,
                                                     Term.NoTerm,
                                                     MoneyValue.Undefined,
                                                     new List <MemberId>(),
                                                     definedProposalMemberId);

            AssertPublishedDomainEvent <MeetingCreatedDomainEvent>(meeting);
        }
Example #6
0
        public void CreateMeeting_WhenGroupIsNotPayed_IsNotPossible()
        {
            var meetingGroup = CreateMeetingGroup();

            MemberId creatorId = new MemberId(Guid.NewGuid());

            AssertBrokenRule <MeetingCanBeOrganizedOnlyByPayedGroupRule>(() =>
            {
                meetingGroup.CreateMeeting("title",
                                           MeetingTerm.CreateNewBetweenDates(
                                               new DateTime(2019, 1, 1, 10, 0, 0),
                                               new DateTime(2019, 1, 1, 12, 0, 0)),
                                           "description",
                                           MeetingLocation.CreateNew("Name", "Address", "PostalCode", "City"),
                                           null,
                                           0,
                                           Term.NoTerm,
                                           MoneyValue.Undefined,
                                           new List <MemberId>(),
                                           creatorId);
            });
        }
Example #7
0
        public async Task <Unit> Handle(CreateMeetingCommand request, CancellationToken cancellationToken)
        {
            var meetingGroup = await _meetingGroupRepository.GetByIdAsync(new MeetingGroupId(request.MeetingGroupId));

            var hostsMembersIds = request.HostMemberIds.Select(x => new MemberId(x)).ToList();

            var meeting = meetingGroup.CreateMeeting(
                request.Title,
                MeetingTerm.CreateNewBetweenDates(request.TermStartDate, request.TermStartDate),
                request.Description,
                MeetingLocation.CreateNew(request.MeetingLocationName, request.MeetingLocationAddress, request.MeetingLocationPostalCode, request.MeetingLocationCity),
                request.AttendeesLimit,
                request.GuestsLimit,
                Term.CreateNewBetweenDates(request.RSVPTermStartDate, request.RSVPTermEndDate),
                request.EventFeeValue.HasValue ? MoneyValue.Of(request.EventFeeValue.Value, request.EventFeeCurrency) : MoneyValue.Undefined,
                hostsMembersIds,
                _memberContext.MemberId);

            await _meetingRepository.AddAsync(meeting);

            return(Unit.Value);
        }
Example #8
0
        public void CreateMeeting_WhenHostsAreDefinedAndTheyAreGroupMembers_DefinedHostsAreHostsOfMeeting()
        {
            var definedProposalMemberId = new MemberId(Guid.NewGuid());
            var meetingGroup            = CreateMeetingGroup(definedProposalMemberId);

            meetingGroup.SetExpirationDate(DateTime.UtcNow.AddDays(1));
            var             hostOne = new MemberId(Guid.NewGuid());
            var             hostTwo = new MemberId(Guid.NewGuid());
            List <MemberId> hosts   = new List <MemberId>();

            hosts.Add(hostOne);
            hosts.Add(hostTwo);
            meetingGroup.JoinToGroupMember(hostOne);
            meetingGroup.JoinToGroupMember(hostTwo);

            var meeting = meetingGroup.CreateMeeting(
                "title",
                MeetingTerm.CreateNewBetweenDates(
                    new DateTime(2019, 1, 1, 10, 0, 0),
                    new DateTime(2019, 1, 1, 12, 0, 0)),
                "description",
                MeetingLocation.CreateNew("Name", "Address", "PostalCode", "City"),
                null,
                0,
                Term.NoTerm,
                MoneyValue.Undefined,
                hosts,
                definedProposalMemberId);

            var meetingAttendeeAddedEvents = AssertPublishedDomainEvents <MeetingAttendeeAddedDomainEvent>(meeting);

            Assert.That(meetingAttendeeAddedEvents.Count, Is.EqualTo(2));
            Assert.That(meetingAttendeeAddedEvents[0].AttendeeId, Is.EqualTo(hostOne));
            Assert.That(meetingAttendeeAddedEvents[0].Role, Is.EqualTo(MeetingAttendeeRole.Host));
            Assert.That(meetingAttendeeAddedEvents[1].AttendeeId, Is.EqualTo(hostTwo));
            Assert.That(meetingAttendeeAddedEvents[1].Role, Is.EqualTo(MeetingAttendeeRole.Host));
        }
Example #9
0
        public void CreateMeeting_WhenCreatorIsNotMemberOfGroup_BreaksMeetingHostMustBeAMeetingGroupMemberRule()
        {
            var definedProposalMemberId = new MemberId(Guid.NewGuid());
            var creatorId    = new MemberId(Guid.NewGuid());
            var meetingGroup = CreateMeetingGroup(definedProposalMemberId);

            meetingGroup.UpdatePaymentInfo(DateTime.UtcNow.AddDays(1));

            AssertBrokenRule <MeetingHostMustBeAMeetingGroupMemberRule>(() =>
            {
                meetingGroup.CreateMeeting("title",
                                           MeetingTerm.CreateNewBetweenDates(
                                               new DateTime(2019, 1, 1, 10, 0, 0),
                                               new DateTime(2019, 1, 1, 12, 0, 0)),
                                           "description",
                                           MeetingLocation.CreateNew("Name", "Address", "PostalCode", "City"),
                                           null,
                                           0,
                                           Term.NoTerm,
                                           MoneyValue.Undefined,
                                           new List <MemberId>(),
                                           creatorId);
            });
        }