aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2022-04-08 20:44:39 +0800
committercrupest <crupest@outlook.com>2022-04-08 20:44:39 +0800
commit1b93136e14bb20d908a9b41d9307004e1fc7552a (patch)
treed507cc355b352af91046a73bd9cbeae498da968f
parent7fc218a6b24a2f7c5070dc9a4af848647d0a4c52 (diff)
downloadtimeline-1b93136e14bb20d908a9b41d9307004e1fc7552a.tar.gz
timeline-1b93136e14bb20d908a9b41d9307004e1fc7552a.tar.bz2
timeline-1b93136e14bb20d908a9b41d9307004e1fc7552a.zip
...
-rw-r--r--BackEnd/Timeline.Tests/IntegratedTests2/TimelineTest2.cs (renamed from BackEnd/Timeline.Tests/IntegratedTests2/TimelinePatchAndDeleteTest.cs)4
-rw-r--r--BackEnd/Timeline.Tests/IntegratedTests2/TimelineTest3.cs92
-rw-r--r--BackEnd/Timeline/Controllers/TimelineV2Controller.cs21
3 files changed, 113 insertions, 4 deletions
diff --git a/BackEnd/Timeline.Tests/IntegratedTests2/TimelinePatchAndDeleteTest.cs b/BackEnd/Timeline.Tests/IntegratedTests2/TimelineTest2.cs
index 85308490..c3a19bbb 100644
--- a/BackEnd/Timeline.Tests/IntegratedTests2/TimelinePatchAndDeleteTest.cs
+++ b/BackEnd/Timeline.Tests/IntegratedTests2/TimelineTest2.cs
@@ -10,10 +10,10 @@ using Xunit.Abstractions;
namespace Timeline.Tests.IntegratedTests2
{
- public class TimelinePatchAndDeleteTest : IntegratedTestBase
+ public class TimelineTest2 : IntegratedTestBase
{
- public TimelinePatchAndDeleteTest(ITestOutputHelper testOutput) : base(testOutput)
+ public TimelineTest2(ITestOutputHelper testOutput) : base(testOutput)
{
}
diff --git a/BackEnd/Timeline.Tests/IntegratedTests2/TimelineTest3.cs b/BackEnd/Timeline.Tests/IntegratedTests2/TimelineTest3.cs
new file mode 100644
index 00000000..05e01f95
--- /dev/null
+++ b/BackEnd/Timeline.Tests/IntegratedTests2/TimelineTest3.cs
@@ -0,0 +1,92 @@
+using System;
+using System.Net;
+using System.Net.Http;
+using System.Threading.Tasks;
+using FluentAssertions;
+using Timeline.Models;
+using Timeline.Models.Http;
+using Xunit;
+using Xunit.Abstractions;
+
+namespace Timeline.Tests.IntegratedTests2
+{
+ public class TimelineTest3 : IntegratedTestBase
+ {
+
+ public TimelineTest3(ITestOutputHelper testOutput) : base(testOutput)
+ {
+ }
+
+ protected override async Task OnInitializeAsync()
+ {
+ using var client = CreateClientAsUser();
+ await client.TestJsonSendAsync<HttpTimeline>(HttpMethod.Post, "v2/timelines", new HttpTimelineCreateRequest
+ {
+ Name = "hello"
+ }, expectedStatusCode: HttpStatusCode.Created);
+ }
+
+ [Fact]
+ public async Task MemberTest()
+ {
+ using var client = CreateClientAsUser();
+ await client.TestSendAsync(HttpMethod.Put, "v2/timelines/user/hello/members/admin", expectedStatusCode: HttpStatusCode.NoContent);
+
+ var t = await client.TestJsonSendAsync<HttpTimeline>(HttpMethod.Get, "v2/timelines/user/hello");
+ t.Members.Should().ContainSingle().Which.Username.Should().Be("admin");
+
+ await client.TestSendAsync(HttpMethod.Delete, "v2/timelines/user/hello/members/admin", expectedStatusCode: HttpStatusCode.NoContent);
+
+ var b = await client.TestJsonSendAsync<HttpTimeline>(HttpMethod.Get, "v2/timelines/user/hello");
+ b.Members.Should().BeEmpty();
+ }
+
+ [Fact]
+ public async Task MemberPutNotExist()
+ {
+ using var client = CreateClientAsUser();
+ await client.TestSendAsync(HttpMethod.Put, "v2/timelines/user/notexist/members/admin",
+ expectedStatusCode: HttpStatusCode.NotFound);
+ await client.TestSendAsync(HttpMethod.Put, "v2/timelines/notexist/notexist/members/admin",
+ expectedStatusCode: HttpStatusCode.NotFound);
+ }
+
+ [Fact]
+ public async Task MemberDeleteNotExist()
+ {
+ using var client = CreateClientAsUser();
+ await client.TestSendAsync(HttpMethod.Delete, "v2/timelines/user/notexist/members/admin",
+ expectedStatusCode: HttpStatusCode.NotFound);
+ await client.TestSendAsync(HttpMethod.Delete, "v2/timelines/notexist/notexist/members/admin",
+ expectedStatusCode: HttpStatusCode.NotFound);
+ }
+
+ [Fact]
+ public async Task MemberModifyUserNotExist()
+ {
+ using var client = CreateClientAsUser();
+ await client.TestSendAsync(HttpMethod.Put, "v2/timelines/user/hello/members/notexist",
+ expectedStatusCode: HttpStatusCode.UnprocessableEntity);
+ await client.TestSendAsync(HttpMethod.Delete, "v2/timelines/user/hello/members/notexist",
+ expectedStatusCode: HttpStatusCode.UnprocessableEntity);
+ }
+
+ [Fact]
+ public async Task MemberNotLogin()
+ {
+ using var client = CreateDefaultClient();
+ await client.TestSendAsync(HttpMethod.Put, "v2/timelines/user/hello/members/admin", expectedStatusCode: HttpStatusCode.Unauthorized);
+ await client.TestSendAsync(HttpMethod.Delete, "v2/timelines/user/hello/members/admin", expectedStatusCode: HttpStatusCode.Unauthorized);
+ }
+
+ [Fact]
+ public async Task MemberForbid()
+ {
+ await CreateUserAsync("user2", "user2pw");
+ using var client = CreateClientWithToken(await CreateTokenWithCredentialAsync("user2", "user2pw"));
+ await client.TestSendAsync(HttpMethod.Put, "v2/timelines/user/hello/members/admin", expectedStatusCode: HttpStatusCode.Forbidden);
+ await client.TestSendAsync(HttpMethod.Delete, "v2/timelines/user/hello/members/admin", expectedStatusCode: HttpStatusCode.Forbidden);
+ }
+ }
+}
+
diff --git a/BackEnd/Timeline/Controllers/TimelineV2Controller.cs b/BackEnd/Timeline/Controllers/TimelineV2Controller.cs
index 63beb357..9811cbed 100644
--- a/BackEnd/Timeline/Controllers/TimelineV2Controller.cs
+++ b/BackEnd/Timeline/Controllers/TimelineV2Controller.cs
@@ -5,6 +5,7 @@ using Microsoft.AspNetCore.Mvc;
using Timeline.Entities;
using Timeline.Models.Http;
using Timeline.Models.Validation;
+using Timeline.Services;
using Timeline.Services.Mapper;
using Timeline.Services.Timeline;
using Timeline.Services.User;
@@ -91,7 +92,15 @@ namespace Timeline.Controllers
return Forbid();
}
- var userId = await _userService.GetUserIdByUsernameAsync(member);
+ long userId;
+ try
+ {
+ userId = await _userService.GetUserIdByUsernameAsync(member);
+ }
+ catch (EntityNotExistException e) when (e.EntityType.Equals(EntityTypes.User))
+ {
+ return UnprocessableEntity(new CommonResponse(ErrorCodes.Common.InvalidModel, "Member username does not exist."));
+ }
await _timelineService.AddMemberAsync(timelineId, userId);
return NoContent();
}
@@ -111,7 +120,15 @@ namespace Timeline.Controllers
return Forbid();
}
- var userId = await _userService.GetUserIdByUsernameAsync(member);
+ long userId;
+ try
+ {
+ userId = await _userService.GetUserIdByUsernameAsync(member);
+ }
+ catch (EntityNotExistException e) when (e.EntityType.Equals(EntityTypes.User))
+ {
+ return UnprocessableEntity(new CommonResponse(ErrorCodes.Common.InvalidModel, "Member username does not exist."));
+ }
await _timelineService.RemoveMemberAsync(timelineId, userId);
return NoContent();
}