Files
Joseph Doherty 1e21e33ade chore: deprecate standalone SecureStoreManager utility
Move SecureStoreManager project and tests to Deprecated folder and remove
from solution. SecureStore functionality is now integrated into ConfigManager.
2026-01-27 07:26:40 -05:00

185 lines
4.8 KiB
C#

using Shouldly;
using Xunit;
using JdeScoping.SecureStoreManager.ViewModels;
namespace JdeScoping.SecureStoreManager.Tests.ViewModels;
public class ViewModelBaseTests
{
/// <summary>
/// Test implementation of ViewModelBase for testing purposes.
/// </summary>
private class TestViewModel : ViewModelBase
{
private string _testProperty = string.Empty;
private int _testIntProperty;
public string TestProperty
{
get => _testProperty;
set => SetProperty(ref _testProperty, value);
}
public int TestIntProperty
{
get => _testIntProperty;
set => SetProperty(ref _testIntProperty, value);
}
public void RaisePropertyChangedForTest(string propertyName)
{
OnPropertyChanged(propertyName);
}
}
[Fact]
public void SetProperty_WhenValueUnchanged_ReturnsFalse()
{
// Arrange
var sut = new TestViewModel();
sut.TestProperty = "initialValue";
// Act
sut.TestProperty = "initialValue"; // Same value
// Assert - SetProperty should have returned false, but we can verify by checking no event was raised
// We test this indirectly through the property changed event not firing
}
[Fact]
public void SetProperty_WhenValueUnchanged_DoesNotRaisePropertyChanged()
{
// Arrange
var sut = new TestViewModel();
sut.TestProperty = "initialValue";
var eventRaised = false;
sut.PropertyChanged += (s, e) => eventRaised = true;
// Act
sut.TestProperty = "initialValue"; // Same value
// Assert
eventRaised.ShouldBeFalse();
}
[Fact]
public void SetProperty_WhenValueChanged_ReturnsTrue()
{
// Arrange
var sut = new TestViewModel();
// Act
sut.TestProperty = "newValue";
// Assert - SetProperty returned true (verified by property change being made)
sut.TestProperty.ShouldBe("newValue");
}
[Fact]
public void SetProperty_WhenValueChanged_RaisesPropertyChanged()
{
// Arrange
var sut = new TestViewModel();
var eventRaised = false;
sut.PropertyChanged += (s, e) => eventRaised = true;
// Act
sut.TestProperty = "newValue";
// Assert
eventRaised.ShouldBeTrue();
}
[Fact]
public void SetProperty_RaisesEventWithCorrectPropertyName()
{
// Arrange
var sut = new TestViewModel();
string? raisedPropertyName = null;
sut.PropertyChanged += (s, e) => raisedPropertyName = e.PropertyName;
// Act
sut.TestProperty = "newValue";
// Assert
raisedPropertyName.ShouldBe(nameof(TestViewModel.TestProperty));
}
[Fact]
public void SetProperty_RaisesEventWithSenderAsThis()
{
// Arrange
var sut = new TestViewModel();
object? eventSender = null;
sut.PropertyChanged += (s, e) => eventSender = s;
// Act
sut.TestProperty = "newValue";
// Assert
eventSender.ShouldBe(sut);
}
[Fact]
public void OnPropertyChanged_RaisesPropertyChangedEvent()
{
// Arrange
var sut = new TestViewModel();
var eventRaised = false;
sut.PropertyChanged += (s, e) => eventRaised = true;
// Act
sut.RaisePropertyChangedForTest("SomeProperty");
// Assert
eventRaised.ShouldBeTrue();
}
[Fact]
public void OnPropertyChanged_RaisesEventWithCorrectPropertyName()
{
// Arrange
var sut = new TestViewModel();
string? raisedPropertyName = null;
sut.PropertyChanged += (s, e) => raisedPropertyName = e.PropertyName;
// Act
sut.RaisePropertyChangedForTest("CustomProperty");
// Assert
raisedPropertyName.ShouldBe("CustomProperty");
}
[Fact]
public void SetProperty_WithValueType_WorksCorrectly()
{
// Arrange
var sut = new TestViewModel();
var eventRaised = false;
sut.PropertyChanged += (s, e) => eventRaised = true;
// Act
sut.TestIntProperty = 42;
// Assert
sut.TestIntProperty.ShouldBe(42);
eventRaised.ShouldBeTrue();
}
[Fact]
public void SetProperty_WithSameValueType_DoesNotRaiseEvent()
{
// Arrange
var sut = new TestViewModel();
sut.TestIntProperty = 42;
var eventRaised = false;
sut.PropertyChanged += (s, e) => eventRaised = true;
// Act
sut.TestIntProperty = 42; // Same value
// Assert
eventRaised.ShouldBeFalse();
}
}