55 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace App\Tests\Service\Remote;
 | 
						|
 | 
						|
use App\Service\Remote\Exception\AuthorizeException;
 | 
						|
use App\Service\Remote\UsetrenoHttpClient;
 | 
						|
use App\Tests\Common\LoggerTrait;
 | 
						|
use PHPUnit\Framework\TestCase;
 | 
						|
use Symfony\Component\HttpClient\MockHttpClient;
 | 
						|
use Symfony\Component\HttpClient\Response\JsonMockResponse;
 | 
						|
 | 
						|
class UsetrenoHttpClientTest extends TestCase
 | 
						|
{
 | 
						|
    use LoggerTrait;
 | 
						|
 | 
						|
    public function testRequestWillDoAutomaticAuthorization() {
 | 
						|
        $authMockResponse = new JsonMockResponse([
 | 
						|
            "data" => [
 | 
						|
                "expires_in" => 1000,
 | 
						|
                "token" => "foobarfoobar"
 | 
						|
            ],
 | 
						|
            "timestamp" => "2024-01-17T22:47:59+01:00",
 | 
						|
            "uri" => "/api/v1/token"
 | 
						|
        ]);
 | 
						|
        $authorizedRequestResponse = clone $authMockResponse;
 | 
						|
        $mockedClient = new MockHttpClient([$authMockResponse, $authorizedRequestResponse]);
 | 
						|
        $client = new UsetrenoHttpClient($mockedClient, $this->getLogger(), "foo", "bar", 0, 0);
 | 
						|
        $client->request("POST", "https://www.root.cz/");
 | 
						|
        $this->assertEquals("https://topapi.top-test.cz/chameleon/api/v1/token", $authMockResponse->getRequestUrl());
 | 
						|
        $headers = $authorizedRequestResponse->getRequestOptions()['headers'];
 | 
						|
        $this->assertEquals("https://www.root.cz/", $authorizedRequestResponse->getRequestUrl());
 | 
						|
        $this->assertTrue(in_array("Authorization: Bearer foobarfoobar", $headers), "missing bearer authorization header");
 | 
						|
    }
 | 
						|
 | 
						|
    public function testRequestFailedAuthorization() {
 | 
						|
        $this->expectException(AuthorizeException::class);
 | 
						|
        $authMockResponse = new JsonMockResponse([
 | 
						|
            "errors" => [
 | 
						|
                [
 | 
						|
                    "message" => "Bad credentials, please verify that your username/password are correctly set.",
 | 
						|
                    "specificType" => "bad_credentials",
 | 
						|
                    "type" => "security_error"
 | 
						|
                ]
 | 
						|
            ],
 | 
						|
            "timestamp" => "2024-01-17T23:55:25+01:00",
 | 
						|
            "uri" => "/api/v1/token"
 | 
						|
        ]);
 | 
						|
 | 
						|
        $authorizedRequestResponse = clone $authMockResponse;
 | 
						|
        $mockedClient = new MockHttpClient([$authMockResponse, $authorizedRequestResponse]);
 | 
						|
        $client = new UsetrenoHttpClient($mockedClient, $this->getLogger(), "foo", "bar", 0, 0);
 | 
						|
        $client->request("POST", "https://www.root.cz/");
 | 
						|
    }
 | 
						|
}
 |