test(app): add docker and main window view model tests
This commit is contained in:
1 parent
1f1b78e50b
commit
36fbba0250
3 files changed
+179
No files matched your search
@@ -0,0 +1,70 @@
|
||||
using Vantage.App.Tests.Fakes;
|
||||
using Vantage.App.ViewModels;
|
||||
using Vantage.Core.Configuration;
|
||||
using Vantage.Core.Docker;
|
||||
using Vantage.Core.Health;
|
||||
using Vantage.Core.Metrics;
|
||||
using Xunit;
|
||||
|
||||
namespace Vantage.App.Tests;
|
||||
|
||||
public class MainWindowViewModelTests
|
||||
{
|
||||
private static IConfigStore EmptyStore() =>
|
||||
new JsonConfigStore(Path.Combine(Path.GetTempPath(), "vantage-vm-" + Guid.NewGuid().ToString("N"), "config.json"));
|
||||
|
||||
private static MainWindowViewModel Build(IMetricsProvider metrics, IHealthChecker? health = null) =>
|
||||
new(metrics, new MockDockerProvider(), health ?? new HealthChecker(new HttpClient()), EmptyStore());
|
||||
|
||||
[Fact]
|
||||
public async Task InitializeAsync_FallsBackToDemoDataWhenConfigEmpty()
|
||||
{
|
||||
var viewModel = Build(new MockMetricsProvider());
|
||||
|
||||
await viewModel.InitializeAsync();
|
||||
|
||||
Assert.NotEmpty(viewModel.Hosts);
|
||||
Assert.NotEmpty(viewModel.HealthChecks);
|
||||
Assert.NotNull(viewModel.SelectedHost);
|
||||
Assert.Same(viewModel.Hosts[0].Config, viewModel.Docker.Host);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task RefreshSelectedHostAsync_PopulatesMetricsAndHistory()
|
||||
{
|
||||
var viewModel = Build(new MockMetricsProvider());
|
||||
await viewModel.InitializeAsync();
|
||||
|
||||
await viewModel.RefreshSelectedHostAsync(CancellationToken.None);
|
||||
|
||||
Assert.True(viewModel.SelectedHost!.IsOnline);
|
||||
Assert.NotEmpty(viewModel.SelectedHost.CpuPoints);
|
||||
Assert.StartsWith("Updated", viewModel.StatusLine);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task RefreshSelectedHostAsync_MarksHostUnreachableOnFailure()
|
||||
{
|
||||
var viewModel = Build(new ThrowingMetricsProvider());
|
||||
await viewModel.InitializeAsync();
|
||||
|
||||
await viewModel.RefreshSelectedHostAsync(CancellationToken.None);
|
||||
|
||||
Assert.False(viewModel.SelectedHost!.IsOnline);
|
||||
Assert.Equal(ThrowingMetricsProvider.Message, viewModel.SelectedHost.LastError);
|
||||
Assert.Contains(ThrowingMetricsProvider.Message, viewModel.StatusLine);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task RunAllHealthAsync_RunsEveryConfiguredCheck()
|
||||
{
|
||||
var health = new FakeHealthChecker(Vantage.Core.Models.HealthCheckResult.Up(5, "ok"));
|
||||
var viewModel = Build(new MockMetricsProvider(), health);
|
||||
await viewModel.InitializeAsync();
|
||||
|
||||
await viewModel.RunAllHealthAsync(CancellationToken.None);
|
||||
|
||||
Assert.Equal(viewModel.HealthChecks.Count, health.Calls);
|
||||
Assert.All(viewModel.HealthChecks, check => Assert.StartsWith("Up", check.StatusText));
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user