diff --git a/.phpunit.result.cache b/.phpunit.result.cache new file mode 100644 index 0000000000..aac751d9fb --- /dev/null +++ b/.phpunit.result.cache @@ -0,0 +1 @@ +{"version":1,"defects":[],"times":{"phpbb\\feed\\event\\http_auth_subscriber_test::test_subscriber_events":0.006,"phpbb\\feed\\event\\http_auth_subscriber_test::test_non_feed_route_skipped":0.005,"phpbb\\feed\\event\\http_auth_subscriber_test::test_http_auth_disabled":0.001,"phpbb\\feed\\event\\http_auth_subscriber_test::test_user_already_logged_in":0.001}} \ No newline at end of file diff --git a/tests/feed/http_auth_subscriber_test.php b/tests/feed/http_auth_subscriber_test.php new file mode 100644 index 0000000000..d3f00aef68 --- /dev/null +++ b/tests/feed/http_auth_subscriber_test.php @@ -0,0 +1,159 @@ + +* @license GNU General Public License, version 2 (GPL-2.0) +* +* For full copyright and license information, please see +* the docs/CREDITS.txt file. +* +*/ + +namespace phpbb\feed\event; + +class http_auth_subscriber_test extends \phpbb_test_case +{ + /** @var \PHPUnit\Framework\MockObject\MockObject|\phpbb\auth\auth */ + protected $auth; + + /** @var \PHPUnit\Framework\MockObject\MockObject|\phpbb\config\config */ + protected $config; + + /** @var \PHPUnit\Framework\MockObject\MockObject|\phpbb\request\request_interface */ + protected $request; + + /** @var \PHPUnit\Framework\MockObject\MockObject|\phpbb\user */ + protected $user; + + /** @var http_auth_subscriber */ + protected $subscriber; + + protected function setUp(): void + { + parent::setUp(); + + $this->auth = $this->getMockBuilder('\phpbb\auth\auth') + ->disableOriginalConstructor() + ->getMock(); + + $this->config = new \phpbb\config\config(array( + 'feed_http_auth' => 1, + 'sitename' => 'Test Site', + )); + + $this->request = $this->getMockBuilder('\phpbb\request\request_interface') + ->getMock(); + + $this->user = $this->getMockBuilder('\phpbb\user') + ->disableOriginalConstructor() + ->getMock(); + + $this->user->data = array('is_registered' => false); + + $this->subscriber = new http_auth_subscriber( + $this->auth, + $this->config, + $this->request, + $this->user + ); + } + + public function test_subscriber_events() + { + $events = http_auth_subscriber::getSubscribedEvents(); + $this->assertArrayHasKey(\Symfony\Component\HttpKernel\KernelEvents::REQUEST, $events); + } + + public function test_non_feed_route_skipped() + { + $request = $this->getMockBuilder('\Symfony\Component\HttpFoundation\Request') + ->disableOriginalConstructor() + ->getMock(); + + $request->attributes = $this->getMockBuilder('\Symfony\Component\HttpFoundation\ParameterBag') + ->disableOriginalConstructor() + ->getMock(); + + $request->attributes->expects($this->once()) + ->method('get') + ->with('_route') + ->willReturn('not_a_feed_route'); + + $event = $this->getMockBuilder('\Symfony\Component\HttpKernel\Event\GetResponseEvent') + ->disableOriginalConstructor() + ->getMock(); + + $event->expects($this->once()) + ->method('getRequest') + ->willReturn($request); + + $event->expects($this->never()) + ->method('setResponse'); + + $this->subscriber->on_kernel_request($event); + } + + public function test_http_auth_disabled() + { + $this->config['feed_http_auth'] = 0; + + $request = $this->getMockBuilder('\Symfony\Component\HttpFoundation\Request') + ->disableOriginalConstructor() + ->getMock(); + + $request->attributes = $this->getMockBuilder('\Symfony\Component\HttpFoundation\ParameterBag') + ->disableOriginalConstructor() + ->getMock(); + + $request->attributes->expects($this->once()) + ->method('get') + ->with('_route') + ->willReturn('phpbb_feed_overall'); + + $event = $this->getMockBuilder('\Symfony\Component\HttpKernel\Event\GetResponseEvent') + ->disableOriginalConstructor() + ->getMock(); + + $event->expects($this->once()) + ->method('getRequest') + ->willReturn($request); + + $event->expects($this->never()) + ->method('setResponse'); + + $this->subscriber->on_kernel_request($event); + } + + public function test_user_already_logged_in() + { + $this->user->data = array('is_registered' => true); + + $request = $this->getMockBuilder('\Symfony\Component\HttpFoundation\Request') + ->disableOriginalConstructor() + ->getMock(); + + $request->attributes = $this->getMockBuilder('\Symfony\Component\HttpFoundation\ParameterBag') + ->disableOriginalConstructor() + ->getMock(); + + $request->attributes->expects($this->once()) + ->method('get') + ->with('_route') + ->willReturn('phpbb_feed_overall'); + + $event = $this->getMockBuilder('\Symfony\Component\HttpKernel\Event\GetResponseEvent') + ->disableOriginalConstructor() + ->getMock(); + + $event->expects($this->once()) + ->method('getRequest') + ->willReturn($request); + + $event->expects($this->never()) + ->method('setResponse'); + + $this->subscriber->on_kernel_request($event); + } +}