@@ -7,7 +7,135 @@ namespace Immediate.Handlers.Tests.AnalyzerTests.BehaviorAnalyzerTests;
77public sealed partial class Tests
88{
99 [ Fact ]
10- public async Task BehaviorTypeWithOneGenericParameter_DoesNotAlert ( ) =>
10+ public async Task BehaviorTypeWithCorrectTRequest_DoesNotAlert ( ) =>
11+ await AnalyzerTestHelpers . CreateAnalyzerTest < BehaviorsAnalyzer > (
12+ """
13+ using System;
14+ using System.Collections.Generic;
15+ using System.IO;
16+ using System.Linq;
17+ using System.Net.Http;
18+ using System.Threading;
19+ using System.Threading.Tasks;
20+ using Immediate.Handlers.Shared;
21+ using Normal;
22+
23+ [assembly: Behaviors(
24+ typeof(RequestLoggingBehavior<>)
25+ )]
26+
27+ namespace Normal;
28+
29+ public class User { }
30+ public interface ILogger<T>;
31+
32+ // Single type parameter behavior
33+ public sealed class RequestLoggingBehavior<TResponse>(ILogger<RequestLoggingBehavior<TResponse>> logger)
34+ : Immediate.Handlers.Shared.Behavior<int, TResponse>
35+ {
36+ public override async ValueTask<TResponse> HandleAsync(int request, CancellationToken cancellationToken)
37+ {
38+ _ = logger.ToString();
39+ var response = await Next(request, cancellationToken);
40+
41+ return response;
42+ }
43+ }
44+
45+ public class UsersService(ILogger<UsersService> logger)
46+ {
47+ public ValueTask<string> GetUsers()
48+ {
49+ _ = logger.ToString();
50+ return ValueTask.FromResult("result");
51+ }
52+ }
53+
54+ [Handler]
55+ [Behaviors(
56+ typeof(RequestLoggingBehavior<>)
57+ )]
58+ public static partial class GetUsersQuery
59+ {
60+ private static ValueTask<string> HandleAsync(
61+ int request,
62+ UsersService usersService,
63+ CancellationToken token)
64+ {
65+ token.ThrowIfCancellationRequested();
66+ return usersService.GetUsers();
67+ }
68+ }
69+ """ ,
70+ DriverReferenceAssemblies . Normal
71+ ) . RunAsync ( TestContext . Current . CancellationToken ) ;
72+
73+ [ Fact ]
74+ public async Task BehaviorTypeWithIncorrectTRequest_Alerts ( ) =>
75+ await AnalyzerTestHelpers . CreateAnalyzerTest < BehaviorsAnalyzer > (
76+ """
77+ using System;
78+ using System.Collections.Generic;
79+ using System.IO;
80+ using System.Linq;
81+ using System.Net.Http;
82+ using System.Threading;
83+ using System.Threading.Tasks;
84+ using Immediate.Handlers.Shared;
85+ using Normal;
86+
87+ [assembly: Behaviors(
88+ typeof(RequestLoggingBehavior<>)
89+ )]
90+
91+ namespace Normal;
92+
93+ public class User { }
94+ public interface ILogger<T>;
95+
96+ // Single type parameter behavior
97+ public sealed class RequestLoggingBehavior<TResponse>(ILogger<RequestLoggingBehavior<TResponse>> logger)
98+ : Immediate.Handlers.Shared.Behavior<double, TResponse>
99+ {
100+ public override async ValueTask<TResponse> HandleAsync(double request, CancellationToken cancellationToken)
101+ {
102+ _ = logger.ToString();
103+ var response = await Next(request, cancellationToken);
104+
105+ return response;
106+ }
107+ }
108+
109+ public class UsersService(ILogger<UsersService> logger)
110+ {
111+ public ValueTask<string> GetUsers()
112+ {
113+ _ = logger.ToString();
114+ return ValueTask.FromResult("result");
115+ }
116+ }
117+
118+ [Handler]
119+ [Behaviors(
120+ {|IHR0020:typeof(RequestLoggingBehavior<>)|}
121+ )]
122+ public static partial class GetUsersQuery
123+ {
124+ private static ValueTask<string> HandleAsync(
125+ int request,
126+ UsersService usersService,
127+ CancellationToken token)
128+ {
129+ token.ThrowIfCancellationRequested();
130+ return usersService.GetUsers();
131+ }
132+ }
133+ """ ,
134+ DriverReferenceAssemblies . Normal
135+ ) . RunAsync ( TestContext . Current . CancellationToken ) ;
136+
137+ [ Fact ]
138+ public async Task BehaviorTypeWithCorrectTResponse_DoesNotAlert ( ) =>
11139 await AnalyzerTestHelpers . CreateAnalyzerTest < BehaviorsAnalyzer > (
12140 """
13141 using System;
@@ -69,4 +197,68 @@ private static ValueTask<string> HandleAsync(
69197 """ ,
70198 DriverReferenceAssemblies . Normal
71199 ) . RunAsync ( TestContext . Current . CancellationToken ) ;
200+
201+ [ Fact ]
202+ public async Task BehaviorTypeWithIncorrectTResponse_Alerts ( ) =>
203+ await AnalyzerTestHelpers . CreateAnalyzerTest < BehaviorsAnalyzer > (
204+ """
205+ using System;
206+ using System.Collections.Generic;
207+ using System.IO;
208+ using System.Linq;
209+ using System.Net.Http;
210+ using System.Threading;
211+ using System.Threading.Tasks;
212+ using Immediate.Handlers.Shared;
213+ using Normal;
214+
215+ [assembly: Behaviors(
216+ typeof(RequestLoggingBehavior<>)
217+ )]
218+
219+ namespace Normal;
220+
221+ public class User { }
222+ public interface ILogger<T>;
223+
224+ // Single type parameter behavior
225+ public sealed class RequestLoggingBehavior<TRequest>(ILogger<RequestLoggingBehavior<TRequest>> logger)
226+ : Immediate.Handlers.Shared.Behavior<TRequest, double>
227+ {
228+ public override async ValueTask<double> HandleAsync(TRequest request, CancellationToken cancellationToken)
229+ {
230+ _ = logger.ToString();
231+ var response = await Next(request, cancellationToken);
232+
233+ return response;
234+ }
235+ }
236+
237+ public class UsersService(ILogger<UsersService> logger)
238+ {
239+ public ValueTask<string> GetUsers()
240+ {
241+ _ = logger.ToString();
242+ return ValueTask.FromResult("result");
243+ }
244+ }
245+
246+ [Handler]
247+ [Behaviors(
248+ {|IHR0020:typeof(RequestLoggingBehavior<>)|}
249+ )]
250+ public static partial class GetUsersQuery
251+ {
252+ private static ValueTask<string> HandleAsync(
253+ int request,
254+ UsersService usersService,
255+ CancellationToken token)
256+ {
257+ token.ThrowIfCancellationRequested();
258+ return usersService.GetUsers();
259+ }
260+ }
261+ """ ,
262+ DriverReferenceAssemblies . Normal
263+ ) . RunAsync ( TestContext . Current . CancellationToken ) ;
72264}
0 commit comments