< Summary - Syki

Information
Class: Syki.Back.Database.DbContextExtensions
Assembly: Back
File(s): /home/runner/work/syki/syki/Back/Database/DbContextExtensions.cs
Tag: 4_16869239191
Line coverage
90%
Covered lines: 39
Uncovered lines: 4
Coverable lines: 43
Total lines: 91
Line coverage: 90.6%
Branch coverage
57%
Covered branches: 8
Total branches: 14
Branch coverage: 57.1%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
ResetDevDb(...)0%620%
ResetTestDbAsync()50%22100%
HasMissingMigration(...)75%88100%
AcademicPeriodExists()100%11100%
GetCourses()100%11100%
AddCommand(...)50%22100%
SaveChangesAsync()100%11100%

File(s)

/home/runner/work/syki/syki/Back/Database/DbContextExtensions.cs

#LineLine coverage
 1using System.Diagnostics;
 2using Microsoft.EntityFrameworkCore.Metadata;
 3using Syki.Back.Features.Academic.CreateCourse;
 4using Microsoft.EntityFrameworkCore.Migrations;
 5using Microsoft.EntityFrameworkCore.Infrastructure;
 6
 7namespace Syki.Back.Database;
 8
 9public static class DbContextExtensions
 10{
 11    public static void ResetDevDb(this SykiDbContext ctx)
 12    {
 013        if (!Env.IsDevelopment()) return;
 14
 015        ctx.Database.EnsureDeleted();
 016        ctx.Database.Migrate();
 017    }
 18
 19    public static async Task ResetTestDbAsync(this SykiDbContext ctx)
 20    {
 221        if (!Env.IsTesting()) return;
 22
 223        await ctx.Database.EnsureDeletedAsync();
 224        await ctx.Database.MigrateAsync();
 225    }
 26
 27    public static bool HasMissingMigration(this SykiDbContext context)
 28    {
 229        var modelDiffer = context.GetService<IMigrationsModelDiffer>();
 30
 231        var migrationsAssembly = context.GetService<IMigrationsAssembly>();
 232        var modelInitializer = context.GetService<IModelRuntimeInitializer>();
 33
 234        var snapshotModel = migrationsAssembly.ModelSnapshot?.Model;
 235        if (snapshotModel is IMutableModel mutableModel)
 236            snapshotModel = mutableModel.FinalizeModel();
 237        if (snapshotModel is not null)
 238            snapshotModel = modelInitializer.Initialize(snapshotModel);
 39
 240        var designTimeModel = context.GetService<IDesignTimeModel>();
 41
 242        return modelDiffer.HasDifferences(
 243            snapshotModel?.GetRelationalModel(),
 244            designTimeModel.Model.GetRelationalModel());
 45    }
 46
 47    public static async Task<bool> AcademicPeriodExists(this SykiDbContext ctx, Guid institutionId, string id)
 48    {
 135249        return await ctx.AcademicPeriods.AnyAsync(p => p.InstitutionId == institutionId && p.Id == id);
 135250    }
 51
 52    public static async Task<List<Course>> GetCourses(this SykiDbContext ctx, Guid institutionId)
 53    {
 454        return await ctx.Courses.AsNoTracking()
 455            .Where(c => c.InstitutionId == institutionId)
 456            .OrderBy(c => c.Name)
 457            .ToListAsync();
 458    }
 59
 60    public static Command AddCommand(
 61        this DbContext ctx,
 62        Guid institutionId,
 63        ICommand command,
 64        DomainEventId? eventId = null,
 65        CommandId? parentId = null,
 66        CommandId? originalId = null,
 67        CommandBatchId? batchId = null,
 68        int? delaySeconds = null
 69    ) {
 268870        var activityId = Activity.Current?.Id;
 71
 268872        return ctx.Add(
 268873            new Command(
 268874                institutionId,
 268875                command,
 268876                eventId: eventId,
 268877                parentId: parentId,
 268878                originalId: originalId,
 268879                batchId: batchId,
 268880                delaySeconds: delaySeconds,
 268881                activityId: activityId
 268882            )
 268883        ).Entity;
 84    }
 85
 86    public static async Task<int> SaveChangesAsync<TEntity>(this SykiDbContext ctx, TEntity entity)
 87    {
 88888        ctx.Add(entity);
 88889        return await ctx.SaveChangesAsync();
 88890    }
 91}