Аудит: читаемые имена и «было → стало» вместо сырых данных #28

Merged
rust merged 8 commits from t25_audit_readable into main 2026-09-14 23:36:11 +03:00
2 changed files with 24 additions and 1 deletions
Showing only changes of commit f7459069d1 - Show all commits
@@ -183,11 +183,12 @@ public static class AuditRecordDtoExtensions
// Приводит значение JSON к строке отображения.
// element: Значение JSON.
// Возвращает: Строковое представление либо null для JSON null.
// Возвращает: Строковое представление либо null для JSON null; массивы — списком через запятую.
private static string? Stringify(JsonElement element) => element.ValueKind switch
{
JsonValueKind.Null or JsonValueKind.Undefined => null,
JsonValueKind.String => element.GetString(),
JsonValueKind.Array => string.Join(", ", element.EnumerateArray().Select(Stringify)),
_ => element.GetRawText(),
};
@@ -81,6 +81,28 @@ public sealed class AuditRecordDtoExtensionsTests
});
}
[Fact]
public void AuditChanges_LegacyFieldsArray_RendersAsList()
{
var record = Record("""{"fields":["autoMonitorNew"]}""");
AuditChangeDto change = Assert.Single(record.AuditChanges());
Assert.Equal(AuditFields.Fields, change.Field);
Assert.Null(change.From);
Assert.Equal("autoMonitorNew", change.To);
}
[Fact]
public void AuditChanges_LegacyFieldsArray_JoinsMultipleKeys()
{
var record = Record("""{"fields":["autoMonitorNew","minLen"]}""");
AuditChangeDto change = Assert.Single(record.AuditChanges());
Assert.Equal("autoMonitorNew, minLen", change.To);
}
[Fact]
public void AuditChanges_InvalidJson_ReturnsEmpty()
{