Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 3
0
        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));
        }
Exemplo n.º 4
0
        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]));
        }
Exemplo n.º 5
0
        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]));
        }
Exemplo n.º 6
0
        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");
                }
Exemplo n.º 7
0
        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,
            })