using MeterVault.Core.Domain;
namespace MeterVault.Core.Tests;
/// Terse builders for readings/events/configs in normalizer tests.
internal static class TestData
{
public static DateTimeOffset Month(int year, int month) =>
new(new DateTime(year, month, 1, 0, 0, 0, DateTimeKind.Utc));
///
/// An imported reading. At midnight UTC on the 1st it is a row of a monthly table ("Mai 2026"), flagged
/// the way the importer flags month names — the shape of the reference data these tests model.
///
public static Reading Reading(int meterId, DateTimeOffset time, double value) => new()
{
MeterId = meterId,
Time = time,
Value = value,
Quality = ReadingQuality.Imported,
Flags = time.UtcDateTime is { Day: 1, TimeOfDay.Ticks: 0 } ? ReadingFlags.MonthLabel : ReadingFlags.None,
};
/// An imported reading from a day-dated row ("01.08.2026"): an instant, whatever its clock time.
public static Reading DayReading(int meterId, DateTimeOffset time, double value) => new()
{
MeterId = meterId,
Time = time,
Value = value,
Quality = ReadingQuality.Imported,
};
public static MeterEvent Swap(int meterId, DateTimeOffset time, double? prevValue = null,
double? newValue = null, double? amount = null) => new()
{
MeterId = meterId,
Time = time,
EventType = MeterEventType.MeterSwap,
PrevValue = prevValue,
NewValue = newValue,
Amount = amount,
};
public static MeterEvent Reset(int meterId, DateTimeOffset time, double? newValue = 0, double? prevValue = null) => new()
{
MeterId = meterId,
Time = time,
EventType = MeterEventType.CounterReset,
PrevValue = prevValue,
NewValue = newValue,
};
public static MeterEvent Delivery(int meterId, DateTimeOffset time, double litres) => new()
{
MeterId = meterId,
Time = time,
EventType = MeterEventType.Delivery,
Amount = litres,
Unit = "L",
};
public static MeterEvent TankLevelCm(int meterId, DateTimeOffset time, double cm) => new()
{
MeterId = meterId,
Time = time,
EventType = MeterEventType.TankLevel,
Amount = cm,
Unit = "cm",
};
}