aboutsummaryrefslogtreecommitdiff
path: root/Timeline.Tests/IntegratedTests
diff options
context:
space:
mode:
Diffstat (limited to 'Timeline.Tests/IntegratedTests')
-rw-r--r--Timeline.Tests/IntegratedTests/IntegratedTestBase.cs27
-rw-r--r--Timeline.Tests/IntegratedTests/PersonalTimelineTest.cs62
2 files changed, 89 insertions, 0 deletions
diff --git a/Timeline.Tests/IntegratedTests/IntegratedTestBase.cs b/Timeline.Tests/IntegratedTests/IntegratedTestBase.cs
new file mode 100644
index 00000000..c4d72faf
--- /dev/null
+++ b/Timeline.Tests/IntegratedTests/IntegratedTestBase.cs
@@ -0,0 +1,27 @@
+using Microsoft.AspNetCore.Mvc.Testing;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Timeline.Tests.Helpers;
+using Xunit;
+
+namespace Timeline.Tests.IntegratedTests
+{
+ public abstract class IntegratedTestBase : IClassFixture<WebApplicationFactory<Startup>>, IDisposable
+ {
+ protected TestApplication TestApp { get; }
+
+ protected WebApplicationFactory<Startup> Factory => TestApp.Factory;
+
+ public IntegratedTestBase(WebApplicationFactory<Startup> factory)
+ {
+ TestApp = new TestApplication(factory);
+ }
+
+ public virtual void Dispose()
+ {
+ TestApp.Dispose();
+ }
+ }
+}
diff --git a/Timeline.Tests/IntegratedTests/PersonalTimelineTest.cs b/Timeline.Tests/IntegratedTests/PersonalTimelineTest.cs
new file mode 100644
index 00000000..9629fc0a
--- /dev/null
+++ b/Timeline.Tests/IntegratedTests/PersonalTimelineTest.cs
@@ -0,0 +1,62 @@
+using FluentAssertions;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc.Testing;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net.Http;
+using System.Text.Json;
+using System.Threading.Tasks;
+using Timeline.Models.Http;
+using Timeline.Tests.Helpers;
+using Timeline.Tests.Helpers.Authentication;
+using Xunit;
+
+namespace Timeline.Tests.IntegratedTests
+{
+ public class PersonalTimelineTest : IntegratedTestBase
+ {
+ public PersonalTimelineTest(WebApplicationFactory<Startup> factory)
+ : base(factory)
+ {
+
+ }
+
+ [Theory]
+ [InlineData(AuthType.None, 200, 401, 401, 401, 401)]
+ [InlineData(AuthType.User, 200, 200, 403, 200, 403)]
+ [InlineData(AuthType.Admin, 200, 200, 200, 200, 200)]
+ public async Task Permission_Timeline(AuthType authType, int get, int opPropertyUser, int opPropertyAdmin, int opMemberUser, int opMemberAdmin)
+ {
+ using var client = await Factory.CreateClientAs(authType);
+ {
+ var res = await client.GetAsync("users/user/timeline");
+ res.Should().HaveStatusCode(get);
+ }
+
+ {
+ var res = await client.PostAsJsonAsync("users/user/timeline/op/property",
+ new TimelinePropertyChangeRequest { Description = "hahaha" });
+ res.Should().HaveStatusCode(opPropertyUser);
+ }
+
+ {
+ var res = await client.PostAsJsonAsync("users/admin/timeline/op/property",
+ new TimelinePropertyChangeRequest { Description = "hahaha" });
+ res.Should().HaveStatusCode(opPropertyAdmin);
+ }
+
+ {
+ var res = await client.PostAsJsonAsync("users/user/timeline/op/member",
+ new TimelineMemberChangeRequest { Add = new List<string> { "admin" } });
+ res.Should().HaveStatusCode(opMemberUser);
+ }
+
+ {
+ var res = await client.PostAsJsonAsync("users/admin/timeline/op/member",
+ new TimelineMemberChangeRequest { Add = new List<string> { "user" } });
+ res.Should().HaveStatusCode(opMemberAdmin);
+ }
+ }
+ }
+}