FeaturePolicyMiddlewareTest.php 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <?php
  2. declare(strict_types=1);
  3. /**
  4. * @copyright Copyright (c) 2019, Roeland Jago Douma <roeland@famdouma.nl>
  5. *
  6. * @author Roeland Jago Douma <roeland@famdouma.nl>
  7. *
  8. * @license GNU AGPL version 3 or any later version
  9. *
  10. * This program is free software: you can redistribute it and/or modify
  11. * it under the terms of the GNU Affero General Public License as
  12. * published by the Free Software Foundation, either version 3 of the
  13. * License, or (at your option) any later version.
  14. *
  15. * This program is distributed in the hope that it will be useful,
  16. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  18. * GNU Affero General Public License for more details.
  19. *
  20. * You should have received a copy of the GNU Affero General Public License
  21. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  22. *
  23. */
  24. namespace Test\AppFramework\Middleware\Security;
  25. use OC\AppFramework\Middleware\Security\FeaturePolicyMiddleware;
  26. use OC\Security\FeaturePolicy\FeaturePolicy;
  27. use OC\Security\FeaturePolicy\FeaturePolicyManager;
  28. use OCP\AppFramework\Controller;
  29. use OCP\AppFramework\Http\EmptyFeaturePolicy;
  30. use OCP\AppFramework\Http\Response;
  31. use PHPUnit\Framework\MockObject\MockObject;
  32. class FeaturePolicyMiddlewareTest extends \Test\TestCase {
  33. /** @var FeaturePolicyMiddleware|MockObject */
  34. private $middleware;
  35. /** @var Controller|MockObject */
  36. private $controller;
  37. /** @var FeaturePolicyManager|MockObject */
  38. private $manager;
  39. protected function setUp(): void {
  40. parent::setUp();
  41. $this->controller = $this->createMock(Controller::class);
  42. $this->manager = $this->createMock(FeaturePolicyManager::class);
  43. $this->middleware = new FeaturePolicyMiddleware(
  44. $this->manager
  45. );
  46. }
  47. public function testAfterController() {
  48. $response = $this->createMock(Response::class);
  49. $defaultPolicy = new FeaturePolicy();
  50. $defaultPolicy->addAllowedCameraDomain('defaultpolicy');
  51. $currentPolicy = new FeaturePolicy();
  52. $currentPolicy->addAllowedAutoplayDomain('currentPolicy');
  53. $mergedPolicy = new FeaturePolicy();
  54. $mergedPolicy->addAllowedGeoLocationDomain('mergedPolicy');
  55. $response->method('getFeaturePolicy')
  56. ->willReturn($currentPolicy);
  57. $this->manager->method('getDefaultPolicy')
  58. ->willReturn($defaultPolicy);
  59. $this->manager->method('mergePolicies')
  60. ->with($defaultPolicy, $currentPolicy)
  61. ->willReturn($mergedPolicy);
  62. $response->expects($this->once())
  63. ->method('setFeaturePolicy')
  64. ->with($mergedPolicy);
  65. $this->middleware->afterController($this->controller, 'test', $response);
  66. }
  67. public function testAfterControllerEmptyCSP() {
  68. $response = $this->createMock(Response::class);
  69. $emptyPolicy = new EmptyFeaturePolicy();
  70. $response->method('getFeaturePolicy')
  71. ->willReturn($emptyPolicy);
  72. $response->expects($this->never())
  73. ->method('setFeaturePolicy');
  74. $this->middleware->afterController($this->controller, 'test', $response);
  75. }
  76. }