< Summary - Syki

Information
Class: Syki.Back.Features.Academic.CreateAcademicPeriod.AcademicPeriod
Assembly: Back
File(s): /home/runner/work/syki/syki/Back/Features/Academic/CreateAcademicPeriod/AcademicPeriod.cs
Tag: 21_17346963026
Line coverage
100%
Covered lines: 42
Uncovered lines: 0
Coverable lines: 42
Total lines: 82
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_StartAt()100%11100%
get_EndAt()100%11100%
.ctor()100%11100%
.ctor(...)100%11100%
New(...)100%22100%
Validate(...)100%1616100%
ToOut()100%11100%
op_Implicit(...)100%11100%

File(s)

/home/runner/work/syki/syki/Back/Features/Academic/CreateAcademicPeriod/AcademicPeriod.cs

#LineLine coverage
 1namespace Syki.Back.Features.Academic.CreateAcademicPeriod;
 2
 3public class AcademicPeriod
 4{
 17465    public string Id { get; set; }
 6106    public Guid InstitutionId { get; set; }
 17907    public DateOnly StartAt { get; set; }
 921528    public DateOnly EndAt { get; set; }
 9
 119210    private AcademicPeriod() {}
 11
 59812    public AcademicPeriod(
 59813        string id,
 59814        Guid institutionId,
 59815        DateOnly startAt,
 59816        DateOnly endAt
 59817    ) {
 59818        Id = id;
 59819        InstitutionId = institutionId;
 59820        StartAt = startAt;
 59821        EndAt = endAt;
 59822    }
 23
 24    public static OneOf<AcademicPeriod, SykiError> New(
 25        string id,
 26        Guid institutionId,
 27        DateOnly startAt,
 28        DateOnly endAt
 29    ) {
 65830        var result = Validate(id, startAt, endAt);
 31
 72032        if (result.IsError) return result.Error;
 33
 59634        return new AcademicPeriod(result.Success, institutionId, startAt, endAt);
 35    }
 36
 37    private static OneOf<string, SykiError> Validate(
 38        string id,
 39        DateOnly startAt,
 40        DateOnly endAt
 41    ) {
 65842        var numbers = id.OnlyNumbers();
 43
 65844        if (numbers.Length != 5)
 2845            return new InvalidAcademicPeriod();
 46
 63047        var year = int.Parse(numbers.Substring(0, 4));
 63048        var digit = int.Parse(numbers.Substring(4, 1));
 49
 63050        if (year < 1970 || year > 2070)
 451            return new InvalidAcademicPeriod();
 52
 62653        if (digit < 1 || digit > 2)
 1654            return new InvalidAcademicPeriod();
 55
 61056        if (startAt.Year != year)
 457            return new InvalidAcademicPeriodStartDate();
 58
 60659        if (endAt.Year != year)
 460            return new InvalidAcademicPeriodEndDate();
 61
 60262        if (startAt >= endAt)
 663            return new InvalidAcademicPeriodDates();
 64
 59665        return $"{year}.{digit}";
 66    }
 67
 68    public AcademicPeriodOut ToOut()
 69    {
 56870        return new()
 56871        {
 56872            Id = Id,
 56873            StartAt = StartAt,
 56874            EndAt = EndAt,
 56875        };
 76    }
 77
 78    public static implicit operator AcademicPeriod(OneOf<AcademicPeriod, SykiError> value)
 79    {
 1880        return value.Success;
 81    }
 82}