From 8225c5ff0092f2d666a8c012dffbbc0b428c7d9b Mon Sep 17 00:00:00 2001 From: 杨宇千 Date: Sat, 17 Aug 2019 20:33:01 +0800 Subject: Finally solve the database conflict problem in unit tests. --- Timeline.Tests/TokenUnitTest.cs | 83 +++++++++++++++++++---------------------- 1 file changed, 38 insertions(+), 45 deletions(-) (limited to 'Timeline.Tests/TokenUnitTest.cs') diff --git a/Timeline.Tests/TokenUnitTest.cs b/Timeline.Tests/TokenUnitTest.cs index b5d8a2c8..3babacf7 100644 --- a/Timeline.Tests/TokenUnitTest.cs +++ b/Timeline.Tests/TokenUnitTest.cs @@ -15,43 +15,36 @@ using Xunit.Abstractions; namespace Timeline.Tests { - public class TokenUnitTest : IClassFixture> + public class TokenUnitTest : IClassFixture>, IDisposable { private const string CreateTokenUrl = "token/create"; private const string VerifyTokenUrl = "token/verify"; private readonly WebApplicationFactory _factory; + private readonly Action _disposeAction; public TokenUnitTest(MyWebApplicationFactory factory, ITestOutputHelper outputHelper) { - _factory = factory.WithTestLogging(outputHelper); + _factory = factory.WithTestConfig(outputHelper, out _disposeAction); } - [Fact] - public async void CreateToken_MissingUsername() + public void Dispose() { - using (var client = _factory.CreateDefaultClient()) - { - await InvalidModelTestHelpers.TestPostInvalidModel(client, CreateTokenUrl, - new CreateTokenRequest { Username = null, Password = "user" }); - } + _disposeAction(); } [Fact] - public async void CreateToken_InvalidModel_MissingPassword() + public async void CreateToken_InvalidModel() { using (var client = _factory.CreateDefaultClient()) { + // missing username + await InvalidModelTestHelpers.TestPostInvalidModel(client, CreateTokenUrl, + new CreateTokenRequest { Username = null, Password = "user" }); + // missing password await InvalidModelTestHelpers.TestPostInvalidModel(client, CreateTokenUrl, new CreateTokenRequest { Username = "user", Password = null }); - } - } - - [Fact] - public async void CreateToken_InvalidModel_BadExpireOffset() - { - using (var client = _factory.CreateDefaultClient()) - { + // bad expire offset await InvalidModelTestHelpers.TestPostInvalidModel(client, CreateTokenUrl, new CreateTokenRequest { @@ -101,10 +94,11 @@ namespace Timeline.Tests } [Fact] - public async void VerifyToken_InvalidModel_MissingToken() + public async void VerifyToken_InvalidModel() { using (var client = _factory.CreateDefaultClient()) { + // missing token await InvalidModelTestHelpers.TestPostInvalidModel(client, VerifyTokenUrl, new VerifyTokenRequest { Token = null }); } @@ -122,43 +116,42 @@ namespace Timeline.Tests } [Fact] - public async void VerifyToken_BadVersion_AND_UserNotExist() + public async void VerifyToken_BadVersion() { using (var client = _factory.CreateDefaultClient()) { + var token = (await client.CreateUserTokenAsync(MockUsers.UserUsername, MockUsers.UserPassword)).Token; + using (var scope = _factory.Server.Host.Services.CreateScope()) // UserService is scoped. { // create a user for test var userService = scope.ServiceProvider.GetRequiredService(); + await userService.PatchUser(MockUsers.UserUsername, null, null); + } - const string username = "verifytokentest0"; - const string password = "12345678"; - - await userService.PutUser(username, password, false); - - // create a token - var token = (await client.CreateUserTokenAsync(username, password)).Token; - - // increase version - await userService.PatchUser(username, null, null); - - // test against bad version - var response = await client.PostAsJsonAsync(VerifyTokenUrl, new VerifyTokenRequest { Token = token }); - response.Should().HaveStatusCodeBadRequest() - .And.Should().HaveBodyAsCommonResponseWithCode(TokenController.ErrorCodes.Verify_BadVersion); - - - // create another token - var token2 = (await client.CreateUserTokenAsync(username, password)).Token; + var response = await client.PostAsJsonAsync(VerifyTokenUrl, new VerifyTokenRequest { Token = token }); + response.Should().HaveStatusCodeBadRequest() + .And.Should().HaveBodyAsCommonResponseWithCode(TokenController.ErrorCodes.Verify_BadVersion); + } + } - // delete user - await userService.DeleteUser(username); + [Fact] + public async void VerifyToken_UserNotExist() + { + using (var client = _factory.CreateDefaultClient()) + { + var token = (await client.CreateUserTokenAsync(MockUsers.UserUsername, MockUsers.UserPassword)).Token; - // test against user not exist - var response2 = await client.PostAsJsonAsync(VerifyTokenUrl, new VerifyTokenRequest { Token = token }); - response2.Should().HaveStatusCodeBadRequest() - .And.Should().HaveBodyAsCommonResponseWithCode(TokenController.ErrorCodes.Verify_UserNotExist); + using (var scope = _factory.Server.Host.Services.CreateScope()) // UserService is scoped. + { + // create a user for test + var userService = scope.ServiceProvider.GetRequiredService(); + await userService.DeleteUser(MockUsers.UserUsername); } + + var response = await client.PostAsJsonAsync(VerifyTokenUrl, new VerifyTokenRequest { Token = token }); + response.Should().HaveStatusCodeBadRequest() + .And.Should().HaveBodyAsCommonResponseWithCode(TokenController.ErrorCodes.Verify_UserNotExist); } } -- cgit v1.2.3