Skip to content

Commit 733d39f

Browse files
Improve analyzer tests
1 parent add731a commit 733d39f

2 files changed

Lines changed: 288 additions & 62 deletions

File tree

Lines changed: 288 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,288 @@
1+
using Immediate.Handlers.Analyzers;
2+
3+
namespace Immediate.Handlers.Tests.AnalyzerTests.HandlerClassAnalyzerTests;
4+
5+
public sealed partial class Tests
6+
{
7+
[Fact]
8+
public async Task CrtpBehaviorConstraintIsValid_DoesNotAlert() =>
9+
await AnalyzerTestHelpers.CreateAnalyzerTest<HandlerClassAnalyzer>(
10+
"""
11+
using System;
12+
using System.Collections.Generic;
13+
using System.IO;
14+
using System.Linq;
15+
using System.Net.Http;
16+
using System.Threading;
17+
using System.Threading.Tasks;
18+
using Immediate.Handlers.Shared;
19+
using Normal;
20+
21+
namespace Normal;
22+
23+
public class User { }
24+
public interface IValidationTarget<T>;
25+
26+
public sealed class ValidationBehavior<TRequest, TResponse> : Behavior<TRequest, TResponse>
27+
where TRequest : IValidationTarget<TRequest>
28+
{
29+
public override async ValueTask<TResponse> HandleAsync(TRequest request, CancellationToken cancellationToken)
30+
{
31+
return await Next(request, cancellationToken).ConfigureAwait(false);
32+
}
33+
}
34+
35+
public class UsersService
36+
{
37+
public ValueTask<IEnumerable<User>> GetUsers()
38+
{
39+
return ValueTask.FromResult(Enumerable.Empty<User>());
40+
}
41+
}
42+
43+
[Handler]
44+
[Behaviors(
45+
typeof(ValidationBehavior<,>)
46+
)]
47+
public sealed partial class GetUsersQuery(UsersService usersService)
48+
{
49+
public record Query : IValidationTarget<Query>;
50+
51+
private ValueTask<IEnumerable<User>> HandleAsync(
52+
Query _,
53+
CancellationToken token)
54+
{
55+
token.ThrowIfCancellationRequested();
56+
return usersService.GetUsers();
57+
}
58+
}
59+
""",
60+
DriverReferenceAssemblies.Normal
61+
).RunAsync(TestContext.Current.CancellationToken);
62+
63+
[Fact]
64+
public async Task BehaviorTRequestConstraintIsValid_DoesNotAlert() =>
65+
await AnalyzerTestHelpers.CreateAnalyzerTest<HandlerClassAnalyzer>(
66+
"""
67+
using System;
68+
using System.Collections.Generic;
69+
using System.IO;
70+
using System.Linq;
71+
using System.Net.Http;
72+
using System.Threading;
73+
using System.Threading.Tasks;
74+
using Immediate.Handlers.Shared;
75+
using Normal;
76+
77+
namespace Normal;
78+
79+
public class User { }
80+
public interface ISomething;
81+
82+
public sealed class ValidationBehavior<TRequest, TResponse> : Behavior<TRequest, TResponse>
83+
where TRequest : ISomething
84+
{
85+
public override async ValueTask<TResponse> HandleAsync(TRequest request, CancellationToken cancellationToken)
86+
{
87+
return await Next(request, cancellationToken).ConfigureAwait(false);
88+
}
89+
}
90+
91+
public class UsersService
92+
{
93+
public ValueTask<IEnumerable<User>> GetUsers()
94+
{
95+
return ValueTask.FromResult(Enumerable.Empty<User>());
96+
}
97+
}
98+
99+
[Handler]
100+
[Behaviors(
101+
typeof(ValidationBehavior<,>)
102+
)]
103+
public sealed partial class GetUsersQuery(UsersService usersService)
104+
{
105+
public record Query : ISomething;
106+
107+
private ValueTask<IEnumerable<User>> HandleAsync(
108+
Query _,
109+
CancellationToken token)
110+
{
111+
token.ThrowIfCancellationRequested();
112+
return usersService.GetUsers();
113+
}
114+
}
115+
""",
116+
DriverReferenceAssemblies.Normal
117+
).RunAsync(TestContext.Current.CancellationToken);
118+
119+
[Fact]
120+
public async Task BehaviorTRequestConstraintIsInvalid_Alerts() =>
121+
await AnalyzerTestHelpers.CreateAnalyzerTest<HandlerClassAnalyzer>(
122+
"""
123+
using System;
124+
using System.Collections.Generic;
125+
using System.IO;
126+
using System.Linq;
127+
using System.Net.Http;
128+
using System.Threading;
129+
using System.Threading.Tasks;
130+
using Immediate.Handlers.Shared;
131+
using Normal;
132+
133+
namespace Normal;
134+
135+
public class User { }
136+
public interface ISomething;
137+
138+
public sealed class ValidationBehavior<TRequest, TResponse> : Behavior<TRequest, TResponse>
139+
where TRequest : ISomething
140+
{
141+
public override async ValueTask<TResponse> HandleAsync(TRequest request, CancellationToken cancellationToken)
142+
{
143+
return await Next(request, cancellationToken).ConfigureAwait(false);
144+
}
145+
}
146+
147+
public class UsersService
148+
{
149+
public ValueTask<IEnumerable<User>> GetUsers()
150+
{
151+
return ValueTask.FromResult(Enumerable.Empty<User>());
152+
}
153+
}
154+
155+
[Handler]
156+
[Behaviors(
157+
{|IHR0020:typeof(ValidationBehavior<,>)|}
158+
)]
159+
public sealed partial class GetUsersQuery(UsersService usersService)
160+
{
161+
public record Query;
162+
163+
private ValueTask<IEnumerable<User>> HandleAsync(
164+
Query _,
165+
CancellationToken token)
166+
{
167+
token.ThrowIfCancellationRequested();
168+
return usersService.GetUsers();
169+
}
170+
}
171+
""",
172+
DriverReferenceAssemblies.Normal
173+
).RunAsync(TestContext.Current.CancellationToken);
174+
175+
[Fact]
176+
public async Task BehaviorTResponseConstraintIsValid_DoesNotAlert() =>
177+
await AnalyzerTestHelpers.CreateAnalyzerTest<HandlerClassAnalyzer>(
178+
"""
179+
using System;
180+
using System.Collections.Generic;
181+
using System.IO;
182+
using System.Linq;
183+
using System.Net.Http;
184+
using System.Threading;
185+
using System.Threading.Tasks;
186+
using Immediate.Handlers.Shared;
187+
using Normal;
188+
189+
namespace Normal;
190+
191+
public class User { }
192+
public interface ISomething;
193+
194+
public sealed class ValidationBehavior<TRequest, TResponse> : Behavior<TRequest, TResponse>
195+
where TResponse : ISomething
196+
{
197+
public override async ValueTask<TResponse> HandleAsync(TRequest request, CancellationToken cancellationToken)
198+
{
199+
return await Next(request, cancellationToken).ConfigureAwait(false);
200+
}
201+
}
202+
203+
public class UsersService
204+
{
205+
public ValueTask<IEnumerable<User>> GetUsers()
206+
{
207+
return ValueTask.FromResult(Enumerable.Empty<User>());
208+
}
209+
}
210+
211+
[Handler]
212+
[Behaviors(
213+
typeof(ValidationBehavior<,>)
214+
)]
215+
public sealed partial class GetUsersQuery(UsersService usersService)
216+
{
217+
public record Query : ISomething;
218+
public record Response : ISomething;
219+
220+
private ValueTask<Response> HandleAsync(
221+
Query _,
222+
CancellationToken token)
223+
{
224+
token.ThrowIfCancellationRequested();
225+
var users = usersService.GetUsers();
226+
return default;
227+
}
228+
}
229+
""",
230+
DriverReferenceAssemblies.Normal
231+
).RunAsync(TestContext.Current.CancellationToken);
232+
233+
[Fact]
234+
public async Task BehaviorTResponseConstraintIsInvalid_Alerts() =>
235+
await AnalyzerTestHelpers.CreateAnalyzerTest<HandlerClassAnalyzer>(
236+
"""
237+
using System;
238+
using System.Collections.Generic;
239+
using System.IO;
240+
using System.Linq;
241+
using System.Net.Http;
242+
using System.Threading;
243+
using System.Threading.Tasks;
244+
using Immediate.Handlers.Shared;
245+
using Normal;
246+
247+
namespace Normal;
248+
249+
public class User { }
250+
public interface ISomething;
251+
252+
public sealed class ValidationBehavior<TRequest, TResponse> : Behavior<TRequest, TResponse>
253+
where TResponse : ISomething
254+
{
255+
public override async ValueTask<TResponse> HandleAsync(TRequest request, CancellationToken cancellationToken)
256+
{
257+
return await Next(request, cancellationToken).ConfigureAwait(false);
258+
}
259+
}
260+
261+
public class UsersService
262+
{
263+
public ValueTask<IEnumerable<User>> GetUsers()
264+
{
265+
return ValueTask.FromResult(Enumerable.Empty<User>());
266+
}
267+
}
268+
269+
[Handler]
270+
[Behaviors(
271+
{|IHR0020:typeof(ValidationBehavior<,>)|}
272+
)]
273+
public sealed partial class GetUsersQuery(UsersService usersService)
274+
{
275+
public record Query;
276+
277+
private ValueTask<IEnumerable<User>> HandleAsync(
278+
Query _,
279+
CancellationToken token)
280+
{
281+
token.ThrowIfCancellationRequested();
282+
return usersService.GetUsers();
283+
}
284+
}
285+
""",
286+
DriverReferenceAssemblies.Normal
287+
).RunAsync(TestContext.Current.CancellationToken);
288+
}

tests/Immediate.Handlers.Tests/AnalyzerTests/HandlerClassAnalyzerTests/Tests.HandlerUsesCrtpBehavior.cs

Lines changed: 0 additions & 62 deletions
This file was deleted.

0 commit comments

Comments
 (0)