コード例 #1
0
    public async Task GetLatestGroupedByRecipients_ShouldIncludeRecipientByDirectMessage_WhenTheUserIsTheAuthorInPrivateMessage()
    {
        // Arrange
        const int userId = 1;

        IEnumerable <MessageRecipient> messageRecipients = new[]
        {
            new MessageRecipient
            {
                MessageRecipientId = 1,
                Message            = new Message {
                    MessageId = 1, AuthorId = 1, Created = new DateTime(2020, 1, 1), HtmlContent = "<p>Hello World</p>"
                },
                Recipient = new Recipient {
                    UserId = 2
                }
            },
            new MessageRecipient
            {
                MessageRecipientId = 2,
                Message            = new Message {
                    MessageId = 2, AuthorId = 2, Created = new DateTime(2020, 1, 2), HtmlContent = "<p>Hello World</p>"
                },
                Recipient = new Recipient {
                    UserId = 3
                }
            },
            new MessageRecipient
            {
                MessageRecipientId = 3,
                Message            = new Message {
                    MessageId = 3, AuthorId = 1, Created = new DateTime(2020, 1, 3), HtmlContent = "<p>Hello World</p>"
                },
                Recipient = new Recipient {
                    UserId = 3
                }
            },
        };

        await _context.MessageRecipients.AddRangeAsync(messageRecipients);

        await _context.SaveChangesAsync();

        IMessageRecipientRepository repository = new MessageRecipientRepository(_context);

        // Act
        IEnumerable <MessageRecipient> result = await repository.GetLatestGroupedByRecipients(userId);

        // Assert
        Assert.NotEmpty(result);
        Assert.Equal(2, result.Count());

        Assert.Equal(3, result.ElementAt(0).MessageRecipientId);
        Assert.Equal(1, result.ElementAt(1).MessageRecipientId);
    }
コード例 #2
0
        public async Task Add_ShouldAddRecipient()
        {
            // Arrange
            MessageRecipient messageRecipient = new MessageRecipient();

            _contextMock.Setup(m => m.MessageRecipients.AddAsync(messageRecipient, It.IsAny <CancellationToken>()));

            MessageRecipientRepository repository = new MessageRecipientRepository(_contextMock.Object);

            // Act
            await repository.Add(messageRecipient);

            // Assert
            _contextMock.Verify(m => m.MessageRecipients.AddAsync(messageRecipient, It.IsAny <CancellationToken>()));
        }
コード例 #3
0
        public async Task AddRange_ShouldAddMultipleRecipients()
        {
            // Arrange
            IEnumerable <MessageRecipient> messageRecipients = new[]
            {
                new MessageRecipient(),
                new MessageRecipient(),
            };

            _contextMock.Setup(m => m.MessageRecipients.AddRangeAsync(messageRecipients, It.IsAny <CancellationToken>()));

            MessageRecipientRepository repository = new MessageRecipientRepository(_contextMock.Object);

            // Act
            await repository.AddRange(messageRecipients);

            // Assert
            _contextMock.Verify(m => m.MessageRecipients.AddRangeAsync(messageRecipients, It.IsAny <CancellationToken>()));
        }
コード例 #4
0
    public async Task Add_ShouldAddRecipient()
    {
        // Arrange
        MessageRecipient messageRecipient = new MessageRecipient();

        IMessageRecipientRepository repository = new MessageRecipientRepository(_context);

        // Act
        await repository.Add(messageRecipient);

        await _context.SaveChangesAsync();

        _context.ChangeTracker.Clear();

        // Assert
        Assert.NotEqual(0, messageRecipient.MessageRecipientId);
        MessageRecipient addedMessageRecipient = await _context.MessageRecipients.FindAsync(messageRecipient.MessageRecipientId);

        Assert.NotNull(addedMessageRecipient);
    }
