< Summary

Information
Class: ProjectTemplate.Infrastructure.Data.AuditEntry
Assembly: ProjectTemplate.Infrastructure
File(s): /home/runner/work/NetCoreApplicationTemplate/NetCoreApplicationTemplate/src/ProjectTemplate.Infrastructure/Data/AuditEntry.cs
Line coverage
100%
Covered lines: 33
Uncovered lines: 0
Coverable lines: 33
Total lines: 58
Line coverage: 100%
Branch coverage
50%
Covered branches: 5
Total branches: 10
Branch coverage: 50%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
get_Entry()100%11100%
get_TableName()100%11100%
get_State()100%11100%
get_Application()100%11100%
get_ModifiedBy()100%11100%
get_ModifiedOnUtc()100%11100%
get_KeyValues()100%11100%
get_OriginalValues()100%11100%
get_CurrentValues()100%11100%
get_TemporaryProperties()100%11100%
get_HasTemporaryProperties()100%11100%
ToAuditRecord()37.5%88100%
SerializeAuditValues(...)100%22100%

File(s)

/home/runner/work/NetCoreApplicationTemplate/NetCoreApplicationTemplate/src/ProjectTemplate.Infrastructure/Data/AuditEntry.cs

#LineLine coverage
 1using System.ComponentModel.DataAnnotations;
 2using System.Reflection;
 3using System.Text.Json;
 4using Microsoft.EntityFrameworkCore.ChangeTracking;
 5using ProjectTemplate.Infrastructure.Data.Entities;
 6
 7namespace ProjectTemplate.Infrastructure.Data;
 8
 249internal sealed class AuditEntry(EntityEntry entry)
 10{
 2411    internal EntityEntry Entry { get; } = entry;
 12    [DataType(DataType.Text)]
 7213    internal string TableName { get; set; } = string.Empty;
 14    [DataType(DataType.Text)]
 7215    internal string State { get; set; } = string.Empty;
 16    [DataType(DataType.Text)]
 4817    internal string Application { get; set; } = string.Empty;
 18    [DataType(DataType.Text)]
 7219    internal string ModifiedBy { get; set; } = string.Empty;
 20    [DataType(DataType.DateTime)]
 4821    internal DateTime ModifiedOnUtc { get; set; }
 7222    internal Dictionary<string, object> KeyValues { get; } = [];
 8023    internal Dictionary<string, object> OriginalValues { get; } = [];
 25624    internal Dictionary<string, object> CurrentValues { get; } = [];
 7225    internal List<PropertyEntry> TemporaryProperties { get; } = [];
 26
 4827    internal bool HasTemporaryProperties => TemporaryProperties.Count != 0;
 28
 29    internal AuditRecord ToAuditRecord()
 30    {
 2431        string applicationAssembly =
 2432            Assembly.GetEntryAssembly()?.GetName().Name
 2433            ?? GetType().Assembly.GetName().Name
 2434            ?? "Unknown Assembly";
 35
 2436        AuditRecord auditRecord = new()
 2437        {
 2438            Entity = TableName,
 2439            State = State,
 2440            Application = string.IsNullOrWhiteSpace(Application)
 2441            ? applicationAssembly
 2442            : Application,
 2443            ModifiedBy = ModifiedBy,
 2444            ModifiedOnUtc = ModifiedOnUtc,
 2445            KeyValues = SerializeAuditValues(KeyValues),
 2446            OriginalValues = SerializeAuditValues(OriginalValues),
 2447            CurrentValues = SerializeAuditValues(CurrentValues)
 2448        };
 2449        return auditRecord;
 50    }
 51
 52    private static string SerializeAuditValues(Dictionary<string, object> values)
 53    {
 7254        return values.Count == 0
 7255            ? string.Empty
 7256            : JsonSerializer.Serialize(values);
 57    }
 58}