Skip to content

Commit a1d0138

Browse files
authored
Merge pull request #68 from EFNext/fix/unionby-stub
UnionBy stub had a wrong parameter type
2 parents 55d9ce4 + 4b6810f commit a1d0138

4 files changed

Lines changed: 64 additions & 4 deletions

File tree

src/ExpressiveSharp/Extensions/ExpressiveQueryableLinqExtensions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -408,7 +408,7 @@ public static IExpressiveQueryable<T> IntersectBy<T, TKey>(
408408
[EditorBrowsable(EditorBrowsableState.Never)]
409409
public static IExpressiveQueryable<T> UnionBy<T, TKey>(
410410
this IExpressiveQueryable<T> source,
411-
IEnumerable<TKey> second,
411+
IEnumerable<T> second,
412412
Func<T, TKey> keySelector)
413413
=> throw new UnreachableException(InterceptedMessage);
414414

@@ -551,7 +551,7 @@ public static IExpressiveQueryable<T> IntersectBy<T, TKey>(
551551
[EditorBrowsable(EditorBrowsableState.Never)]
552552
public static IExpressiveQueryable<T> UnionBy<T, TKey>(
553553
this IExpressiveQueryable<T> source,
554-
IEnumerable<TKey> second,
554+
IEnumerable<T> second,
555555
Func<T, TKey> keySelector,
556556
IEqualityComparer<TKey>? comparer)
557557
=> throw new UnreachableException(InterceptedMessage);

tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SetOperationTests.UnionBy_GeneratesInterceptor.verified.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ namespace ExpressiveSharp.Generated.Interceptors
88
[global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)]
99
internal static global::ExpressiveSharp.IExpressiveQueryable<global::TestNs.Order> __Polyfill_UnionBy_361d_10_18(
1010
this global::ExpressiveSharp.IExpressiveQueryable<global::TestNs.Order> source,
11-
global::System.Collections.Generic.IEnumerable<string> second,
11+
global::System.Collections.Generic.IEnumerable<global::TestNs.Order> second,
1212
global::System.Func<global::TestNs.Order, string> __func)
1313
{
1414
// Source: o => o.Tag

tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SetOperationTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ namespace TestNs
7575
class Order { public string Tag { get; set; } }
7676
class TestClass
7777
{
78-
public void Run(System.Linq.IQueryable<Order> query, System.Collections.Generic.IEnumerable<string> extra)
78+
public void Run(System.Linq.IQueryable<Order> query, System.Collections.Generic.IEnumerable<Order> extra)
7979
{
8080
query.AsExpressive()
8181
.UnionBy(extra, o => o.Tag)
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
using ExpressiveSharp.IntegrationTests.Scenarios.Store.Models;
2+
3+
namespace ExpressiveSharp.IntegrationTests.Tests;
4+
5+
[TestClass]
6+
public class SetOperationInterceptorTests
7+
{
8+
private static readonly List<Order> _orders = new()
9+
{
10+
new Order { Id = 1, Tag = "A", Price = 100, Quantity = 2 },
11+
new Order { Id = 2, Tag = "B", Price = 50, Quantity = 1 },
12+
new Order { Id = 3, Tag = "C", Price = 25, Quantity = 4 },
13+
};
14+
15+
[TestMethod]
16+
public void UnionBy_WithElementSequence_CompilesAndRuns()
17+
{
18+
var source = _orders.AsQueryable();
19+
var extra = new List<Order>
20+
{
21+
new() { Id = 4, Tag = "B", Price = 999, Quantity = 9 },
22+
new() { Id = 5, Tag = "D", Price = 10, Quantity = 1 },
23+
};
24+
25+
var results = source.AsExpressive()
26+
.UnionBy(extra, o => o.Tag)
27+
.ToList();
28+
29+
var tags = results.Select(o => o.Tag).ToList();
30+
Assert.AreEqual(4, results.Count);
31+
CollectionAssert.AreEquivalent(new[] { "A", "B", "C", "D" }, tags);
32+
Assert.AreEqual(2, results.Single(o => o.Tag == "B").Id);
33+
}
34+
35+
[TestMethod]
36+
public void ExceptBy_WithKeySequence_CompilesAndRuns()
37+
{
38+
var source = _orders.AsQueryable();
39+
var excluded = new[] { "B" };
40+
41+
var results = source.AsExpressive()
42+
.ExceptBy(excluded, o => o.Tag)
43+
.ToList();
44+
45+
CollectionAssert.AreEquivalent(new[] { "A", "C" }, results.Select(o => o.Tag).ToList());
46+
}
47+
48+
[TestMethod]
49+
public void IntersectBy_WithKeySequence_CompilesAndRuns()
50+
{
51+
var source = _orders.AsQueryable();
52+
var included = new[] { "B", "C", "X" };
53+
54+
var results = source.AsExpressive()
55+
.IntersectBy(included, o => o.Tag)
56+
.ToList();
57+
58+
CollectionAssert.AreEquivalent(new[] { "B", "C" }, results.Select(o => o.Tag).ToList());
59+
}
60+
}

0 commit comments

Comments
 (0)