コード例 #5
0
    public async Task AddRange_ShouldAddMultipleRecipients()
    {
        // Arrange
        IEnumerable <MessageRecipient> messageRecipients = new[]
        {
            new MessageRecipient(),
            new MessageRecipient(),
        };

        IMessageRecipientRepository repository = new MessageRecipientRepository(_context);

        // Act
        await repository.AddRange(messageRecipients);

        await _context.SaveChangesAsync();

        _context.ChangeTracker.Clear();

        // Assert
        Assert.All(messageRecipients, mr => Assert.NotEqual(0, mr.MessageRecipientId));
    }
コード例 #6
0
        protected void Page_Load(object sender, EventArgs e)
        {
            _redirector  = new Redirector();
            _usersession = new UserSession();
            _webcontext  = new WebContext();
            _fi          = new FriendInvitationRepository();
            _ac          = new AccountRepository();
            _mr          = new MessageRecipientRepository();
            _f           = new FriendService();
            Account acid;

            if (_usersession != null)
            {
                if (_webcontext.AccountID != _usersession.CurrentUser.AccountID && _webcontext.AccountID != 0)
                {
                    acid = _ac.GetAccountByID(_webcontext.AccountID);
                    lblProfileName.Text    = acid.UserName;
                    lb_ban.Text            = " ( " + _f.SearchFriend(acid).Count.ToString() + " )";
                    testImage.Src          = "~/Image/ProfileAvatar.aspx?AccountID=" + acid.AccountID;
                    AccordionPane1.Visible = false;
                    AccordionPane3.Visible = false;
                    id = acid.AccountID;
                    lbtnChangeAvatar.Visible = false;
                }
                else
                {
                    lblProfileName.Text    = _usersession.CurrentUser.UserName;
                    lb_ban.Text            = " ( " + _f.SearchFriend(_usersession.CurrentUser).Count.ToString() + " )";
                    testImage.Src          = "~/Image/ProfileAvatar.aspx?AccountID=" + _usersession.CurrentUser.AccountID;
                    AccordionPane1.Visible = true;
                    AccordionPane3.Visible = true;
                    lb_invite.Text         = " ( " + _fi.FriendInv(_usersession.CurrentUser).Count.ToString() + " )";
                    id = _usersession.CurrentUser.AccountID;
                    lb_message.Text          = " ( 0 ) ";
                    lbtnChangeAvatar.Visible = true;
                    //lb_message.Text = " ( " + _mr.getMessageRecipientByAccountID(_usersession.CurrentUser.AccountID).Count.ToString() + " ) ";
                }
            }
        }
コード例 #7
0
    public async Task GetMessagesWithRecipient_ShouldLimitTheAmountOfLoadedMessages_FromBottomUpwards()
    {
        // Arrange
        const int userId      = 1;
        const int recipientId = 2;

        // Define a limit
        MessageBoundaries boundaries = new MessageBoundaries
        {
            Limit = 1,
        };

        IEnumerable <User> users = new[]
        {
            new User
            {
                UserId       = 1,
                Email        = "*****@*****.**",
                UserName     = "******",
                PasswordHash = Array.Empty <byte>(),
                PasswordSalt = Array.Empty <byte>()
            },
            new User
            {
                UserId       = 2,
                Email        = "*****@*****.**",
                UserName     = "******",
                PasswordHash = Array.Empty <byte>(),
                PasswordSalt = Array.Empty <byte>()
            },
        };

        IEnumerable <GroupMembership> groupMemberships = new[]
        {
            new GroupMembership
            {
                GroupMembershipId = 1,
                UserId            = 1
            },
            new GroupMembership
            {
                GroupMembershipId = 2,
                UserId            = 2
            }
        };

        IEnumerable <Recipient> recipients = new[]
        {
            new Recipient
            {
                RecipientId = 1,
                UserId      = 1,
            },
            new Recipient
            {
                RecipientId       = 2,
                GroupMembershipId = 1
            },
            new Recipient
            {
                RecipientId = 3,
                UserId      = 2,
            },
            new Recipient
            {
                RecipientId       = 4,
                GroupMembershipId = 2,
            },
        };

        IEnumerable <Message> messages = new[]
        {
            new Message
            {
                MessageId   = 1,
                AuthorId    = 1,
                Created     = new DateTime(2020, 1, 1, 15, 0, 0),
                HtmlContent = "<p>Hello Group</p>",
            },
            new Message
            {
                MessageId   = 2,
                AuthorId    = 2,
                Created     = new DateTime(2020, 1, 1, 15, 5, 0),
                HtmlContent = "<p>Hello Group</p>",
            },
        };

        IEnumerable <MessageRecipient> messageRecipients = new[]
        {
            new MessageRecipient
            {
                MessageRecipientId = 1,
                RecipientId        = 2,
                MessageId          = 1
            },
            new MessageRecipient
            {
                MessageRecipientId = 2,
                RecipientId        = 4,
                MessageId          = 1
            },
            new MessageRecipient
            {
                MessageRecipientId = 3,
                RecipientId        = 2,
                MessageId          = 2
            },
            new MessageRecipient
            {
                MessageRecipientId = 4,
                RecipientId        = 4,
                MessageId          = 2
            },
        };

        await _context.Users.AddRangeAsync(users);

        await _context.GroupMemberships.AddRangeAsync(groupMemberships);

        await _context.Recipients.AddRangeAsync(recipients);

        await _context.Messages.AddRangeAsync(messages);

        await _context.MessageRecipients.AddRangeAsync(messageRecipients);

        await _context.SaveChangesAsync();

        IMessageRecipientRepository repository = new MessageRecipientRepository(_context);

        // Act
        IEnumerable <MessageRecipient> result = await repository.GetMessagesWithRecipient(userId, recipientId, boundaries);

        // Assert
        Assert.NotEmpty(result);
        Assert.Single(result);

        Assert.Equal(3, result.ElementAt(0).MessageRecipientId);
    }
