using JdeScoping.ConfigManager.Services; using JdeScoping.ConfigManager.ViewModels.Dialogs; namespace JdeScoping.ConfigManager.Tests.ViewModels.Dialogs; public class ValidationResultsDialogViewModelTests { [Fact] public void Constructor_WithEmptyResults_HasNoItems() { // Arrange var appSettingsResult = new ValidationResult(); var pipelinesResult = new ValidationResult(); // Act var sut = new ValidationResultsDialogViewModel(appSettingsResult, pipelinesResult); // Assert sut.Items.Count.ShouldBe(0); sut.ErrorCount.ShouldBe(0); sut.WarningCount.ShouldBe(0); sut.IsValid.ShouldBeTrue(); } [Fact] public void Constructor_WithErrors_PopulatesItemsCorrectly() { // Arrange var appSettingsResult = new ValidationResult(); appSettingsResult.AddError("Missing connection string"); appSettingsResult.AddError("Invalid timeout value"); var pipelinesResult = new ValidationResult(); // Act var sut = new ValidationResultsDialogViewModel(appSettingsResult, pipelinesResult); // Assert sut.Items.Count.ShouldBe(2); sut.ErrorCount.ShouldBe(2); sut.WarningCount.ShouldBe(0); sut.IsValid.ShouldBeFalse(); } [Fact] public void Constructor_WithWarnings_PopulatesItemsCorrectly() { // Arrange var appSettingsResult = new ValidationResult(); appSettingsResult.AddWarning("Deprecated setting used"); var pipelinesResult = new ValidationResult(); pipelinesResult.AddWarning("Pipeline has no transformers"); // Act var sut = new ValidationResultsDialogViewModel(appSettingsResult, pipelinesResult); // Assert sut.Items.Count.ShouldBe(2); sut.ErrorCount.ShouldBe(0); sut.WarningCount.ShouldBe(2); sut.IsValid.ShouldBeFalse(); // Both errors and warnings make it invalid } [Fact] public void Constructor_WithMixedResults_PopulatesAllItems() { // Arrange var appSettingsResult = new ValidationResult(); appSettingsResult.AddError("Error in appsettings"); appSettingsResult.AddWarning("Warning in appsettings"); var pipelinesResult = new ValidationResult(); pipelinesResult.AddError("Error in pipelines"); pipelinesResult.AddWarning("Warning in pipelines"); // Act var sut = new ValidationResultsDialogViewModel(appSettingsResult, pipelinesResult); // Assert sut.Items.Count.ShouldBe(4); sut.ErrorCount.ShouldBe(2); sut.WarningCount.ShouldBe(2); sut.IsValid.ShouldBeFalse(); } [Fact] public void Constructor_SetsCorrectSourceOnItems() { // Arrange var appSettingsResult = new ValidationResult(); appSettingsResult.AddError("App error"); var pipelinesResult = new ValidationResult(); pipelinesResult.AddError("Pipeline error"); // Act var sut = new ValidationResultsDialogViewModel(appSettingsResult, pipelinesResult); // Assert sut.Items.ShouldContain(i => i.Source == "appsettings.json" && i.Message == "App error"); sut.Items.ShouldContain(i => i.Source == "pipelines.json" && i.Message == "Pipeline error"); } [Fact] public void CloseCommand_InvokesRequestClose() { // Arrange var appSettingsResult = new ValidationResult(); var pipelinesResult = new ValidationResult(); var sut = new ValidationResultsDialogViewModel(appSettingsResult, pipelinesResult); var closeInvoked = false; sut.RequestClose = () => closeInvoked = true; // Act sut.CloseCommand.Execute(null); // Assert closeInvoked.ShouldBeTrue(); } [Fact] public void CloseCommand_DoesNotThrow_WhenRequestCloseIsNull() { // Arrange var appSettingsResult = new ValidationResult(); var pipelinesResult = new ValidationResult(); var sut = new ValidationResultsDialogViewModel(appSettingsResult, pipelinesResult); sut.RequestClose = null; // Act & Assert - Should not throw Should.NotThrow(() => sut.CloseCommand.Execute(null)); } [Fact] public void Constructor_ThrowsOnNullAppSettingsResult() { // Arrange var pipelinesResult = new ValidationResult(); // Act & Assert Should.Throw(() => new ValidationResultsDialogViewModel(null!, pipelinesResult)); } [Fact] public void Constructor_ThrowsOnNullPipelinesResult() { // Arrange var appSettingsResult = new ValidationResult(); // Act & Assert Should.Throw(() => new ValidationResultsDialogViewModel(appSettingsResult, null!)); } } public class ValidationItemViewModelTests { [Fact] public void Constructor_SetsPropertiesCorrectly() { // Act var sut = new ValidationItemViewModel("Test message", "test.json", ValidationItemType.Error); // Assert sut.Message.ShouldBe("Test message"); sut.Source.ShouldBe("test.json"); sut.Type.ShouldBe(ValidationItemType.Error); } [Fact] public void Constructor_ErrorType_SetsErrorStyling() { // Act var sut = new ValidationItemViewModel("Error", "test.json", ValidationItemType.Error); // Assert sut.Icon.ShouldBe("\u2717"); // X mark sut.IconColor.ShouldBe("#FF6B6B"); sut.Background.ShouldBe("#1AFF6B6B"); sut.BorderColor.ShouldBe("#FF6B6B"); } [Fact] public void Constructor_WarningType_SetsWarningStyling() { // Act var sut = new ValidationItemViewModel("Warning", "test.json", ValidationItemType.Warning); // Assert sut.Icon.ShouldBe("\u26A0"); // Warning sign sut.IconColor.ShouldBe("#FFB84D"); sut.Background.ShouldBe("#1AFFB84D"); sut.BorderColor.ShouldBe("#FFB84D"); } }