public void Given_Published_Meetup_When_RejectRSVP_Then_MemberNotGoing() { var memberId = MemberId.From(Guid.NewGuid()); var rejectedAt = DateTime.UtcNow; GivenPublishedMeetupThen <Events.RSVPRejected>(when: m => m.RejectRSVP(memberId, rejectedAt)); }
public void Given_Published_Meetup_When_AcceptRSVP_Then_MemberGoing() { var memberId = MemberId.From(Guid.NewGuid()); var acceptedAt = DateTime.UtcNow; GivenPublishedMeetupThen <Events.RSVPAccepted>(when: m => m.AcceptRSVP(memberId, acceptedAt)); }
public void Given_Canceled_Meetup_When_AcceptOrRejectRSVP_Then_Throws() { var memberId = MemberId.From(Guid.NewGuid()); var time = DateTime.UtcNow; var meetup = CreateMeetup().Published().Canceled(); Assert.Throws <MeetupDomainException>(() => meetup.AcceptRSVP(memberId, time)); Assert.Throws <MeetupDomainException>(() => meetup.RejectRSVP(memberId, time)); }
public void Given_Published_Meetup_When_RejectRSVP_Then_MemberNotGoing() { var memberId = MemberId.From(Guid.NewGuid()); var rejectedAt = DateTime.UtcNow; GivenPublishedMeetup <Events.RSVPRejected>( cmd => cmd.RejectRSVP(memberId, rejectedAt), (m, ev) => Assert.Equal(rejectedAt, m.MembersNotGoing[memberId])); }
public void Given_Published_Meetup_When_AcceptRSVP_Then_MemberGoing() { var memberId = MemberId.From(Guid.NewGuid()); var acceptedAt = DateTime.UtcNow; GivenPublishedMeetup <Events.RSVPAccepted>( cmd => cmd.AcceptRSVP(memberId, acceptedAt), (m, ev) => Assert.Equal(acceptedAt, m.MembersGoing[memberId])); }
private static void Build(EntityTypeBuilder <Group> group) { group.ToTable("Groups"); group.HasKey(x => x.Id) .HasName("PK_Groups"); group.Property(x => x.Id) .HasConversion(x => x.Value, x => GroupId.From(x)) .ValueGeneratedNever() .HasColumnName("GroupId"); group.OwnsOne( x => x.Name, n => { n.Property(x => x.Value).HasColumnName(nameof(Group.Name)) .IsRequired(); } ); group.Property(x => x.CreatedAt).IsRequired(); group.Metadata.FindNavigation(nameof(Group.Members)).SetPropertyAccessMode(PropertyAccessMode.Field); group.OwnsMany( x => x.Members, m => { m.ToTable("Members"); m.HasKey(x => x.Id) .HasName("PK_Members"); m.Property(x => x.Id) .HasConversion(x => x.Value, x => MemberId.From(x)) .ValueGeneratedNever() .IsRequired(); m.Property(x => x.UserId) .HasConversion(x => x.Value, x => UserId.From(x)) .ValueGeneratedNever() .IsRequired(); m.Property(x => x.IsOwner).IsRequired(); m.Property(x => x.Name) .HasConversion(x => x.Value, x => MemberName.Create(x)) .IsRequired(); m.OwnsOne( u => u.Avatar, b => { b.Property(x => x !.Value).IsRequired().HasColumnName("Avatar"); }
public async Task <Domain.Meetup> Get(Guid id) { var doc = await _meetups .Find <MeetupDocument>(meetup => meetup.Id == id) .FirstOrDefaultAsync(); return(doc != null ? new Domain.Meetup( MeetupId.From(id), MeetupTitle.From(doc.Title), Address.From(doc.Location), SeatsNumber.From(doc.NumberOfSeats), DateTimeRange.From(doc.Start, doc.End), doc.MembersGoing.ToDictionary(k => MemberId.From(Guid.Parse(k.Key)), v => v.Value), doc.MembersNotGoing.ToDictionary(k => MemberId.From(Guid.Parse(k.Key)), v => v.Value), doc.State.ToLower() switch { "created" => MeetupState.Created, "published" => MeetupState.Published, "closed" => MeetupState.Closed, "canceled" => MeetupState.Canceled, _ => MeetupState.Created, })