test: 增加 Account 控制器单元测试
# Conflicts: # src/admin/Bootstrap.Admin/Controllers/Api/LoginController.cs
This commit is contained in:
parent
f271b2402c
commit
9d2208fc65
|
@ -158,22 +158,6 @@ namespace Bootstrap.Admin.Controllers
|
||||||
return Redirect(originUrl);
|
return Redirect(originUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 创建登录用户信息
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="ipLocator"></param>
|
|
||||||
/// <param name="context"></param>
|
|
||||||
/// <param name="loginUser"></param>
|
|
||||||
internal static void CreateLoginUser(IIPLocatorProvider ipLocator, HttpContext context, LoginUser loginUser)
|
|
||||||
{
|
|
||||||
loginUser.UserAgent = context.Request.Headers["User-Agent"];
|
|
||||||
var agent = new UserAgent(loginUser.UserAgent);
|
|
||||||
loginUser.Ip = context.Connection.RemoteIpAddress.ToIPv4String();
|
|
||||||
loginUser.City = ipLocator.Locate(loginUser.Ip);
|
|
||||||
loginUser.Browser = $"{agent.Browser?.Name} {agent.Browser?.Version}";
|
|
||||||
loginUser.OS = $"{agent.OS?.Name} {agent.OS?.Version}";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Logout this instance.
|
/// Logout this instance.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -30,6 +30,7 @@ namespace Bootstrap.Admin.Query
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public QueryData<DBLog> RetrieveData()
|
public QueryData<DBLog> RetrieveData()
|
||||||
{
|
{
|
||||||
|
if (string.IsNullOrEmpty(Order)) Order = "LogTime";
|
||||||
var data = LogHelper.RetrieveDBLogs(this, OperateTimeStart, OperateTimeEnd, UserName);
|
var data = LogHelper.RetrieveDBLogs(this, OperateTimeStart, OperateTimeEnd, UserName);
|
||||||
var ret = new QueryData<DBLog>();
|
var ret = new QueryData<DBLog>();
|
||||||
ret.total = data.TotalItems;
|
ret.total = data.TotalItems;
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace Bootstrap.Admin.Api.MySql
|
||||||
|
{
|
||||||
|
[Collection("MySqlContext")]
|
||||||
|
public class SQLTest : SqlServer.SQLTest
|
||||||
|
{
|
||||||
|
public SQLTest(SQLiteBAWebHost factory) : base(factory) { }
|
||||||
|
}
|
||||||
|
}
|
|
@ -32,6 +32,19 @@ namespace Bootstrap.Admin.Api.SqlServer
|
||||||
Assert.Equal("", _token);
|
Assert.Equal("", _token);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async void Put_Ok()
|
||||||
|
{
|
||||||
|
var resq = await Client.PutAsync("?phone=", new StringContent(""));
|
||||||
|
var _token = await resq.Content.ReadAsStringAsync();
|
||||||
|
Assert.Equal("false", _token);
|
||||||
|
|
||||||
|
// UNDONE: 重构短信登陆后完善
|
||||||
|
//resq = await Client.PutAsync("?phone=", new StringContent(""));
|
||||||
|
//_token = await resq.Content.ReadAsStringAsync();
|
||||||
|
//Assert.Equal("true", _token);
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public async void Option_Ok()
|
public async void Option_Ok()
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
using Bootstrap.DataAccess;
|
||||||
|
using Longbow.Web.Mvc;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace Bootstrap.Admin.Api.SqlServer
|
||||||
|
{
|
||||||
|
public class SQLTest : ControllerTest
|
||||||
|
{
|
||||||
|
public SQLTest(BAWebHost factory) : base(factory, "api/SQL") { }
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async void Get_Ok()
|
||||||
|
{
|
||||||
|
var resp = await Client.GetAsJsonAsync<QueryData<DBLog>>("?userName=Admin&OperateTimeStart=&OperateTimeEnd=");
|
||||||
|
Assert.NotNull(resp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace Bootstrap.Admin.Api.SQLite
|
||||||
|
{
|
||||||
|
[Collection("SQLiteContext")]
|
||||||
|
public class SQLTest : SqlServer.SQLTest
|
||||||
|
{
|
||||||
|
public SQLTest(SQLiteBAWebHost factory) : base(factory) { }
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,7 +1,10 @@
|
||||||
using Bootstrap.DataAccess;
|
using Bootstrap.DataAccess;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Concurrent;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
|
using System.Reflection;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace Bootstrap.Admin.Controllers.SqlServer
|
namespace Bootstrap.Admin.Controllers.SqlServer
|
||||||
|
@ -105,5 +108,37 @@ namespace Bootstrap.Admin.Controllers.SqlServer
|
||||||
};
|
};
|
||||||
await Client.PostAsync("Lock", data);
|
await Client.PostAsync("Lock", data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Theory]
|
||||||
|
[InlineData("Gitee")]
|
||||||
|
[InlineData("GitHub")]
|
||||||
|
[InlineData("WeChat")]
|
||||||
|
public async void OAuth_Ok(string url)
|
||||||
|
{
|
||||||
|
var client = Host.CreateClient();
|
||||||
|
var r = await client.GetAsync($"/Account/{url}");
|
||||||
|
Assert.True(r.IsSuccessStatusCode);
|
||||||
|
var content = await r.Content.ReadAsStringAsync();
|
||||||
|
Assert.Contains("登 录", content);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Mobile_Ok()
|
||||||
|
{
|
||||||
|
// UNDONE: Mobile 单元测试未完成
|
||||||
|
|
||||||
|
// 反射设置 SMSHelper 内部验证码保证 Validate 方法返回真
|
||||||
|
var validateCodeInstance = Activator.CreateInstance(Type.GetType("Bootstrap.DataAccess.SMSHelper+AutoExpireValidateCode, Bootstrap.DataAccess"), new object[] { "18910001000", "1234", TimeSpan.FromSeconds(10)});
|
||||||
|
var _poolInstance = typeof(SMSHelper).GetField("_pool", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static);
|
||||||
|
//_pool.AddOrUpdate(option.Phone, key => new AutoExpireValidateCode(option.Phone, result.Data, option.Expires), (key, v) => v.Reset(result.Data));
|
||||||
|
//var addMethod = _poolInstance.GetType().GetMethod("AddOrUpdate");
|
||||||
|
//addMethod.Invoke(_poolInstance, new object[] { "18910001000", validateCodeInstance, null });
|
||||||
|
|
||||||
|
//var client = Host.CreateClient();
|
||||||
|
//var r = await client.GetAsync($"/Account/Mobile?phone=18910001000&code=1234");
|
||||||
|
//Assert.True(r.IsSuccessStatusCode);
|
||||||
|
//var content = await r.Content.ReadAsStringAsync();
|
||||||
|
//Assert.Contains("登 录", content);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,6 +29,7 @@ namespace Bootstrap.Admin.Controllers.SqlServer
|
||||||
[InlineData("Tasks", "任务管理")]
|
[InlineData("Tasks", "任务管理")]
|
||||||
[InlineData("Mobile", "客户端测试")]
|
[InlineData("Mobile", "客户端测试")]
|
||||||
[InlineData("Analyse", "网站分析")]
|
[InlineData("Analyse", "网站分析")]
|
||||||
|
[InlineData("SQL", "SQL日志")]
|
||||||
public async void View_Ok(string view, string text)
|
public async void View_Ok(string view, string text)
|
||||||
{
|
{
|
||||||
var r = await Client.GetAsync(view);
|
var r = await Client.GetAsync(view);
|
||||||
|
|
|
@ -49,6 +49,25 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"GiteeHealthChecks": true,
|
||||||
|
"GiteeOptions": {
|
||||||
|
"Enabled": false
|
||||||
|
},
|
||||||
|
"GitHubOptions": {
|
||||||
|
"Enabled": false
|
||||||
|
},
|
||||||
|
"WeChatOptions": {
|
||||||
|
"Enabled": false
|
||||||
|
},
|
||||||
|
"SMSOptions": {
|
||||||
|
"CompanyCode": "<CompanyCode>",
|
||||||
|
"MD5Key": "MD5Key",
|
||||||
|
"Roles": [
|
||||||
|
"Administrators"
|
||||||
|
],
|
||||||
|
"HomePath": "/Admin/Profiles",
|
||||||
|
"App": "0"
|
||||||
|
},
|
||||||
"LongbowCache": {
|
"LongbowCache": {
|
||||||
"Enabled": false
|
"Enabled": false
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue