Files
jdescopingtool/NEW/tests/JdeScoping.SecureStoreManager.Tests/ViewModels/SecretItemViewModelTests.cs
T
Joseph Doherty 1c546c111a fix: resolve test failures from timezone conversion and interface rename
- Fix CriteriaSheetGenerator.FormatTimestamp to handle all DateTimeKind values
- Update TestWebApplicationFactory to use IAuthenticationService
- Add logger parameter to ExcelParserServiceTests
- Add SecureStoreManager to solution under /utils/ folder
2026-01-19 14:55:22 -05:00

168 lines
4.3 KiB
C#

using Shouldly;
using Xunit;
using JdeScoping.SecureStoreManager.ViewModels;
namespace JdeScoping.SecureStoreManager.Tests.ViewModels;
public class SecretItemViewModelTests
{
[Fact]
public void Constructor_InitializesKey()
{
// Arrange & Act
var sut = new SecretItemViewModel("testKey", "testValue");
// Assert
sut.Key.ShouldBe("testKey");
}
[Fact]
public void Constructor_InitializesActualValue()
{
// Arrange & Act
var sut = new SecretItemViewModel("testKey", "testValue");
// Assert
sut.ActualValue.ShouldBe("testValue");
}
[Fact]
public void Constructor_InitializesIsValueVisibleToFalse()
{
// Arrange & Act
var sut = new SecretItemViewModel("testKey", "testValue");
// Assert
sut.IsValueVisible.ShouldBeFalse();
}
[Fact]
public void DisplayValue_WhenNotVisible_ReturnsMaskedValue()
{
// Arrange
var sut = new SecretItemViewModel("testKey", "testValue");
// Act & Assert
sut.DisplayValue.ShouldBe("********");
}
[Fact]
public void DisplayValue_WhenVisible_ReturnsActualValue()
{
// Arrange
var sut = new SecretItemViewModel("testKey", "testValue");
// Act
sut.IsValueVisible = true;
// Assert
sut.DisplayValue.ShouldBe("testValue");
}
[Fact]
public void ToggleVisibilityCommand_TogglesIsValueVisible()
{
// Arrange
var sut = new SecretItemViewModel("testKey", "testValue");
sut.IsValueVisible.ShouldBeFalse();
// Act
sut.ToggleVisibilityCommand.Execute(null);
// Assert
sut.IsValueVisible.ShouldBeTrue();
}
[Fact]
public void ToggleVisibilityCommand_TogglesBackToHidden()
{
// Arrange
var sut = new SecretItemViewModel("testKey", "testValue");
sut.IsValueVisible = true;
// Act
sut.ToggleVisibilityCommand.Execute(null);
// Assert
sut.IsValueVisible.ShouldBeFalse();
}
[Fact]
public async Task CopyToClipboardCommand_RaisesOnCopyToClipboardEvent()
{
// Arrange
var sut = new SecretItemViewModel("testKey", "secretPassword");
string? copiedValue = null;
sut.OnCopyToClipboard += value =>
{
copiedValue = value;
return Task.CompletedTask;
};
// Act
sut.CopyToClipboardCommand.Execute(null);
// Assert - need to wait for async handler
// Give the async void handler time to complete
await Task.Delay(100);
copiedValue.ShouldBe("secretPassword");
}
[Fact]
public void IsValueVisible_SetterRaisesPropertyChangedForIsValueVisible()
{
// Arrange
var sut = new SecretItemViewModel("testKey", "testValue");
var propertyChangedRaised = false;
sut.PropertyChanged += (s, e) =>
{
if (e.PropertyName == nameof(sut.IsValueVisible))
propertyChangedRaised = true;
};
// Act
sut.IsValueVisible = true;
// Assert
propertyChangedRaised.ShouldBeTrue();
}
[Fact]
public void IsValueVisible_SetterRaisesPropertyChangedForDisplayValue()
{
// Arrange
var sut = new SecretItemViewModel("testKey", "testValue");
var propertyChangedRaised = false;
sut.PropertyChanged += (s, e) =>
{
if (e.PropertyName == nameof(sut.DisplayValue))
propertyChangedRaised = true;
};
// Act
sut.IsValueVisible = true;
// Assert
propertyChangedRaised.ShouldBeTrue();
}
[Fact]
public void IsValueVisible_SetToSameValue_DoesNotRaisePropertyChanged()
{
// Arrange
var sut = new SecretItemViewModel("testKey", "testValue");
sut.IsValueVisible = false; // Already false, but explicitly set
var propertyChangedRaised = false;
sut.PropertyChanged += (s, e) =>
{
propertyChangedRaised = true;
};
// Act
sut.IsValueVisible = false;
// Assert
propertyChangedRaised.ShouldBeFalse();
}
}