diff options
author | 杨宇千 <crupest@outlook.com> | 2020-02-01 00:26:35 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-02-01 00:26:35 +0800 |
commit | 7b962cd876719fb871569ba3c97fb5545721a3f8 (patch) | |
tree | f02f8d57440c777d4732bc4439f82e8b25c6732c /Timeline.Tests/IntegratedTests/IntegratedTestBase.cs | |
parent | 289c7e1fada1f4dae6ce5e421e997ebddd55c2df (diff) | |
parent | bcb0a2361467614531a337282da1fd23996924f1 (diff) | |
download | timeline-7b962cd876719fb871569ba3c97fb5545721a3f8.tar.gz timeline-7b962cd876719fb871569ba3c97fb5545721a3f8.tar.bz2 timeline-7b962cd876719fb871569ba3c97fb5545721a3f8.zip |
Merge pull request #56 from crupest/dev
Refactor API to be RESTful.
Diffstat (limited to 'Timeline.Tests/IntegratedTests/IntegratedTestBase.cs')
-rw-r--r-- | Timeline.Tests/IntegratedTests/IntegratedTestBase.cs | 118 |
1 files changed, 75 insertions, 43 deletions
diff --git a/Timeline.Tests/IntegratedTests/IntegratedTestBase.cs b/Timeline.Tests/IntegratedTests/IntegratedTestBase.cs index 242a452d..dfde2ea5 100644 --- a/Timeline.Tests/IntegratedTests/IntegratedTestBase.cs +++ b/Timeline.Tests/IntegratedTests/IntegratedTestBase.cs @@ -1,51 +1,82 @@ -using Microsoft.AspNetCore.Mvc.Testing; +using AutoMapper;
+using Microsoft.AspNetCore.Mvc.Testing; +using Microsoft.Extensions.DependencyInjection;
using System; -using System.Collections.Generic; +using System.Collections.Generic;
using System.Net.Http; using System.Threading.Tasks; using Timeline.Models.Http; +using Timeline.Services;
using Timeline.Tests.Helpers; using Xunit; namespace Timeline.Tests.IntegratedTests { - public enum AuthType - { - None, - User, - Admin - } - - public static class AuthTypeExtensions + public abstract class IntegratedTestBase : IClassFixture<WebApplicationFactory<Startup>>, IDisposable { - public static MockUser GetMockUser(this AuthType authType) - { - return authType switch - { - AuthType.None => null, - AuthType.User => MockUser.User, - AuthType.Admin => MockUser.Admin, - _ => throw new InvalidOperationException("Unknown auth type.") - }; + static IntegratedTestBase()
+ {
+ FluentAssertions.AssertionOptions.AssertEquivalencyUsing(options =>
+ options.Excluding(m => m.RuntimeType == typeof(UserInfoLinks)));
} - public static string GetUsername(this AuthType authType) => authType.GetMockUser().Username; - } - - public abstract class IntegratedTestBase : IClassFixture<WebApplicationFactory<Startup>>, IDisposable - { protected TestApplication TestApp { get; } protected WebApplicationFactory<Startup> Factory => TestApp.Factory; - public IntegratedTestBase(WebApplicationFactory<Startup> factory) + public IntegratedTestBase(WebApplicationFactory<Startup> factory) : this(factory, 1) + { + + }
+
+ public IntegratedTestBase(WebApplicationFactory<Startup> factory, int userCount) { + if (userCount < 0) + throw new ArgumentOutOfRangeException(nameof(userCount), userCount, "User count can't be negative."); + TestApp = new TestApplication(factory); + + using (var scope = Factory.Services.CreateScope())
+ {
+ var users = new List<User>()
+ {
+ new User
+ {
+ Username = "admin",
+ Password = "adminpw",
+ Administrator = true,
+ Nickname = "administrator"
+ }
+ };
+
+ for (int i = 1; i <= userCount; i++)
+ {
+ users.Add(new User
+ {
+ Username = $"user{i}",
+ Password = $"user{i}pw",
+ Administrator = false,
+ Nickname = $"imuser{i}"
+ });
+ }
+
+ 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));
+ }
+
+ UserInfos = userInfoList;
+ }
} protected virtual void OnDispose() { - } public void Dispose() @@ -54,14 +85,9 @@ namespace Timeline.Tests.IntegratedTests TestApp.Dispose(); } - protected void CreateExtraMockUsers(int count) - { - TestApp.Database.CreateExtraMockUsers(count); - } - - protected IReadOnlyList<MockUser> ExtraMockUsers => TestApp.Database.ExtraMockUsers; + public IReadOnlyList<UserInfo> UserInfos { get; } - public Task<HttpClient> CreateClientWithNoAuth() + public Task<HttpClient> CreateDefaultClient() { return Task.FromResult(Factory.CreateDefaultClient()); } @@ -77,18 +103,24 @@ namespace Timeline.Tests.IntegratedTests return client; } - public Task<HttpClient> CreateClientAs(MockUser user) + public Task<HttpClient> CreateClientAs(int userNumber) { - if (user == null) - return CreateClientWithNoAuth(); - return CreateClientWithCredential(user.Username, user.Password); + if (userNumber < 0) + return CreateDefaultClient(); + if (userNumber == 0) + return CreateClientWithCredential("admin", "adminpw"); + else + return CreateClientWithCredential($"user{userNumber}", $"user{userNumber}pw"); } - public Task<HttpClient> CreateClientAs(AuthType authType) => CreateClientAs(authType.GetMockUser()); - - - public Task<HttpClient> CreateClientAsUser() => CreateClientAs(MockUser.User); - public Task<HttpClient> CreateClientAsAdmin() => CreateClientAs(MockUser.Admin); - + public Task<HttpClient> CreateClientAsAdministrator()
+ {
+ return CreateClientAs(0);
+ }
+
+ public Task<HttpClient> CreateClientAsUser()
+ {
+ return CreateClientAs(1);
+ } } } |