diff options
author | 杨宇千 <crupest@outlook.com> | 2019-10-31 15:02:03 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-10-31 15:02:03 +0800 |
commit | 37a2e6340ab20de1f9e847d795c0cbec9846de97 (patch) | |
tree | ba42530cf4f13621a7a3a7ff661e383117119883 /Timeline.Tests/IntegratedTests/UserDetailTest.cs | |
parent | a175f8328d7a6c36464676d54fc50d03e64be0af (diff) | |
parent | 2c3744ab5db476b64a32c19b50153e3e6166b0e6 (diff) | |
download | timeline-37a2e6340ab20de1f9e847d795c0cbec9846de97.tar.gz timeline-37a2e6340ab20de1f9e847d795c0cbec9846de97.tar.bz2 timeline-37a2e6340ab20de1f9e847d795c0cbec9846de97.zip |
Merge pull request #53 from crupest/nickname
Add nickname support.
Diffstat (limited to 'Timeline.Tests/IntegratedTests/UserDetailTest.cs')
-rw-r--r-- | Timeline.Tests/IntegratedTests/UserDetailTest.cs | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/Timeline.Tests/IntegratedTests/UserDetailTest.cs b/Timeline.Tests/IntegratedTests/UserDetailTest.cs new file mode 100644 index 00000000..8f2b6925 --- /dev/null +++ b/Timeline.Tests/IntegratedTests/UserDetailTest.cs @@ -0,0 +1,164 @@ +using FluentAssertions;
+using Microsoft.AspNetCore.Mvc.Testing;
+using System;
+using System.Net;
+using System.Net.Http.Headers;
+using System.Net.Mime;
+using System.Threading.Tasks;
+using Timeline.Tests.Helpers;
+using Timeline.Tests.Helpers.Authentication;
+using Timeline.Tests.Mock.Data;
+using Xunit;
+
+namespace Timeline.Tests.IntegratedTests
+{
+ public class UserDetailTest : IClassFixture<WebApplicationFactory<Startup>>, IDisposable
+ {
+ private readonly TestApplication _testApp;
+ private readonly WebApplicationFactory<Startup> _factory;
+
+ public UserDetailTest(WebApplicationFactory<Startup> factory)
+ {
+ _testApp = new TestApplication(factory);
+ _factory = _testApp.Factory;
+ }
+
+ public void Dispose()
+ {
+ _testApp.Dispose();
+ }
+
+ [Fact]
+ public async Task PermissionTest()
+ {
+ { // unauthorize
+ using var client = _factory.CreateDefaultClient();
+ { // GET
+ var res = await client.GetAsync($"users/{MockUser.User.Username}/nickname");
+ res.Should().HaveStatusCode(HttpStatusCode.OK);
+ }
+ { // PUT
+ var res = await client.PutStringAsync($"users/{MockUser.User.Username}/nickname", "aaa");
+ res.Should().HaveStatusCode(HttpStatusCode.Unauthorized);
+ }
+ { // DELETE
+ var res = await client.DeleteAsync($"users/{MockUser.User.Username}/nickname");
+ res.Should().HaveStatusCode(HttpStatusCode.Unauthorized);
+ }
+ }
+ { // user
+ using var client = await _factory.CreateClientAsUser();
+ { // GET
+ var res = await client.GetAsync($"users/{MockUser.User.Username}/nickname");
+ res.Should().HaveStatusCode(HttpStatusCode.OK);
+ }
+ { // PUT self
+ var res = await client.PutStringAsync($"users/{MockUser.User.Username}/nickname", "aaa");
+ res.Should().HaveStatusCode(HttpStatusCode.OK);
+ }
+ { // PUT other
+ var res = await client.PutStringAsync($"users/{MockUser.Admin.Username}/nickname", "aaa");
+ res.Should().HaveStatusCode(HttpStatusCode.Forbidden);
+ }
+ { // DELETE self
+ var res = await client.DeleteAsync($"users/{MockUser.User.Username}/nickname");
+ res.Should().HaveStatusCode(HttpStatusCode.OK);
+ }
+ { // DELETE other
+ var res = await client.DeleteAsync($"users/{MockUser.Admin.Username}/nickname");
+ res.Should().HaveStatusCode(HttpStatusCode.Forbidden);
+ }
+ }
+ { // user
+ using var client = await _factory.CreateClientAsAdmin();
+ { // PUT other
+ var res = await client.PutStringAsync($"users/{MockUser.User.Username}/nickname", "aaa");
+ res.Should().HaveStatusCode(HttpStatusCode.OK);
+ }
+ { // DELETE other
+ var res = await client.DeleteAsync($"users/{MockUser.User.Username}/nickname");
+ res.Should().HaveStatusCode(HttpStatusCode.OK);
+ }
+ }
+ }
+
+ [Fact]
+ public async Task FunctionTest()
+ {
+ var url = $"users/{MockUser.User.Username}/nickname";
+ var userNotExistUrl = "users/usernotexist/nickname";
+ {
+ using var client = await _factory.CreateClientAsUser();
+ {
+ var res = await client.GetAsync(userNotExistUrl);
+ res.Should().HaveStatusCode(HttpStatusCode.NotFound)
+ .And.HaveCommonBody()
+ .Which.Code.Should().Be(ErrorCodes.Http.Filter.User.NotExist);
+
+ }
+ {
+ var res = await client.GetAsync(url);
+ res.Should().HaveStatusCode(HttpStatusCode.OK);
+ res.Content.Headers.ContentType.Should().Be(new MediaTypeHeaderValue(MediaTypeNames.Text.Plain) { CharSet = "utf-8" });
+ var body = await res.Content.ReadAsStringAsync();
+ body.Should().Be(MockUser.User.Username);
+ }
+ {
+ var res = await client.PutStringAsync(url, "");
+ res.Should().BeInvalidModel();
+ }
+ {
+ var res = await client.PutStringAsync(url, new string('a', 11));
+ res.Should().BeInvalidModel();
+ }
+ var nickname1 = "nnn";
+ var nickname2 = "nn2";
+ {
+ var res = await client.PutStringAsync(url, nickname1);
+ res.Should().HaveStatusCode(HttpStatusCode.OK);
+ (await client.GetStringAsync(url)).Should().Be(nickname1);
+ }
+ {
+ var res = await client.PutStringAsync(url, nickname2);
+ res.Should().HaveStatusCode(HttpStatusCode.OK);
+ (await client.GetStringAsync(url)).Should().Be(nickname2);
+ }
+ {
+ var res = await client.DeleteAsync(url);
+ res.Should().HaveStatusCode(HttpStatusCode.OK);
+ (await client.GetStringAsync(url)).Should().Be(MockUser.User.Username);
+ }
+ {
+ var res = await client.DeleteAsync(url);
+ res.Should().HaveStatusCode(HttpStatusCode.OK);
+ }
+ }
+ {
+ using var client = await _factory.CreateClientAsAdmin();
+ {
+ var res = await client.PutStringAsync(userNotExistUrl, "aaa");
+ res.Should().HaveStatusCode(HttpStatusCode.BadRequest)
+ .And.HaveCommonBody()
+ .Which.Code.Should().Be(ErrorCodes.Http.Filter.User.NotExist);
+ }
+ {
+ var res = await client.DeleteAsync(userNotExistUrl);
+ res.Should().HaveStatusCode(HttpStatusCode.BadRequest)
+ .And.HaveCommonBody()
+ .Which.Code.Should().Be(ErrorCodes.Http.Filter.User.NotExist);
+ }
+ var nickname = "nnn";
+ {
+ var res = await client.PutStringAsync(url, nickname);
+ res.Should().HaveStatusCode(HttpStatusCode.OK);
+ (await client.GetStringAsync(url)).Should().Be(nickname);
+ }
+ {
+ var res = await client.DeleteAsync(url);
+ res.Should().HaveStatusCode(HttpStatusCode.OK);
+ (await client.GetStringAsync(url)).Should().Be(MockUser.User.Username);
+ }
+ }
+ }
+ }
+}
|