コード例 #8
0
    public async Task GetMessagesWithRecipient_ShouldIncludeMessage_WhenUserIsRecipientOfPrivateMessage()
    {
        // Arrange
        const int userId      = 1;
        const int recipientId = 3;

        MessageBoundaries boundaries = new();

        IEnumerable <User> users = new[]
        {
            new User
            {
                UserId       = 1,
                Email        = "*****@*****.**",
                UserName     = "******",
                PasswordHash = Array.Empty <byte>(),
                PasswordSalt = Array.Empty <byte>()
            },
            new User
            {
                UserId       = 2,
                Email        = "*****@*****.**",
                UserName     = "******",
                PasswordHash = Array.Empty <byte>(),
                PasswordSalt = Array.Empty <byte>()
            },
        };

        IEnumerable <GroupMembership> groupMemberships = new[]
        {
            new GroupMembership
            {
                GroupMembershipId = 1,
                UserId            = 1
            },
            new GroupMembership
            {
                GroupMembershipId = 2,
                UserId            = 2
            }
        };

        IEnumerable <Recipient> recipients = new[]
        {
            new Recipient
            {
                RecipientId = 1,
                UserId      = 1,
            },
            new Recipient
            {
                RecipientId       = 2,
                GroupMembershipId = 1
            },
            new Recipient
            {
                RecipientId = 3,
                UserId      = 2,
            },
            new Recipient
            {
                RecipientId       = 4,
                GroupMembershipId = 2,
            },
        };

        IEnumerable <Message> messages = new[]
        {
            new Message
            {
                MessageId   = 1,
                AuthorId    = 1,
                Created     = new DateTime(2020, 1, 1),
                HtmlContent = "<p>Hello Friend</p>",
            },
            new Message
            {
                MessageId   = 2,
                AuthorId    = 2,
                Created     = new DateTime(2020, 1, 1),
                HtmlContent = "<p>Hello Friend</p>",
            },
        };

        IEnumerable <MessageRecipient> messageRecipients = new[]
        {
            new MessageRecipient
            {
                MessageRecipientId = 1,
                RecipientId        = 3,
                MessageId          = 1
            },
            new MessageRecipient
            {
                MessageRecipientId = 2,
                RecipientId        = 1,
                MessageId          = 2
            },
            new MessageRecipient
            {
                MessageRecipientId = 3,
                RecipientId        = 2,
                MessageId          = 2
            },
            new MessageRecipient
            {
                MessageRecipientId = 4,
                RecipientId        = 4,
                MessageId          = 2
            },
        };

        await _context.Users.AddRangeAsync(users);

        await _context.GroupMemberships.AddRangeAsync(groupMemberships);

        await _context.Recipients.AddRangeAsync(recipients);

        await _context.Messages.AddRangeAsync(messages);

        await _context.MessageRecipients.AddRangeAsync(messageRecipients);

        await _context.SaveChangesAsync();

        IMessageRecipientRepository repository = new MessageRecipientRepository(_context);

        // Act
        IEnumerable <MessageRecipient> result = await repository.GetMessagesWithRecipient(userId, recipientId, boundaries);

        // Assert
        Assert.NotEmpty(result);
        Assert.Equal(2, result.Count());

        Assert.Equal(1, result.ElementAt(0).MessageRecipientId);
        Assert.Equal(2, result.ElementAt(1).MessageRecipientId);
    }
