< 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: 4_16869239191
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{
 17045    public string Id { get; set; }
 5966    public Guid InstitutionId { get; set; }
 17647    public DateOnly StartAt { get; set; }
 935368    public DateOnly EndAt { get; set; }
 9
 119610    private AcademicPeriod() {}
 11
 58412    public AcademicPeriod(
 58413        string id,
 58414        Guid institutionId,
 58415        DateOnly startAt,
 58416        DateOnly endAt
 58417    ) {
 58418        Id = id;
 58419        InstitutionId = institutionId;
 58420        StartAt = startAt;
 58421        EndAt = endAt;
 58422    }
 23
 24    public static OneOf<AcademicPeriod, SykiError> New(
 25        string id,
 26        Guid institutionId,
 27        DateOnly startAt,
 28        DateOnly endAt
 29    ) {
 64430        var result = Validate(id, startAt, endAt);
 31
 70632        if (result.IsError) return result.Error;
 33
 58234        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    ) {
 64442        var numbers = id.OnlyNumbers();
 43
 64444        if (numbers.Length != 5)
 2845            return new InvalidAcademicPeriod();
 46
 61647        var year = int.Parse(numbers.Substring(0, 4));
 61648        var digit = int.Parse(numbers.Substring(4, 1));
 49
 61650        if (year < 1970 || year > 2070)
 451            return new InvalidAcademicPeriod();
 52
 61253        if (digit < 1 || digit > 2)
 1654            return new InvalidAcademicPeriod();
 55
 59656        if (startAt.Year != year)
 457            return new InvalidAcademicPeriodStartDate();
 58
 59259        if (endAt.Year != year)
 460            return new InvalidAcademicPeriodEndDate();
 61
 58862        if (startAt >= endAt)
 663            return new InvalidAcademicPeriodDates();
 64
 58265        return $"{year}.{digit}";
 66    }
 67
 68    public AcademicPeriodOut ToOut()
 69    {
 55470        return new()
 55471        {
 55472            Id = Id,
 55473            StartAt = StartAt,
 55474            EndAt = EndAt,
 55475        };
 76    }
 77
 78    public static implicit operator AcademicPeriod(OneOf<AcademicPeriod, SykiError> value)
 79    {
 1880        return value.Success;
 81    }
 82}