feat(configmanager): add TreeNodeViewModel
This commit is contained in:
@@ -0,0 +1,221 @@
|
||||
using JdeScoping.ConfigManager.ViewModels;
|
||||
|
||||
namespace JdeScoping.ConfigManager.Tests.ViewModels;
|
||||
|
||||
public class TreeNodeViewModelTests
|
||||
{
|
||||
[Fact]
|
||||
public void Constructor_SetsProperties()
|
||||
{
|
||||
// Arrange & Act
|
||||
var node = new TreeNodeViewModel("DataSync", "⟳", TreeNodeType.SettingsSection);
|
||||
|
||||
// Assert
|
||||
node.Name.ShouldBe("DataSync");
|
||||
node.Icon.ShouldBe("⟳");
|
||||
node.NodeType.ShouldBe(TreeNodeType.SettingsSection);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void IsModified_WhenSet_RaisesPropertyChanged()
|
||||
{
|
||||
// Arrange
|
||||
var node = new TreeNodeViewModel("Test", "📁", TreeNodeType.Folder);
|
||||
var propertyChangedRaised = false;
|
||||
node.PropertyChanged += (s, e) =>
|
||||
{
|
||||
if (e.PropertyName == nameof(TreeNodeViewModel.IsModified))
|
||||
propertyChangedRaised = true;
|
||||
};
|
||||
|
||||
// Act
|
||||
node.IsModified = true;
|
||||
|
||||
// Assert
|
||||
propertyChangedRaised.ShouldBeTrue();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void IsExpanded_WhenSet_RaisesPropertyChanged()
|
||||
{
|
||||
// Arrange
|
||||
var node = new TreeNodeViewModel("Test", "📁", TreeNodeType.Folder);
|
||||
var propertyChangedRaised = false;
|
||||
node.PropertyChanged += (s, e) =>
|
||||
{
|
||||
if (e.PropertyName == nameof(TreeNodeViewModel.IsExpanded))
|
||||
propertyChangedRaised = true;
|
||||
};
|
||||
|
||||
// Act
|
||||
node.IsExpanded = true;
|
||||
|
||||
// Assert
|
||||
propertyChangedRaised.ShouldBeTrue();
|
||||
node.IsExpanded.ShouldBeTrue();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void IsSelected_WhenSet_RaisesPropertyChanged()
|
||||
{
|
||||
// Arrange
|
||||
var node = new TreeNodeViewModel("Test", "📁", TreeNodeType.Folder);
|
||||
var propertyChangedRaised = false;
|
||||
node.PropertyChanged += (s, e) =>
|
||||
{
|
||||
if (e.PropertyName == nameof(TreeNodeViewModel.IsSelected))
|
||||
propertyChangedRaised = true;
|
||||
};
|
||||
|
||||
// Act
|
||||
node.IsSelected = true;
|
||||
|
||||
// Assert
|
||||
propertyChangedRaised.ShouldBeTrue();
|
||||
node.IsSelected.ShouldBeTrue();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ValidationState_WhenSetToValid_StatusIconIsCheckmark()
|
||||
{
|
||||
// Arrange
|
||||
var node = new TreeNodeViewModel("Test", "📁", TreeNodeType.Folder);
|
||||
|
||||
// Act
|
||||
node.ValidationState = ValidationState.Valid;
|
||||
|
||||
// Assert
|
||||
node.StatusIcon.ShouldBe("✓");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ValidationState_WhenSetToWarning_StatusIconIsWarning()
|
||||
{
|
||||
// Arrange
|
||||
var node = new TreeNodeViewModel("Test", "📁", TreeNodeType.Folder);
|
||||
|
||||
// Act
|
||||
node.ValidationState = ValidationState.Warning;
|
||||
|
||||
// Assert
|
||||
node.StatusIcon.ShouldBe("⚠");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ValidationState_WhenSetToError_StatusIconIsX()
|
||||
{
|
||||
// Arrange
|
||||
var node = new TreeNodeViewModel("Test", "📁", TreeNodeType.Folder);
|
||||
|
||||
// Act
|
||||
node.ValidationState = ValidationState.Error;
|
||||
|
||||
// Assert
|
||||
node.StatusIcon.ShouldBe("✗");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ValidationState_WhenSetToUnknown_StatusIconIsEmpty()
|
||||
{
|
||||
// Arrange
|
||||
var node = new TreeNodeViewModel("Test", "📁", TreeNodeType.Folder);
|
||||
|
||||
// Act
|
||||
node.ValidationState = ValidationState.Unknown;
|
||||
|
||||
// Assert
|
||||
node.StatusIcon.ShouldBe("");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ValidationState_WhenChanged_RaisesPropertyChangedForStatusIcon()
|
||||
{
|
||||
// Arrange
|
||||
var node = new TreeNodeViewModel("Test", "📁", TreeNodeType.Folder);
|
||||
var statusIconPropertyChanged = false;
|
||||
node.PropertyChanged += (s, e) =>
|
||||
{
|
||||
if (e.PropertyName == nameof(TreeNodeViewModel.StatusIcon))
|
||||
statusIconPropertyChanged = true;
|
||||
};
|
||||
|
||||
// Act
|
||||
node.ValidationState = ValidationState.Valid;
|
||||
|
||||
// Assert
|
||||
statusIconPropertyChanged.ShouldBeTrue();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SectionKey_CanBeSetViaInitializer()
|
||||
{
|
||||
// Arrange & Act
|
||||
var node = new TreeNodeViewModel("DataSync", "⟳", TreeNodeType.SettingsSection)
|
||||
{
|
||||
SectionKey = "DataSync"
|
||||
};
|
||||
|
||||
// Assert
|
||||
node.SectionKey.ShouldBe("DataSync");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Children_IsInitialized()
|
||||
{
|
||||
// Arrange & Act
|
||||
var node = new TreeNodeViewModel("Test", "📁", TreeNodeType.Folder);
|
||||
|
||||
// Assert
|
||||
node.Children.ShouldNotBeNull();
|
||||
node.Children.ShouldBeEmpty();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Children_CanAddChildNodes()
|
||||
{
|
||||
// Arrange
|
||||
var parent = new TreeNodeViewModel("Settings", "📁", TreeNodeType.Folder);
|
||||
var child = new TreeNodeViewModel("DataSync", "⟳", TreeNodeType.SettingsSection);
|
||||
|
||||
// Act
|
||||
parent.Children.Add(child);
|
||||
|
||||
// Assert
|
||||
parent.Children.Count.ShouldBe(1);
|
||||
parent.Children[0].ShouldBe(child);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(TreeNodeType.Folder)]
|
||||
[InlineData(TreeNodeType.SettingsSection)]
|
||||
[InlineData(TreeNodeType.Pipeline)]
|
||||
public void NodeType_CanBeSetForAllTypes(TreeNodeType nodeType)
|
||||
{
|
||||
// Arrange & Act
|
||||
var node = new TreeNodeViewModel("Test", "📁", nodeType);
|
||||
|
||||
// Assert
|
||||
node.NodeType.ShouldBe(nodeType);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void IsModified_WhenSetToSameValue_DoesNotRaisePropertyChanged()
|
||||
{
|
||||
// Arrange
|
||||
var node = new TreeNodeViewModel("Test", "📁", TreeNodeType.Folder);
|
||||
node.IsModified = true;
|
||||
|
||||
var propertyChangedRaised = false;
|
||||
node.PropertyChanged += (s, e) =>
|
||||
{
|
||||
if (e.PropertyName == nameof(TreeNodeViewModel.IsModified))
|
||||
propertyChangedRaised = true;
|
||||
};
|
||||
|
||||
// Act
|
||||
node.IsModified = true; // Same value
|
||||
|
||||
// Assert
|
||||
propertyChangedRaised.ShouldBeFalse();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user