< Summary - Syki

Information
Class: Syki.Back.Database.DbContextExtensions
Assembly: Back
File(s): /home/runner/work/syki/syki/Back/Database/DbContextExtensions.cs
Tag: 21_17346963026
Line coverage
83%
Covered lines: 45
Uncovered lines: 9
Coverable lines: 54
Total lines: 121
Line coverage: 83.3%
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
CampusNotFound()100%11100%
CourseNotFound()100%11100%
CourseCurriculumNotFound()100%11100%
AcademicPeriodNotFound()100%11100%
GetCurrentAcademicPeriod()100%210%
GetCourses()100%11100%
AddCommand(...)50%22100%
SaveChangesAsync()100%11100%
ResetDevDb(...)0%620%
ResetTestDbAsync()50%22100%
HasMissingMigration(...)75%88100%

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;
 6using Syki.Back.Features.Academic.CreateAcademicPeriod;
 7
 8namespace Syki.Back.Database;
 9
 10public static class DbContextExtensions
 11{
 12    public static async Task<bool> CampusNotFound(this SykiDbContext ctx, Guid id)
 13    {
 52414        return !await ctx.Campi.AnyAsync(p => p.InstitutionId == ctx.InstitutionId && p.Id == id);
 52415    }
 16
 17    public static async Task<bool> CourseNotFound(this SykiDbContext ctx, Guid id)
 18    {
 52019        return !await ctx.Courses.AnyAsync(p => p.InstitutionId == ctx.InstitutionId && p.Id == id);
 52020    }
 21
 22    public static async Task<bool> CourseCurriculumNotFound(this SykiDbContext ctx, Guid id, Guid courseId)
 23    {
 51624        return !await ctx.CourseCurriculums.AnyAsync(g => g.InstitutionId == ctx.InstitutionId && g.Id == id && g.Course
 51625    }
 26
 27    public static async Task<bool> AcademicPeriodNotFound(this SykiDbContext ctx, string id)
 28    {
 135829        return !await ctx.AcademicPeriods.AnyAsync(p => p.InstitutionId == ctx.InstitutionId && p.Id == id);
 135830    }
 31
 32
 33
 34
 35
 36
 37    public static async Task<AcademicPeriod?> GetCurrentAcademicPeriod(this SykiDbContext ctx, Guid institutionId)
 38    {
 039        var today = DateOnly.FromDateTime(DateTime.UtcNow);
 040        return await ctx.AcademicPeriods
 041            .Where(p => p.InstitutionId == institutionId && p.StartAt <= today && p.EndAt >= today)
 042            .FirstOrDefaultAsync();
 043    }
 44
 45    public static async Task<List<Course>> GetCourses(this SykiDbContext ctx, Guid institutionId)
 46    {
 447        return await ctx.Courses.AsNoTracking()
 448            .Where(c => c.InstitutionId == institutionId)
 449            .OrderBy(c => c.Name)
 450            .ToListAsync();
 451    }
 52
 53    public static Command AddCommand(
 54        this DbContext ctx,
 55        Guid institutionId,
 56        ICommand command,
 57        DomainEventId? eventId = null,
 58        CommandId? parentId = null,
 59        CommandId? originalId = null,
 60        CommandBatchId? batchId = null,
 61        int? delaySeconds = null
 62    )
 63    {
 283064        var activityId = Activity.Current?.Id;
 65
 283066        return ctx.Add(
 283067            new Command(
 283068                institutionId,
 283069                command,
 283070                eventId: eventId,
 283071                parentId: parentId,
 283072                originalId: originalId,
 283073                batchId: batchId,
 283074                delaySeconds: delaySeconds,
 283075                activityId: activityId
 283076            )
 283077        ).Entity;
 78    }
 79
 80    public static async Task<int> SaveChangesAsync<TEntity>(this SykiDbContext ctx, TEntity entity)
 81    {
 148682        ctx.Add(entity);
 148683        return await ctx.SaveChangesAsync();
 148684    }
 85
 86    public static void ResetDevDb(this SykiDbContext ctx)
 87    {
 088        if (!Env.IsDevelopment()) return;
 89
 090        ctx.Database.EnsureDeleted();
 091        ctx.Database.Migrate();
 092    }
 93
 94    public static async Task ResetTestDbAsync(this SykiDbContext ctx)
 95    {
 296        if (!Env.IsTesting()) return;
 97
 298        await ctx.Database.EnsureDeletedAsync();
 299        await ctx.Database.MigrateAsync();
 2100    }
 101
 102    public static bool HasMissingMigration(this SykiDbContext context)
 103    {
 2104        var modelDiffer = context.GetService<IMigrationsModelDiffer>();
 105
 2106        var migrationsAssembly = context.GetService<IMigrationsAssembly>();
 2107        var modelInitializer = context.GetService<IModelRuntimeInitializer>();
 108
 2109        var snapshotModel = migrationsAssembly.ModelSnapshot?.Model;
 2110        if (snapshotModel is IMutableModel mutableModel)
 2111            snapshotModel = mutableModel.FinalizeModel();
 2112        if (snapshotModel is not null)
 2113            snapshotModel = modelInitializer.Initialize(snapshotModel);
 114
 2115        var designTimeModel = context.GetService<IDesignTimeModel>();
 116
 2117        return modelDiffer.HasDifferences(
 2118            snapshotModel?.GetRelationalModel(),
 2119            designTimeModel.Model.GetRelationalModel());
 120    }
 121}