Files
jdescopingtool/NEW/tests/JdeScoping.ConfigManager.Tests/ViewModels/TreeNodeViewModelTests.cs
T
2026-01-19 17:51:15 -05:00

222 lines
6.0 KiB
C#

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();
}
}