コード例 #9
0
    public async Task GetLatestGroupedByRecipients_ShouldIncludeRecipientByGroupMessage_WhenTheUserIsMemberOfTheGroup()
    {
        // Arrange
        const int userId = 1;

        IEnumerable <MessageRecipient> messageRecipients = new[]
        {
            // User is author in message to group 1
            new MessageRecipient
            {
                MessageRecipientId = 1,
                Message            = new Message {
                    MessageId = 1, AuthorId = 1, Created = new DateTime(2020, 1, 1), HtmlContent = "<p>Hello World</p>"
                },
                Recipient = new Recipient
                {
                    GroupMembershipId = 1,
                    GroupMembership   = new GroupMembership
                    {
                        GroupId           = 1,
                        GroupMembershipId = 1, UserId = 1,
                    }
                }
            },
            new MessageRecipient
            {
                MessageRecipientId = 2,
                Message            = new Message {
                    MessageId = 2, AuthorId = 1, Created = new DateTime(2020, 1, 1), HtmlContent = "<p>Hello World</p>"
                },
                Recipient = new Recipient
                {
                    GroupMembershipId = 2,
                    GroupMembership   = new GroupMembership
                    {
                        GroupId           = 1,
                        GroupMembershipId = 2, UserId = 2,
                    }
                }
            },
            new MessageRecipient
            {
                MessageRecipientId = 3,
                Message            = new Message {
                    MessageId = 3, AuthorId = 2, Created = new DateTime(2020, 1, 2), HtmlContent = "<p>Hello World</p>"
                },
                Recipient = new Recipient
                {
                    GroupMembershipId = 3,
                    GroupMembership   = new GroupMembership
                    {
                        GroupId           = 2,
                        GroupMembershipId = 3, UserId = 2,
                    }
                }
            },
            // User is recipient in message to group 2
            new MessageRecipient
            {
                MessageRecipientId = 4,
                Message            = new Message {
                    MessageId = 4, AuthorId = 2, Created = new DateTime(2020, 1, 2), HtmlContent = "<p>Hello World</p>"
                },
                Recipient = new Recipient
                {
                    GroupMembershipId = 4,
                    GroupMembership   = new GroupMembership
                    {
                        GroupId           = 2,
                        GroupMembershipId = 4, UserId = 1,
                    }
                }
            },
        };

        await _context.MessageRecipients.AddRangeAsync(messageRecipients);

        await _context.SaveChangesAsync();

        IMessageRecipientRepository repository = new MessageRecipientRepository(_context);

        // Act
        IEnumerable <MessageRecipient> result = await repository.GetLatestGroupedByRecipients(userId);

        // Assert
        Assert.NotEmpty(result);
        Assert.Equal(2, result.Count());

        Assert.Equal(4, result.ElementAt(0).MessageRecipientId);
        Assert.Equal(1, result.ElementAt(1).MessageRecipientId);
    }
