aboutsummaryrefslogtreecommitdiff
path: root/Timeline.Tests/IntegratedTests/IntegratedTestBase.cs
diff options
context:
space:
mode:
author杨宇千 <crupest@outlook.com>2020-02-01 00:26:35 +0800
committerGitHub <noreply@github.com>2020-02-01 00:26:35 +0800
commit7b962cd876719fb871569ba3c97fb5545721a3f8 (patch)
treef02f8d57440c777d4732bc4439f82e8b25c6732c /Timeline.Tests/IntegratedTests/IntegratedTestBase.cs
parent289c7e1fada1f4dae6ce5e421e997ebddd55c2df (diff)
parentbcb0a2361467614531a337282da1fd23996924f1 (diff)
downloadtimeline-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.cs118
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);
+ }
}
}