< Summary - Syki

Information
Class: Syki.Back.Features.Academic.ReleaseClassesForEnrollment.ReleaseClassesForEnrollmentService
Assembly: Back
File(s): /home/runner/work/syki/syki/Back/Features/Academic/ReleaseClassesForEnrollment/ReleaseClassesForEnrollmentService.cs
Tag: 4_16869239191
Line coverage
89%
Covered lines: 17
Uncovered lines: 2
Coverable lines: 19
Total lines: 35
Line coverage: 89.4%
Branch coverage
100%
Covered branches: 10
Total branches: 10
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
Release()100%1010100%
ReleaseWithThrowOnError()100%210%

File(s)

/home/runner/work/syki/syki/Back/Features/Academic/ReleaseClassesForEnrollment/ReleaseClassesForEnrollmentService.cs

#LineLine coverage
 1namespace Syki.Back.Features.Academic.ReleaseClassesForEnrollment;
 2
 1183public class ReleaseClassesForEnrollmentService(SykiDbContext ctx) : IAcademicService
 4{
 5    public async Task<OneOf<SykiSuccess, SykiError>> Release(Guid institutionId, ReleaseClassesForEnrollmentIn data)
 6    {
 1187        var classes = await ctx.Classes
 1188            .Where(c => c.InstitutionId == institutionId && data.Classes.Contains(c.Id))
 1189            .ToListAsync();
 10
 11811        var today = DateTime.UtcNow.ToDateOnly();
 11812        var periods = await ctx.EnrollmentPeriods.AsNoTracking().Where(x => x.InstitutionId == institutionId).ToListAsyn
 126013        foreach (var @class in classes)
 14        {
 102815            var period = periods.FirstOrDefault(x => x.Id == @class.PeriodId);
 52016            if (period == null) return new EnrollmentPeriodNotFound();
 51417            if (today < period.StartAt) return new EnrollmentPeriodNotStarted();
 51218            if (today > period.EndAt) return new EnrollmentPeriodFinalized();
 19        }
 20
 61821        var statusOk = classes.All(x => x.Status == ClassStatus.OnPreEnrollment);
 11222        if (!statusOk) return new AllClassesMustHaveOnPreEnrollmentStatus();
 23
 61424        classes.ForEach(c => c.Status = ClassStatus.OnEnrollment);
 25
 10826        await ctx.SaveChangesAsync();
 27
 10828        return new SykiSuccess();
 11829    }
 30
 31    public async Task ReleaseWithThrowOnError(Guid institutionId, ReleaseClassesForEnrollmentIn data)
 32    {
 033        (await Release(institutionId, data)).ThrowOnError();
 034    }
 35}