public async Task GetOwnRecipientsQueryHandler_CorrectlyMapsTargets()
    {
        // Arrange
        GetOwnRecipientsQuery.Handler handler = new GetOwnRecipientsQuery.Handler(_unitOfWorkMock.Object, _userProviderMock.Object);

        // Act
        List <RecipientResource> recipients = (await handler.Handle(new GetOwnRecipientsQuery())).ToList();

        // Assert
        Assert.Equal(3, recipients.Count);

        Assert.Null(recipients.ElementAt(0).TargetGroup);
        Assert.NotNull(recipients.ElementAt(0).TargetUser);
        Assert.Equal(2, recipients.ElementAt(0).TargetUser.UserId);
        Assert.Equal("user2", recipients.ElementAt(0).TargetUser.UserName);

        Assert.Null(recipients.ElementAt(1).TargetGroup);
        Assert.NotNull(recipients.ElementAt(1).TargetUser);
        Assert.Equal(3, recipients.ElementAt(1).TargetUser.UserId);
        Assert.Equal("user3", recipients.ElementAt(1).TargetUser.UserName);


        Assert.Null(recipients.ElementAt(2).TargetUser);
        Assert.NotNull(recipients.ElementAt(2).TargetGroup);
        Assert.Equal(1, recipients.ElementAt(2).TargetGroup.GroupId);
        Assert.Equal("group1", recipients.ElementAt(2).TargetGroup.Name);
    }
    public async Task GetOwnRecipientsQueryHandler_CorrectlyMapsRecipientIds()
    {
        // Arrange
        GetOwnRecipientsQuery.Handler handler = new GetOwnRecipientsQuery.Handler(_unitOfWorkMock.Object, _userProviderMock.Object);

        // Act
        List <RecipientResource> recipients = (await handler.Handle(new GetOwnRecipientsQuery())).ToList();

        // Assert
        Assert.Equal(3, recipients.Count);

        Assert.Equal(2, recipients.ElementAt(0).RecipientId);
        Assert.Equal(3, recipients.ElementAt(1).RecipientId);
        Assert.Equal(4, recipients.ElementAt(2).RecipientId);
    }
    public async Task GetOwnRecipientsQueryHandler_CorrectlyMapsAvailabilityStatuses()
    {
        // Arrange
        GetOwnRecipientsQuery.Handler handler = new GetOwnRecipientsQuery.Handler(_unitOfWorkMock.Object, _userProviderMock.Object);

        // Act
        List <RecipientResource> recipients = (await handler.Handle(new GetOwnRecipientsQuery())).ToList();

        // Assert
        Assert.Equal(3, recipients.Count);

        Assert.Equal(AvailabilityStatus.Offline, recipients.ElementAt(0).AvailabilityStatus);
        Assert.Equal(AvailabilityStatus.Online, recipients.ElementAt(1).AvailabilityStatus);
        Assert.Equal((AvailabilityStatus)0, recipients.ElementAt(2).AvailabilityStatus);
    }
    public async Task GetOwnRecipientsQueryHandler_CorrectlyMapsLatestMessages()
    {
        // Arrange
        GetOwnRecipientsQuery.Handler handler = new GetOwnRecipientsQuery.Handler(_unitOfWorkMock.Object, _userProviderMock.Object);

        // Act
        List <RecipientResource> recipients = (await handler.Handle(new GetOwnRecipientsQuery())).ToList();

        // Assert
        Assert.Equal(3, recipients.Count);

        Assert.NotNull(recipients.ElementAt(0).LatestMessage);
        Assert.Equal(1, recipients.ElementAt(0).LatestMessage.MessageId);
        Assert.False(recipients.ElementAt(0).LatestMessage.IsOwnMessage);

        Assert.NotNull(recipients.ElementAt(1).LatestMessage);
        Assert.Equal(2, recipients.ElementAt(1).LatestMessage.MessageId);
        Assert.True(recipients.ElementAt(1).LatestMessage.IsOwnMessage);

        Assert.NotNull(recipients.ElementAt(2).LatestMessage);
        Assert.Equal(3, recipients.ElementAt(2).LatestMessage.MessageId);
        Assert.False(recipients.ElementAt(2).LatestMessage.IsOwnMessage);
    }