WebServiceTest.php 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Web;
  3. use PhpOffice\PhpSpreadsheet\Calculation\Web;
  4. use PhpOffice\PhpSpreadsheet\Settings;
  5. use PHPUnit\Framework\TestCase;
  6. use Psr\Http\Client\ClientInterface;
  7. use Psr\Http\Message\RequestFactoryInterface;
  8. use Psr\Http\Message\RequestInterface;
  9. use Psr\Http\Message\ResponseInterface;
  10. use Psr\Http\Message\StreamInterface;
  11. class WebServiceTest extends TestCase
  12. {
  13. protected function tearDown(): void
  14. {
  15. Settings::unsetHttpClient();
  16. }
  17. /**
  18. * @dataProvider providerWEBSERVICE
  19. */
  20. public function testWEBSERVICE(string $expectedResult, string $url, ?array $responseData): void
  21. {
  22. if (!empty($responseData)) {
  23. $body = $this->createMock(StreamInterface::class);
  24. $body->expects(self::atMost(1))->method('getContents')->willReturn($responseData[1]);
  25. $response = $this->createMock(ResponseInterface::class);
  26. $response->expects(self::once())->method('getStatusCode')->willReturn($responseData[0]);
  27. $response->expects(self::atMost(1))->method('getBody')->willReturn($body);
  28. $client = $this->createMock(ClientInterface::class);
  29. $client->expects(self::once())->method('sendRequest')->willReturn($response);
  30. $request = $this->createMock(RequestInterface::class);
  31. $requestFactory = $this->createMock(RequestFactoryInterface::class);
  32. $requestFactory->expects(self::atMost(1))->method('createRequest')->willReturn($request);
  33. Settings::setHttpClient($client, $requestFactory);
  34. }
  35. $result = Web::WEBSERVICE($url);
  36. self::assertEquals($expectedResult, $result);
  37. }
  38. public function providerWEBSERVICE(): array
  39. {
  40. return require 'tests/data/Calculation/Web/WEBSERVICE.php';
  41. }
  42. public function testWEBSERVICEReturnErrorWhenClientThrows(): void
  43. {
  44. $exception = $this->createMock(\Psr\Http\Client\ClientExceptionInterface::class);
  45. $client = $this->createMock(ClientInterface::class);
  46. $client->expects(self::once())->method('sendRequest')->willThrowException($exception);
  47. $request = $this->createMock(RequestInterface::class);
  48. $requestFactory = $this->createMock(RequestFactoryInterface::class);
  49. $requestFactory->expects(self::atMost(1))->method('createRequest')->willReturn($request);
  50. Settings::setHttpClient($client, $requestFactory);
  51. $result = Web::WEBSERVICE('https://example.com');
  52. self::assertEquals('#VALUE!', $result);
  53. }
  54. public function testWEBSERVICEThrowsIfNotClientConfigured(): void
  55. {
  56. $this->expectExceptionMessage('HTTP client must be configured via Settings::setHttpClient() to be able to use WEBSERVICE function.');
  57. Web::WEBSERVICE('https://example.com');
  58. }
  59. }