diff --git a/src/DI.php b/src/DI.php index 5c56b45e13..7f6f28f33c 100644 --- a/src/DI.php +++ b/src/DI.php @@ -39,6 +39,17 @@ abstract class DI self::$dice = $dice; } + /** + * Returns a clone of the current dice instance + * This usefull for overloading the current instance with mocked methods during tests + * + * @return Dice + */ + public static function getDice() + { + return clone self::$dice; + } + // // common instances // diff --git a/src/Network/HTTPClient.php b/src/Network/HTTPClient.php index d83b805df0..c90dbc8964 100644 --- a/src/Network/HTTPClient.php +++ b/src/Network/HTTPClient.php @@ -92,11 +92,6 @@ class HTTPClient implements IHTTPClient return CurlResult::createErrorCurl($url); } - if (Network::isRedirectBlocked($url)) { - $this->logger->info('Domain should not be redirected.', ['url' => $url]); - return CurlResult::createErrorCurl($url); - } - $conf = []; if (!empty($opts['cookiejar'])) { diff --git a/src/Network/IHTTPClient.php b/src/Network/IHTTPClient.php index 180908eede..c8611e8f5b 100644 --- a/src/Network/IHTTPClient.php +++ b/src/Network/IHTTPClient.php @@ -107,7 +107,6 @@ interface IHTTPClient * * @return string A canonical URL * @throws \Friendica\Network\HTTPException\InternalServerErrorException - * @see ParseUrl::getSiteinfo */ public function finalUrl(string $url); } diff --git a/tests/datasets/curl/image.content b/tests/datasets/curl/image.content index eea1b7e463..98285c3e11 100644 Binary files a/tests/datasets/curl/image.content and b/tests/datasets/curl/image.content differ diff --git a/tests/src/Core/InstallerTest.php b/tests/src/Core/InstallerTest.php index 8c72b7b2b9..1263fe7e67 100644 --- a/tests/src/Core/InstallerTest.php +++ b/tests/src/Core/InstallerTest.php @@ -26,7 +26,7 @@ use Dice\Dice; use Friendica\Core\Config\Cache; use Friendica\DI; use Friendica\Network\IHTTPResult; -use Friendica\Network\IHTTPRequest; +use Friendica\Network\IHTTPClient; use Friendica\Test\MockedTest; use Friendica\Test\Util\VFSTrait; use Mockery; @@ -331,7 +331,7 @@ class InstallerTest extends MockedTest ->andReturn('test Error'); // Mocking the CURL Request - $networkMock = Mockery::mock(IHTTPRequest::class); + $networkMock = Mockery::mock(IHTTPClient::class); $networkMock ->shouldReceive('fetchFull') ->with('https://test/install/testrewrite') @@ -342,7 +342,7 @@ class InstallerTest extends MockedTest ->andReturn($IHTTPResult); $this->dice->shouldReceive('create') - ->with(IHTTPRequest::class) + ->with(IHTTPClient::class) ->andReturn($networkMock); DI::init($this->dice); @@ -378,7 +378,7 @@ class InstallerTest extends MockedTest ->andReturn('204'); // Mocking the CURL Request - $networkMock = Mockery::mock(IHTTPRequest::class); + $networkMock = Mockery::mock(IHTTPClient::class); $networkMock ->shouldReceive('fetchFull') ->with('https://test/install/testrewrite') @@ -389,7 +389,7 @@ class InstallerTest extends MockedTest ->andReturn($IHTTPResultW); $this->dice->shouldReceive('create') - ->with(IHTTPRequest::class) + ->with(IHTTPClient::class) ->andReturn($networkMock); DI::init($this->dice); diff --git a/tests/src/Core/StorageManagerTest.php b/tests/src/Core/StorageManagerTest.php index 9e8e3aa2c2..93fc0b6648 100644 --- a/tests/src/Core/StorageManagerTest.php +++ b/tests/src/Core/StorageManagerTest.php @@ -34,7 +34,7 @@ use Friendica\Factory\ConfigFactory; use Friendica\Model\Config\Config; use Friendica\Model\Storage; use Friendica\Core\Session; -use Friendica\Network\HTTPRequest; +use Friendica\Network\HTTPClient; use Friendica\Test\DatabaseTest; use Friendica\Test\Util\Database\StaticDatabase; use Friendica\Test\Util\VFSTrait; @@ -55,7 +55,7 @@ class StorageManagerTest extends DatabaseTest private $logger; /** @var L10n */ private $l10n; - /** @var HTTPRequest */ + /** @var HTTPClient */ private $httpRequest; protected function setUp(): void @@ -84,7 +84,7 @@ class StorageManagerTest extends DatabaseTest $this->l10n = \Mockery::mock(L10n::class); - $this->httpRequest = \Mockery::mock(HTTPRequest::class); + $this->httpRequest = \Mockery::mock(HTTPClient::class); } /** diff --git a/tests/src/Network/HTTPRequestTest.php b/tests/src/Network/HTTPRequestTest.php index 4fd0ab1794..230dc3eec3 100644 --- a/tests/src/Network/HTTPRequestTest.php +++ b/tests/src/Network/HTTPRequestTest.php @@ -3,58 +3,87 @@ namespace Friendica\Test\src\Network; use Dice\Dice; -use Friendica\App\BaseURL; -use Friendica\Core\Config\IConfig; use Friendica\DI; -use Friendica\Network\HTTPRequest; -use Friendica\Network\IHTTPRequest; +use Friendica\Network\HTTPClient; +use Friendica\Network\IHTTPClient; use Friendica\Test\MockedTest; use Friendica\Util\Images; use Friendica\Util\Profiler; +use GuzzleHttp\Client; use GuzzleHttp\Handler\MockHandler; +use GuzzleHttp\HandlerStack; use GuzzleHttp\Psr7\Response; +use mattwright\URLResolver; use Psr\Log\NullLogger; require_once __DIR__ . '/../../../static/dbstructure.config.php'; class HTTPRequestTest extends MockedTest { - public function testImageFetch() + /** @var HandlerStack */ + protected $handler; + + protected function setUp(): void { - $mock = new MockHandler([ - new Response(200, [ - 'Server' => 'tsa_b', - 'Content-Type' => 'image/png', - 'Cache-Control' => 'max-age=604800, must-revalidate', - 'Content-Length' => 24875, - ], file_get_contents(__DIR__ . '/../../datasets/curl/image.content')) - ]); + parent::setUp(); - $config = \Mockery::mock(IConfig::class); - $config->shouldReceive('get')->with('system', 'curl_range_bytes', 0)->once()->andReturn(null); - $config->shouldReceive('get')->with('system', 'verifyssl')->once(); - $config->shouldReceive('get')->with('system', 'proxy')->once(); - $config->shouldReceive('get')->with('system', 'ipv4_resolve', false)->once()->andReturnFalse(); - $config->shouldReceive('get')->with('system', 'blocklist', [])->once()->andReturn([]); + $this->handler = HandlerStack::create(); - $baseUrl = \Mockery::mock(BaseURL::class); - $baseUrl->shouldReceive('get')->andReturn('http://friendica.local'); + $client = new Client(['handler' => $this->handler]); + + $resolver = \Mockery::mock(URLResolver::class); $profiler = \Mockery::mock(Profiler::class); $profiler->shouldReceive('startRecording')->andReturnTrue(); $profiler->shouldReceive('stopRecording')->andReturnTrue(); - $httpRequest = new HTTPRequest(new NullLogger(), $profiler, $config, $baseUrl); + $httpClient = new HTTPClient(new NullLogger(), $profiler, $client, $resolver); - self::assertInstanceOf(IHTTPRequest::class, $httpRequest); + $dice = DI::getDice(); + $newDice = \Mockery::mock($dice)->makePartial(); + $newDice->shouldReceive('create')->with(IHTTPClient::class)->andReturn($httpClient); + DI::init($newDice); + } - $dice = \Mockery::mock(Dice::class); - $dice->shouldReceive('create')->with(IHTTPRequest::class)->andReturn($httpRequest)->once(); - $dice->shouldReceive('create')->with(BaseURL::class)->andReturn($baseUrl); - $dice->shouldReceive('create')->with(IConfig::class)->andReturn($config)->once(); + public function dataImages() + { + return [ + 'image1' => [ + 'url' => 'https://pbs.twimg.com/profile_images/2365515285/9re7kx4xmc0eu9ppmado.png', + 'headers' => [ + 'Server' => 'tsa_b', + 'Content-Type' => 'image/png', + 'Cache-Control' => 'max-age=604800,must-revalidate', + 'Last-Modified' => 'Thu,04Nov201001:42:54GMT', + 'Content-Length' => '24875', + 'Access-Control-Allow-Origin' => '*', + 'Access-Control-Expose-Headers' => 'Content-Length', + 'Date' => 'Mon,23Aug202112:39:00GMT', + 'Connection' => 'keep-alive', + ], + 'data' => file_get_contents(__DIR__ . '/../../datasets/curl/image.content'), + 'assertion' => [ + '0' => '400', + '1' => '400', + '2' => '3', + '3' => 'width="400" height="400"', + 'bits' => '8', + 'mime' => 'image/png', + 'size' => '24875', + ] + ] + ]; + } - DI::init($dice); + /** + * @dataProvider dataImages + */ + public function testGetInfoFromURL(string $url, array $headers, string $data, array $assertion) + { + $this->handler->setHandler(new MockHandler([ + new Response(200, $headers, $data), + ])); - print_r(Images::getInfoFromURL('https://pbs.twimg.com/profile_images/2365515285/9re7kx4xmc0eu9ppmado.png')); + self::assertArraySubset($assertion, Images::getInfoFromURL($url)); } } diff --git a/tests/src/Util/ImagesTest.php b/tests/src/Util/ImagesTest.php new file mode 100644 index 0000000000..d35f9c4eca --- /dev/null +++ b/tests/src/Util/ImagesTest.php @@ -0,0 +1,13 @@ +