< Summary

Information
Class: Pomodoro.Web.Models.ActivityRecord
Assembly: Pomodoro.Web
File(s): /home/runner/work/Pomodoro/Pomodoro/src/Pomodoro.Web/Models/ActivityRecord.cs
Line coverage
100%
Covered lines: 34
Uncovered lines: 0
Coverable lines: 34
Total lines: 50
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_Type()100%11100%
get_TaskName()100%11100%
get_TaskId()100%11100%
get_CompletedAt()100%11100%
get_DurationMinutes()100%11100%
get_WasCompleted()100%11100%
get_DisplayText()100%66100%
get_Icon()100%44100%
get_TimeAgo()100%11100%
GetTimeAgo(...)100%88100%

File(s)

/home/runner/work/Pomodoro/Pomodoro/src/Pomodoro.Web/Models/ActivityRecord.cs

#LineLine coverage
 1namespace Pomodoro.Web.Models;
 2
 3/// <summary>
 4/// Represents a completed pomodoro or break session for activity history
 5/// </summary>
 6public class ActivityRecord
 7{
 131678    public Guid Id { get; set; } = Guid.NewGuid();
 40989    public SessionType Type { get; set; }
 735110    public string? TaskName { get; set; }
 608311    public Guid? TaskId { get; set; }
 895712    public DateTime CompletedAt { get; set; }
 776913    public int DurationMinutes { get; set; }
 19814    public bool WasCompleted { get; set; }
 15
 16    // For display purposes
 49217    public string DisplayText => Type switch
 49218    {
 46419        SessionType.Pomodoro => TaskName ?? Constants.SessionTypes.FocusTimeActivity,
 1820        SessionType.ShortBreak => Constants.SessionTypes.ShortBreakActivity,
 921        SessionType.LongBreak => Constants.SessionTypes.LongBreakActivity,
 122        _ => Constants.SessionTypes.UnknownActivity
 49223    };
 24
 49125    public string Icon => Type switch
 49126    {
 46327        SessionType.Pomodoro => Constants.SessionTypes.PomodoroEmoji,
 1828        SessionType.ShortBreak => Constants.SessionTypes.ShortBreakEmoji,
 929        SessionType.LongBreak => Constants.SessionTypes.LongBreakEmoji,
 130        _ => Constants.SessionTypes.TimerEmoji
 49131    };
 32
 2333    public string TimeAgo => GetTimeAgo(CompletedAt);
 34
 35    private static string GetTimeAgo(DateTime completedAt)
 2336    {
 2337        var diff = DateTime.UtcNow - completedAt;
 38
 2339        if (diff.TotalMinutes < Constants.TimeThresholds.OneMinute)
 1940            return Constants.TimeFormats.JustNowText;
 441        if (diff.TotalMinutes < Constants.TimeThresholds.OneHourInMinutes)
 142            return string.Format(Constants.TimeFormats.MinutesAgoFormat, (int)diff.TotalMinutes);
 343        if (diff.TotalHours < Constants.TimeThresholds.OneDayInHours)
 144            return string.Format(Constants.TimeFormats.HoursAgoFormat, (int)diff.TotalHours);
 245        if (diff.TotalDays < Constants.TimeThresholds.OneWeekInDays)
 146            return string.Format(Constants.TimeFormats.DaysAgoFormat, (int)diff.TotalDays);
 47
 148        return completedAt.ToString(Constants.TimeFormats.ShortDateFormat);
 2349    }
 50}