diff options
-rw-r--r-- | Timeline.Tests/AuthorizationUnitTest.cs | 6 | ||||
-rw-r--r-- | Timeline.Tests/Helpers/Authentication/AuthenticationExtensions.cs | 13 | ||||
-rw-r--r-- | Timeline.Tests/Helpers/MyWebApplicationFactory.cs | 4 | ||||
-rw-r--r-- | Timeline.Tests/Helpers/TestUsers.cs | 42 | ||||
-rw-r--r-- | Timeline.Tests/Mock/Data/TestUsers.cs | 52 | ||||
-rw-r--r-- | Timeline.Tests/Mock/Services/TestClock.cs (renamed from Timeline.Tests/Helpers/TestClock.cs) | 2 | ||||
-rw-r--r-- | Timeline.Tests/Timeline.Tests.csproj | 2 | ||||
-rw-r--r-- | Timeline.Tests/TokenUnitTest.cs | 33 | ||||
-rw-r--r-- | Timeline.Tests/UserUnitTest.cs | 5 |
9 files changed, 97 insertions, 62 deletions
diff --git a/Timeline.Tests/AuthorizationUnitTest.cs b/Timeline.Tests/AuthorizationUnitTest.cs index 8df23c45..d9fb7406 100644 --- a/Timeline.Tests/AuthorizationUnitTest.cs +++ b/Timeline.Tests/AuthorizationUnitTest.cs @@ -34,7 +34,7 @@ namespace Timeline.Tests [Fact]
public async Task AuthenticationTest()
{
- using (var client = await _factory.CreateClientWithUser("user", "user"))
+ using (var client = await _factory.CreateClientAsUser())
{
var response = await client.GetAsync(AuthorizeUrl);
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
@@ -44,7 +44,7 @@ namespace Timeline.Tests [Fact]
public async Task UserAuthorizationTest()
{
- using (var client = await _factory.CreateClientWithUser("user", "user"))
+ using (var client = await _factory.CreateClientAsUser())
{
var response1 = await client.GetAsync(UserUrl);
Assert.Equal(HttpStatusCode.OK, response1.StatusCode);
@@ -56,7 +56,7 @@ namespace Timeline.Tests [Fact]
public async Task AdminAuthorizationTest()
{
- using (var client = await _factory.CreateClientWithUser("admin", "admin"))
+ using (var client = await _factory.CreateClientAsAdmin())
{
var response1 = await client.GetAsync(UserUrl);
Assert.Equal(HttpStatusCode.OK, response1.StatusCode);
diff --git a/Timeline.Tests/Helpers/Authentication/AuthenticationExtensions.cs b/Timeline.Tests/Helpers/Authentication/AuthenticationExtensions.cs index de88fd35..e31bd51c 100644 --- a/Timeline.Tests/Helpers/Authentication/AuthenticationExtensions.cs +++ b/Timeline.Tests/Helpers/Authentication/AuthenticationExtensions.cs @@ -3,6 +3,7 @@ using Newtonsoft.Json; using System.Net.Http;
using System.Threading.Tasks;
using Timeline.Models.Http;
+using Timeline.Tests.Mock.Data;
namespace Timeline.Tests.Helpers.Authentication
{
@@ -17,12 +18,22 @@ namespace Timeline.Tests.Helpers.Authentication return result;
}
- public static async Task<HttpClient> CreateClientWithUser<T>(this WebApplicationFactory<T> factory, string username, string password) where T : class
+ public static async Task<HttpClient> CreateClientWithCredential<T>(this WebApplicationFactory<T> factory, string username, string password) where T : class
{
var client = factory.CreateDefaultClient();
var token = (await client.CreateUserTokenAsync(username, password)).Token;
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);
return client;
}
+
+ public static Task<HttpClient> CreateClientAsUser<T>(this WebApplicationFactory<T> factory) where T : class
+ {
+ return factory.CreateClientWithCredential(MockUsers.UserUsername, MockUsers.UserPassword);
+ }
+
+ public static Task<HttpClient> CreateClientAsAdmin<T>(this WebApplicationFactory<T> factory) where T : class
+ {
+ return factory.CreateClientWithCredential(MockUsers.AdminUsername, MockUsers.AdminPassword);
+ }
}
}
diff --git a/Timeline.Tests/Helpers/MyWebApplicationFactory.cs b/Timeline.Tests/Helpers/MyWebApplicationFactory.cs index d8da7168..b49756e4 100644 --- a/Timeline.Tests/Helpers/MyWebApplicationFactory.cs +++ b/Timeline.Tests/Helpers/MyWebApplicationFactory.cs @@ -7,6 +7,8 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging;
using Timeline.Entities;
using Timeline.Services;
+using Timeline.Tests.Mock.Data;
+using Timeline.Tests.Mock.Services;
using Xunit.Abstractions;
namespace Timeline.Tests.Helpers
@@ -34,7 +36,7 @@ namespace Timeline.Tests.Helpers using (var context = new DatabaseContext(options))
{
context.Database.EnsureCreated();
- context.Users.AddRange(TestMockUsers.MockUsers);
+ context.Users.AddRange(MockUsers.Users);
context.SaveChanges();
}
}
diff --git a/Timeline.Tests/Helpers/TestUsers.cs b/Timeline.Tests/Helpers/TestUsers.cs deleted file mode 100644 index 71de8237..00000000 --- a/Timeline.Tests/Helpers/TestUsers.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System.Collections.Generic;
-using System.Linq;
-using Timeline.Entities;
-using Timeline.Models;
-using Timeline.Services;
-
-namespace Timeline.Tests.Helpers
-{
- public static class TestMockUsers
- {
- static TestMockUsers()
- {
- var mockUsers = new List<User>();
- var passwordService = new PasswordService();
-
- mockUsers.Add(new User
- {
- Name = "user",
- EncryptedPassword = passwordService.HashPassword("user"),
- RoleString = UserUtility.IsAdminToRoleString(false),
- Version = 0,
- });
- mockUsers.Add(new User
- {
- Name = "admin",
- EncryptedPassword = passwordService.HashPassword("admin"),
- RoleString = UserUtility.IsAdminToRoleString(true),
- Version = 0,
- });
-
- MockUsers = mockUsers;
-
- var mockUserInfos = mockUsers.Select(u => UserUtility.CreateUserInfo(u)).ToList();
- mockUserInfos.Sort(UserInfoComparers.Comparer);
- MockUserInfos = mockUserInfos;
- }
-
- public static List<User> MockUsers { get; }
-
- public static IReadOnlyList<UserInfo> MockUserInfos { get; }
- }
-}
diff --git a/Timeline.Tests/Mock/Data/TestUsers.cs b/Timeline.Tests/Mock/Data/TestUsers.cs new file mode 100644 index 00000000..d784e48c --- /dev/null +++ b/Timeline.Tests/Mock/Data/TestUsers.cs @@ -0,0 +1,52 @@ +using System.Collections.Generic;
+using System.Linq;
+using Timeline.Entities;
+using Timeline.Models;
+using Timeline.Services;
+using Timeline.Tests.Helpers;
+
+namespace Timeline.Tests.Mock.Data
+{
+ public static class MockUsers
+ {
+ static MockUsers()
+ {
+ var mockUsers = new List<User>();
+ var passwordService = new PasswordService();
+
+ mockUsers.Add(new User
+ {
+ Name = UserUsername,
+ EncryptedPassword = passwordService.HashPassword(UserPassword),
+ RoleString = UserUtility.IsAdminToRoleString(false),
+ Version = 0,
+ });
+ mockUsers.Add(new User
+ {
+ Name = AdminUsername,
+ EncryptedPassword = passwordService.HashPassword(AdminPassword),
+ RoleString = UserUtility.IsAdminToRoleString(true),
+ Version = 0,
+ });
+
+ Users = mockUsers;
+
+ var mockUserInfos = mockUsers.Select(u => UserUtility.CreateUserInfo(u)).ToList();
+ UserUserInfo = mockUserInfos[0];
+ AdminUserInfo = mockUserInfos[1];
+ mockUserInfos.Sort(UserInfoComparers.Comparer);
+ UserInfos = mockUserInfos;
+ }
+
+ public const string UserUsername = "user";
+ public const string AdminUsername = "admin";
+ public const string UserPassword= "user";
+ public const string AdminPassword = "admin";
+
+ internal static IReadOnlyList<User> Users { get; }
+ public static IReadOnlyList<UserInfo> UserInfos { get; }
+
+ public static UserInfo AdminUserInfo { get; }
+ public static UserInfo UserUserInfo { get; }
+ }
+}
diff --git a/Timeline.Tests/Helpers/TestClock.cs b/Timeline.Tests/Mock/Services/TestClock.cs index ea90305f..0082171e 100644 --- a/Timeline.Tests/Helpers/TestClock.cs +++ b/Timeline.Tests/Mock/Services/TestClock.cs @@ -3,7 +3,7 @@ using Microsoft.Extensions.DependencyInjection; using System;
using Timeline.Services;
-namespace Timeline.Tests.Helpers
+namespace Timeline.Tests.Mock.Services
{
public class TestClock : IClock
{
diff --git a/Timeline.Tests/Timeline.Tests.csproj b/Timeline.Tests/Timeline.Tests.csproj index 8cc304f4..854c63ac 100644 --- a/Timeline.Tests/Timeline.Tests.csproj +++ b/Timeline.Tests/Timeline.Tests.csproj @@ -1,4 +1,4 @@ -<Project Sdk="Microsoft.NET.Sdk.Web">
+<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
diff --git a/Timeline.Tests/TokenUnitTest.cs b/Timeline.Tests/TokenUnitTest.cs index d2a68553..5f3b8e6d 100644 --- a/Timeline.Tests/TokenUnitTest.cs +++ b/Timeline.Tests/TokenUnitTest.cs @@ -2,7 +2,6 @@ using Microsoft.AspNetCore.Mvc.Testing; using Microsoft.Extensions.DependencyInjection;
using Newtonsoft.Json;
using System;
-using System.Linq;
using System.Net;
using System.Net.Http;
using Timeline.Controllers;
@@ -10,6 +9,8 @@ using Timeline.Models.Http; using Timeline.Services;
using Timeline.Tests.Helpers;
using Timeline.Tests.Helpers.Authentication;
+using Timeline.Tests.Mock.Data;
+using Timeline.Tests.Mock.Services;
using Xunit;
using Xunit.Abstractions;
@@ -53,7 +54,12 @@ namespace Timeline.Tests using (var client = _factory.CreateDefaultClient())
{
await InvalidModelTestHelpers.TestPostInvalidModel(client, CreateTokenUrl,
- new CreateTokenRequest { Username = "user", Password = "user", ExpireOffset = -1000 });
+ new CreateTokenRequest
+ {
+ Username = MockUsers.UserUsername,
+ Password = MockUsers.UserPassword,
+ ExpireOffset = -1000
+ });
}
}
@@ -62,7 +68,8 @@ namespace Timeline.Tests {
using (var client = _factory.CreateDefaultClient())
{
- var response = await client.PostAsJsonAsync(CreateTokenUrl, new CreateTokenRequest { Username = "usernotexist", Password = "???" });
+ var response = await client.PostAsJsonAsync(CreateTokenUrl,
+ new CreateTokenRequest { Username = "usernotexist", Password = "???" });
Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
var body = await response.ReadBodyAsJson<CommonResponse>();
Assert.Equal(TokenController.ErrorCodes.Create_UserNotExist, body.Code);
@@ -74,7 +81,8 @@ namespace Timeline.Tests {
using (var client = _factory.CreateDefaultClient())
{
- var response = await client.PostAsJsonAsync(CreateTokenUrl, new CreateTokenRequest { Username = "user", Password = "???" });
+ var response = await client.PostAsJsonAsync(CreateTokenUrl,
+ new CreateTokenRequest { Username = MockUsers.UserUsername, Password = "???" });
Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
var body = await response.ReadBodyAsJson<CommonResponse>();
Assert.Equal(TokenController.ErrorCodes.Create_BadPassword, body.Code);
@@ -86,11 +94,12 @@ namespace Timeline.Tests {
using (var client = _factory.CreateDefaultClient())
{
- var response = await client.PostAsJsonAsync(CreateTokenUrl, new CreateTokenRequest { Username = "user", Password = "user" });
+ var response = await client.PostAsJsonAsync(CreateTokenUrl,
+ new CreateTokenRequest { Username = MockUsers.UserUsername, Password = MockUsers.UserPassword });
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
var body = await response.ReadBodyAsJson<CreateTokenResponse>();
Assert.NotEmpty(body.Token);
- Assert.Equal(TestMockUsers.MockUserInfos.Where(u => u.Username == "user").Single(), body.User, UserInfoComparers.EqualityComparer);
+ Assert.Equal(MockUsers.UserUserInfo, body.User, UserInfoComparers.EqualityComparer);
}
}
@@ -167,8 +176,9 @@ namespace Timeline.Tests // because verify logic is encapsuled in other library.
var mockClock = _factory.GetTestClock();
mockClock.MockCurrentTime = DateTime.Now - TimeSpan.FromDays(2);
- var token = (await client.CreateUserTokenAsync("user", "user", 1)).Token;
- var response = await client.PostAsJsonAsync(VerifyTokenUrl, new VerifyTokenRequest { Token = token });
+ var token = (await client.CreateUserTokenAsync(MockUsers.UserUsername, MockUsers.UserPassword, 1)).Token;
+ var response = await client.PostAsJsonAsync(VerifyTokenUrl,
+ new VerifyTokenRequest { Token = token });
var body = await response.ReadBodyAsJson<CommonResponse>();
Assert.Equal(TokenController.ErrorCodes.Verify_Expired, body.Code);
mockClock.MockCurrentTime = null;
@@ -180,11 +190,12 @@ namespace Timeline.Tests {
using (var client = _factory.CreateDefaultClient())
{
- var createTokenResult = await client.CreateUserTokenAsync("user", "user");
- var response = await client.PostAsJsonAsync(VerifyTokenUrl, new VerifyTokenRequest { Token = createTokenResult.Token });
+ var createTokenResult = await client.CreateUserTokenAsync(MockUsers.UserUsername, MockUsers.UserPassword);
+ var response = await client.PostAsJsonAsync(VerifyTokenUrl,
+ new VerifyTokenRequest { Token = createTokenResult.Token });
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
var body = JsonConvert.DeserializeObject<VerifyTokenResponse>(await response.Content.ReadAsStringAsync());
- Assert.Equal(TestMockUsers.MockUserInfos.Where(u => u.Username == "user").Single(), body.User, UserInfoComparers.EqualityComparer);
+ Assert.Equal(MockUsers.UserUserInfo, body.User, UserInfoComparers.EqualityComparer);
}
}
}
diff --git a/Timeline.Tests/UserUnitTest.cs b/Timeline.Tests/UserUnitTest.cs index 82284a82..7935dd9a 100644 --- a/Timeline.Tests/UserUnitTest.cs +++ b/Timeline.Tests/UserUnitTest.cs @@ -6,6 +6,7 @@ using System.Threading.Tasks; using Timeline.Models;
using Timeline.Tests.Helpers;
using Timeline.Tests.Helpers.Authentication;
+using Timeline.Tests.Mock.Data;
using Xunit;
using Xunit.Abstractions;
@@ -23,13 +24,13 @@ namespace Timeline.Tests [Fact]
public async Task UserTest()
{
- using (var client = await _factory.CreateClientWithUser("admin", "admin"))
+ using (var client = await _factory.CreateClientAsAdmin())
{
var res1 = await client.GetAsync("users");
Assert.Equal(HttpStatusCode.OK, res1.StatusCode);
var users = JsonConvert.DeserializeObject<UserInfo[]>(await res1.Content.ReadAsStringAsync()).ToList();
users.Sort(UserInfoComparers.Comparer);
- Assert.Equal(TestMockUsers.MockUserInfos, users, UserInfoComparers.EqualityComparer);
+ Assert.Equal(MockUsers.UserInfos, users, UserInfoComparers.EqualityComparer);
}
}
}
|