1515use PHPUnit \Framework \TestCase ;
1616use Psr \Http \Message \ServerRequestInterface ;
1717use Psr \Http \Message \UriInterface ;
18- use Psr \Log \NullLogger ;
18+ use Psr \Log \LoggerInterface ;
1919use Shlinkio \Shlink \Core \Action \RedirectAction ;
2020use Shlinkio \Shlink \Core \Config \NotFoundRedirectResolver ;
2121use Shlinkio \Shlink \Core \Config \Options \NotFoundRedirectOptions ;
@@ -28,11 +28,14 @@ class NotFoundRedirectResolverTest extends TestCase
2828{
2929 private NotFoundRedirectResolver $ resolver ;
3030 private MockObject & RedirectResponseHelperInterface $ helper ;
31+ private MockObject & LoggerInterface $ logger ;
3132
3233 protected function setUp (): void
3334 {
3435 $ this ->helper = $ this ->createMock (RedirectResponseHelperInterface::class);
35- $ this ->resolver = new NotFoundRedirectResolver ($ this ->helper , new NullLogger ());
36+ $ this ->logger = $ this ->createMock (LoggerInterface::class);
37+
38+ $ this ->resolver = new NotFoundRedirectResolver ($ this ->helper , $ this ->logger );
3639 }
3740
3841 #[Test, DataProvider('provideRedirects ' )]
@@ -123,6 +126,22 @@ public function noResponseIsReturnedIfNoConditionsMatch(): void
123126 self ::assertNull ($ result );
124127 }
125128
129+ #[Test]
130+ public function warningMessageIsLoggedIfRedirectUrlIsMalformed (): void
131+ {
132+ $ this ->logger ->expects ($ this ->once ())->method ('warning ' )->with (
133+ 'It was not possible to parse "{url}" as a valid URL: {e} ' ,
134+ $ this ->isArray (),
135+ );
136+
137+ $ uri = new Uri ('/ ' );
138+ $ this ->resolver ->resolveRedirectResponse (
139+ self ::notFoundType (ServerRequestFactory::fromGlobals ()->withUri ($ uri )),
140+ new NotFoundRedirectOptions (baseUrlRedirect: 'http:///example.com ' ),
141+ $ uri ,
142+ );
143+ }
144+
126145 private static function notFoundType (ServerRequestInterface $ req ): NotFoundType
127146 {
128147 return NotFoundType::fromRequest ($ req , '' );
0 commit comments