public async Task PostList_IncludeDeleted(TimelineNameGenerator generator) { using var client = await CreateClientAsUser(); var posts = new List <HttpTimelinePost>(); for (int i = 0; i < 4; i++) { var body = await client.TestPostAsync <HttpTimelinePost>($"timelines/{generator(1)}/posts", CreateTextPostRequest("a")); posts.Add(body); } foreach (var id in new long[] { posts[0].Id, posts[2].Id }) { await client.TestDeleteAsync($"timelines/{generator(1)}/posts/{id}"); } { posts = await client.TestGetAsync <List <HttpTimelinePost> >($"timelines/{generator(1)}/posts?includeDeleted=true"); posts.Should().HaveCount(4); posts.Select(p => p.Deleted).Should().Equal(true, false, true, false); } }
public async Task CreatePostPermission_Should_Work(TimelineNameGenerator generator) { using (var client = await CreateClientAsUser()) { await client.PutTimelineMemberAsync(generator(1), "user2"); } using (var client = await CreateDefaultClient()) { // no auth should get 401 await client.TestPostAssertUnauthorizedAsync($"timelines/{generator(1)}/posts", CreateTextPostRequest("aaa")); } using (var client = await CreateClientAsUser()) { // post self's await client.TestPostAsync($"timelines/{generator(1)}/posts", CreateTextPostRequest("aaa")); // post other not as a member should get 403 await client.TestPostAssertForbiddenAsync($"timelines/{generator(0)}/posts", CreateTextPostRequest("aaa")); } using (var client = await CreateClientAsAdministrator()) { // post as admin await client.TestPostAsync($"timelines/{generator(1)}/posts", CreateTextPostRequest("aaa")); } using (var client = await CreateClientAs(2)) { // post as member await client.TestPostAsync($"timelines/{generator(1)}/posts", CreateTextPostRequest("aaa")); } }
public async Task TimelineDescription_Should_Work(TimelineNameGenerator generator) { // TODO! Permission tests. using var client = await CreateClientAsUser(); var timelineName = generator(1); { var timeline = await client.GetTimelineAsync(timelineName); timeline.Description.Should().BeEmpty(); } const string mockDescription = "haha"; { var timeline = await client.PatchTimelineAsync(timelineName, new() { Description = mockDescription }); timeline.Description.Should().Be(mockDescription); } { var timeline = await client.GetTimelineAsync(timelineName); timeline.Description.Should().Be(mockDescription); } { var timeline = await client.PatchTimelineAsync(timelineName, new() { Description = null }); timeline.Description.Should().Be(mockDescription); } { var timeline = await client.GetTimelineAsync(timelineName); timeline.Description.Should().Be(mockDescription); } { var timeline = await client.PatchTimelineAsync(timelineName, new() { Description = "" }); timeline.Description.Should().BeEmpty(); } { var timeline = await client.GetTimelineAsync(timelineName); timeline.Description.Should().BeEmpty(); } }
public async Task GetPost(TimelineNameGenerator generator) { using var client = await CreateClientAsUser(); await client.TestGetAssertNotFoundAsync($"timelines/{generator(1)}/posts/1"); var post = await client.TestPostAsync <HttpTimelinePost>($"timelines/{generator(1)}/posts", CreateTextPostRequest("a")); var post2 = await client.TestGetAsync <HttpTimelinePost>($"timelines/{generator(1)}/posts/{post.Id}"); post2.Should().BeEquivalentTo(post); await client.TestDeleteAsync($"timelines/{generator(1)}/posts/{post.Id}"); await client.TestGetAssertNotFoundAsync($"timelines/{generator(1)}/posts/{post.Id}"); }
public async Task Member_Should_Work(TimelineNameGenerator generator) { // TODO! Invalid model tests. // TODO! Permission tests. using var client = await CreateClientAsUser(); var timelineName = generator(1); async Task AssertMembers(List <HttpUser> members) { var body = await client.GetTimelineAsync(timelineName); body.Members.Should().NotBeNull().And.BeEquivalentTo(members); } async Task AssertEmptyMembers() { var body = await client.GetTimelineAsync(timelineName); body.Members.Should().NotBeNull().And.BeEmpty(); } await AssertEmptyMembers(); await client.TestPutAssertErrorAsync($"timelines/{timelineName}/members/usernotexist", errorCode : ErrorCodes.NotExist.User); await AssertEmptyMembers(); await client.PutTimelineMemberAsync(timelineName, "user2"); await AssertMembers(new List <HttpUser> { await client.GetUserAsync("user2") }); await client.DeleteTimelineMemberAsync(timelineName, "user2"); await AssertEmptyMembers(); await client.TestDeleteAssertErrorAsync($"timelines/{timelineName}/members/usernotexist"); await AssertEmptyMembers(); }
public async Task Get_Manageable_Postable(TimelineNameGenerator generator) { { using var client = await CreateClientAsUser(); var timeline = await client.TestGetAsync <HttpTimeline>($"timelines/{generator(1)}"); timeline.Manageable.Should().Be(true); timeline.Postable.Should().Be(true); } { using var client = await CreateClientAs(2); var timeline = await client.TestGetAsync <HttpTimeline>($"timelines/{generator(1)}"); timeline.Manageable.Should().Be(false); timeline.Postable.Should().Be(false); } }
public async Task Color(TimelineNameGenerator generator) { using var client = await CreateClientAsUser(); await client.TestPostAssertInvalidModelAsync($"timelines/{generator(1)}/posts", CreateTextPostRequest("a", color : "aa")); long id; { var post = await client.TestPostAsync <HttpTimelinePost>($"timelines/{generator(1)}/posts", CreateTextPostRequest("a", color : "#aabbcc")); post.Color.Should().Be("#aabbcc"); id = post.Id; } { var post = await client.TestGetAsync <HttpTimelinePost>($"timelines/{generator(1)}/posts/{id}"); post.Color.Should().Be("#aabbcc"); } }
public async Task Title(TimelineNameGenerator generator) { using var client = await CreateClientAsUser(); { var body = await client.GetTimelineAsync(generator(1)); body.Title.Should().Be(body.Name); } { var body = await client.PatchTimelineAsync(generator(1), new HttpTimelinePatchRequest { Title = "atitle" }); body.Title.Should().Be("atitle"); } { var body = await client.GetTimelineAsync(generator(1)); body.Title.Should().Be("atitle"); } }
public async Task PatchPost(TimelineNameGenerator generator) { using var client = await CreateClientAsUser(); var post = await client.TestPostAsync <HttpTimelinePost>($"timelines/{generator(1)}/posts", CreateTextPostRequest("a")); var date = new DateTime(2000, 10, 1); var post2 = await client.TestPatchAsync <HttpTimelinePost>($"timelines/{generator(1)}/posts/{post.Id}", new HttpTimelinePostPatchRequest { Time = date, Color = "#aabbcc" }); post2.Time.Should().Be(date); post2.Color.Should().Be("#aabbcc"); var post3 = await client.TestGetAsync <HttpTimelinePost>($"timelines/{generator(1)}/posts/{post.Id}"); post3.Time.Should().Be(date); post3.Color.Should().Be("#aabbcc"); }
public async Task Post_ModifiedSince_And_IncludeDeleted(TimelineNameGenerator generator) { using var client = await CreateClientAsUser(); var posts = new List <HttpTimelinePost>(); for (int i = 0; i < 4; i++) { var post = await client.TestPostAsync <HttpTimelinePost>($"timelines/{generator(1)}/posts", CreateTextPostRequest("a")); posts.Add(post); await Task.Delay(TimeSpan.FromSeconds(1)); } await client.TestDeleteAsync($"timelines/{generator(1)}/posts/{posts[2].Id}"); { posts = await client.TestGetAsync <List <HttpTimelinePost> >($"timelines/{generator(1)}/posts?modifiedSince={posts[1].LastUpdated.ToString("s", CultureInfo.InvariantCulture)}&includeDeleted=true"); posts.Should().HaveCount(3); posts.Select(p => p.Deleted).Should().Equal(false, true, false); } }
public async Task GetPost_Should_Ordered(TimelineNameGenerator generator) { using var client = await CreateClientAsUser(); async Task <long> CreatePost(DateTime time) { var body = await client.TestPostAsync <HttpTimelinePost>($"timelines/{generator(1)}/posts", CreateTextPostRequest("aaa", time)); return(body.Id); } var now = DateTime.UtcNow; var id0 = await CreatePost(now.AddDays(1)); var id1 = await CreatePost(now.AddDays(-1)); var id2 = await CreatePost(now); { var body = await client.TestGetAsync <List <HttpTimelinePost> >($"timelines/{generator(1)}/posts"); body.Select(p => p.Id).Should().Equal(id1, id2, id0); } }
public async Task Color(TimelineNameGenerator generator) { using var client = await CreateClientAsUser(); { var timeline = await client.TestGetAsync <HttpTimeline>($"timelines/{generator(1)}"); timeline.Color.Should().Be(null); } await client.TestPatchAssertInvalidModelAsync($"timelines/{generator(1)}", new HttpTimelinePatchRequest { Color = "!!!" }); { var timeline = await client.TestPatchAsync <HttpTimeline>($"timelines/{generator(1)}", new HttpTimelinePatchRequest { Color = "#112233" }); timeline.Color.Should().Be("#112233"); } { var timeline = await client.TestGetAsync <HttpTimeline>($"timelines/{generator(1)}"); timeline.Color.Should().Be("#112233"); } }
public async Task Timeline_LastModified(TimelineNameGenerator generator) { using var client = await CreateClientAsUser(); DateTime lastModified; { var body = await client.GetTimelineAsync(generator(1)); lastModified = body.LastModified; } await Task.Delay(1000); { var body = await client.PatchTimelineAsync(generator(1), new() { Description = "123" }); lastModified = body.LastModified.Should().BeAfter(lastModified).And.Subject !.Value; } { var body = await client.GetTimelineAsync(generator(1)); body.LastModified.Should().Be(lastModified); } await Task.Delay(1000); await client.PutTimelineMemberAsync(generator(1), "user2"); { var body = await client.GetTimelineAsync(generator(1)); body.LastModified.Should().BeAfter(lastModified); } }
public async Task GetPostsAndVisibility_Should_Work(TimelineNameGenerator generator) { { // default visibility is registered { using var client = await CreateDefaultClient(); await client.TestGetAssertForbiddenAsync($"timelines/{generator(1)}/posts"); } { using var client = await CreateClientAsUser(); await client.TestGetAsync($"timelines/{generator(0)}/posts"); } } { // change visibility to public { using var client = await CreateClientAsUser(); await client.PatchTimelineAsync(generator(1), new() { Visibility = TimelineVisibility.Public }); } { using var client = await CreateDefaultClient(); await client.TestGetAsync($"timelines/{generator(1)}/posts"); } } { // change visibility to private { using var client = await CreateClientAsAdministrator(); await client.PatchTimelineAsync(generator(1), new() { Visibility = TimelineVisibility.Private }); await client.PatchTimelineAsync(generator(0), new() { Visibility = TimelineVisibility.Private }); } { using var client = await CreateDefaultClient(); await client.TestGetAssertForbiddenAsync($"timelines/{generator(1)}/posts"); } { // user can't read admin's using var client = await CreateClientAsUser(); await client.TestGetAssertForbiddenAsync($"timelines/{generator(0)}/posts"); } { // admin can read user's using var client = await CreateClientAsAdministrator(); await client.TestGetAsync($"timelines/{generator(1)}/posts"); } { // add member using var client = await CreateClientAsAdministrator(); await client.PutTimelineMemberAsync(generator(0), "user1"); } { // now user can read admin's using var client = await CreateClientAsUser(); await client.TestGetAsync($"timelines/{generator(0)}/posts"); } } }
public async Task DeletePostPermission_Should_Work(TimelineNameGenerator generator) { async Task <long> CreatePost(int userNumber) { using var client = await CreateClientAs(userNumber); var body = await client.TestPostAsync <HttpTimelinePost>($"timelines/{generator(1)}/posts", CreateTextPostRequest("aaa")); return(body.Id); } using (var client = await CreateClientAsUser()) { await client.PutTimelineMemberAsync(generator(1), "user2"); await client.PutTimelineMemberAsync(generator(1), "user3"); } { // no auth should get 401 using var client = await CreateDefaultClient(); await client.TestDeleteAssertUnauthorizedAsync($"timelines/{generator(1)}/posts/12"); } { // self can delete self var postId = await CreatePost(1); using var client = await CreateClientAsUser(); await client.TestDeleteAsync($"timelines/{generator(1)}/posts/{postId}"); } { // admin can delete any var postId = await CreatePost(1); using var client = await CreateClientAsAdministrator(); await client.TestDeleteAsync($"timelines/{generator(1)}/posts/{postId}"); } { // owner can delete other var postId = await CreatePost(2); using var client = await CreateClientAsUser(); await client.TestDeleteAsync($"timelines/{generator(1)}/posts/{postId}"); } { // author can delete self var postId = await CreatePost(2); using var client = await CreateClientAs(2); await client.TestDeleteAsync($"timelines/{generator(1)}/posts/{postId}"); } { // otherwise is forbidden var postId = await CreatePost(2); using var client = await CreateClientAs(3); await client.TestDeleteAssertForbiddenAsync($"timelines/{generator(1)}/posts/{postId}"); } }