From 5b90e2fbb048b278d84fa07ec6bb14460e4f096a Mon Sep 17 00:00:00 2001 From: Pol Dellaiera Date: Wed, 20 Apr 2022 23:11:39 +0200 Subject: [PATCH] refactor: Add response factories. --- spec/EcPhp/CasLib/CasSpec.php | 128 +++++++++++++++--- spec/EcPhp/CasLib/Handler/ProxySpec.php | 11 +- .../CasLib/Handler/ServiceValidateSpec.php | 18 ++- .../Response/CasResponseBuilderSpec.php | 15 ++ spec/tests/EcPhp/CasLib/CasSpec.php | 18 ++- .../Response/CasResponseBuilderInterface.php | 12 -- .../Factory/CasResponseFactoryInterface.php | 20 +++ src/Response/CasResponseBuilder.php | 47 +++---- .../Factory/AuthenticationFailureFactory.php | 25 ++++ src/Response/Factory/ProxyFactory.php | 25 ++++ src/Response/Factory/ProxyFailureFactory.php | 25 ++++ .../Factory/ServiceValidateFactory.php | 25 ++++ 12 files changed, 308 insertions(+), 61 deletions(-) create mode 100644 src/Contract/Response/Factory/CasResponseFactoryInterface.php create mode 100644 src/Response/Factory/AuthenticationFailureFactory.php create mode 100644 src/Response/Factory/ProxyFactory.php create mode 100644 src/Response/Factory/ProxyFailureFactory.php create mode 100644 src/Response/Factory/ServiceValidateFactory.php diff --git a/spec/EcPhp/CasLib/CasSpec.php b/spec/EcPhp/CasLib/CasSpec.php index c1e8432..6129ba6 100644 --- a/spec/EcPhp/CasLib/CasSpec.php +++ b/spec/EcPhp/CasLib/CasSpec.php @@ -17,6 +17,10 @@ use EcPhp\CasLib\Exception\CasExceptionInterface; use EcPhp\CasLib\Exception\CasHandlerException; use EcPhp\CasLib\Response\CasResponseBuilder; +use EcPhp\CasLib\Response\Factory\AuthenticationFailureFactory; +use EcPhp\CasLib\Response\Factory\ProxyFactory; +use EcPhp\CasLib\Response\Factory\ProxyFailureFactory; +use EcPhp\CasLib\Response\Factory\ServiceValidateFactory; use EcPhp\CasLib\Utils\Uri as UtilsUri; use Ergebnis\Http\Method; use Exception; @@ -59,7 +63,12 @@ public function it_can_authenticate_a_request(CacheItemPoolInterface $cache) new Psr18Client(CasSpecUtils::getHttpClientMock()), $psr17, $cache, - new CasResponseBuilder() + new CasResponseBuilder( + new AuthenticationFailureFactory(), + new ProxyFactory(), + new ProxyFailureFactory(), + new ServiceValidateFactory() + ) ); $request = new ServerRequest( @@ -165,7 +174,12 @@ public function it_can_authenticate_a_request_in_proxy_mode(CacheItemPoolInterfa new Psr18Client(CasSpecUtils::getHttpClientMock()), $psr17, $cache, - new CasResponseBuilder() + new CasResponseBuilder( + new AuthenticationFailureFactory(), + new ProxyFactory(), + new ProxyFailureFactory(), + new ServiceValidateFactory() + ) ); $request = new ServerRequest( @@ -339,11 +353,21 @@ public function it_can_detect_wrong_url(CacheItemPoolInterface $cache) ], ]); - $client = new Psr18Client(CasSpecUtils::getHttpClientMock()); $psr17Factory = new Psr17Factory(); $psr17 = new Psr17($psr17Factory, $psr17Factory, $psr17Factory, $psr17Factory, $psr17Factory, $psr17Factory); - $this->beConstructedWith($properties, $client, $psr17, $cache, new CasResponseBuilder()); + $this->beConstructedWith( + $properties, + new Psr18Client(CasSpecUtils::getHttpClientMock()), + $psr17, + $cache, + new CasResponseBuilder( + new AuthenticationFailureFactory(), + new ProxyFactory(), + new ProxyFailureFactory(), + new ServiceValidateFactory() + ) + ); $parameters = [ 'service' => 'service', @@ -593,10 +617,21 @@ public function it_can_logout() public function it_can_parse_a_bad_proxy_request_response(CacheItemPoolInterface $cache) { - $client = new Psr18Client(CasSpecUtils::getHttpClientMock()); $psr17Factory = new Psr17Factory(); $psr17 = new Psr17($psr17Factory, $psr17Factory, $psr17Factory, $psr17Factory, $psr17Factory, $psr17Factory); - $this->beConstructedWith(CasSpecUtils::getTestProperties(), $client, $psr17, $cache, new CasResponseBuilder()); + + $this->beConstructedWith( + CasSpecUtils::getTestProperties(), + new Psr18Client(CasSpecUtils::getHttpClientMock()), + $psr17, + $cache, + new CasResponseBuilder( + new AuthenticationFailureFactory(), + new ProxyFactory(), + new ProxyFailureFactory(), + new ServiceValidateFactory() + ) + ); $request = new ServerRequest( Method::GET, @@ -610,10 +645,21 @@ public function it_can_parse_a_bad_proxy_request_response(CacheItemPoolInterface public function it_can_parse_a_good_proxy_request_response(CacheItemPoolInterface $cache) { - $client = new Psr18Client(CasSpecUtils::getHttpClientMock()); $psr17Factory = new Psr17Factory(); $psr17 = new Psr17($psr17Factory, $psr17Factory, $psr17Factory, $psr17Factory, $psr17Factory, $psr17Factory); - $this->beConstructedWith(CasSpecUtils::getTestProperties(), $client, $psr17, $cache, new CasResponseBuilder()); + + $this->beConstructedWith( + CasSpecUtils::getTestProperties(), + new Psr18Client(CasSpecUtils::getHttpClientMock()), + $psr17, + $cache, + new CasResponseBuilder( + new AuthenticationFailureFactory(), + new ProxyFactory(), + new ProxyFailureFactory(), + new ServiceValidateFactory() + ) + ); $request = new ServerRequest( Method::GET, @@ -639,10 +685,21 @@ public function it_can_parse_json_in_a_response(CacheItemPoolInterface $cache) ], ]); - $client = new Psr18Client(CasSpecUtils::getHttpClientMock()); $psr17Factory = new Psr17Factory(); $psr17 = new Psr17($psr17Factory, $psr17Factory, $psr17Factory, $psr17Factory, $psr17Factory, $psr17Factory); - $this->beConstructedWith($properties, $client, $psr17, $cache, new CasResponseBuilder()); + + $this->beConstructedWith( + $properties, + new Psr18Client(CasSpecUtils::getHttpClientMock()), + $psr17, + $cache, + new CasResponseBuilder( + new AuthenticationFailureFactory(), + new ProxyFactory(), + new ProxyFailureFactory(), + new ServiceValidateFactory() + ) + ); $request = new ServerRequest( Method::GET, @@ -676,10 +733,21 @@ public function it_can_renew_login() public function it_can_request_a_proxy_ticket(CacheItemPoolInterface $cache) { - $client = new Psr18Client(CasSpecUtils::getHttpClientMock()); $psr17Factory = new Psr17Factory(); $psr17 = new Psr17($psr17Factory, $psr17Factory, $psr17Factory, $psr17Factory, $psr17Factory, $psr17Factory); - $this->beConstructedWith(CasSpecUtils::getTestProperties(), $client, $psr17, $cache, new CasResponseBuilder()); + + $this->beConstructedWith( + CasSpecUtils::getTestProperties(), + new Psr18Client(CasSpecUtils::getHttpClientMock()), + $psr17, + $cache, + new CasResponseBuilder( + new AuthenticationFailureFactory(), + new ProxyFactory(), + new ProxyFailureFactory(), + new ServiceValidateFactory() + ) + ); $request = new ServerRequest( Method::GET, @@ -714,10 +782,21 @@ public function it_can_validate_a_bad_proxy_ticket(CacheItemPoolInterface $cache ], ]); - $client = new Psr18Client(CasSpecUtils::getHttpClientMock()); $psr17Factory = new Psr17Factory(); $psr17 = new Psr17($psr17Factory, $psr17Factory, $psr17Factory, $psr17Factory, $psr17Factory, $psr17Factory); - $this->beConstructedWith($properties, $client, $psr17, $cache, new CasResponseBuilder()); + + $this->beConstructedWith( + $properties, + new Psr18Client(CasSpecUtils::getHttpClientMock()), + $psr17, + $cache, + new CasResponseBuilder( + new AuthenticationFailureFactory(), + new ProxyFactory(), + new ProxyFailureFactory(), + new ServiceValidateFactory() + ) + ); $request = new ServerRequest( Method::POST, @@ -739,7 +818,12 @@ public function it_can_validate_a_bad_service_validate_request(CacheItemPoolInte new Psr18Client(CasSpecUtils::getHttpClientMock()), $psr17, $cache, - new CasResponseBuilder() + new CasResponseBuilder( + new AuthenticationFailureFactory(), + new ProxyFactory(), + new ProxyFailureFactory(), + new ServiceValidateFactory() + ) ); $request = new ServerRequest( @@ -834,7 +918,12 @@ public function it_cannot_be_constructed_without_base_url(CacheItemPoolInterface new Psr18Client(CasSpecUtils::getHttpClientMock()), $psr17, $cache, - new CasResponseBuilder() + new CasResponseBuilder( + new AuthenticationFailureFactory(), + new ProxyFactory(), + new ProxyFailureFactory(), + new ServiceValidateFactory() + ) ); $request = new ServerRequest( @@ -917,7 +1006,12 @@ public function let(CacheItemPoolInterface $cache, CacheItemInterface $cacheItem new Psr18Client(CasSpecUtils::getHttpClientMock()), $psr17, $cache, - new CasResponseBuilder() + new CasResponseBuilder( + new AuthenticationFailureFactory(), + new ProxyFactory(), + new ProxyFailureFactory(), + new ServiceValidateFactory() + ) ); } } diff --git a/spec/EcPhp/CasLib/Handler/ProxySpec.php b/spec/EcPhp/CasLib/Handler/ProxySpec.php index ddcda5d..3e2f4f9 100644 --- a/spec/EcPhp/CasLib/Handler/ProxySpec.php +++ b/spec/EcPhp/CasLib/Handler/ProxySpec.php @@ -13,6 +13,10 @@ use EcPhp\CasLib\Handler\Proxy; use EcPhp\CasLib\Response\CasResponseBuilder; +use EcPhp\CasLib\Response\Factory\AuthenticationFailureFactory; +use EcPhp\CasLib\Response\Factory\ProxyFactory; +use EcPhp\CasLib\Response\Factory\ProxyFailureFactory; +use EcPhp\CasLib\Response\Factory\ServiceValidateFactory; use Ergebnis\Http\Method; use Exception; use loophp\psr17\Psr17Interface; @@ -56,7 +60,12 @@ public function let(CacheItemPoolInterface $cache, Psr17Interface $psr17) $this->beConstructedWith( [], $cache, - new CasResponseBuilder(), + new CasResponseBuilder( + new AuthenticationFailureFactory(), + new ProxyFactory(), + new ProxyFailureFactory(), + new ServiceValidateFactory() + ), new Psr18Client(CasSpecUtils::getHttpClientMock()), Cas::getTestProperties(), $psr17 diff --git a/spec/EcPhp/CasLib/Handler/ServiceValidateSpec.php b/spec/EcPhp/CasLib/Handler/ServiceValidateSpec.php index ea974ae..88b0e8e 100644 --- a/spec/EcPhp/CasLib/Handler/ServiceValidateSpec.php +++ b/spec/EcPhp/CasLib/Handler/ServiceValidateSpec.php @@ -13,6 +13,10 @@ use EcPhp\CasLib\Handler\ServiceValidate; use EcPhp\CasLib\Response\CasResponseBuilder; +use EcPhp\CasLib\Response\Factory\AuthenticationFailureFactory; +use EcPhp\CasLib\Response\Factory\ProxyFactory; +use EcPhp\CasLib\Response\Factory\ProxyFailureFactory; +use EcPhp\CasLib\Response\Factory\ServiceValidateFactory; use Ergebnis\Http\Method; use Exception; use loophp\psr17\Psr17; @@ -82,7 +86,12 @@ public function it_can_get_credentials_with_pgtUrl(CacheItemPoolInterface $cache $this->beConstructedWith( [], $cache, - new CasResponseBuilder(), + new CasResponseBuilder( + new AuthenticationFailureFactory(), + new ProxyFactory(), + new ProxyFailureFactory(), + new ServiceValidateFactory() + ), new Psr18Client(CasSpecUtils::getHttpClientMock()), Cas::getTestPropertiesWithPgtUrl(), $psr17 @@ -132,7 +141,12 @@ public function let(CacheItemPoolInterface $cache) $this->beConstructedWith( [], $cache, - new CasResponseBuilder(), + new CasResponseBuilder( + new AuthenticationFailureFactory(), + new ProxyFactory(), + new ProxyFailureFactory(), + new ServiceValidateFactory() + ), new Psr18Client(CasSpecUtils::getHttpClientMock()), Cas::getTestProperties(), $psr17 diff --git a/spec/EcPhp/CasLib/Response/CasResponseBuilderSpec.php b/spec/EcPhp/CasLib/Response/CasResponseBuilderSpec.php index 0e05be2..f6a1ef9 100644 --- a/spec/EcPhp/CasLib/Response/CasResponseBuilderSpec.php +++ b/spec/EcPhp/CasLib/Response/CasResponseBuilderSpec.php @@ -16,6 +16,10 @@ use EcPhp\CasLib\Contract\Response\Type\Proxy; use EcPhp\CasLib\Contract\Response\Type\ProxyFailure; use EcPhp\CasLib\Contract\Response\Type\ServiceValidate; +use EcPhp\CasLib\Response\Factory\AuthenticationFailureFactory; +use EcPhp\CasLib\Response\Factory\ProxyFactory; +use EcPhp\CasLib\Response\Factory\ProxyFailureFactory; +use EcPhp\CasLib\Response\Factory\ServiceValidateFactory; use Exception; use Nyholm\Psr7\Factory\Psr17Factory; use Nyholm\Psr7\Response; @@ -298,4 +302,15 @@ public function it_is_initializable() { $this->shouldHaveType(CasResponseBuilderInterface::class); } + + public function let() + { + $this + ->beConstructedWith( + new AuthenticationFailureFactory(), + new ProxyFactory(), + new ProxyFailureFactory(), + new ServiceValidateFactory() + ); + } } diff --git a/spec/tests/EcPhp/CasLib/CasSpec.php b/spec/tests/EcPhp/CasLib/CasSpec.php index c02d27c..313b41d 100644 --- a/spec/tests/EcPhp/CasLib/CasSpec.php +++ b/spec/tests/EcPhp/CasLib/CasSpec.php @@ -14,6 +14,10 @@ use EcPhp\CasLib\Cas; use EcPhp\CasLib\Contract\Response\Type\ServiceValidate; use EcPhp\CasLib\Response\CasResponseBuilder; +use EcPhp\CasLib\Response\Factory\AuthenticationFailureFactory; +use EcPhp\CasLib\Response\Factory\ProxyFactory; +use EcPhp\CasLib\Response\Factory\ProxyFailureFactory; +use EcPhp\CasLib\Response\Factory\ServiceValidateFactory; use Ergebnis\Http\Method; use loophp\psr17\Psr17; use Nyholm\Psr7\Factory\Psr17Factory; @@ -43,7 +47,12 @@ public function it_can_test_the_proxy_mode_with_pgtUrl() new Psr18Client(CasSpecUtils::getHttpClientMock()), $psr17, $cache, - new CasResponseBuilder() + new CasResponseBuilder( + new AuthenticationFailureFactory(), + new ProxyFactory(), + new ProxyFailureFactory(), + new ServiceValidateFactory() + ) )); $request = new ServerRequest( @@ -66,7 +75,12 @@ public function it_can_test_the_proxy_mode_without_pgtUrl() new Psr18Client(CasSpecUtils::getHttpClientMock()), $psr17, new ArrayAdapter(), - new CasResponseBuilder() + new CasResponseBuilder( + new AuthenticationFailureFactory(), + new ProxyFactory(), + new ProxyFailureFactory(), + new ServiceValidateFactory() + ) )); $request = new ServerRequest( diff --git a/src/Contract/Response/CasResponseBuilderInterface.php b/src/Contract/Response/CasResponseBuilderInterface.php index 6e0c3a8..fafd48e 100644 --- a/src/Contract/Response/CasResponseBuilderInterface.php +++ b/src/Contract/Response/CasResponseBuilderInterface.php @@ -11,23 +11,11 @@ namespace EcPhp\CasLib\Contract\Response; -use EcPhp\CasLib\Contract\Response\Type\AuthenticationFailure; -use EcPhp\CasLib\Contract\Response\Type\Proxy; -use EcPhp\CasLib\Contract\Response\Type\ProxyFailure; -use EcPhp\CasLib\Contract\Response\Type\ServiceValidate; use EcPhp\CasLib\Exception\CasResponseBuilderException; use Psr\Http\Message\ResponseInterface; interface CasResponseBuilderInterface { - public function createAuthenticationFailure(ResponseInterface $response): AuthenticationFailure; - - public function createProxyFailure(ResponseInterface $response): ProxyFailure; - - public function createProxySuccess(ResponseInterface $response): Proxy; - - public function createServiceValidate(ResponseInterface $response): ServiceValidate; - /** * @throws CasResponseBuilderException */ diff --git a/src/Contract/Response/Factory/CasResponseFactoryInterface.php b/src/Contract/Response/Factory/CasResponseFactoryInterface.php new file mode 100644 index 0000000..a4e22a9 --- /dev/null +++ b/src/Contract/Response/Factory/CasResponseFactoryInterface.php @@ -0,0 +1,20 @@ +authenticationFailureFactory = $authenticationFailureFactory; + $this->proxyFactory = $proxyFactory; + $this->proxyFailureFactory = $proxyFailureFactory; + $this->serviceValidateFactory = $serviceValidateFactory; } public function fromResponse(ResponseInterface $response): CasResponseInterface @@ -64,19 +57,19 @@ public function fromResponse(ResponseInterface $response): CasResponseInterface } if (array_key_exists('authenticationFailure', $data['serviceResponse'])) { - return $this->createAuthenticationFailure($response); + return $this->authenticationFailureFactory->decorate($response); } if (array_key_exists('proxyFailure', $data['serviceResponse'])) { - return $this->createProxyFailure($response); + return $this->proxyFailureFactory->decorate($response); } if (array_key_exists('authenticationSuccess', $data['serviceResponse'])) { - return $this->createServiceValidate($response); + return $this->serviceValidateFactory->decorate($response); } if (array_key_exists('proxySuccess', $data['serviceResponse'])) { - return $this->createProxySuccess($response); + return $this->proxyFactory->decorate($response); } throw CasResponseBuilderException::unknownResponseType(); diff --git a/src/Response/Factory/AuthenticationFailureFactory.php b/src/Response/Factory/AuthenticationFailureFactory.php new file mode 100644 index 0000000..8d1a9ef --- /dev/null +++ b/src/Response/Factory/AuthenticationFailureFactory.php @@ -0,0 +1,25 @@ +