using Avalonia.Controls; using Avalonia.Headless.XUnit; using Avalonia.VisualTree; using NSubstitute; using Shouldly; using Xunit; using JdeScoping.SecureStoreManager.Services; using JdeScoping.SecureStoreManager.ViewModels; using JdeScoping.SecureStoreManager.Views; namespace JdeScoping.SecureStoreManager.Tests.Views; public class MainWindowTests { private static MainWindowViewModel CreateViewModel(ISecureStoreManager? storeManager = null) { var mockStoreManager = storeManager ?? Substitute.For(); var mockDialogService = Substitute.For(); var mockClipboardService = Substitute.For(); return new MainWindowViewModel(mockStoreManager, mockDialogService, mockClipboardService); } [AvaloniaFact] public void MainWindow_ShowsWithCorrectDefaultTitle() { // Arrange var storeManager = Substitute.For(); storeManager.IsStoreOpen.Returns(false); var viewModel = CreateViewModel(storeManager); var window = new MainWindow { DataContext = viewModel }; // Act window.Show(); // Assert - Title is bound to WindowTitle which is "SecureStore Manager" when no store is open window.Title.ShouldBe("SecureStore Manager"); } [AvaloniaFact] public void MainWindow_HasExpectedWidth() { // Arrange & Act var window = new MainWindow(); window.Show(); // Assert window.Width.ShouldBe(800); } [AvaloniaFact] public void MainWindow_HasExpectedHeight() { // Arrange & Act var window = new MainWindow(); window.Show(); // Assert window.Height.ShouldBe(500); } [AvaloniaFact] public void MainWindow_DataContextIsMainWindowViewModel() { // Arrange var viewModel = CreateViewModel(); // Act var window = new MainWindow { DataContext = viewModel }; window.Show(); // Assert - DataContext is set via DI in production, but must be set manually in tests window.DataContext.ShouldBeOfType(); } [AvaloniaFact] public void MainWindow_ContainsSecretsDataGrid() { // Arrange & Act var window = new MainWindow(); window.Show(); // Assert var dataGrid = window.FindDescendantOfType(); dataGrid.ShouldNotBeNull(); } [AvaloniaFact] public void MainWindow_ContainsMenuBar() { // Arrange & Act var window = new MainWindow(); window.Show(); // Assert var menu = window.FindDescendantOfType(); menu.ShouldNotBeNull(); } [AvaloniaFact] public void MainWindow_ContainsToolbarButtons() { // Arrange & Act var window = new MainWindow(); window.Show(); // Assert var buttons = window.GetVisualDescendants().OfType