コード例 #10
0
        public async Task GetMessagesWithRecipient_ShouldIncludeMessages_AfterADate()
        {
            // Arrange
            const int userId      = 1;
            const int recipientId = 1;

            MessageBoundaries boundaries = new MessageBoundaries
            {
                Limit = 50,
                After = new DateTime(2020, 1, 1, 15, 3, 0),
            };

            IEnumerable <MessageRecipient> databaseMessageRecipients = new[]
            {
                // User is author of message to recipient 1
                new MessageRecipient
                {
                    MessageRecipientId = 1,
                    RecipientId        = 1,
                    Message            = new Message
                    {
                        MessageId = 1,
                        AuthorId  = 1,
                        Created   = new DateTime(2020, 1, 1, 15, 0, 0),
                        Author    = new User
                        {
                            Recipient = new Recipient {
                                RecipientId = 1
                            }
                        }
                    },
                    Recipient = new Recipient
                    {
                        GroupMembership = new GroupMembership
                        {
                            Recipient = new Recipient {
                                RecipientId = 2
                            }
                        }
                    }
                },
                new MessageRecipient
                {
                    MessageRecipientId = 2,
                    RecipientId        = 2,
                    Message            = new Message
                    {
                        MessageId = 2,
                        AuthorId  = 1,
                        Created   = new DateTime(2020, 1, 1, 15, 5, 0),
                        Author    = new User
                        {
                            Recipient = new Recipient {
                                RecipientId = 2
                            }
                        }
                    },
                    Recipient = new Recipient
                    {
                        GroupMembership = new GroupMembership
                        {
                            Recipient = new Recipient {
                                RecipientId = 2
                            }
                        }
                    }
                },
                new MessageRecipient
                {
                    MessageRecipientId = 3,
                    RecipientId        = 1,
                    Message            = new Message
                    {
                        MessageId = 3,
                        AuthorId  = 2,
                        Created   = new DateTime(2020, 1, 1, 15, 6, 0),
                        Author    = new User
                        {
                            Recipient = new Recipient {
                                RecipientId = 1
                            }
                        }
                    },
                    Recipient = new Recipient
                    {
                        GroupMembership = new GroupMembership
                        {
                            Recipient = new Recipient {
                                RecipientId = 2
                            }
                        }
                    }
                },
                // User is author of message to recipient 1
                new MessageRecipient
                {
                    MessageRecipientId = 4,
                    RecipientId        = 1,
                    Message            = new Message
                    {
                        MessageId = 4,
                        AuthorId  = 1,
                        Created   = new DateTime(2020, 1, 1, 15, 6, 40),
                        Author    = new User
                        {
                            Recipient = new Recipient {
                                RecipientId = 1
                            }
                        }
                    },
                    Recipient = new Recipient
                    {
                        GroupMembership = new GroupMembership
                        {
                            Recipient = new Recipient {
                                RecipientId = 2
                            }
                        }
                    }
                },
            };

            DbSet <MessageRecipient> dbSetMock = databaseMessageRecipients
                                                 .AsQueryable()
                                                 .BuildMockDbSet()
                                                 .Object;

            _contextMock
            .Setup(m => m.MessageRecipients)
            .Returns(dbSetMock);

            MessageRecipientRepository repository = new MessageRecipientRepository(_contextMock.Object);

            // Act
            IEnumerable <MessageRecipient> result = await repository
                                                    .GetMessagesWithRecipient(userId, recipientId, boundaries)
                                                    .ToListAsync();

            // Assert
            Assert.NotEmpty(result);
            Assert.Single(result);

            Assert.Equal(4, result.ElementAt(0).MessageRecipientId);
        }
