< Summary

Information
Class: Pomodoro.Web.Services.Formatters.ActivityTimelineFormatter
Assembly: Pomodoro.Web
File(s): /home/runner/work/Pomodoro/Pomodoro/src/Pomodoro.Web/Services/Formatters/ActivityTimelineFormatter.cs
Line coverage
100%
Covered lines: 21
Uncovered lines: 0
Coverable lines: 21
Total lines: 73
Line coverage: 100%
Branch coverage
100%
Covered branches: 12
Total branches: 12
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
GetActivityCount(...)100%22100%
HasActivities(...)100%22100%
GetTotalDuration(...)100%22100%
GetPomodoroCount(...)100%22100%
GetCompletedCount(...)100%22100%
IsEmpty(...)100%22100%

File(s)

/home/runner/work/Pomodoro/Pomodoro/src/Pomodoro.Web/Services/Formatters/ActivityTimelineFormatter.cs

#LineLine coverage
 1using Pomodoro.Web.Models;
 2
 3namespace Pomodoro.Web.Services.Formatters;
 4
 5/// <summary>
 6/// Service for formatting ActivityTimeline component data.
 7/// Extracts formatting logic from component to enable testable code with coverage tracking.
 8/// </summary>
 9public class ActivityTimelineFormatter
 10{
 11    /// <summary>
 12    /// Gets the count of activities.
 13    /// </summary>
 14    /// <param name="activities">The list of activities</param>
 15    /// <returns>Count of activities or 0 if null</returns>
 16    public int GetActivityCount(List<ActivityRecord>? activities)
 617    {
 618        return activities?.Count ?? 0;
 619    }
 20
 21    /// <summary>
 22    /// Checks if there are any activities.
 23    /// </summary>
 24    /// <param name="activities">The list of activities</param>
 25    /// <returns>True if there are activities</returns>
 26    public bool HasActivities(List<ActivityRecord>? activities)
 627    {
 628        return activities != null && activities.Count > 0;
 629    }
 30
 31    /// <summary>
 32    /// Gets the total duration of all activities.
 33    /// </summary>
 34    /// <param name="activities">The list of activities</param>
 35    /// <returns>Total duration in minutes or 0 if null</returns>
 36    public int GetTotalDuration(List<ActivityRecord>? activities)
 637    {
 738        if (activities == null) return 0;
 1339        return activities.Sum(a => a.DurationMinutes);
 640    }
 41
 42    /// <summary>
 43    /// Gets the count of Pomodoro sessions.
 44    /// </summary>
 45    /// <param name="activities">The list of activities</param>
 46    /// <returns>Count of Pomodoro sessions or 0 if null</returns>
 47    public int GetPomodoroCount(List<ActivityRecord>? activities)
 648    {
 749        if (activities == null) return 0;
 1550        return activities.Count(a => a.Type == SessionType.Pomodoro);
 651    }
 52
 53    /// <summary>
 54    /// Gets the count of completed activities.
 55    /// </summary>
 56    /// <param name="activities">The list of activities</param>
 57    /// <returns>Count of completed activities or 0 if null</returns>
 58    public int GetCompletedCount(List<ActivityRecord>? activities)
 659    {
 760        if (activities == null) return 0;
 1461        return activities.Count(a => a.WasCompleted);
 662    }
 63
 64    /// <summary>
 65    /// Checks if the activity list is empty.
 66    /// </summary>
 67    /// <param name="activities">The list of activities</param>
 68    /// <returns>True if the list is null or empty</returns>
 69    public bool IsEmpty(List<ActivityRecord>? activities)
 670    {
 671        return activities == null || activities.Count == 0;
 672    }
 73}