44using Geta . NotFoundHandler . Core ;
55using Geta . NotFoundHandler . Core . Redirects ;
66using Geta . NotFoundHandler . Core . Suggestions ;
7+ using Geta . NotFoundHandler . Data ;
78using Geta . NotFoundHandler . Infrastructure . Configuration ;
89using Geta . NotFoundHandler . Tests . Base ;
910using Microsoft . AspNetCore . Http ;
@@ -23,16 +24,23 @@ public class RequestHandlerTests
2324 private static readonly Uri DefaultOldUri = new Uri ( "http://example.com/old" ) ;
2425 private readonly NotFoundHandlerOptions _configuration ;
2526
27+ private const string IgnoreSuggestionsUrlRegexPattern = @"^(https?:\/\/[^\/]+)?\/(api|nilleapi|episerverapi|globalassets|siteassets)(?!\/private)(\/.*)?$" ;
28+
2629 public RequestHandlerTests ( )
2730 {
2831 _redirectHandler = A . Fake < IRedirectHandler > ( ) ;
29- _requestLogger = A . Fake < IRequestLogger > ( ) ;
3032 var options = A . Fake < IOptions < NotFoundHandlerOptions > > ( ) ;
3133 _configuration = new NotFoundHandlerOptions ( ) ;
3234 A . CallTo ( ( ) => options . Value ) . Returns ( _configuration ) ;
33- var logger = A . Fake < ILogger < RequestHandler > > ( ) ;
35+ var suggestionsRepository = A . Fake < ISuggestionRepository > ( ) ;
36+ var requestLoggerLogger = A . Fake < ILogger < RequestLogger > > ( ) ;
37+
38+ _requestLogger = A . Fake < RequestLogger > ( o => o . WithArgumentsForConstructor ( new object [ ] { options , requestLoggerLogger , suggestionsRepository } )
39+ . CallsBaseMethods ( ) ) ;
40+
41+ var requestHandlerLogger = A . Fake < ILogger < RequestHandler > > ( ) ;
3442 _sut = A . Fake < RequestHandler > (
35- o => o . WithArgumentsForConstructor ( new object [ ] { _redirectHandler , _requestLogger , options , logger } )
43+ o => o . WithArgumentsForConstructor ( new object [ ] { _redirectHandler , _requestLogger , options , requestHandlerLogger } )
3644 . CallsBaseMethods ( ) ) ;
3745
3846 _httpContext = new DefaultHttpContext ( ) ;
@@ -255,6 +263,51 @@ private void AssertRequestLogged(Uri referrer, Uri urlNotFound)
255263 . MustHaveHappened ( ) ;
256264 }
257265
266+ [ Theory ]
267+ [ InlineData ( "https://example.com/api/something.json" ) ]
268+ [ InlineData ( "/episerverapi/content" ) ]
269+ [ InlineData ( "/globalassets/image.jpg" ) ]
270+ [ InlineData ( "/siteassets/style.css" ) ]
271+ [ InlineData ( "/api/resource" ) ]
272+ public void HandleRequest_ignore_suggestions_when_regex_matches ( string url )
273+ {
274+ WhenLoggingIsOn ( ) ;
275+
276+ _configuration . IgnoreSuggestionsUrlRegexPattern = IgnoreSuggestionsUrlRegexPattern ;
277+
278+ var result = _requestLogger . ShouldLogRequest ( url ) ;
279+
280+ Assert . False ( result ) ;
281+ }
282+
283+ [ Theory ]
284+ [ InlineData ( "https://example.com/home" ) ]
285+ [ InlineData ( "/" ) ]
286+ [ InlineData ( "/login" ) ]
287+ public void HandleRequest_do_not_ignore_suggestions_when_regex_do_not_matches ( string url )
288+ {
289+ WhenLoggingIsOn ( ) ;
290+
291+ _configuration . IgnoreSuggestionsUrlRegexPattern = IgnoreSuggestionsUrlRegexPattern ;
292+
293+ var result = _requestLogger . ShouldLogRequest ( url ) ;
294+
295+ Assert . True ( result ) ;
296+ }
297+
298+ [ Theory ]
299+ [ InlineData ( "/siteassets/private/file.json" ) ]
300+ public void HandleRequest_do_not_ignore_suggestions_when_regex_matches_using_lookahead ( string url )
301+ {
302+ WhenLoggingIsOn ( ) ;
303+
304+ _configuration . IgnoreSuggestionsUrlRegexPattern = IgnoreSuggestionsUrlRegexPattern ;
305+
306+ var result = _requestLogger . ShouldLogRequest ( url ) ;
307+
308+ Assert . True ( result ) ;
309+ }
310+
258311 private void WhenLoggingIsOn ( )
259312 {
260313 _configuration . Logging = LoggerMode . On ;
0 commit comments