Вход Регистрация
Файл: gapps/vendor/fabpot/goutte/Goutte/Tests/ClientTest.php
Строк: 530
<?php

/*
 * This file is part of the Goutte package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace GoutteTests;

use 
GoutteClient;
use 
GuzzleHttpClient as GuzzleClient;
use 
GuzzleHttpExceptionRequestException;
use 
GuzzleHttpHandlerMockHandler;
use 
GuzzleHttpHandlerStack;
use 
GuzzleHttpPsr7Response as GuzzleResponse;
use 
GuzzleHttpMiddleware;
use 
SymfonyComponentBrowserKitCookie;

/**
 * Goutte Client Test.
 *
 * @author Michael Dowling <michael@guzzlephp.org>
 * @author Charles Sarrazin <charles@sarraz.in>
 */
class ClientTest extends PHPUnit_Framework_TestCase
{
    protected 
$history;
    
/** @var MockHandler */
    
protected $mock;

    protected function 
getGuzzle(array $responses = [])
    {
        if (empty(
$responses)) {
            
$responses = [new GuzzleResponse(200, [], '<html><body><p>Hi</p></body></html>')];
        }
        
$this->mock = new MockHandler($responses);
        
$handlerStack HandlerStack::create($this->mock);
        
$this->history = [];
        
$handlerStack->push(Middleware::history($this->history));
        
$guzzle = new GuzzleClient(array('redirect.disable' => true'base_uri' => '''handler' => $handlerStack));

        return 
$guzzle;
    }

    public function 
testCreatesDefaultClient()
    {
        
$client = new Client();
        
$this->assertInstanceOf('GuzzleHttp\ClientInterface'$client->getClient());
    }

    public function 
testUsesCustomClient()
    {
        
$guzzle = new GuzzleClient();
        
$client = new Client();
        
$this->assertSame($client$client->setClient($guzzle));
        
$this->assertSame($guzzle$client->getClient());
    }

    public function 
testUsesCustomHeaders()
    {
        
$guzzle $this->getGuzzle();
        
$client = new Client();
        
$client->setClient($guzzle);
        
$client->setHeader('X-Test''test');
        
$client->request('GET''http://www.example.com/');
        
$this->assertEquals('test'end($this->history)['request']->getHeaderLine('X-Test'));
    }

    public function 
testCustomUserAgent()
    {
        
$guzzle $this->getGuzzle();
        
$client = new Client();
        
$client->setClient($guzzle);
        
$client->setHeader('User-Agent''foo');
        
$client->request('GET''http://www.example.com/');
        
$this->assertEquals('foo'end($this->history)['request']->getHeaderLine('User-Agent'));
    }

    public function 
testUsesAuth()
    {
        
$guzzle $this->getGuzzle();
        
$client = new Client();
        
$client->setClient($guzzle);
        
$client->setAuth('me''**');
        
$client->request('GET''http://www.example.com/');
        
$request end($this->history)['request'];
        
$this->assertEquals('Basic bWU6Kio='$request->getHeaderLine('Authorization'));
    }

    public function 
testResetsAuth()
    {
        
$guzzle $this->getGuzzle();
        
$client = new Client();
        
$client->setClient($guzzle);
        
$client->setAuth('me''**');
        
$client->resetAuth();
        
$client->request('GET''http://www.example.com/');
        
$request end($this->history)['request'];
        
$this->assertEquals(''$request->getHeaderLine('authorization'));
    }

    public function 
testUsesCookies()
    {
        
$guzzle $this->getGuzzle();
        
$client = new Client();
        
$client->setClient($guzzle);
        
$client->getCookieJar()->set(new Cookie('test''123'));
        
$client->request('GET''http://www.example.com/');
        
$request end($this->history)['request'];
        
$this->assertEquals('test=123'$request->getHeaderLine('Cookie'));
    }

    public function 
testUsesCookiesWithCustomPort()
    {
        
$guzzle $this->getGuzzle();
        
$client = new Client();
        
$client->setClient($guzzle);
        
$client->getCookieJar()->set(new Cookie('test''123'));
        
$client->request('GET''http://www.example.com:8000/');
        
$request end($this->history)['request'];
        
$this->assertEquals('test=123'$request->getHeaderLine('Cookie'));
    }

    public function 
testUsesPostFiles()
    {
        
$guzzle $this->getGuzzle();
        
$client = new Client();
        
$client->setClient($guzzle);
        
$files = array(
            
'test' => array(
                
'name' => 'test.txt',
                
'tmp_name' => __DIR__.'/fixtures.txt',
            ),
        );

        
$client->request('POST''http://www.example.com/', array(), $files);
        
$request end($this->history)['request'];

        
$stream $request->getBody();
        
$boundary $stream->getBoundary();
        
$this->assertEquals(
            
"--$boundaryrnContent-Disposition: form-data; name="test"; filename="test.txt"rnContent-Length: 4rn"
            
."Content-Type: text/plainrnrnfoonrn--$boundary--rn",
            
$stream->getContents()
        );
    }

    public function 
testUsesPostNamedFiles()
    {
        
$guzzle $this->getGuzzle();
        
$client = new Client();
        
$client->setClient($guzzle);
        
$files = array(
            
'test' => __DIR__.'/fixtures.txt',
        );

        
$client->request('POST''http://www.example.com/', array(), $files);
        
$request end($this->history)['request'];

        
$stream $request->getBody();
        
$boundary $stream->getBoundary();
        
$this->assertEquals(
            
"--$boundaryrnContent-Disposition: form-data; name="test"; filename="fixtures.txt"rnContent-Length: 4rn"
            
."Content-Type: text/plainrnrnfoonrn--$boundary--rn",
            
$stream->getContents()
        );
    }

    public function 
testUsesPostFilesNestedFields()
    {
        
$guzzle $this->getGuzzle();
        
$client = new Client();
        
$client->setClient($guzzle);
        
$files = array(
            
'form' => array(
                
'test' => array(
                    
'name' => 'test.txt',
                    
'tmp_name' => __DIR__.'/fixtures.txt',
                ),
            ),
        );

        
$client->request('POST''http://www.example.com/', array(), $files);
        
$request end($this->history)['request'];

        
$stream $request->getBody();
        
$boundary $stream->getBoundary();
        
$this->assertEquals(
            
"--$boundaryrnContent-Disposition: form-data; name="form[test]"; filename="test.txt"rnContent-Length: 4rn"
            
."Content-Type: text/plainrnrnfoonrn--$boundary--rn",
            
$stream->getContents()
        );
    }

    public function 
testPostFormWithFiles()
    {
        
$guzzle $this->getGuzzle();
        
$client = new Client();
        
$client->setClient($guzzle);
        
$files = array(
            
'test' => __DIR__.'/fixtures.txt',
        );
        
$params = array(
            
'foo' => 'bar',
        );

        
$client->request('POST''http://www.example.com/'$params$files);
        
$request end($this->history)['request'];

        
$stream $request->getBody();
        
$boundary $stream->getBoundary();
        
$this->assertEquals(
            
"--$boundaryrnContent-Disposition: form-data; name="foo"rnContent-Length: 3rn"
            
."rnbarrn"
            
."--$boundaryrnContent-Disposition: form-data; name="test"; filename="fixtures.txt"rnContent-Length: 4rn"
            
."Content-Type: text/plainrnrnfoonrn--$boundary--rn",
        
$stream->getContents());
    }

    public function 
testPostEmbeddedFormWithFiles()
    {
        
$guzzle $this->getGuzzle();
        
$client = new Client();
        
$client->setClient($guzzle);
        
$files = array(
            
'test' => __DIR__.'/fixtures.txt',
        );
        
$params = array(
            
'foo' => array(
                
'bar' => 'baz',
            ),
        );

        
$client->request('POST''http://www.example.com/'$params$files);
        
$request end($this->history)['request'];

        
$stream $request->getBody();
        
$boundary $stream->getBoundary();
        
$this->assertEquals(
            
"--$boundaryrnContent-Disposition: form-data; name="foo[bar]"rnContent-Length: 3rn"
            
."rnbazrn"
            
."--$boundaryrnContent-Disposition: form-data; name="test"; filename="fixtures.txt"rnContent-Length: 4rn"
            
."Content-Type: text/plainrnrnfoonrn--$boundary--rn",
        
$stream->getContents());
    }

    public function 
testUsesPostFilesOnClientSide()
    {
        
$guzzle $this->getGuzzle();
        
$client = new Client();
        
$client->setClient($guzzle);
        
$files = array(
            
'test' => __DIR__.'/fixtures.txt',
        );

        
$client->request('POST''http://www.example.com/', array(), $files);
        
$request end($this->history)['request'];

        
$stream $request->getBody();
        
$boundary $stream->getBoundary();
        
$this->assertEquals(
            
"--$boundaryrnContent-Disposition: form-data; name="test"; filename="fixtures.txt"rnContent-Length: 4rn"
            
."Content-Type: text/plainrnrnfoonrn--$boundary--rn",
            
$stream->getContents()
        );
    }

    public function 
testUsesPostFilesUploadError()
    {
        
$guzzle $this->getGuzzle();
        
$client = new Client();
        
$client->setClient($guzzle);
        
$files = array(
            
'test' => array(
                
'name' => '',
                
'type' => '',
                
'tmp_name' => '',
                
'error' => 4,
                
'size' => 0,
            ),
        );

        
$client->request('POST''http://www.example.com/', array(), $files);
        
$request end($this->history)['request'];
        
$stream $request->getBody();
        
$boundary $stream->getBoundary();

        
$this->assertEquals("--$boundary--rn"$stream->getContents());
    }

    public function 
testCreatesResponse()
    {
        
$guzzle $this->getGuzzle();
        
$client = new Client();
        
$client->setClient($guzzle);
        
$crawler $client->request('GET''http://www.example.com/');
        
$this->assertEquals('Hi'$crawler->filter('p')->text());
    }

    public function 
testHandlesRedirectsCorrectly()
    {
        
$guzzle $this->getGuzzle([
            new 
GuzzleResponse(301, array(
                
'Location' => 'http://www.example.com/',
            )),
            new 
GuzzleResponse(200, [], '<html><body><p>Test</p></body></html>'),
        ]);

        
$client = new Client();
        
$client->setClient($guzzle);

        
$crawler $client->request('GET''http://www.example.com/');
        
$this->assertEquals('Test'$crawler->filter('p')->text());

        
// Ensure that two requests were sent
        
$this->assertEquals(2count($this->history));
    }

    public function 
testConvertsGuzzleHeadersToArrays()
    {
        
$guzzle $this->getGuzzle([
            new 
GuzzleResponse(200, array(
                
'Date' => 'Tue, 04 Jun 2013 13:22:41 GMT',
            )),
        ]);

        
$client = new Client();
        
$client->setClient($guzzle);
        
$client->request('GET''http://www.example.com/');
        
$response $client->getResponse();
        
$headers $response->getHeaders();

        
$this->assertInternalType('array'array_shift($headers), 'Header not converted from GuzzleHttpMessageHeader to array');
    }

    public function 
testNullResponseException()
    {
        
$this->setExpectedException('GuzzleHttpExceptionRequestException');
        
$guzzle $this->getGuzzle([
            new 
RequestException(''$this->getMock('PsrHttpMessageRequestInterface')),
        ]);
        
$client = new Client();
        
$client->setClient($guzzle);
        
$client->request('GET''http://www.example.com/');
        
$client->getResponse();
    }

    public function 
testHttps()
    {
        
$guzzle $this->getGuzzle([
            new 
GuzzleResponse(200, [], '<html><body><p>Test</p></body></html>'),
        ]);

        
$client = new Client();
        
$client->setClient($guzzle);
        
$crawler $client->request('GET''https://www.example.com/');
        
$this->assertEquals('Test'$crawler->filter('p')->text());
    }

    public function 
testCustomUserAgentConstructor()
    {
        
$guzzle $this->getGuzzle();
        
$client = new Client([
          
'HTTP_HOST' => '1.2.3.4',
          
'HTTP_USER_AGENT' => 'SomeHost',
        ]);
        
$client->setClient($guzzle);
        
$client->request('GET''http://www.example.com/');
        
$this->assertEquals('SomeHost'end($this->history)['request']->getHeaderLine('User-Agent'));
    }

    public function 
testResetHeaders()
    {
        
$client = new Client();
        
$client->setHeader('X-Test''test');

        
$reflectionProperty = new ReflectionProperty('GoutteClient''headers');
        
$reflectionProperty->setAccessible(true);
        
$this->assertEquals(array('x-test' => 'test'), $reflectionProperty->getValue($client));

        
$client->resetHeaders();
        
$this->assertEquals([], $reflectionProperty->getValue($client));
    }

    public function 
testRestart()
    {
        
$client = new Client();
        
$client->setHeader('X-Test''test');
        
$client->setAuth('foo''bar');

        
$headersReflectionProperty = new ReflectionProperty('GoutteClient''headers');
        
$headersReflectionProperty->setAccessible(true);
        
$this->assertEquals(array('x-test' => 'test'), $headersReflectionProperty->getValue($client));

        
$authReflectionProperty = new ReflectionProperty('GoutteClient''auth');
        
$authReflectionProperty->setAccessible(true);
        
$this->assertEquals(array('foo''bar''basic'), $authReflectionProperty->getValue($client));

        
$client->restart();
        
$this->assertEquals([], $headersReflectionProperty->getValue($client));
        
$this->assertNull($authReflectionProperty->getValue($client));
    }
}
Онлайн: 0
Реклама