aboutsummaryrefslogtreecommitdiff
path: root/Timeline.Tests/IntegratedTests/PersonalTimelineTest.cs
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2019-11-18 19:29:37 +0800
committercrupest <crupest@outlook.com>2019-11-18 19:29:37 +0800
commit468d7f4c416d4469375b7170beb5e388737c0970 (patch)
tree047960f05911f7c841223f7b6528fe30b8e52088 /Timeline.Tests/IntegratedTests/PersonalTimelineTest.cs
parent5b5bb69c3ba2150816f120860be46d49c5bc37aa (diff)
downloadtimeline-468d7f4c416d4469375b7170beb5e388737c0970.tar.gz
timeline-468d7f4c416d4469375b7170beb5e388737c0970.tar.bz2
timeline-468d7f4c416d4469375b7170beb5e388737c0970.zip
Write tests and fix bugs found via tests.
Diffstat (limited to 'Timeline.Tests/IntegratedTests/PersonalTimelineTest.cs')
-rw-r--r--Timeline.Tests/IntegratedTests/PersonalTimelineTest.cs135
1 files changed, 135 insertions, 0 deletions
diff --git a/Timeline.Tests/IntegratedTests/PersonalTimelineTest.cs b/Timeline.Tests/IntegratedTests/PersonalTimelineTest.cs
index 9629fc0a..aaa6215c 100644
--- a/Timeline.Tests/IntegratedTests/PersonalTimelineTest.cs
+++ b/Timeline.Tests/IntegratedTests/PersonalTimelineTest.cs
@@ -7,6 +7,7 @@ using System.Linq;
using System.Net.Http;
using System.Text.Json;
using System.Threading.Tasks;
+using Timeline.Models;
using Timeline.Models.Http;
using Timeline.Tests.Helpers;
using Timeline.Tests.Helpers.Authentication;
@@ -22,6 +23,64 @@ namespace Timeline.Tests.IntegratedTests
}
+ [Fact]
+ public async Task Member_Should_Work()
+ {
+ const string getUrl = "users/user/timeline";
+ const string changeUrl = "users/user/timeline/op/member";
+ using var client = await Factory.CreateClientAsUser();
+
+ async Task AssertMembers(IList<string> members)
+ {
+ var res = await client.GetAsync(getUrl);
+ res.Should().HaveStatusCode(200)
+ .And.HaveJsonBody<BaseTimelineInfo>()
+ .Which.Members.Should().NotBeNull().And.BeEquivalentTo(members);
+ }
+
+ async Task AssertEmptyMembers()
+ {
+ var res = await client.GetAsync(getUrl);
+ res.Should().HaveStatusCode(200)
+ .And.HaveJsonBody<BaseTimelineInfo>()
+ .Which.Members.Should().NotBeNull().And.BeEmpty();
+ }
+
+ await AssertEmptyMembers();
+ {
+ var res = await client.PostAsJsonAsync(changeUrl,
+ new TimelineMemberChangeRequest { Add = new List<string> { "admin", "usernotexist" } });
+ res.Should().HaveStatusCode(400)
+ .And.HaveCommonBody()
+ .Which.Code.Should().Be(ErrorCodes.Http.Timeline.ChangeMemberUserNotExist);
+ }
+ {
+ var res = await client.PostAsJsonAsync(changeUrl,
+ new TimelineMemberChangeRequest { Remove = new List<string> { "admin", "usernotexist" } });
+ res.Should().HaveStatusCode(400)
+ .And.HaveCommonBody()
+ .Which.Code.Should().Be(ErrorCodes.Http.Timeline.ChangeMemberUserNotExist);
+ }
+ {
+ var res = await client.PostAsJsonAsync(changeUrl,
+ new TimelineMemberChangeRequest { Add = new List<string> { "admin" }, Remove = new List<string> { "admin" } });
+ res.Should().HaveStatusCode(200);
+ await AssertEmptyMembers();
+ }
+ {
+ var res = await client.PostAsJsonAsync(changeUrl,
+ new TimelineMemberChangeRequest { Add = new List<string> { "admin" } });
+ res.Should().HaveStatusCode(200);
+ await AssertMembers(new List<string> { "admin" });
+ }
+ {
+ var res = await client.PostAsJsonAsync(changeUrl,
+ new TimelineMemberChangeRequest { Remove = new List<string> { "admin" } });
+ res.Should().HaveStatusCode(200);
+ await AssertEmptyMembers();
+ }
+ }
+
[Theory]
[InlineData(AuthType.None, 200, 401, 401, 401, 401)]
[InlineData(AuthType.User, 200, 200, 403, 200, 403)]
@@ -58,5 +117,81 @@ namespace Timeline.Tests.IntegratedTests
res.Should().HaveStatusCode(opMemberAdmin);
}
}
+
+ [Fact]
+ public async Task Permission_GetPost()
+ {
+ const string userUrl = "users/user/timeline/posts";
+ const string adminUrl = "users/admin/timeline/posts";
+ { // default visibility is registered
+ {
+ using var client = Factory.CreateDefaultClient();
+ var res = await client.GetAsync(userUrl);
+ res.Should().HaveStatusCode(403);
+ }
+
+ {
+ using var client = await Factory.CreateClientAsUser();
+ var res = await client.GetAsync(adminUrl);
+ res.Should().HaveStatusCode(200);
+ }
+ }
+
+ { // change visibility to public
+ {
+ using var client = await Factory.CreateClientAsUser();
+ var res = await client.PostAsJsonAsync("users/user/timeline/op/property",
+ new TimelinePropertyChangeRequest { Visibility = TimelineVisibility.Public });
+ res.Should().HaveStatusCode(200);
+ }
+ {
+ using var client = Factory.CreateDefaultClient();
+ var res = await client.GetAsync(userUrl);
+ res.Should().HaveStatusCode(200);
+ }
+ }
+
+ { // change visibility to private
+ {
+ using var client = await Factory.CreateClientAsAdmin();
+ {
+ var res = await client.PostAsJsonAsync("users/user/timeline/op/property",
+ new TimelinePropertyChangeRequest { Visibility = TimelineVisibility.Private });
+ res.Should().HaveStatusCode(200);
+ }
+ {
+ var res = await client.PostAsJsonAsync("users/admin/timeline/op/property",
+ new TimelinePropertyChangeRequest { Visibility = TimelineVisibility.Private });
+ res.Should().HaveStatusCode(200);
+ }
+ }
+ {
+ using var client = Factory.CreateDefaultClient();
+ var res = await client.GetAsync(userUrl);
+ res.Should().HaveStatusCode(403);
+ }
+ { // user can't read admin's
+ using var client = await Factory.CreateClientAsUser();
+ var res = await client.GetAsync(adminUrl);
+ res.Should().HaveStatusCode(403);
+ }
+ { // admin can read user's
+ using var client = await Factory.CreateClientAsAdmin();
+ var res = await client.GetAsync(userUrl);
+ res.Should().HaveStatusCode(200);
+ }
+ { // add member
+ using var client = await Factory.CreateClientAsAdmin();
+ var res = await client.PostAsJsonAsync("users/admin/timeline/op/member",
+ new TimelineMemberChangeRequest { Add = new List<string> { "user" } });
+ res.Should().HaveStatusCode(200);
+ }
+ { // now user can read admin's
+ using var client = await Factory.CreateClientAsUser();
+ var res = await client.GetAsync(adminUrl);
+ res.Should().HaveStatusCode(200);
+ }
+ }
+ }
}
}