コード例 #11
0
        public async Task GetLatestGroupedByRecipients_ShouldIncludeRecipientByDirectMessage_WhenTheUserIsTheAuthorInPrivateMessage()
        {
            // Arrange
            const int userId = 1;

            IEnumerable <MessageRecipient> databaseMessageRecipients = new[]
            {
                new MessageRecipient
                {
                    MessageRecipientId = 1,
                    Message            = new Message {
                        MessageId = 1, AuthorId = 1, Created = new DateTime(2020, 1, 1)
                    },
                    Recipient = new Recipient {
                        UserId = 2
                    }
                },
                new MessageRecipient
                {
                    MessageRecipientId = 2,
                    Message            = new Message {
                        MessageId = 2, AuthorId = 2, Created = new DateTime(2020, 1, 2)
                    },
                    Recipient = new Recipient {
                        UserId = 3
                    }
                },
                new MessageRecipient
                {
                    MessageRecipientId = 3,
                    Message            = new Message {
                        MessageId = 3, AuthorId = 1, Created = new DateTime(2020, 1, 3)
                    },
                    Recipient = new Recipient {
                        UserId = 3
                    }
                },
            };

            DbSet <MessageRecipient> dbSetMock = databaseMessageRecipients
                                                 .AsQueryable()
                                                 .BuildMockDbSet()
                                                 .Object;

            _contextMock
            .Setup(m => m.MessageRecipients)
            .Returns(dbSetMock);

            MessageRecipientRepository repository = new MessageRecipientRepository(_contextMock.Object);

            // Act
            IEnumerable <MessageRecipient> result = await repository
                                                    .GetLatestGroupedByRecipients(userId)
                                                    .ToListAsync();

            // Assert
            Assert.NotEmpty(result);
            Assert.Equal(2, result.Count());

            Assert.Equal(3, result.ElementAt(0).MessageRecipientId);
            Assert.Equal(1, result.ElementAt(1).MessageRecipientId);
        }
コード例 #12
0
        public async Task GetMessagesWithRecipient_ShouldIncludeMessage_WhenUserIsRecipientOfGroupMessage()
        {
            // Arrange
            const int userId      = 1;
            const int recipientId = 1;

            MessageBoundaries boundaries = new MessageBoundaries();

            IEnumerable <MessageRecipient> databaseMessageRecipients = new[]
            {
                // User is recipient of message from recipient 1 (included)
                new MessageRecipient
                {
                    MessageRecipientId = 1,
                    RecipientId        = 1,
                    Message            = new Message
                    {
                        MessageId = 1,
                        AuthorId  = 2,
                        Created   = new DateTime(2020, 1, 1),
                        Author    = new User
                        {
                            Recipient = new Recipient {
                                RecipientId = 1
                            }
                        }
                    },
                    Recipient = new Recipient
                    {
                        GroupMembership = new GroupMembership
                        {
                            Recipient = new Recipient {
                                RecipientId = 1
                            }
                        }
                    }
                },
                // User is recipient of message from recipient 3 (not included)
                new MessageRecipient
                {
                    MessageRecipientId = 2,
                    RecipientId        = 3,
                    Message            = new Message
                    {
                        MessageId = 2,
                        AuthorId  = 3,
                        Created   = new DateTime(2020, 1, 2),
                        Author    = new User
                        {
                            Recipient = new Recipient {
                                RecipientId = 3
                            }
                        }
                    },
                    Recipient = new Recipient
                    {
                        GroupMembership = new GroupMembership
                        {
                            Recipient = new Recipient {
                                RecipientId = 3
                            }
                        }
                    }
                },
                // Different user is recipient of message from recipient 1 (not included)
                new MessageRecipient
                {
                    MessageRecipientId = 3,
                    RecipientId        = 2,
                    Message            = new Message
                    {
                        MessageId = 3,
                        AuthorId  = 2,
                        Created   = new DateTime(2020, 1, 3),
                        Author    = new User
                        {
                            Recipient = new Recipient {
                                RecipientId = 1
                            }
                        }
                    },
                    Recipient = new Recipient
                    {
                        GroupMembership = new GroupMembership
                        {
                            Recipient = new Recipient {
                                RecipientId = 2
                            }
                        }
                    }
                },
                // User is recipient of message from recipient 1
                new MessageRecipient
                {
                    MessageRecipientId = 4,
                    RecipientId        = 1,
                    Message            = new Message
                    {
                        MessageId = 4,
                        AuthorId  = 2,
                        Created   = new DateTime(2020, 1, 4),
                        Author    = new User
                        {
                            Recipient = new Recipient {
                                RecipientId = 1
                            }
                        }
                    },
                    Recipient = new Recipient
                    {
                        GroupMembership = new GroupMembership
                        {
                            Recipient = new Recipient {
                                RecipientId = 1
                            }
                        }
                    }
                },
            };

            DbSet <MessageRecipient> dbSetMock = databaseMessageRecipients
                                                 .AsQueryable()
                                                 .BuildMockDbSet()
                                                 .Object;

            _contextMock
            .Setup(m => m.MessageRecipients)
            .Returns(dbSetMock);

            MessageRecipientRepository repository = new MessageRecipientRepository(_contextMock.Object);

            // Act
            IEnumerable <MessageRecipient> result = await repository
                                                    .GetMessagesWithRecipient(userId, recipientId, boundaries)
                                                    .ToListAsync();

            // Assert
            Assert.NotEmpty(result);
            Assert.Equal(2, result.Count());

            Assert.Equal(1, result.ElementAt(0).MessageRecipientId);
            Assert.Equal(4, result.ElementAt(1).MessageRecipientId);
        }
