test: initial attempt at tests with Claude Code

This commit is contained in:
Sumanth Rayancha
2025-08-11 22:21:14 -04:00
parent e1e32cea6f
commit 90b6f258f0
11 changed files with 1211 additions and 0 deletions

View File

@@ -0,0 +1,84 @@
using System;
using FluentAssertions;
using Moq;
using PepperDash.Essentials.Core.Abstractions;
using Xunit;
namespace PepperDash.Essentials.Core.Tests.Abstractions
{
public class DigitalInputTests
{
[Fact]
public void StateChange_WhenDigitalInputChanges_RaisesEvent()
{
// Arrange
var mockDigitalInput = new Mock<IDigitalInput>();
var eventRaised = false;
bool capturedState = false;
mockDigitalInput.Setup(d => d.State).Returns(true);
// Subscribe to the event
mockDigitalInput.Object.StateChange += (sender, args) =>
{
eventRaised = true;
capturedState = args.State;
};
// Act - Raise the event
mockDigitalInput.Raise(d => d.StateChange += null,
mockDigitalInput.Object,
new DigitalInputEventArgs(true));
// Assert
eventRaised.Should().BeTrue();
capturedState.Should().BeTrue();
}
[Fact]
public void State_ReturnsCorrectValue()
{
// Arrange
var mockDigitalInput = new Mock<IDigitalInput>();
mockDigitalInput.Setup(d => d.State).Returns(true);
// Act
var state = mockDigitalInput.Object.State;
// Assert
state.Should().BeTrue();
}
[Fact]
public void MultipleStateChanges_TrackStateCorrectly()
{
// Arrange
var mockDigitalInput = new Mock<IDigitalInput>();
var stateChanges = new System.Collections.Generic.List<bool>();
mockDigitalInput.Object.StateChange += (sender, args) =>
{
stateChanges.Add(args.State);
};
// Act - Simulate multiple state changes
mockDigitalInput.Raise(d => d.StateChange += null,
mockDigitalInput.Object,
new DigitalInputEventArgs(true));
mockDigitalInput.Raise(d => d.StateChange += null,
mockDigitalInput.Object,
new DigitalInputEventArgs(false));
mockDigitalInput.Raise(d => d.StateChange += null,
mockDigitalInput.Object,
new DigitalInputEventArgs(true));
// Assert
stateChanges.Should().HaveCount(3);
stateChanges[0].Should().BeTrue();
stateChanges[1].Should().BeFalse();
stateChanges[2].Should().BeTrue();
}
}
}

View File

@@ -0,0 +1,163 @@
using System;
using FluentAssertions;
using Moq;
using PepperDash.Essentials.Core.Abstractions;
using Xunit;
namespace PepperDash.Essentials.Core.Tests.Abstractions
{
public class VersiPortTests
{
[Fact]
public void DigitalIn_ReturnsCorrectValue()
{
// Arrange
var mockVersiPort = new Mock<IVersiPort>();
mockVersiPort.Setup(v => v.DigitalIn).Returns(true);
// Act
var digitalIn = mockVersiPort.Object.DigitalIn;
// Assert
digitalIn.Should().BeTrue();
}
[Fact]
public void SetDigitalOut_SetsCorrectValue()
{
// Arrange
var mockVersiPort = new Mock<IVersiPort>();
// Act
mockVersiPort.Object.SetDigitalOut(true);
// Assert
mockVersiPort.Verify(v => v.SetDigitalOut(true), Times.Once);
}
[Fact]
public void AnalogIn_ReturnsCorrectValue()
{
// Arrange
var mockVersiPort = new Mock<IVersiPort>();
ushort expectedValue = 32768;
mockVersiPort.Setup(v => v.AnalogIn).Returns(expectedValue);
// Act
var analogIn = mockVersiPort.Object.AnalogIn;
// Assert
analogIn.Should().Be(expectedValue);
}
[Fact]
public void VersiportChange_WhenDigitalChanges_RaisesEventWithCorrectType()
{
// Arrange
var mockVersiPort = new Mock<IVersiPort>();
var eventRaised = false;
VersiPortEventType? capturedEventType = null;
object capturedValue = null;
mockVersiPort.Object.VersiportChange += (sender, args) =>
{
eventRaised = true;
capturedEventType = args.EventType;
capturedValue = args.Value;
};
// Act
mockVersiPort.Raise(v => v.VersiportChange += null,
mockVersiPort.Object,
new VersiPortEventArgs
{
EventType = VersiPortEventType.DigitalInChange,
Value = true
});
// Assert
eventRaised.Should().BeTrue();
capturedEventType.Should().Be(VersiPortEventType.DigitalInChange);
capturedValue.Should().Be(true);
}
[Fact]
public void VersiportChange_WhenAnalogChanges_RaisesEventWithCorrectValue()
{
// Arrange
var mockVersiPort = new Mock<IVersiPort>();
var eventRaised = false;
VersiPortEventType? capturedEventType = null;
object capturedValue = null;
ushort expectedAnalogValue = 12345;
mockVersiPort.Object.VersiportChange += (sender, args) =>
{
eventRaised = true;
capturedEventType = args.EventType;
capturedValue = args.Value;
};
// Act
mockVersiPort.Raise(v => v.VersiportChange += null,
mockVersiPort.Object,
new VersiPortEventArgs
{
EventType = VersiPortEventType.AnalogInChange,
Value = expectedAnalogValue
});
// Assert
eventRaised.Should().BeTrue();
capturedEventType.Should().Be(VersiPortEventType.AnalogInChange);
capturedValue.Should().Be(expectedAnalogValue);
}
[Fact]
public void MultipleVersiportChanges_TracksAllChangesCorrectly()
{
// Arrange
var mockVersiPort = new Mock<IVersiPort>();
var changes = new System.Collections.Generic.List<(VersiPortEventType type, object value)>();
mockVersiPort.Object.VersiportChange += (sender, args) =>
{
changes.Add((args.EventType, args.Value));
};
// Act - Simulate multiple changes
mockVersiPort.Raise(v => v.VersiportChange += null,
mockVersiPort.Object,
new VersiPortEventArgs
{
EventType = VersiPortEventType.DigitalInChange,
Value = true
});
mockVersiPort.Raise(v => v.VersiportChange += null,
mockVersiPort.Object,
new VersiPortEventArgs
{
EventType = VersiPortEventType.AnalogInChange,
Value = (ushort)30000
});
mockVersiPort.Raise(v => v.VersiportChange += null,
mockVersiPort.Object,
new VersiPortEventArgs
{
EventType = VersiPortEventType.DigitalInChange,
Value = false
});
// Assert
changes.Should().HaveCount(3);
changes[0].type.Should().Be(VersiPortEventType.DigitalInChange);
changes[0].value.Should().Be(true);
changes[1].type.Should().Be(VersiPortEventType.AnalogInChange);
changes[1].value.Should().Be((ushort)30000);
changes[2].type.Should().Be(VersiPortEventType.DigitalInChange);
changes[2].value.Should().Be(false);
}
}
}