Exemplo n.º 1
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);
    }
        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);
        }
Exemplo n.º 3
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);
    }
        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);
        }