コード例 #13
0
        public async Task GetLatestGroupedByRecipients_ShouldIncludeRecipientByGroupMessage_WhenTheUserIsMemberOfTheGroup()
        {
            // Arrange
            const int userId = 1;

            IEnumerable <MessageRecipient> databaseMessageRecipients = new[]
            {
                // User is author in message to group 1
                new MessageRecipient
                {
                    MessageRecipientId = 1,
                    Message            = new Message {
                        MessageId = 1, AuthorId = 1, Created = new DateTime(2020, 1, 1)
                    },
                    Recipient = new Recipient
                    {
                        GroupMembershipId = 1,
                        GroupMembership   = new GroupMembership
                        {
                            GroupId           = 1,
                            GroupMembershipId = 1, UserId = 1,
                        }
                    }
                },
                new MessageRecipient
                {
                    MessageRecipientId = 2,
                    Message            = new Message {
                        MessageId = 1, AuthorId = 1, Created = new DateTime(2020, 1, 1)
                    },
                    Recipient = new Recipient
                    {
                        GroupMembershipId = 2,
                        GroupMembership   = new GroupMembership
                        {
                            GroupId           = 1,
                            GroupMembershipId = 2, UserId = 2,
                        }
                    }
                },
                new MessageRecipient
                {
                    MessageRecipientId = 3,
                    Message            = new Message {
                        MessageId = 2, AuthorId = 2, Created = new DateTime(2020, 1, 2)
                    },
                    Recipient = new Recipient
                    {
                        GroupMembershipId = 3,
                        GroupMembership   = new GroupMembership
                        {
                            GroupId           = 2,
                            GroupMembershipId = 3, UserId = 2,
                        }
                    }
                },
                // User is recipient in message to group 2
                new MessageRecipient
                {
                    MessageRecipientId = 4,
                    Message            = new Message {
                        MessageId = 2, AuthorId = 2, Created = new DateTime(2020, 1, 2)
                    },
                    Recipient = new Recipient
                    {
                        GroupMembershipId = 4,
                        GroupMembership   = new GroupMembership
                        {
                            GroupId           = 2,
                            GroupMembershipId = 4, UserId = 1,
                        }
                    }
                },
            };

            DbSet <MessageRecipient> dbSetMock = databaseMessageRecipients
                                                 .AsQueryable()
                                                 .BuildMockDbSet()
                                                 .Object;

            _contextMock
            .Setup(m => m.MessageRecipients)
            .Returns(dbSetMock);

            MessageRecipientRepository repository = new MessageRecipientRepository(_contextMock.Object);

            // Act
            IEnumerable <MessageRecipient> result = await repository
                                                    .GetLatestGroupedByRecipients(userId)
                                                    .ToListAsync();

            // Assert
            Assert.NotEmpty(result);
            Assert.Equal(2, result.Count());

            Assert.Equal(4, result.ElementAt(0).MessageRecipientId);
            Assert.Equal(1, result.ElementAt(1).MessageRecipientId);
        }