修改代码
This commit is contained in:
1 parent
f03e2b08f4
commit
3dcb6a1c34
24 files changed
+882
-480
No files matched your search
@@ -1,4 +1,6 @@
|
||||
using Autofac;
|
||||
using Store.Management.Framework.Services;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows;
|
||||
using System.Windows.Threading;
|
||||
using Store.Management;
|
||||
@@ -30,13 +32,10 @@ class Program
|
||||
Check(ReferenceEquals(productionClient, productionContainer.Resolve<StoreApiClient>()), "自动注册 API 单例");
|
||||
Check(productionContainer.Resolve<Store.Management.Framework.Services.ILoginService>() != null, "自动注册登录服务");
|
||||
}
|
||||
var builder = new ContainerBuilder();
|
||||
builder.RegisterInstance(client);
|
||||
new Store.Management.Framework.DependencyInjection.ApiClientRegistration().Register(builder);
|
||||
builder.RegisterAssemblyTypes(typeof(Store.Management.Framework.Services.ILoginService).Assembly)
|
||||
.Where(type => typeof(MAX.Core.DependencyInjection.ISingletonDependency).IsAssignableFrom(type))
|
||||
.AsImplementedInterfaces().SingleInstance();
|
||||
using var container = builder.Build();
|
||||
var testExtension = new Prism.Autofac.AutofacContainerExtension();
|
||||
testExtension.RegisterInstance(typeof(StoreApiClient), client);
|
||||
testExtension.FinalizeExtension();
|
||||
using var container = testExtension.Instance;
|
||||
Check(ReferenceEquals(client, container.Resolve<StoreApiClient>()), "保留测试客户端注册");
|
||||
var service = container.Resolve<Store.Management.Framework.Services.ILoginService>();
|
||||
using var vm = new LoginViewModel(service);
|
||||
@@ -59,13 +58,51 @@ class Program
|
||||
Console.WriteLine("PASS: LoginViewModel -> ILoginService -> AuthApi, retry, password contract and cancellation.");
|
||||
return 0;
|
||||
}
|
||||
var app = new TestApp(client);
|
||||
App app = args.Contains("--status-bar") ? new App() : new TestApp(client);
|
||||
app.InitializeComponent();
|
||||
int exitCode = 0;
|
||||
app.Dispatcher.BeginInvoke(DispatcherPriority.ApplicationIdle, new Action(async () =>
|
||||
{
|
||||
try
|
||||
{
|
||||
if (args.Contains("--status-bar"))
|
||||
{
|
||||
for (int attempt = 0; attempt < 200 && app.MainWindow is not MainWindow; attempt++)
|
||||
{
|
||||
await Task.Delay(50);
|
||||
}
|
||||
MainWindow shell = (MainWindow)app.MainWindow;
|
||||
IStatusBarService status = app.Container.Resolve<IStatusBarService>();
|
||||
TextBlock text = (TextBlock)shell.FindName("StatusText");
|
||||
ProgressBar progress = (ProgressBar)shell.FindName("StatusProgress");
|
||||
Check(text.Text == "就绪" && progress.Visibility == Visibility.Collapsed, "初始状态");
|
||||
foreach ((StatusLevel level, string brush, int value) in new[] {
|
||||
(StatusLevel.Info, "PrimaryTextBrush", 0), (StatusLevel.Warning, "WarningBrush", 50),
|
||||
(StatusLevel.Error, "DangerBrush", 75), (StatusLevel.Success, "SuccessBrush", 100) })
|
||||
{
|
||||
await Task.Run(() => status.Report(level.ToString(), level, value));
|
||||
await Dispatcher.Yield(DispatcherPriority.ApplicationIdle);
|
||||
Check(text.Text == level.ToString() && text.Foreground == shell.FindResource(brush), "状态文字和颜色");
|
||||
Check(progress.Visibility == Visibility.Visible && progress.Value == value, "任务进度");
|
||||
}
|
||||
status.Report("完成");
|
||||
await Dispatcher.Yield(DispatcherPriority.ApplicationIdle);
|
||||
Check(text.Text == "完成" && progress.Visibility == Visibility.Collapsed, "纯文本状态隐藏进度");
|
||||
using var usersClient = new StoreApiClient(new ApiClientOptions { BaseUrl = new Uri("http://localhost:14312/api/v1/") }, httpClient);
|
||||
usersClient.Session.Clear();
|
||||
var usersVm = new UserManagementPageViewModel(usersClient, app.Container.Resolve<IDialogService>(), status);
|
||||
await usersVm.SearchCommand.Execute();
|
||||
Check(status.Current.Level == StatusLevel.Error && usersVm.CanInteract, "查询失败后显示错误并允许重试");
|
||||
await usersClient.Auth.LoginAsync(new() { UserName = "admin", Password = "320BB1D43EC042096A83DBAC6DC9294A" });
|
||||
Task search = usersVm.SearchCommand.Execute();
|
||||
Check(!usersVm.CanInteract && status.Current.Level == StatusLevel.Info, "查询期间禁用操作");
|
||||
await search;
|
||||
Check(usersVm.CanInteract && usersVm.Total == 51 && status.Current.Level == StatusLevel.Success, "重试查询成功");
|
||||
await usersVm.PageCommand.Execute(new DataGridPageRequest(2, 50));
|
||||
Check(usersVm.Page == 2 && usersVm.CanInteract && status.Current.Level == StatusLevel.Success, "分页查询成功");
|
||||
Console.WriteLine("PASS: status bar bindings, colors and background progress reports.");
|
||||
return;
|
||||
}
|
||||
for (int attempt = 0; attempt < 100 && !app.Windows.OfType<DialogWindow>().Any(window => window.Content is LoginWindow && window.IsLoaded); attempt++)
|
||||
{
|
||||
await Task.Delay(20);
|
||||
@@ -185,6 +222,14 @@ sealed class LoginHandler : HttpMessageHandler
|
||||
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
|
||||
{
|
||||
RequestCount++;
|
||||
if (request.RequestUri?.AbsolutePath == "/api/v1/user/GetAllUser")
|
||||
{
|
||||
await Task.Delay(30, cancellationToken);
|
||||
return new HttpResponseMessage(HttpStatusCode.OK)
|
||||
{
|
||||
Content = new StringContent("""{"code":200,"data":{"total":51,"items":[{"id":1,"userName":"admin"}]}}""", Encoding.UTF8, "application/json")
|
||||
};
|
||||
}
|
||||
if (request.RequestUri?.AbsoluteUri != "http://localhost:14312/api/v1/Auth/Login")
|
||||
throw new Exception("登录路由错误");
|
||||
var body = System.Text.Json.JsonDocument.Parse(await request.Content!.ReadAsStringAsync(cancellationToken));
|
||||
|
||||
Reference in new issue
Block a user