test(app): add app test scaffolding and headless test harness
This commit is contained in:
1 parent
d679231fed
commit
1f1b78e50b
4 files changed
+105
No files matched your search
@@ -0,0 +1,31 @@
|
||||
using Vantage.Core.Health;
|
||||
using Vantage.Core.Metrics;
|
||||
using Vantage.Core.Models;
|
||||
|
||||
namespace Vantage.App.Tests.Fakes;
|
||||
|
||||
public sealed class ThrowingMetricsProvider : IMetricsProvider
|
||||
{
|
||||
public const string Message = "host unreachable";
|
||||
|
||||
public Task<HostMetrics> GetMetricsAsync(HostConfig host, CancellationToken cancellationToken) =>
|
||||
throw new InvalidOperationException(Message);
|
||||
}
|
||||
|
||||
public sealed class FakeHealthChecker : IHealthChecker
|
||||
{
|
||||
private readonly HealthCheckResult result;
|
||||
|
||||
public FakeHealthChecker(HealthCheckResult result)
|
||||
{
|
||||
this.result = result;
|
||||
}
|
||||
|
||||
public int Calls { get; private set; }
|
||||
|
||||
public Task<HealthCheckResult> CheckAsync(HealthCheckConfig check, CancellationToken cancellationToken)
|
||||
{
|
||||
Calls++;
|
||||
return Task.FromResult(result);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
using Avalonia;
|
||||
using Avalonia.Headless;
|
||||
using Vantage.App;
|
||||
using Vantage.App.Tests;
|
||||
|
||||
[assembly: AvaloniaTestApplication(typeof(HeadlessTestApp))]
|
||||
|
||||
namespace Vantage.App.Tests;
|
||||
|
||||
public static class HeadlessTestApp
|
||||
{
|
||||
public static AppBuilder BuildAvaloniaApp() => AppBuilder
|
||||
.Configure<App>()
|
||||
.UseHeadless(new AvaloniaHeadlessPlatformOptions());
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
using Avalonia;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Headless.XUnit;
|
||||
using Avalonia.VisualTree;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Vantage.App;
|
||||
using Vantage.App.ViewModels;
|
||||
using Vantage.App.Views;
|
||||
using Xunit;
|
||||
|
||||
namespace Vantage.App.Tests;
|
||||
|
||||
public class HeadlessWindowTests
|
||||
{
|
||||
[AvaloniaFact]
|
||||
public async Task MainWindow_LoadsXamlAndBindsViewModel()
|
||||
{
|
||||
var services = new ServiceCollection();
|
||||
services.AddVantageApp(useMockProviders: true);
|
||||
var provider = services.BuildServiceProvider();
|
||||
|
||||
var viewModel = provider.GetRequiredService<MainWindowViewModel>();
|
||||
await viewModel.InitializeAsync();
|
||||
|
||||
var window = new MainWindow { DataContext = viewModel };
|
||||
window.Show();
|
||||
|
||||
Assert.Same(viewModel, window.DataContext);
|
||||
Assert.NotEmpty(viewModel.Hosts);
|
||||
|
||||
var tabControl = window.GetVisualDescendants().OfType<TabControl>().FirstOrDefault();
|
||||
Assert.NotNull(tabControl);
|
||||
|
||||
var listBox = window.GetVisualDescendants().OfType<ListBox>().FirstOrDefault();
|
||||
Assert.NotNull(listBox);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<IsPackable>false</IsPackable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
|
||||
<PackageReference Include="xunit" Version="2.6.6" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.6" />
|
||||
<PackageReference Include="Avalonia.Headless.XUnit" Version="11.0.10" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\src\Vantage.App\Vantage.App.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
Reference in new issue
Block a user