From 7e302072e98b098d5265dc6d05ffab140522cde1 Mon Sep 17 00:00:00 2001 From: Jeremy Norman Date: Mon, 5 Jul 2021 16:19:50 +1200 Subject: [PATCH] Change BoundFilter to not have a struct restriction so it can be used with string values --- .../Queries/Scan/BoundFilterOnMetric.cs | 41 +++++++++++++++++++ .../Raygun.Druid4Net.IntegrationTests.csproj | 2 + .../Fluent/Filters/BoundFilterTests.cs | 14 ++++++- .../Raygun.Druid4Net.Tests.csproj | 1 + .../Fluent/Filters/BoundFilter.cs | 8 ++-- Raygun.Druid4Net/Raygun.Druid4Net.csproj | 1 + 6 files changed, 61 insertions(+), 6 deletions(-) create mode 100644 Raygun.Druid4Net.IntegrationTests/Queries/Scan/BoundFilterOnMetric.cs diff --git a/Raygun.Druid4Net.IntegrationTests/Queries/Scan/BoundFilterOnMetric.cs b/Raygun.Druid4Net.IntegrationTests/Queries/Scan/BoundFilterOnMetric.cs new file mode 100644 index 0000000..5f3bd89 --- /dev/null +++ b/Raygun.Druid4Net.IntegrationTests/Queries/Scan/BoundFilterOnMetric.cs @@ -0,0 +1,41 @@ +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework; + +namespace Raygun.Druid4Net.IntegrationTests.Queries.Scan +{ + [TestFixture] + public class BoundFilterOnMetric : TestQueryBase + { + private IList _results; + + [SetUp] + public void Execute() + { + var response = DruidClient.Scan(q => q + .DataSource(Wikipedia.DataSource) + .Interval(FromDate, ToDate) + .Filter(new BoundFilter(Wikipedia.Metrics.Added, 10_000, null, lowerStrict: true, ordering: SortingOrder.numeric)) + .Columns(Wikipedia.Metrics.Added) + ); + + _results = response.Data.SelectMany(x => x.Events).ToList(); + } + + [Test] + public void AllResultsHaveAddedGreaterThanTenThousand() + { + foreach (var result in _results) + { + Assert.That(result.Added, Is.GreaterThan(10_000)); + } + } + + private class QueryResult + { + public string Page { get; set; } + + public int Added { get; set; } + } + } +} \ No newline at end of file diff --git a/Raygun.Druid4Net.IntegrationTests/Raygun.Druid4Net.IntegrationTests.csproj b/Raygun.Druid4Net.IntegrationTests/Raygun.Druid4Net.IntegrationTests.csproj index 4c1aae3..c2caec6 100644 --- a/Raygun.Druid4Net.IntegrationTests/Raygun.Druid4Net.IntegrationTests.csproj +++ b/Raygun.Druid4Net.IntegrationTests/Raygun.Druid4Net.IntegrationTests.csproj @@ -11,6 +11,7 @@ Raygun.Druid4Net.IntegrationTests v4.5 512 + 9 true @@ -60,6 +61,7 @@ + diff --git a/Raygun.Druid4Net.Tests/Fluent/Filters/BoundFilterTests.cs b/Raygun.Druid4Net.Tests/Fluent/Filters/BoundFilterTests.cs index 24678dc..a26fc82 100644 --- a/Raygun.Druid4Net.Tests/Fluent/Filters/BoundFilterTests.cs +++ b/Raygun.Druid4Net.Tests/Fluent/Filters/BoundFilterTests.cs @@ -9,14 +9,14 @@ public class BoundFilterTests [Test] public void Constructor_TypeIsCorrect() { - var filter = new BoundFilter("test_dimension", 10); + var filter = new BoundFilter("test_dimension", 10, null); Assert.That(filter.Type, Is.EqualTo("bound")); } [Test] public void Constructor_WithLowerValues_PropertiesAreSet() { - var filter = new BoundFilter("test_dimension", 10); + var filter = new BoundFilter("test_dimension", 10, null); Assert.That(filter.Dimension, Is.EqualTo("test_dimension")); Assert.That(filter.Lower, Is.EqualTo(10)); Assert.That(filter.Upper, Is.Null); @@ -45,5 +45,15 @@ public void Constructor_WithAlternateTypeValues_PropertiesAreSet() Assert.That(filter.Lower, Is.EqualTo(0.1)); Assert.That(filter.Upper, Is.EqualTo(0.2)); } + + [Test] + public void Constructor_WithStringTypeValues_PropertiesAreSet() + { + var filter = new BoundFilter("test_dimension", "1", "2", ordering: SortingOrder.alphanumeric); + Assert.That(filter.Dimension, Is.EqualTo("test_dimension")); + Assert.That(filter.Lower, Is.EqualTo("1")); + Assert.That(filter.Upper, Is.EqualTo("2")); + Assert.That(filter.Ordering, Is.EqualTo(SortingOrder.alphanumeric)); + } } } \ No newline at end of file diff --git a/Raygun.Druid4Net.Tests/Raygun.Druid4Net.Tests.csproj b/Raygun.Druid4Net.Tests/Raygun.Druid4Net.Tests.csproj index d4b8f36..a19d38f 100644 --- a/Raygun.Druid4Net.Tests/Raygun.Druid4Net.Tests.csproj +++ b/Raygun.Druid4Net.Tests/Raygun.Druid4Net.Tests.csproj @@ -12,6 +12,7 @@ v4.5 512 + 9 true diff --git a/Raygun.Druid4Net/Fluent/Filters/BoundFilter.cs b/Raygun.Druid4Net/Fluent/Filters/BoundFilter.cs index d72ae87..f0c5368 100644 --- a/Raygun.Druid4Net/Fluent/Filters/BoundFilter.cs +++ b/Raygun.Druid4Net/Fluent/Filters/BoundFilter.cs @@ -1,15 +1,15 @@  namespace Raygun.Druid4Net { - public class BoundFilter : IFilterSpec where T : struct + public class BoundFilter : IFilterSpec { public string Type => "bound"; public string Dimension { get; } - public T? Lower { get; } + public T Lower { get; } - public T? Upper { get; } + public T Upper { get; } public bool LowerStrict { get; } @@ -17,7 +17,7 @@ public class BoundFilter : IFilterSpec where T : struct public SortingOrder Ordering { get; } - public BoundFilter(string dimension, T? lower, T? upper = null, bool lowerStrict = false, bool upperStrict = false, SortingOrder ordering = SortingOrder.lexicographic) + public BoundFilter(string dimension, T lower, T upper, bool lowerStrict = false, bool upperStrict = false, SortingOrder ordering = SortingOrder.lexicographic) { Dimension = dimension; Lower = lower; diff --git a/Raygun.Druid4Net/Raygun.Druid4Net.csproj b/Raygun.Druid4Net/Raygun.Druid4Net.csproj index fd24cc9..308f8ee 100644 --- a/Raygun.Druid4Net/Raygun.Druid4Net.csproj +++ b/Raygun.Druid4Net/Raygun.Druid4Net.csproj @@ -3,6 +3,7 @@ net45;netstandard1.6;netstandard2.0 true 3.0.0 + 9