aboutsummaryrefslogtreecommitdiff
path: root/Timeline.Tests/JwtTokenUnitTest.cs
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2019-02-14 23:05:04 +0800
committercrupest <crupest@outlook.com>2019-02-14 23:05:04 +0800
commit3c140656ebe6ed34dda9356a01dbff205651e641 (patch)
tree8b8ca7331c9510b897042737a5cbbc0f77b1b736 /Timeline.Tests/JwtTokenUnitTest.cs
parentde90f0413553a23f8ebba1343c6e96c63e0c9748 (diff)
downloadtimeline-3c140656ebe6ed34dda9356a01dbff205651e641.tar.gz
timeline-3c140656ebe6ed34dda9356a01dbff205651e641.tar.bz2
timeline-3c140656ebe6ed34dda9356a01dbff205651e641.zip
Develop user token interface.
Diffstat (limited to 'Timeline.Tests/JwtTokenUnitTest.cs')
-rw-r--r--Timeline.Tests/JwtTokenUnitTest.cs86
1 files changed, 86 insertions, 0 deletions
diff --git a/Timeline.Tests/JwtTokenUnitTest.cs b/Timeline.Tests/JwtTokenUnitTest.cs
new file mode 100644
index 00000000..e55bc82c
--- /dev/null
+++ b/Timeline.Tests/JwtTokenUnitTest.cs
@@ -0,0 +1,86 @@
+using Microsoft.AspNetCore.Mvc.Testing;
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net;
+using System.Net.Http;
+using System.Text;
+using System.Threading.Tasks;
+using Timeline.Controllers;
+using Timeline.Services;
+using Timeline.Tests.Helpers;
+using Timeline.Tests.Helpers.Authentication;
+using Xunit;
+using Xunit.Abstractions;
+
+namespace Timeline.Tests
+{
+ public class JwtTokenUnitTest : IClassFixture<WebApplicationFactory<Startup>>
+ {
+ private const string ValidateTokenUrl = "/api/User/ValidateToken";
+
+ private readonly WebApplicationFactory<Startup> _factory;
+
+ public JwtTokenUnitTest(WebApplicationFactory<Startup> factory, ITestOutputHelper outputHelper)
+ {
+ _factory = factory.WithTestConfig(outputHelper);
+ }
+
+ [Fact]
+ public async void ValidateToken_BadTokenTest()
+ {
+ using (var client = _factory.CreateDefaultClient())
+ {
+ var response = await client.PostAsync(ValidateTokenUrl, new StringContent("bad token hahaha", Encoding.UTF8, "text/plain"));
+
+ Assert.Equal(HttpStatusCode.OK, response.StatusCode);
+
+ var validationInfo = JsonConvert.DeserializeObject<TokenValidationResult>(await response.Content.ReadAsStringAsync());
+
+ Assert.False(validationInfo.IsValid);
+ Assert.Null(validationInfo.UserInfo);
+ }
+ }
+
+ [Fact]
+ public async void ValidateToken_PlainTextGoodTokenTest()
+ {
+ using (var client = _factory.CreateDefaultClient())
+ {
+ var createTokenResult = await client.CreateUserTokenAsync("admin", "admin");
+
+ var response = await client.PostAsync(ValidateTokenUrl, new StringContent(createTokenResult.Token, Encoding.UTF8, "text/plain"));
+
+ Assert.Equal(HttpStatusCode.OK, response.StatusCode);
+
+ var result = JsonConvert.DeserializeObject<TokenValidationResult>(await response.Content.ReadAsStringAsync());
+
+ Assert.True(result.IsValid);
+ Assert.NotNull(result.UserInfo);
+ Assert.Equal(createTokenResult.UserInfo.Username, result.UserInfo.Username);
+ Assert.Equal(createTokenResult.UserInfo.Roles, result.UserInfo.Roles);
+ }
+ }
+
+ [Fact]
+ public async void ValidateToken_JsonGoodTokenTest()
+ {
+ using (var client = _factory.CreateDefaultClient())
+ {
+ var createTokenResult = await client.CreateUserTokenAsync("admin", "admin");
+
+ var response = await client.PostAsJsonAsync(ValidateTokenUrl, new UserController.TokenValidationRequest { Token = createTokenResult.Token });
+
+ Assert.Equal(HttpStatusCode.OK, response.StatusCode);
+
+ var result = JsonConvert.DeserializeObject<TokenValidationResult>(await response.Content.ReadAsStringAsync());
+
+ Assert.True(result.IsValid);
+ Assert.NotNull(result.UserInfo);
+ Assert.Equal(createTokenResult.UserInfo.Username, result.UserInfo.Username);
+ Assert.Equal(createTokenResult.UserInfo.Roles, result.UserInfo.Roles);
+ }
+ }
+ }
+}