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

moconnell / yolo / 28323333427

28 Jun 2026 01:11PM UTC coverage: 81.648% (-1.3%) from 82.93%
28323333427

Pull #131

github

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

393 of 448 branches covered (87.72%)

Branch coverage included in aggregate %.

509 of 696 new or added lines in 12 files covered. (73.13%)

1 existing line in 1 file now uncovered.

3175 of 3922 relevant lines covered (80.95%)

23.01 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)
4✔
10
    {
4✔
11
        _values = values;
4✔
12
    }
4✔
13

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

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

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

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

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

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

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

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

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

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

71
        return DateTimeOffset.TryParseExact(
3✔
72
            value,
3✔
73
            formats,
3✔
74
            CultureInfo.InvariantCulture,
3✔
75
            DateTimeStyles.None,
3✔
76
            out var parsed)
3✔
77
            ? parsed
3✔
78
            : null;
3✔
79
    }
6✔
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