< Summary - Syki

Information
Class: Syki.Back.Features.Academic.StartClasses.StartClassesService
Assembly: Back
File(s): /home/runner/work/syki/syki/Back/Features/Academic/StartClasses/StartClassesService.cs
Tag: 4_16869239191
Line coverage
90%
Covered lines: 18
Uncovered lines: 2
Coverable lines: 20
Total lines: 37
Line coverage: 90%
Branch coverage
90%
Covered branches: 9
Total branches: 10
Branch coverage: 90%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
Start()90%1010100%
StartWithThrowOnError()100%210%

File(s)

/home/runner/work/syki/syki/Back/Features/Academic/StartClasses/StartClassesService.cs

#LineLine coverage
 1namespace Syki.Back.Features.Academic.StartClasses;
 2
 1003public class StartClassesService(SykiDbContext ctx) : IAcademicService
 4{
 5    public async Task<OneOf<SykiSuccess, SykiError>> Start(Guid institutionId, StartClassesIn data)
 6    {
 1007        var classes = await ctx.Classes
 1008            .Include(x => x.Students)
 1009            .Where(c => c.InstitutionId == institutionId && data.Classes.Contains(c.Id))
 10010            .ToListAsync();
 11
 10212        if (classes.Count == 0) return new InvalidClassesList();
 13
 57614        var statusOk = classes.All(x => x.Status == ClassStatus.OnEnrollment);
 10015        if (!statusOk) return new ClassMustHaveOnEnrollmentStatus();
 16
 9617        var today = DateTime.UtcNow.ToDateOnly();
 9618        var periods = await ctx.EnrollmentPeriods.AsNoTracking().Where(x => x.InstitutionId == institutionId).ToListAsyn
 114219        foreach (var @class in classes)
 20        {
 95221            var period = periods.FirstOrDefault(x => x.Id == @class.PeriodId);
 47622            if (period == null) return new EnrollmentPeriodNotFound();
 47823            if (today <= period.EndAt) return new EnrollmentPeriodMustBeFinalized();
 24        }
 25
 56826        classes.ForEach(c => c.Start());
 27
 9428        await ctx.SaveChangesAsync();
 29
 9430        return new SykiSuccess();
 10031    }
 32
 33    public async Task StartWithThrowOnError(Guid institutionId, StartClassesIn data)
 34    {
 035        (await Start(institutionId, data)).ThrowOnError();
 036    }
 37}