using Ewide.Web.Entry; using Microsoft.AspNetCore.Mvc.Testing; using System; using System.Net.Http; using Xunit; using Xunit.Abstractions; using Newtonsoft.Json; using System.Threading.Tasks; using Ewide.Core; using System.Net.Http.Headers; using Ewide.Core.Service; using System.Text; using Ewide.Core.Util; namespace Ewide.Test { public class AuthTest : IClassFixture> { private readonly CustomWebApplicationFactory _factory; private readonly HttpClient _client; private readonly ITestOutputHelper _output; public AuthTest(CustomWebApplicationFactory factory, ITestOutputHelper output) { _factory = factory; _client = _factory.CreateClient(new WebApplicationFactoryClientOptions { AllowAutoRedirect = false, }); _client.DefaultRequestHeaders.Add("User-Agent", "xUnit"); _output = output; } [Fact] public async Task Get_NotNull_UserLoginInfo() { await GetAccessToken("superAdmin", "123456"); var response = await _client.GetAsync("/getLoginUser"); _output.WriteLine($"login status code {response.StatusCode}"); var body = await response.Content.ReadAsStringAsync(); _output.WriteLine($"body {body}"); var result = JsonConvert.DeserializeObject>(body); Assert.NotNull(result.Data); } [Theory] [InlineData("superAdmin","123456",200)] [InlineData("superAdmin","12345",500)] public async Task Get_RightCode_LoginResult(string account,string password,int code) { var response = await _client.PostAsync("/login", new StringContent( JsonConvert.SerializeObject( new LoginInput { Account = account, Password = RSAHandler.RSAEncrypt(password) } ) , Encoding.UTF8, "application/json")); var body = await response.Content.ReadAsStringAsync(); _output.WriteLine($"body {body}"); var result = JsonConvert.DeserializeObject>(body); Assert.Equal(code, result.Code); } private void SetToken(string token) { _client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); } private async Task GetAccessToken(string account,string password) { var response = await _client.PostAsync("/login", new StringContent( JsonConvert.SerializeObject( new LoginInput { Account = account, Password = RSAHandler.RSAEncrypt(password) } ) , Encoding.UTF8, "application/json")); var body = await response.Content.ReadAsStringAsync(); _output.WriteLine($"body {body}"); var result = JsonConvert.DeserializeObject>(body); if (!result.Success) { throw new ArgumentException("»ñÈ¡AccessTokenʧ°Ü"); } SetToken(result.Data); } } }