42 lines
2.0 KiB
C#
42 lines
2.0 KiB
C#
using MongoDB.Entities;
|
|||
|
|
|
||
|
|
using PrivaPub.Domain.Privacy;
|
||
|
|
using PrivaPub.Models.Group;
|
||
|
|
using PrivaPub.Models.Post;
|
||
|
|
using PrivaPub.Tests.Support;
|
||
|
|
|
||
|
|
using GroupEntity = PrivaPub.Models.Group.Group;
|
||
|
|
|
||
|
|
namespace PrivaPub.Tests.Domain
|
||
|
|
{
|
||
|
|
[Trait("Category", "Integration")]
|
||
|
|
public class VisibilityPolicyTests
|
||
|
|
{
|
||
|
|
[Fact]
|
||
|
|
public async Task Who_sees_what()
|
||
|
|
{
|
||
|
|
Assert.SkipUnless(MongoFixture.Enabled, MongoFixture.Skip);
|
||
|
|
var token = TestContext.Current.CancellationToken;
|
||
|
|
var conversation = new DmGroup { Members = new() { new GroupMember { AvatarId = "alice" }, new GroupMember { AvatarId = "https://r.example/u/bob", IsForeign = true } } };
|
||
|
|
var circle = new GroupEntity { UserName = $"c{Guid.NewGuid():N}"[..20], Members = new() { new GroupMember { AvatarId = "carol" } } };
|
||
|
|
await DB.Default.SaveAsync(conversation, token);
|
||
|
|
await DB.Default.SaveAsync(circle, token);
|
||
|
|
|
||
|
|
var direct = new Post { Visibility = PostVisibility.Direct, ConversationId = conversation.ID, GroupUserId = "dave" };
|
||
|
|
var circlePost = new Post { Visibility = PostVisibility.Circle, GroupId = circle.ID };
|
||
|
|
var followersOnly = new Post { Visibility = PostVisibility.FollowersOnly, Mentions = new() { new PostMention { IsLocal = true, AccountId = "erin" } } };
|
||
|
|
var deleted = new Post { Visibility = PostVisibility.Public, DeletedAt = DateTime.UtcNow };
|
||
|
|
|
||
|
|
Assert.True(await VisibilityPolicy.CanSee(new Post(), default, token));
|
||
|
|
Assert.True(await VisibilityPolicy.CanSee(direct, "alice", token));
|
||
|
|
Assert.True(await VisibilityPolicy.CanSee(direct, "dave", token));
|
||
|
|
Assert.False(await VisibilityPolicy.CanSee(direct, "carol", token));
|
||
|
|
Assert.False(await VisibilityPolicy.CanSee(direct, default, token));
|
||
|
|
Assert.True(await VisibilityPolicy.CanSee(circlePost, "carol", token));
|
||
|
|
Assert.False(await VisibilityPolicy.CanSee(circlePost, "alice", token));
|
||
|
|
Assert.True(await VisibilityPolicy.CanSee(followersOnly, "erin", token));
|
||
|
|
Assert.False(await VisibilityPolicy.CanSee(followersOnly, "alice", token));
|
||
|
|
Assert.False(await VisibilityPolicy.CanSee(deleted, "alice", token));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|