diff options
Diffstat (limited to 'Timeline.Tests')
-rw-r--r-- | Timeline.Tests/IntegratedTests/IntegratedTestBase.cs | 29 | ||||
-rw-r--r-- | Timeline.Tests/IntegratedTests/PersonalTimelineTest.cs | 153 | ||||
-rw-r--r-- | Timeline.Tests/IntegratedTests/TimelineTest.cs | 72 | ||||
-rw-r--r-- | Timeline.Tests/IntegratedTests/TokenTest.cs | 1 |
4 files changed, 145 insertions, 110 deletions
diff --git a/Timeline.Tests/IntegratedTests/IntegratedTestBase.cs b/Timeline.Tests/IntegratedTests/IntegratedTestBase.cs index dfde2ea5..66904629 100644 --- a/Timeline.Tests/IntegratedTests/IntegratedTestBase.cs +++ b/Timeline.Tests/IntegratedTests/IntegratedTestBase.cs @@ -1,10 +1,13 @@ -using AutoMapper;
-using Microsoft.AspNetCore.Mvc.Testing; +using Microsoft.AspNetCore.Mvc.Testing; using Microsoft.Extensions.DependencyInjection;
using System; using System.Collections.Generic;
using System.Net.Http; +using System.Text.Json;
+using System.Text.Json.Serialization;
using System.Threading.Tasks; +using Timeline.Models;
+using Timeline.Models.Converters;
using Timeline.Models.Http; using Timeline.Services;
using Timeline.Tests.Helpers; @@ -14,12 +17,6 @@ namespace Timeline.Tests.IntegratedTests { public abstract class IntegratedTestBase : IClassFixture<WebApplicationFactory<Startup>>, IDisposable { - static IntegratedTestBase()
- {
- FluentAssertions.AssertionOptions.AssertEquivalencyUsing(options =>
- options.Excluding(m => m.RuntimeType == typeof(UserInfoLinks)));
- } - protected TestApplication TestApp { get; } protected WebApplicationFactory<Startup> Factory => TestApp.Factory; @@ -63,12 +60,22 @@ namespace Timeline.Tests.IntegratedTests var userInfoList = new List<UserInfo>();
var userService = scope.ServiceProvider.GetRequiredService<IUserService>();
- var mapper = scope.ServiceProvider.GetRequiredService<IMapper>();
-
foreach (var user in users)
{
userService.CreateUser(user).Wait();
- userInfoList.Add(mapper.Map<UserInfo>(user));
+ }
+
+ using var client = CreateDefaultClient().Result;
+ var options = new JsonSerializerOptions
+ {
+ PropertyNamingPolicy = JsonNamingPolicy.CamelCase
+ };
+ options.Converters.Add(new JsonStringEnumConverter());
+ options.Converters.Add(new JsonDateTimeConverter());
+ foreach (var user in users)
+ {
+ var s = client.GetStringAsync($"/users/{user.Username}").Result;
+ userInfoList.Add(JsonSerializer.Deserialize<UserInfo>(s, options));
}
UserInfos = userInfoList;
diff --git a/Timeline.Tests/IntegratedTests/PersonalTimelineTest.cs b/Timeline.Tests/IntegratedTests/PersonalTimelineTest.cs index 7d0a68e8..aa37e898 100644 --- a/Timeline.Tests/IntegratedTests/PersonalTimelineTest.cs +++ b/Timeline.Tests/IntegratedTests/PersonalTimelineTest.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Threading.Tasks; +using Timeline.Models;
using Timeline.Models.Http; using Timeline.Tests.Helpers; using Xunit; @@ -23,7 +24,7 @@ namespace Timeline.Tests.IntegratedTests public async Task TimelineGet_Should_Work() { using var client = await CreateDefaultClient(); - var res = await client.GetAsync("users/user1/timeline"); + var res = await client.GetAsync("timelines/@user1"); var body = res.Should().HaveStatusCode(200) .And.HaveJsonBody<TimelineInfo>().Which; body.Owner.Should().BeEquivalentTo(UserInfos[1]); @@ -37,31 +38,31 @@ namespace Timeline.Tests.IntegratedTests { using var client = await CreateClientAsAdministrator(); {
- var res = await client.GetAsync("users/user!!!/timeline"); + var res = await client.GetAsync("timelines/@user!!!"); res.Should().BeInvalidModel();
}
{
- var res = await client.PatchAsJsonAsync("users/user!!!/timeline", new TimelinePatchRequest { }); + var res = await client.PatchAsJsonAsync("timelines/@user!!!", new TimelinePatchRequest { }); res.Should().BeInvalidModel();
}
{
- var res = await client.PutAsync("users/user!!!/timeline/members/user1", null); + var res = await client.PutAsync("timelines/@user!!!/members/user1", null); res.Should().BeInvalidModel();
}
{
- var res = await client.DeleteAsync("users/user!!!/timeline/members/user1"); + var res = await client.DeleteAsync("timelines/@user!!!/members/user1"); res.Should().BeInvalidModel();
}
{
- var res = await client.GetAsync("users/user!!!/timeline/posts"); + var res = await client.GetAsync("timelines/@user!!!/posts"); res.Should().BeInvalidModel();
}
{
- var res = await client.PostAsJsonAsync("users/user!!!/timeline/posts", new TimelinePostCreateRequest { Content = "aaa" }); + var res = await client.PostAsJsonAsync("timelines/@user!!!/posts", TimelineHelper.TextPostCreateRequest("aaa")); res.Should().BeInvalidModel();
} {
- var res = await client.DeleteAsync("users/user!!!/timeline/posts/123");
+ var res = await client.DeleteAsync("timelines/@user!!!/posts/123");
res.Should().BeInvalidModel();
} }
@@ -71,31 +72,31 @@ namespace Timeline.Tests.IntegratedTests { using var client = await CreateClientAsAdministrator(); {
- var res = await client.GetAsync("users/usernotexist/timeline"); + var res = await client.GetAsync("timelines/@usernotexist"); res.Should().HaveStatusCode(404).And.HaveCommonBody(ErrorCodes.UserCommon.NotExist);
}
{
- var res = await client.PatchAsJsonAsync("users/usernotexist/timeline", new TimelinePatchRequest { }); + var res = await client.PatchAsJsonAsync("timelines/@usernotexist", new TimelinePatchRequest { }); res.Should().HaveStatusCode(404).And.HaveCommonBody(ErrorCodes.UserCommon.NotExist);
}
{
- var res = await client.PutAsync("users/usernotexist/timeline/members/user1", null); + var res = await client.PutAsync("timelines/@usernotexist/members/user1", null); res.Should().HaveStatusCode(404).And.HaveCommonBody(ErrorCodes.UserCommon.NotExist);
}
{
- var res = await client.DeleteAsync("users/usernotexist/timeline/members/user1"); + var res = await client.DeleteAsync("timelines/@usernotexist/members/user1"); res.Should().HaveStatusCode(404).And.HaveCommonBody(ErrorCodes.UserCommon.NotExist);
}
{
- var res = await client.GetAsync("users/usernotexist/timeline/posts"); + var res = await client.GetAsync("timelines/@usernotexist/posts"); res.Should().HaveStatusCode(404).And.HaveCommonBody(ErrorCodes.UserCommon.NotExist);
}
{
- var res = await client.PostAsJsonAsync("users/usernotexist/timeline/posts", new TimelinePostCreateRequest { Content = "aaa" }); + var res = await client.PostAsJsonAsync("timelines/@usernotexist/posts", TimelineHelper.TextPostCreateRequest("aaa")); res.Should().HaveStatusCode(404).And.HaveCommonBody(ErrorCodes.UserCommon.NotExist);
} {
- var res = await client.DeleteAsync("users/usernotexist/timeline/posts/123");
+ var res = await client.DeleteAsync("timelines/@usernotexist/posts/123");
res.Should().HaveStatusCode(404).And.HaveCommonBody(ErrorCodes.UserCommon.NotExist);
} } @@ -107,7 +108,7 @@ namespace Timeline.Tests.IntegratedTests async Task AssertDescription(string description) { - var res = await client.GetAsync("users/user1/timeline"); + var res = await client.GetAsync("timelines/@user1"); var body = res.Should().HaveStatusCode(200) .And.HaveJsonBody<TimelineInfo>() .Which.Description.Should().Be(description); @@ -117,21 +118,21 @@ namespace Timeline.Tests.IntegratedTests await AssertDescription(""); { - var res = await client.PatchAsJsonAsync("users/user1/timeline", + var res = await client.PatchAsJsonAsync("timelines/@user1", new TimelinePatchRequest { Description = mockDescription }); res.Should().HaveStatusCode(200) .And.HaveJsonBody<TimelineInfo>().Which.Description.Should().Be(mockDescription); await AssertDescription(mockDescription); } { - var res = await client.PatchAsJsonAsync("users/user1/timeline", + var res = await client.PatchAsJsonAsync("timelines/@user1", new TimelinePatchRequest { Description = null }); res.Should().HaveStatusCode(200) .And.HaveJsonBody<TimelineInfo>().Which.Description.Should().Be(mockDescription); await AssertDescription(mockDescription); } { - var res = await client.PatchAsJsonAsync("users/user1/timeline", + var res = await client.PatchAsJsonAsync("timelines/@user1", new TimelinePatchRequest { Description = "" }); res.Should().HaveStatusCode(200) .And.HaveJsonBody<TimelineInfo>().Which.Description.Should().Be(""); @@ -142,7 +143,7 @@ namespace Timeline.Tests.IntegratedTests [Fact] public async Task Member_Should_Work() { - const string getUrl = "users/user1/timeline"; + const string getUrl = "timelines/@user1"; using var client = await CreateClientAsUser(); async Task AssertMembers(IList<UserInfo> members) @@ -163,23 +164,23 @@ namespace Timeline.Tests.IntegratedTests await AssertEmptyMembers(); { - var res = await client.PutAsync("/users/user1/timeline/members/usernotexist", null); + var res = await client.PutAsync("/timelines/@user1/members/usernotexist", null); res.Should().HaveStatusCode(400) .And.HaveCommonBody(ErrorCodes.TimelineCommon.MemberPut_NotExist); } await AssertEmptyMembers(); { - var res = await client.PutAsync("/users/user1/timeline/members/user2", null); + var res = await client.PutAsync("/timelines/@user1/members/user2", null); res.Should().HaveStatusCode(200); } await AssertMembers(new List<UserInfo> { UserInfos[2] }); { - var res = await client.DeleteAsync("/users/user1/timeline/members/user2"); + var res = await client.DeleteAsync("/timelines/@user1/members/user2"); res.Should().BeDelete(true); }
await AssertEmptyMembers(); { - var res = await client.DeleteAsync("/users/user1/timeline/members/users2"); + var res = await client.DeleteAsync("/timelines/@user1/members/users2"); res.Should().BeDelete(false); } await AssertEmptyMembers(); @@ -193,37 +194,37 @@ namespace Timeline.Tests.IntegratedTests { using var client = await CreateClientAs(userNumber); { - var res = await client.GetAsync("users/user1/timeline"); + var res = await client.GetAsync("timelines/@user1"); res.Should().HaveStatusCode(get); } { - var res = await client.PatchAsJsonAsync("users/user1/timeline", new TimelinePatchRequest { Description = "hahaha" }); + var res = await client.PatchAsJsonAsync("timelines/@user1", new TimelinePatchRequest { Description = "hahaha" }); res.Should().HaveStatusCode(opPatchUser); } { - var res = await client.PatchAsJsonAsync("users/admin/timeline", new TimelinePatchRequest { Description = "hahaha" }); + var res = await client.PatchAsJsonAsync("timelines/@admin", new TimelinePatchRequest { Description = "hahaha" }); res.Should().HaveStatusCode(opPatchAdmin); } { - var res = await client.PutAsync("users/user1/timeline/members/user2", null); + var res = await client.PutAsync("timelines/@user1/members/user2", null); res.Should().HaveStatusCode(opMemberUser); }
{ - var res = await client.DeleteAsync("users/user1/timeline/members/user2"); + var res = await client.DeleteAsync("timelines/@user1/members/user2"); res.Should().HaveStatusCode(opMemberUser); } { - var res = await client.PutAsync("users/admin/timeline/members/user2", null); + var res = await client.PutAsync("timelines/@admin/members/user2", null); res.Should().HaveStatusCode(opMemberAdmin); }
{ - var res = await client.DeleteAsync("users/admin/timeline/members/user2"); + var res = await client.DeleteAsync("timelines/@admin/members/user2"); res.Should().HaveStatusCode(opMemberAdmin); } } @@ -231,13 +232,13 @@ namespace Timeline.Tests.IntegratedTests [Fact] public async Task Visibility_Test() { - const string userUrl = "users/user1/timeline/posts"; - const string adminUrl = "users/admin/timeline/posts"; + const string userUrl = "timelines/@user1/posts"; + const string adminUrl = "timelines/@admin/posts"; {
using var client = await CreateClientAsUser(); using var content = new StringContent(@"{""visibility"":""abcdefg""}", System.Text.Encoding.UTF8, System.Net.Mime.MediaTypeNames.Application.Json); - var res = await client.PatchAsync("users/user1/timeline", content); + var res = await client.PatchAsync("timelines/@user1", content); res.Should().BeInvalidModel(); } { // default visibility is registered @@ -257,7 +258,7 @@ namespace Timeline.Tests.IntegratedTests { // change visibility to public { using var client = await CreateClientAsUser(); - var res = await client.PatchAsJsonAsync("users/user1/timeline", + var res = await client.PatchAsJsonAsync("timelines/@user1", new TimelinePatchRequest { Visibility = TimelineVisibility.Public }); res.Should().HaveStatusCode(200); } @@ -272,12 +273,12 @@ namespace Timeline.Tests.IntegratedTests { using var client = await CreateClientAsAdministrator(); { - var res = await client.PatchAsJsonAsync("users/user1/timeline", + var res = await client.PatchAsJsonAsync("timelines/@user1", new TimelinePatchRequest { Visibility = TimelineVisibility.Private }); res.Should().HaveStatusCode(200); } { - var res = await client.PatchAsJsonAsync("users/admin/timeline", + var res = await client.PatchAsJsonAsync("timelines/@admin", new TimelinePatchRequest { Visibility = TimelineVisibility.Private }); res.Should().HaveStatusCode(200); } @@ -299,7 +300,7 @@ namespace Timeline.Tests.IntegratedTests } { // add member using var client = await CreateClientAsAdministrator(); - var res = await client.PutAsync("/users/admin/timeline/members/user1", null); + var res = await client.PutAsync("/timelines/@admin/members/user1", null); res.Should().HaveStatusCode(200); } { // now user can read admin's @@ -316,15 +317,15 @@ namespace Timeline.Tests.IntegratedTests { using (var client = await CreateClientAsUser()) { - var res = await client.PutAsync("users/user1/timeline/members/user2", null); + var res = await client.PutAsync("timelines/@user1/members/user2", null); res.Should().HaveStatusCode(200); } using (var client = await CreateDefaultClient()) { { // no auth should get 401 - var res = await client.PostAsJsonAsync("users/user1/timeline/posts", - new TimelinePostCreateRequest { Content = "aaa" }); + var res = await client.PostAsJsonAsync("timelines/@user1/posts", + TimelineHelper.TextPostCreateRequest("aaa")); res.Should().HaveStatusCode(401); } } @@ -332,13 +333,13 @@ namespace Timeline.Tests.IntegratedTests using (var client = await CreateClientAsUser()) { { // post self's - var res = await client.PostAsJsonAsync("users/user1/timeline/posts", - new TimelinePostCreateRequest { Content = "aaa" }); + var res = await client.PostAsJsonAsync("timelines/@user1/posts", + TimelineHelper.TextPostCreateRequest("aaa")); res.Should().HaveStatusCode(200); } { // post other not as a member should get 403 - var res = await client.PostAsJsonAsync("users/admin/timeline/posts", - new TimelinePostCreateRequest { Content = "aaa" }); + var res = await client.PostAsJsonAsync("timelines/@admin/posts", + TimelineHelper.TextPostCreateRequest("aaa")); res.Should().HaveStatusCode(403); } } @@ -346,8 +347,8 @@ namespace Timeline.Tests.IntegratedTests using (var client = await CreateClientAsAdministrator()) { { // post as admin - var res = await client.PostAsJsonAsync("users/user1/timeline/posts", - new TimelinePostCreateRequest { Content = "aaa" }); + var res = await client.PostAsJsonAsync("timelines/@user1/posts", + TimelineHelper.TextPostCreateRequest("aaa")); res.Should().HaveStatusCode(200); } } @@ -355,8 +356,8 @@ namespace Timeline.Tests.IntegratedTests using (var client = await CreateClientAs(2)) { { // post as member - var res = await client.PostAsJsonAsync("users/user1/timeline/posts", - new TimelinePostCreateRequest { Content = "aaa" }); + var res = await client.PostAsJsonAsync("timelines/@user1/posts", + TimelineHelper.TextPostCreateRequest("aaa")); res.Should().HaveStatusCode(200); } } @@ -368,8 +369,8 @@ namespace Timeline.Tests.IntegratedTests async Task<long> CreatePost(int userNumber) { using var client = await CreateClientAs(userNumber); - var res = await client.PostAsJsonAsync($"users/user1/timeline/posts", - new TimelinePostCreateRequest { Content = "aaa" }); + var res = await client.PostAsJsonAsync($"timelines/@user1/posts", + TimelineHelper.TextPostCreateRequest("aaa")); return res.Should().HaveStatusCode(200) .And.HaveJsonBody<TimelinePostInfo>() .Which.Id; @@ -378,53 +379,53 @@ namespace Timeline.Tests.IntegratedTests using (var client = await CreateClientAsUser()) { {
- var res = await client.PutAsync("users/user1/timeline/members/user2", null);
+ var res = await client.PutAsync("timelines/@user1/members/user2", null);
res.Should().HaveStatusCode(200); }
{
- var res = await client.PutAsync("users/user1/timeline/members/user3", null);
+ var res = await client.PutAsync("timelines/@user1/members/user3", null);
res.Should().HaveStatusCode(200); } } { // no auth should get 401 using var client = await CreateDefaultClient(); - var res = await client.DeleteAsync("users/user1/timeline/posts/12"); + var res = await client.DeleteAsync("timelines/@user1/posts/12"); res.Should().HaveStatusCode(401); } { // self can delete self var postId = await CreatePost(1); using var client = await CreateClientAsUser(); - var res = await client.DeleteAsync($"users/user1/timeline/posts/{postId}"); + var res = await client.DeleteAsync($"timelines/@user1/posts/{postId}"); res.Should().HaveStatusCode(200); } { // admin can delete any var postId = await CreatePost(1); using var client = await CreateClientAsAdministrator(); - var res = await client.DeleteAsync($"users/user1/timeline/posts/{postId}"); + var res = await client.DeleteAsync($"timelines/@user1/posts/{postId}"); res.Should().HaveStatusCode(200); } { // owner can delete other var postId = await CreatePost(2); using var client = await CreateClientAsUser(); - var res = await client.DeleteAsync($"users/user1/timeline/posts/{postId}"); + var res = await client.DeleteAsync($"timelines/@user1/posts/{postId}"); res.Should().HaveStatusCode(200); } { // author can delete self var postId = await CreatePost(2); using var client = await CreateClientAs(2); - var res = await client.DeleteAsync($"users/user1/timeline/posts/{postId}"); + var res = await client.DeleteAsync($"timelines/@user1/posts/{postId}"); res.Should().HaveStatusCode(200); } { // otherwise is forbidden var postId = await CreatePost(2); using var client = await CreateClientAs(3); - var res = await client.DeleteAsync($"users/user1/timeline/posts/{postId}"); + var res = await client.DeleteAsync($"timelines/@user1/posts/{postId}"); res.Should().HaveStatusCode(403); } } @@ -435,31 +436,31 @@ namespace Timeline.Tests.IntegratedTests { using var client = await CreateClientAsUser(); { - var res = await client.GetAsync("users/user1/timeline/posts"); + var res = await client.GetAsync("timelines/@user1/posts"); res.Should().HaveStatusCode(200) .And.HaveJsonBody<TimelinePostInfo[]>() .Which.Should().NotBeNull().And.BeEmpty(); } { - var res = await client.PostAsJsonAsync("users/user1/timeline/posts", - new TimelinePostCreateRequest { Content = null }); + var res = await client.PostAsJsonAsync("timelines/@user1/posts", + TimelineHelper.TextPostCreateRequest(null)); res.Should().BeInvalidModel(); } const string mockContent = "aaa"; TimelinePostInfo createRes; { - var res = await client.PostAsJsonAsync("users/user1/timeline/posts", - new TimelinePostCreateRequest { Content = mockContent }); + var res = await client.PostAsJsonAsync("timelines/@user1/posts", + TimelineHelper.TextPostCreateRequest(mockContent)); var body = res.Should().HaveStatusCode(200) .And.HaveJsonBody<TimelinePostInfo>() .Which; body.Should().NotBeNull(); - body.Content.Should().Be(mockContent); + body.Content.Should().BeEquivalentTo(TimelineHelper.TextPostContent(mockContent)); body.Author.Should().BeEquivalentTo(UserInfos[1]); createRes = body; } { - var res = await client.GetAsync("users/user1/timeline/posts"); + var res = await client.GetAsync("timelines/@user1/posts"); res.Should().HaveStatusCode(200) .And.HaveJsonBody<TimelinePostInfo[]>() .Which.Should().NotBeNull().And.BeEquivalentTo(createRes); @@ -468,33 +469,33 @@ namespace Timeline.Tests.IntegratedTests var mockTime2 = DateTime.Now.AddDays(-1); TimelinePostInfo createRes2; { - var res = await client.PostAsJsonAsync("users/user1/timeline/posts", - new TimelinePostCreateRequest { Content = mockContent2, Time = mockTime2 }); + var res = await client.PostAsJsonAsync("timelines/@user1/posts", + TimelineHelper.TextPostCreateRequest(mockContent2, mockTime2)); var body = res.Should().HaveStatusCode(200) .And.HaveJsonBody<TimelinePostInfo>() .Which; body.Should().NotBeNull();
- body.Content.Should().Be(mockContent2); + body.Content.Should().BeEquivalentTo(TimelineHelper.TextPostContent(mockContent2)); body.Author.Should().BeEquivalentTo(UserInfos[1]); body.Time.Should().BeCloseTo(mockTime2, 1000); createRes2 = body; } { - var res = await client.GetAsync("users/user1/timeline/posts"); + var res = await client.GetAsync("timelines/@user1/posts"); res.Should().HaveStatusCode(200) .And.HaveJsonBody<TimelinePostInfo[]>() .Which.Should().NotBeNull().And.BeEquivalentTo(createRes, createRes2); } { - var res = await client.DeleteAsync($"users/user1/timeline/posts/{createRes.Id}"); + var res = await client.DeleteAsync($"timelines/@user1/posts/{createRes.Id}"); res.Should().BeDelete(true); } { - var res = await client.DeleteAsync("users/user1/timeline/posts/30000"); + var res = await client.DeleteAsync("timelines/@user1/posts/30000"); res.Should().BeDelete(false); } { - var res = await client.GetAsync("users/user1/timeline/posts"); + var res = await client.GetAsync("timelines/@user1/posts"); res.Should().HaveStatusCode(200) .And.HaveJsonBody<TimelinePostInfo[]>() .Which.Should().NotBeNull().And.BeEquivalentTo(createRes2); @@ -509,8 +510,8 @@ namespace Timeline.Tests.IntegratedTests async Task<long> CreatePost(DateTime time) { - var res = await client.PostAsJsonAsync("users/user1/timeline/posts", - new TimelinePostCreateRequest { Content = "aaa", Time = time }); + var res = await client.PostAsJsonAsync("timelines/@user1/posts", + TimelineHelper.TextPostCreateRequest("aaa", time)); return res.Should().HaveStatusCode(200) .And.HaveJsonBody<TimelinePostInfo>() .Which.Id; @@ -522,7 +523,7 @@ namespace Timeline.Tests.IntegratedTests var id2 = await CreatePost(now); { - var res = await client.GetAsync("users/user1/timeline/posts"); + var res = await client.GetAsync("timelines/@user1/posts"); res.Should().HaveStatusCode(200) .And.HaveJsonBody<TimelinePostInfo[]>() .Which.Select(p => p.Id).Should().Equal(id1, id2, id0); diff --git a/Timeline.Tests/IntegratedTests/TimelineTest.cs b/Timeline.Tests/IntegratedTests/TimelineTest.cs index 14a0a59e..3fceb1d5 100644 --- a/Timeline.Tests/IntegratedTests/TimelineTest.cs +++ b/Timeline.Tests/IntegratedTests/TimelineTest.cs @@ -6,12 +6,38 @@ using System.Linq; using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
+using Timeline.Models;
using Timeline.Models.Http;
using Timeline.Tests.Helpers;
using Xunit;
namespace Timeline.Tests.IntegratedTests
{
+ public static class TimelineHelper
+ {
+ public static TimelinePostContentInfo TextPostContent(string text)
+ {
+ return new TimelinePostContentInfo
+ {
+ Type = "text",
+ Text = text
+ };
+ }
+
+ public static TimelinePostCreateRequest TextPostCreateRequest(string text, DateTime? time = null)
+ {
+ return new TimelinePostCreateRequest
+ {
+ Content = new TimelinePostCreateRequestContent
+ {
+ Type = "text",
+ Text = text
+ },
+ Time = time
+ };
+ }
+ }
+
public class TimelineTest : IntegratedTestBase
{
public TimelineTest(WebApplicationFactory<Startup> factory)
@@ -45,7 +71,7 @@ namespace Timeline.Tests.IntegratedTests var client = await CreateDefaultClient();
{
- var res = await client.GetAsync("/users/user1/timeline");
+ var res = await client.GetAsync("/timelines/@user1");
user1Timeline = res.Should().HaveStatusCode(200)
.And.HaveJsonBody<TimelineInfo>().Which;
}
@@ -80,7 +106,7 @@ namespace Timeline.Tests.IntegratedTests var client = await CreateClientAsUser();
{
- var res = await client.PutAsync("/users/user1/timeline/members/user3", null);
+ var res = await client.PutAsync("/timelines/@user1/members/user3", null);
res.Should().HaveStatusCode(200);
}
@@ -90,7 +116,7 @@ namespace Timeline.Tests.IntegratedTests }
{
- var res = await client.PatchAsJsonAsync("/users/user1/timeline", new TimelinePatchRequest { Visibility = TimelineVisibility.Public });
+ var res = await client.PatchAsJsonAsync("/timelines/@user1", new TimelinePatchRequest { Visibility = TimelineVisibility.Public });
res.Should().HaveStatusCode(200);
}
@@ -100,7 +126,7 @@ namespace Timeline.Tests.IntegratedTests }
{
- var res = await client.GetAsync("/users/user1/timeline");
+ var res = await client.GetAsync("/timelines/@user1");
var timeline = res.Should().HaveStatusCode(200)
.And.HaveJsonBody<TimelineInfo>().Which;
testResultRelate.Add(timeline);
@@ -123,7 +149,7 @@ namespace Timeline.Tests.IntegratedTests var client = await CreateClientAs(2);
{
- var res = await client.PutAsync("/users/user2/timeline/members/user3", null);
+ var res = await client.PutAsync("/timelines/@user2/members/user3", null);
res.Should().HaveStatusCode(200);
}
@@ -133,7 +159,7 @@ namespace Timeline.Tests.IntegratedTests }
{
- var res = await client.PatchAsJsonAsync("/users/user2/timeline", new TimelinePatchRequest { Visibility = TimelineVisibility.Register });
+ var res = await client.PatchAsJsonAsync("/timelines/@user2", new TimelinePatchRequest { Visibility = TimelineVisibility.Register });
res.Should().HaveStatusCode(200);
}
@@ -143,7 +169,7 @@ namespace Timeline.Tests.IntegratedTests }
{
- var res = await client.GetAsync("/users/user2/timeline");
+ var res = await client.GetAsync("/timelines/@user2");
var timeline = res.Should().HaveStatusCode(200)
.And.HaveJsonBody<TimelineInfo>().Which;
testResultRelate.Add(timeline);
@@ -165,7 +191,7 @@ namespace Timeline.Tests.IntegratedTests var client = await CreateClientAs(3);
{
- var res = await client.PatchAsJsonAsync("/users/user3/timeline", new TimelinePatchRequest { Visibility = TimelineVisibility.Private });
+ var res = await client.PatchAsJsonAsync("/timelines/@user3", new TimelinePatchRequest { Visibility = TimelineVisibility.Private });
res.Should().HaveStatusCode(200);
}
@@ -175,7 +201,7 @@ namespace Timeline.Tests.IntegratedTests }
{
- var res = await client.GetAsync("/users/user3/timeline");
+ var res = await client.GetAsync("/timelines/@user3");
var timeline = res.Should().HaveStatusCode(200)
.And.HaveJsonBody<TimelineInfo>().Which;
testResultRelate.Add(timeline);
@@ -396,7 +422,7 @@ namespace Timeline.Tests.IntegratedTests res.Should().BeInvalidModel();
}
{
- var res = await client.PostAsJsonAsync("timelines/aaa!!!/posts", new TimelinePostCreateRequest { Content = "aaa" });
+ var res = await client.PostAsJsonAsync("timelines/aaa!!!/posts", TimelineHelper.TextPostCreateRequest("aaa"));
res.Should().BeInvalidModel();
}
{
@@ -430,7 +456,7 @@ namespace Timeline.Tests.IntegratedTests res.Should().HaveStatusCode(404).And.HaveCommonBody(ErrorCodes.TimelineCommon.NotExist);
}
{
- var res = await client.PostAsJsonAsync("timelines/notexist/posts", new TimelinePostCreateRequest { Content = "aaa" });
+ var res = await client.PostAsJsonAsync("timelines/notexist/posts", TimelineHelper.TextPostCreateRequest("aaa"));
res.Should().HaveStatusCode(404).And.HaveCommonBody(ErrorCodes.TimelineCommon.NotExist);
}
{
@@ -673,7 +699,7 @@ namespace Timeline.Tests.IntegratedTests {
{ // no auth should get 401
var res = await client.PostAsJsonAsync("timelines/t1/posts",
- new TimelinePostCreateRequest { Content = "aaa" });
+ TimelineHelper.TextPostCreateRequest("aaa"));
res.Should().HaveStatusCode(401);
}
}
@@ -682,12 +708,12 @@ namespace Timeline.Tests.IntegratedTests {
{ // post self's
var res = await client.PostAsJsonAsync("timelines/t1/posts",
- new TimelinePostCreateRequest { Content = "aaa" });
+ TimelineHelper.TextPostCreateRequest("aaa"));
res.Should().HaveStatusCode(200);
}
{ // post other not as a member should get 403
var res = await client.PostAsJsonAsync("timelines/t0/posts",
- new TimelinePostCreateRequest { Content = "aaa" });
+ TimelineHelper.TextPostCreateRequest("aaa"));
res.Should().HaveStatusCode(403);
}
}
@@ -696,7 +722,7 @@ namespace Timeline.Tests.IntegratedTests {
{ // post as admin
var res = await client.PostAsJsonAsync("timelines/t1/posts",
- new TimelinePostCreateRequest { Content = "aaa" });
+ TimelineHelper.TextPostCreateRequest("aaa"));
res.Should().HaveStatusCode(200);
}
}
@@ -705,7 +731,7 @@ namespace Timeline.Tests.IntegratedTests {
{ // post as member
var res = await client.PostAsJsonAsync("timelines/t1/posts",
- new TimelinePostCreateRequest { Content = "aaa" });
+ TimelineHelper.TextPostCreateRequest("aaa"));
res.Should().HaveStatusCode(200);
}
}
@@ -720,7 +746,7 @@ namespace Timeline.Tests.IntegratedTests {
using var client = await CreateClientAs(userNumber);
var res = await client.PostAsJsonAsync($"timelines/t1/posts",
- new TimelinePostCreateRequest { Content = "aaa" });
+ TimelineHelper.TextPostCreateRequest("aaa"));
return res.Should().HaveStatusCode(200)
.And.HaveJsonBody<TimelinePostInfo>()
.Which.Id;
@@ -795,19 +821,19 @@ namespace Timeline.Tests.IntegratedTests }
{
var res = await client.PostAsJsonAsync("timelines/t1/posts",
- new TimelinePostCreateRequest { Content = null });
+ TimelineHelper.TextPostCreateRequest(null));
res.Should().BeInvalidModel();
}
const string mockContent = "aaa";
TimelinePostInfo createRes;
{
var res = await client.PostAsJsonAsync("timelines/t1/posts",
- new TimelinePostCreateRequest { Content = mockContent });
+ TimelineHelper.TextPostCreateRequest(mockContent));
var body = res.Should().HaveStatusCode(200)
.And.HaveJsonBody<TimelinePostInfo>()
.Which;
body.Should().NotBeNull();
- body.Content.Should().Be(mockContent);
+ body.Content.Should().BeEquivalentTo(TimelineHelper.TextPostContent(mockContent));
body.Author.Should().BeEquivalentTo(UserInfos[1]);
createRes = body;
}
@@ -822,12 +848,12 @@ namespace Timeline.Tests.IntegratedTests TimelinePostInfo createRes2;
{
var res = await client.PostAsJsonAsync("timelines/t1/posts",
- new TimelinePostCreateRequest { Content = mockContent2, Time = mockTime2 });
+ TimelineHelper.TextPostCreateRequest(mockContent2, mockTime2));
var body = res.Should().HaveStatusCode(200)
.And.HaveJsonBody<TimelinePostInfo>()
.Which;
body.Should().NotBeNull();
- body.Content.Should().Be(mockContent2);
+ body.Content.Should().BeEquivalentTo(TimelineHelper.TextPostContent(mockContent2));
body.Author.Should().BeEquivalentTo(UserInfos[1]);
body.Time.Should().BeCloseTo(mockTime2, 1000);
createRes2 = body;
@@ -865,7 +891,7 @@ namespace Timeline.Tests.IntegratedTests async Task<long> CreatePost(DateTime time)
{
var res = await client.PostAsJsonAsync("timelines/t1/posts",
- new TimelinePostCreateRequest { Content = "aaa", Time = time });
+ TimelineHelper.TextPostCreateRequest("aaa", time));
return res.Should().HaveStatusCode(200)
.And.HaveJsonBody<TimelinePostInfo>()
.Which.Id;
diff --git a/Timeline.Tests/IntegratedTests/TokenTest.cs b/Timeline.Tests/IntegratedTests/TokenTest.cs index 928d546c..7b28746f 100644 --- a/Timeline.Tests/IntegratedTests/TokenTest.cs +++ b/Timeline.Tests/IntegratedTests/TokenTest.cs @@ -4,6 +4,7 @@ using Microsoft.Extensions.DependencyInjection; using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
+using Timeline.Models;
using Timeline.Models.Http;
using Timeline.Services;
using Timeline.Tests.Helpers;
|