Files

50 lines
1.7 KiB
C#

using FluentAssertions;
public class DataLakeEventParserTests
{
[Fact]
public void ParseObservationRow_LegacyMinimalPayload_UsesFallbackFields()
{
var encounterId = Guid.NewGuid();
var payload = $$"""{"code":"HEART_RATE","value":80,"encounterId":"{{encounterId}}"}""";
var row = DataLakeEventParser.ParseObservationRow(payload, offset: 42, partition: 2);
row.EncounterId.Should().Be(encounterId.ToString());
row.ObservationCode.Should().Be("HEART_RATE");
row.Value.Should().Be(80);
row.ObservationId.Should().Be($"legacy:{encounterId}:42");
row.PatientId.Should().BeEmpty();
row.Unit.Should().BeEmpty();
row.Source.Should().BeEmpty();
row.RecordedAt.Should().BeEmpty();
row.KafkaPartition.Should().Be(2);
row.KafkaOffset.Should().Be(42);
}
[Fact]
public void ParseObservationRow_FullPayload_ParsesAllFields()
{
var payload = """
{
"observationId": "20facb3e-3dcb-46dd-8b81-0fa98cf097e6",
"encounterId": "d4a0bfa6-3f3c-4dc3-a0d5-f08b574a7cb4",
"patientId": "eff74ea8-8b02-4a45-8c85-e28604247cc0",
"mrn": "MRN-000001",
"observationCode": "HEART_RATE",
"value": 165,
"unit": "bpm",
"source": "DEVICE",
"recordedAt": "2026-06-23T17:08:20+00:00"
}
""";
var row = DataLakeEventParser.ParseObservationRow(payload, offset: 99, partition: 0);
row.ObservationId.Should().Be("20facb3e-3dcb-46dd-8b81-0fa98cf097e6");
row.Mrn.Should().Be("MRN-000001");
row.Unit.Should().Be("bpm");
row.RecordedAt.Should().Be("2026-06-23T17:08:20+00:00");
}
}