< Summary - Syki

Information
Class: Syki.Back.Domain.Periods.AcademicPeriod
Assembly: Back
File(s): /home/runner/work/syki/syki/Back/Domain/Periods/AcademicPeriod.cs
Tag: 97_27801654829
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{
 185    public int Id { get; set; }
 166    public int InstitutionId { get; set; }
 387    public string Name { get; set; }
 208    public DateOnly StartAt { get; set; }
 209    public DateOnly EndAt { get; set; }
 10
 1211    private AcademicPeriod() {}
 12
 1613    public AcademicPeriod(
 1614        int institutionId,
 1615        string name,
 1616        DateOnly startAt,
 1617        DateOnly endAt
 1618    ) {
 1619        InstitutionId = institutionId;
 1620        Name = name;
 1621        StartAt = startAt;
 1622        EndAt = endAt;
 1623    }
 24
 25    public static OneOf<AcademicPeriod, SykiError> New(
 26        int institutionId,
 27        string name,
 28        DateOnly startAt,
 29        DateOnly endAt
 30    ) {
 4431        var result = Validate(name, startAt, endAt);
 32
 7233        if (result.IsError) return result.Error;
 34
 1635        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    ) {
 4443        var numbers = name.OnlyNumbers();
 44
 4445        if (numbers.Length != 5)
 1246            return new InvalidAcademicPeriod();
 47
 3248        var year = int.Parse(numbers.Substring(0, 4));
 3249        var digit = int.Parse(numbers.Substring(4, 1));
 50
 3251        if (year < 1970 || year > 2070)
 252            return new InvalidAcademicPeriod();
 53
 3054        if (digit < 1 || digit > 2)
 855            return new InvalidAcademicPeriod();
 56
 2257        if (startAt.Year != year)
 258            return new InvalidAcademicPeriodStartDate();
 59
 2060        if (endAt.Year != year)
 261            return new InvalidAcademicPeriodEndDate();
 62
 1863        if (startAt >= endAt)
 264            return new InvalidAcademicPeriodDates();
 65
 1666        return $"{year}.{digit}";
 67    }
 68}