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)); }
public Meeting CreateMeeting( string title, MeetingTerm term, string description, MeetingLocation location, int?attendeesLimit, int guestsLimit, Term rsvpTerm, MoneyValue eventFee, List <MemberId> hostsMembersIds, MemberId creatorId) { this.CheckRule(new MeetingCanBeOrganizedOnlyByPayedGroupRule(_paymentDateTo)); this.CheckRule(new MeetingHostMustBeAMeetingGroupMemberRule(creatorId, hostsMembersIds, _members)); return(Meeting.CreateNew(this.Id, title, term, description, location, MeetingLimits.Create(attendeesLimit, guestsLimit), rsvpTerm, eventFee, hostsMembersIds, creatorId)); }
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 void SetAttendeeRole_WhenMeetingHasStarted_IsNotPossible() { var creatorId = new MemberId(Guid.NewGuid()); var meetingTestData = CreateMeetingTestData(new MeetingTestDataOptions { CreatorId = creatorId, MeetingTerm = MeetingTerm.CreateNewBetweenDates(DateTime.UtcNow.AddDays(-2), DateTime.UtcNow.AddDays(-1)) }); AssertBrokenRule <MeetingCannotBeChangedAfterStartRule>(() => { meetingTestData.Meeting.SetAttendeeRole(meetingTestData.MeetingGroup, creatorId, creatorId); }); }
public void SignOffMemberFromWaitList_WhenMeetingHasStared_IsNotPossible() { var creatorId = new MemberId(Guid.NewGuid()); var meetingTestData = CreateMeetingTestData(new MeetingTestDataOptions { CreatorId = creatorId, MeetingTerm = MeetingTerm.CreateNewBetweenDates(DateTime.UtcNow.AddDays(-2), DateTime.UtcNow.AddDays(-1)) }); var memberId = new MemberId(Guid.NewGuid()); AssertBrokenRule <MeetingCannotBeChangedAfterStartRule>(() => { meetingTestData.Meeting.SignOffMemberFromWaitlist(memberId); }); }
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); }
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); }
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); }); }
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); }
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)); }
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); }); }
public MeetingCannotBeChangedAfterStartRule(MeetingTerm meetingTerm) { _meetingTerm = meetingTerm; }