You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

115 lines
2.6 KiB

  1. <?php
  2. /**
  3. * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
  4. * SPDX-License-Identifier: AGPL-3.0-or-later
  5. */
  6. namespace OCA\Files_Sharing\Tests\Middleware;
  7. use OCA\Files_Sharing\Controller\ShareAPIController;
  8. use OCA\Files_Sharing\Middleware\OCSShareAPIMiddleware;
  9. use OCP\AppFramework\Controller;
  10. use OCP\AppFramework\OCS\OCSNotFoundException;
  11. use OCP\AppFramework\OCSController;
  12. use OCP\IL10N;
  13. use OCP\Share\IManager;
  14. use PHPUnit\Framework\Attributes\DataProvider;
  15. use PHPUnit\Framework\MockObject\MockObject;
  16. /**
  17. * @package OCA\Files_Sharing\Middleware\SharingCheckMiddleware
  18. */
  19. class OCSShareAPIMiddlewareTest extends \Test\TestCase {
  20. private IManager&MockObject $shareManager;
  21. private IL10N&MockObject $l;
  22. private OCSShareAPIMiddleware $middleware;
  23. protected function setUp(): void {
  24. parent::setUp();
  25. $this->shareManager = $this->createMock(IManager::class);
  26. $this->l = $this->createMock(IL10N::class);
  27. $this->l->method('t')->willReturnArgument(0);
  28. $this->middleware = new OCSShareAPIMiddleware($this->shareManager, $this->l);
  29. }
  30. public static function dataBeforeController() {
  31. return [
  32. [
  33. Controller::class,
  34. false,
  35. false
  36. ],
  37. [
  38. Controller::class,
  39. true,
  40. false
  41. ],
  42. [
  43. OCSController::class,
  44. false,
  45. false
  46. ],
  47. [
  48. OCSController::class,
  49. true,
  50. false
  51. ],
  52. [
  53. ShareAPIController::class,
  54. false,
  55. true
  56. ],
  57. [
  58. ShareAPIController::class,
  59. true,
  60. false
  61. ],
  62. ];
  63. }
  64. #[DataProvider('dataBeforeController')]
  65. public function testBeforeController(string $controllerClass, bool $enabled, bool $exception): void {
  66. $controller = $this->createMock($controllerClass);
  67. $this->shareManager->method('shareApiEnabled')->willReturn($enabled);
  68. try {
  69. $this->middleware->beforeController($controller, 'foo');
  70. $this->assertFalse($exception);
  71. } catch (OCSNotFoundException $e) {
  72. $this->assertTrue($exception);
  73. }
  74. }
  75. public static function dataAfterController(): array {
  76. return [
  77. [
  78. Controller::class,
  79. ],
  80. [
  81. OCSController::class,
  82. ],
  83. [
  84. ShareAPIController::class,
  85. ],
  86. ];
  87. }
  88. #[DataProvider('dataAfterController')]
  89. public function testAfterController(string $controllerClass): void {
  90. $controller = $this->createMock($controllerClass);
  91. if ($controller instanceof ShareAPIController) {
  92. $controller->expects($this->once())->method('cleanup');
  93. }
  94. $response = $this->getMockBuilder('OCP\AppFramework\Http\Response')
  95. ->disableOriginalConstructor()
  96. ->getMock();
  97. $this->middleware->afterController($controller, 'foo', $response);
  98. $this->addToAssertionCount(1);
  99. }
  100. }