using JdeScoping.ConfigManager.Constants; using JdeScoping.ConfigManager.ViewModels.Dialogs; namespace JdeScoping.ConfigManager.Tests.ViewModels.Dialogs; public class NewStoreDialogViewModelTests { [Fact] public void StorePath_WhenEmpty_IsValidReturnsFalse() { // Arrange var sut = new NewStoreDialogViewModel { StorePath = "", KeyFilePath = "/path/to/key.key" }; // Act & Assert sut.IsValid.ShouldBeFalse(); } [Fact] public void StorePath_WhenEmpty_ValidationErrorReturnsStorePathRequired() { // Arrange var sut = new NewStoreDialogViewModel { StorePath = "", KeyFilePath = "/path/to/key.key" }; // Act & Assert sut.ValidationError.ShouldBe(SecureStoreStrings.StorePathRequired); } [Fact] public void StorePath_WhenWhitespace_IsValidReturnsFalse() { // Arrange var sut = new NewStoreDialogViewModel { StorePath = " ", KeyFilePath = "/path/to/key.key" }; // Act & Assert sut.IsValid.ShouldBeFalse(); sut.ValidationError.ShouldBe(SecureStoreStrings.StorePathRequired); } [Fact] public void KeyFilePath_WhenEmpty_IsValidReturnsFalse() { // Arrange var sut = new NewStoreDialogViewModel { StorePath = "/path/to/store.secure", KeyFilePath = "" }; // Act & Assert sut.IsValid.ShouldBeFalse(); } [Fact] public void KeyFilePath_WhenEmpty_ValidationErrorReturnsKeyFilePathRequired() { // Arrange var sut = new NewStoreDialogViewModel { StorePath = "/path/to/store.secure", KeyFilePath = "" }; // Act & Assert sut.ValidationError.ShouldBe(SecureStoreStrings.KeyFilePathRequired); } [Fact] public void KeyFilePath_WhenProvided_IsValidReturnsTrue() { // Arrange var sut = new NewStoreDialogViewModel { StorePath = "/path/to/store.secure", KeyFilePath = "/path/to/key.key" }; // Act & Assert sut.IsValid.ShouldBeTrue(); sut.ValidationError.ShouldBeNull(); } [Fact] public void StorePath_WhenChanged_RaisesPropertyChanged() { // Arrange var sut = new NewStoreDialogViewModel(); var propertyChangedRaised = false; sut.PropertyChanged += (s, e) => { if (e.PropertyName == nameof(NewStoreDialogViewModel.StorePath)) propertyChangedRaised = true; }; // Act sut.StorePath = "/new/path"; // Assert propertyChangedRaised.ShouldBeTrue(); } [Fact] public void StorePath_WhenChanged_RaisesIsValidPropertyChanged() { // Arrange var sut = new NewStoreDialogViewModel(); var isValidPropertyChangedRaised = false; sut.PropertyChanged += (s, e) => { if (e.PropertyName == nameof(NewStoreDialogViewModel.IsValid)) isValidPropertyChangedRaised = true; }; // Act sut.StorePath = "/new/path"; // Assert isValidPropertyChangedRaised.ShouldBeTrue(); } [Fact] public void StorePath_WhenChanged_RaisesValidationErrorPropertyChanged() { // Arrange var sut = new NewStoreDialogViewModel(); var validationErrorPropertyChangedRaised = false; sut.PropertyChanged += (s, e) => { if (e.PropertyName == nameof(NewStoreDialogViewModel.ValidationError)) validationErrorPropertyChangedRaised = true; }; // Act sut.StorePath = "/new/path"; // Assert validationErrorPropertyChangedRaised.ShouldBeTrue(); } [Fact] public void KeyFilePath_WhenChanged_RaisesPropertyChanged() { // Arrange var sut = new NewStoreDialogViewModel(); var propertyChangedRaised = false; sut.PropertyChanged += (s, e) => { if (e.PropertyName == nameof(NewStoreDialogViewModel.KeyFilePath)) propertyChangedRaised = true; }; // Act sut.KeyFilePath = "/new/key/path"; // Assert propertyChangedRaised.ShouldBeTrue(); } [Fact] public void Commands_AreInitialized() { // Arrange & Act var sut = new NewStoreDialogViewModel(); // Assert sut.BrowseStorePathCommand.ShouldNotBeNull(); sut.BrowseKeyFilePathCommand.ShouldNotBeNull(); sut.GenerateKeyFileCommand.ShouldNotBeNull(); } }