90 lines
2.6 KiB
C#
90 lines
2.6 KiB
C#
using SafelyYou.Data;
|
|
|
|
namespace SafelyYouTests;
|
|
|
|
public class HeartBeatHistoriesUptimeTests
|
|
{
|
|
private static readonly DeviceId Device = new("device-1");
|
|
private static readonly DateTimeOffset T0 = new(2024, 1, 1, 12, 0, 0, TimeSpan.Zero);
|
|
|
|
[Test]
|
|
public void Uptime_UnknownDevice_ReturnsZero()
|
|
{
|
|
var histories = new HeartBeatHistories();
|
|
|
|
Assert.That(histories.Uptime(Device), Is.EqualTo(0));
|
|
}
|
|
|
|
[Test]
|
|
public void Uptime_SingleHeartbeat_ReturnsZero()
|
|
{
|
|
var histories = new HeartBeatHistories();
|
|
histories.Add(Device, T0);
|
|
|
|
// first == last => TotalMinutes is 0, guarded to return 0
|
|
Assert.That(histories.Uptime(Device), Is.EqualTo(0));
|
|
}
|
|
|
|
[Test]
|
|
public void Uptime_TwoHeartbeatsOneMinuteApart_ReturnsTwoHundred()
|
|
{
|
|
var histories = new HeartBeatHistories();
|
|
histories.Add(Device, T0);
|
|
histories.Add(Device, T0.AddMinutes(1));
|
|
|
|
// (2 beats / 1 minute) * 100
|
|
Assert.That(histories.Uptime(Device), Is.EqualTo(200).Within(0.001));
|
|
}
|
|
|
|
[Test]
|
|
public void Uptime_TwoHeartbeatsOverTwoMinutes_ReturnsOneHundred()
|
|
{
|
|
var histories = new HeartBeatHistories();
|
|
histories.Add(Device, T0);
|
|
histories.Add(Device, T0.AddMinutes(2));
|
|
|
|
// (2 beats / 2 minutes) * 100
|
|
Assert.That(histories.Uptime(Device), Is.EqualTo(100).Within(0.001));
|
|
}
|
|
|
|
[Test]
|
|
public void Uptime_ThreeHeartbeatsOverTwoMinutes_ReturnsOneHundredFifty()
|
|
{
|
|
var histories = new HeartBeatHistories();
|
|
histories.Add(Device, T0);
|
|
histories.Add(Device, T0.AddMinutes(1));
|
|
histories.Add(Device, T0.AddMinutes(2));
|
|
|
|
// (3 beats / 2 minutes) * 100
|
|
Assert.That(histories.Uptime(Device), Is.EqualTo(150).Within(0.001));
|
|
}
|
|
|
|
[Test]
|
|
public void Uptime_IsPerDevice()
|
|
{
|
|
var other = new DeviceId("device-2");
|
|
var histories = new HeartBeatHistories();
|
|
histories.Add(Device, T0);
|
|
histories.Add(Device, T0.AddMinutes(1));
|
|
histories.Add(other, T0);
|
|
|
|
Assert.Multiple(() =>
|
|
{
|
|
Assert.That(histories.Uptime(Device), Is.EqualTo(200).Within(0.001));
|
|
Assert.That(histories.Uptime(other), Is.EqualTo(0));
|
|
});
|
|
}
|
|
|
|
[Test]
|
|
public void Uptime_OutOfSequenceHeartbeat_DoesNotAffectCalculation()
|
|
{
|
|
var histories = new HeartBeatHistories();
|
|
histories.Add(Device, T0.AddMinutes(1));
|
|
histories.Add(Device, T0); // rejected
|
|
histories.Add(Device, T0.AddMinutes(3));
|
|
|
|
// still 2 beats over 2 minutes
|
|
Assert.That(histories.Uptime(Device), Is.EqualTo(100).Within(0.001));
|
|
}
|
|
}
|