• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

moconnell / yolo / 28364383804

29 Jun 2026 10:06AM UTC coverage: 86.623% (+3.7%) from 82.93%
28364383804

Pull #131

github

web-flow
Merge 7ad19579d into 58d55311c
Pull Request #131: Feat: Telemetry

404 of 440 branches covered (91.82%)

Branch coverage included in aggregate %.

696 of 802 new or added lines in 14 files covered. (86.78%)

3 existing lines in 1 file now uncovered.

3436 of 3993 relevant lines covered (86.05%)

23.91 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

98.44
/src/YoloFunk/Infrastructure/HttpQueryParameters.cs
1
using System.Globalization;
2

3
namespace YoloFunk.Infrastructure;
4

5
internal sealed class HttpQueryParameters
6
{
7
    private readonly Dictionary<string, string[]> _values;
8

9
    private HttpQueryParameters(Dictionary<string, string[]> values)
5✔
10
    {
5✔
11
        _values = values;
5✔
12
    }
5✔
13

14
    public static HttpQueryParameters Parse(Uri url)
15
    {
5✔
16
        var values = new Dictionary<string, List<string>>(StringComparer.OrdinalIgnoreCase);
5✔
17
        var query = url.Query.TrimStart('?');
5✔
18
        foreach (var pair in query.Split('&', StringSplitOptions.RemoveEmptyEntries))
37✔
19
        {
11✔
20
            var parts = pair.Split('=', 2);
11✔
21
            var key = Uri.UnescapeDataString(parts[0].Replace("+", " "));
11✔
22
            if (string.IsNullOrWhiteSpace(key))
11✔
NEW
23
                continue;
×
24

25
            var value = parts.Length > 1
11✔
26
                ? Uri.UnescapeDataString(parts[1].Replace("+", " "))
11✔
27
                : string.Empty;
11✔
28

29
            if (!values.TryGetValue(key, out var list))
11✔
30
            {
11✔
31
                list = [];
11✔
32
                values[key] = list;
11✔
33
            }
11✔
34

35
            list.Add(value);
11✔
36
        }
11✔
37

38
        return new HttpQueryParameters(
5✔
39
            values.ToDictionary(kvp => kvp.Key, kvp => kvp.Value.ToArray(), StringComparer.OrdinalIgnoreCase));
27✔
40
    }
5✔
41

42
    public string? GetString(string name)
43
    {
51✔
44
        return _values.TryGetValue(name, out var values)
51✔
45
            ? values.FirstOrDefault(value => !string.IsNullOrWhiteSpace(value))
11✔
46
            : null;
51✔
47
    }
51✔
48

49
    public int GetInt32(string name, int defaultValue, int min, int max)
50
    {
8✔
51
        var value = GetString(name);
8✔
52
        if (!int.TryParse(value, out var parsed))
8✔
53
            return defaultValue;
6✔
54

55
        return Math.Clamp(parsed, min, max);
2✔
56
    }
8✔
57

58
    public DateTimeOffset? GetDateTimeOffset(string name)
59
    {
8✔
60
        var value = GetString(name);
8✔
61
        if (string.IsNullOrWhiteSpace(value))
8✔
62
            return null;
7✔
63

64
        string[] formats =
1✔
65
        [
1✔
66
            "O",
1✔
67
            "yyyy-MM-dd'T'HH:mm:ss.FFFFFFFzzz",
1✔
68
            "yyyy-MM-dd'T'HH:mm:sszzz"
1✔
69
        ];
1✔
70

71
        return DateTimeOffset.TryParseExact(
1✔
72
            value,
1✔
73
            formats,
1✔
74
            CultureInfo.InvariantCulture,
1✔
75
            DateTimeStyles.None,
1✔
76
            out var parsed)
1✔
77
            ? parsed
1✔
78
            : null;
1✔
79
    }
8✔
80
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc