< Summary - Syki

Information
Class: Syki.Back.Domain.Periods.AcademicPeriod
Assembly: Back
File(s): /home/runner/work/syki/syki/Back/Domain/Periods/AcademicPeriod.cs
Tag: 56_26538939494
Line coverage
100%
Covered lines: 36
Uncovered lines: 0
Coverable lines: 36
Total lines: 68
Line coverage: 100%
Branch coverage
100%
Covered branches: 18
Total branches: 18
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_Id()100%11100%
get_InstitutionId()100%11100%
get_Name()100%11100%
get_StartAt()100%11100%
get_EndAt()100%11100%
.ctor()100%11100%
.ctor(...)100%11100%
New(...)100%22100%
Validate(...)100%1616100%

File(s)

/home/runner/work/syki/syki/Back/Domain/Periods/AcademicPeriod.cs

#LineLine coverage
 1namespace Syki.Back.Domain.Periods;
 2
 3public class AcademicPeriod
 4{
 145    public int Id { get; set; }
 126    public int InstitutionId { get; set; }
 307    public string Name { get; set; }
 168    public DateOnly StartAt { get; set; }
 169    public DateOnly EndAt { get; set; }
 10
 1211    private AcademicPeriod() {}
 12
 1213    public AcademicPeriod(
 1214        int institutionId,
 1215        string name,
 1216        DateOnly startAt,
 1217        DateOnly endAt
 1218    ) {
 1219        InstitutionId = institutionId;
 1220        Name = name;
 1221        StartAt = startAt;
 1222        EndAt = endAt;
 1223    }
 24
 25    public static OneOf<AcademicPeriod, SykiError> New(
 26        int institutionId,
 27        string name,
 28        DateOnly startAt,
 29        DateOnly endAt
 30    ) {
 4031        var result = Validate(name, startAt, endAt);
 32
 6833        if (result.IsError) return result.Error;
 34
 1235        return new AcademicPeriod(institutionId, result.Success, startAt, endAt);
 36    }
 37
 38    private static OneOf<string, SykiError> Validate(
 39        string name,
 40        DateOnly startAt,
 41        DateOnly endAt
 42    ) {
 4043        var numbers = name.OnlyNumbers();
 44
 4045        if (numbers.Length != 5)
 1246            return new InvalidAcademicPeriod();
 47
 2848        var year = int.Parse(numbers.Substring(0, 4));
 2849        var digit = int.Parse(numbers.Substring(4, 1));
 50
 2851        if (year < 1970 || year > 2070)
 252            return new InvalidAcademicPeriod();
 53
 2654        if (digit < 1 || digit > 2)
 855            return new InvalidAcademicPeriod();
 56
 1857        if (startAt.Year != year)
 258            return new InvalidAcademicPeriodStartDate();
 59
 1660        if (endAt.Year != year)
 261            return new InvalidAcademicPeriodEndDate();
 62
 1463        if (startAt >= endAt)
 264            return new InvalidAcademicPeriodDates();
 65
 1266        return $"{year}.{digit}";
 67    }
 68}