using MeterVault.Core.Domain; namespace MeterVault.Core.Tests; public sealed class MeterMetaTests { [Fact] public void Role_reads_configured_role() { Assert.Equal(MeterRoles.GridImport, MeterMeta.Role("{\"role\":\"grid_import\"}")); } [Theory] [InlineData("")] [InlineData(" ")] [InlineData("{}")] [InlineData("not json")] [InlineData("{\"role\":123}")] [InlineData("[1,2,3]")] public void Role_is_null_when_absent_or_malformed(string meta) { Assert.Null(MeterMeta.Role(meta)); } [Fact] public void WithRole_sets_role_and_preserves_other_keys() { var updated = MeterMeta.WithRole("{\"expression\":\"a-b\"}", MeterRoles.TotalLoad); Assert.Equal(MeterRoles.TotalLoad, MeterMeta.Role(updated)); Assert.Equal("a-b", MeterMeta.ReadString(updated, "expression")); } [Fact] public void WithRole_overwrites_existing_role() { var updated = MeterMeta.WithRole("{\"role\":\"grid_import\"}", MeterRoles.GridExport); Assert.Equal(MeterRoles.GridExport, MeterMeta.Role(updated)); } [Fact] public void WithRole_handles_empty_meta() { var updated = MeterMeta.WithRole("", MeterRoles.GridImport); Assert.Equal(MeterRoles.GridImport, MeterMeta.Role(updated)); } }