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
This commit is contained in:
Joseph Doherty
2026-01-19 14:55:22 -05:00
parent 604bfe919c
commit 1c546c111a
13 changed files with 1388 additions and 5 deletions
@@ -0,0 +1,127 @@
using Shouldly;
using Xunit;
using JdeScoping.SecureStoreManager.ViewModels;
namespace JdeScoping.SecureStoreManager.Tests.ViewModels;
public class RelayCommandTests
{
[Fact]
public void Execute_CallsAction()
{
// Arrange
var wasCalled = false;
var sut = new RelayCommand(() => wasCalled = true);
// Act
sut.Execute(null);
// Assert
wasCalled.ShouldBeTrue();
}
[Fact]
public void Execute_PassesParameterToAction()
{
// Arrange
object? receivedParameter = null;
var sut = new RelayCommand(p => receivedParameter = p);
// Act
sut.Execute("testParam");
// Assert
receivedParameter.ShouldBe("testParam");
}
[Fact]
public void CanExecute_WhenNoPredicate_ReturnsTrue()
{
// Arrange
var sut = new RelayCommand(() => { });
// Act
var result = sut.CanExecute(null);
// Assert
result.ShouldBeTrue();
}
[Fact]
public void CanExecute_WhenPredicateReturnsTrue_ReturnsTrue()
{
// Arrange
var sut = new RelayCommand(() => { }, () => true);
// Act
var result = sut.CanExecute(null);
// Assert
result.ShouldBeTrue();
}
[Fact]
public void CanExecute_WhenPredicateReturnsFalse_ReturnsFalse()
{
// Arrange
var sut = new RelayCommand(() => { }, () => false);
// Act
var result = sut.CanExecute(null);
// Assert
result.ShouldBeFalse();
}
[Fact]
public void CanExecute_WithParameterPredicate_EvaluatesParameter()
{
// Arrange
var sut = new RelayCommand(_ => { }, p => p is string s && s == "valid");
// Act
var validResult = sut.CanExecute("valid");
var invalidResult = sut.CanExecute("invalid");
// Assert
validResult.ShouldBeTrue();
invalidResult.ShouldBeFalse();
}
[Fact]
public void RaiseCanExecuteChanged_FiresCanExecuteChangedEvent()
{
// Arrange
var sut = new RelayCommand(() => { });
var eventFired = false;
sut.CanExecuteChanged += (s, e) => eventFired = true;
// Act
sut.RaiseCanExecuteChanged();
// Assert
eventFired.ShouldBeTrue();
}
[Fact]
public void RaiseCanExecuteChanged_EventSenderIsSut()
{
// Arrange
var sut = new RelayCommand(() => { });
object? eventSender = null;
sut.CanExecuteChanged += (s, e) => eventSender = s;
// Act
sut.RaiseCanExecuteChanged();
// Assert
eventSender.ShouldBe(sut);
}
[Fact]
public void Constructor_WithNullExecute_ThrowsArgumentNullException()
{
// Arrange & Act & Assert
Should.Throw<ArgumentNullException>(() => new RelayCommand((Action<object?>)null!));
}
}