engelsystem/tests/Unit/Http/RequestServiceProviderTest.php

70 lines
2.4 KiB
PHP

<?php
namespace Engelsystem\Test\Unit\Http;
use Engelsystem\Config\Config;
use Engelsystem\Container\ServiceProvider;
use Engelsystem\Http\Request;
use Engelsystem\Http\RequestServiceProvider;
use Engelsystem\Test\Unit\ServiceProviderTest;
use PHPUnit\Framework\MockObject\MockObject;
use Symfony\Component\HttpFoundation\Request as SymfonyRequest;
class RequestServiceProviderTest extends ServiceProviderTest
{
/**
* @return array
*/
public function provideRegister()
{
return [
['', []],
[[], []],
['192.168.10.99', ['192.168.10.99']],
[' 234.234.234.234 ', ['234.234.234.234']],
['123.234.123.234,10.0.0.0/8', ['123.234.123.234', '10.0.0.0/8']],
['123.123.234.234 , ' . PHP_EOL . ' 11.22.33.44/22 ', ['123.123.234.234', '11.22.33.44/22']],
[['10.100.20.0/24'], ['10.100.20.0/24']],
];
}
/**
* @dataProvider provideRegister
* @covers \Engelsystem\Http\RequestServiceProvider::register()
*
* @param string|array $configuredProxies
* @param array $trustedProxies
*/
public function testRegister($configuredProxies, $trustedProxies)
{
/** @var Config|MockObject $config */
$config = $this->getMockBuilder(Config::class)->getMock();
/** @var Request|MockObject $request */
$request = $this->getMockBuilder(Request::class)->getMock();
$app = $this->getApp(['call', 'get', 'instance']);
$this->setExpects($app, 'call', [[Request::class, 'createFromGlobals']], $request);
$this->setExpects($app, 'get', ['config'], $config);
$this->setExpects($config, 'get', ['trusted_proxies'], $configuredProxies);
$app->expects($this->exactly(3))
->method('instance')
->withConsecutive(
[Request::class, $request],
[SymfonyRequest::class, $request],
['request', $request]
);
/** @var ServiceProvider|MockObject $serviceProvider */
$serviceProvider = $this->getMockBuilder(RequestServiceProvider::class)
->setConstructorArgs([$app])
->setMethods(['setTrustedProxies'])
->getMock();
$serviceProvider->expects($this->once())
->method('setTrustedProxies')
->with($request, $trustedProxies);
$serviceProvider->register();
}
}