< Summary - ZhEaIsNsAaBn.Libraries coverage (affected: 23 packages)

Information
Line coverage
100%
Covered lines: 13
Uncovered lines: 0
Coverable lines: 13
Total lines: 35
Line coverage: 100%
Branch coverage
100%
Covered branches: 6
Total branches: 6
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
Sort(...)100%66100%

File(s)

/home/runner/work/ZhEaIsNsAaBn.Libraries.V1/ZhEaIsNsAaBn.Libraries.V1/src/DataBasePackages/ZhEaIsNsAaBn.DbSeeder/Ordering/SeedTableOrder.cs

#LineLine coverage
 1namespace ZhEaIsNsAaBn.DbSeeder;
 2
 3/// <summary>
 4/// Orders the tables of one migration by the EF model's foreign keys: principals before dependents (upserts); the rever
 5/// Self-references are left out here (rows are levelled inside the table). Ties break by entity name, so the order is s
 6/// </summary>
 7internal static class SeedTableOrder
 8{
 9    /// <returns>The upsert order; or the entities left in a cycle (no order exists).</returns>
 10    public static (IReadOnlyList<IEntityType>? Order, IReadOnlyList<string> Cycle) Sort( IReadOnlyCollection<IEntityType
 11    {
 51512        var set        = entityTypes.ToHashSet();
 51513        var principals = entityTypes.ToDictionary( t => t, t => t.GetForeignKeys()
 51514                                                                  .Select( k => k.PrincipalEntityType )
 51515                                                                  .Where( p => p != t && set.Contains( p ) )
 51516                                                                  .ToHashSet() );
 51517        var order      = new List<IEntityType>();
 51518        var remaining  = new SortedSet<IEntityType>( entityTypes, Comparer<IEntityType>.Create( ( a, b ) => string.Compa
 19
 20
 179621        while ( remaining.Count > 0 )
 22        {
 128723            var ready = remaining.FirstOrDefault( t => principals[ t ].All( order.Contains ) );
 24
 129325            if ( ready is null ) { return ( null, remaining.Select( t => t.Name ).ToList() ); }
 26
 27
 128128            order.Add( ready );
 128129            remaining.Remove( ready );
 30        }
 31
 32
 50933        return ( order, [] );
 34    }
 35}