Completed
Push — master ( b445d4...c87944 )
by Julián
02:17
created

ClientTest::testRequest()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 48
Code Lines 20

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 48
rs 9.125
cc 1
eloc 20
nc 1
nop 0
1
<?php
2
/**
3
 * Spiral: PSR7 aware cURL client (https://github.com/juliangut/spiral)
4
 *
5
 * @link https://github.com/juliangut/spiral for the canonical source repository
6
 * @license https://raw.githubusercontent.com/juliangut/spiral/master/LICENSE
7
 */
8
9
namespace Jgut\Spiral\Tests;
10
11
use Jgut\Spiral\Client;
12
use Jgut\Spiral\Exception\TransportException;
13
use Phly\Http\Request;
14
use Phly\Http\Response;
15
16
/**
17
 * @cover \Jgut\Spiral\Client
18
 */
19
class ClientTest extends \PHPUnit_Framework_TestCase
20
{
21
    /**
22
     * @covers Jgut\Spiral\Client::__construct
23
     * @covers Jgut\Spiral\Client::setTransport
24
     * @covers Jgut\Spiral\Client::getTransport
25
     */
26
    public function testMutatorAccessor()
27
    {
28
        $transport = $this->getMock('\Jgut\Spiral\Transport');
29
30
        $client = new Client();
31
32
        $client->setTransport($transport);
33
34
        $this->assertEquals($transport, $client->getTransport());
35
    }
36
37
    /**
38
     * @covers Jgut\Spiral\Client::__construct
39
     * @covers Jgut\Spiral\Client::request
40
     * @covers Jgut\Spiral\Client::getTransport
41
     */
42
    public function testBadRequest()
43
    {
44
        $request = new Request('http://fake_made_up_web.com', 'GET');
45
        $response = new Response;
46
47
        $client = new Client();
48
        try {
49
            $client->request($request, $response);
50
        } catch (TransportException $exception) {
51
            $this->assertEquals(CURLE_COULDNT_RESOLVE_HOST, $exception->getCode());
52
            $this->assertEquals('', $exception->getCategory());
53
        }
54
    }
55
56
    /**
57
     * @covers Jgut\Spiral\Client::__construct
58
     * @covers Jgut\Spiral\Client::request
59
     * @covers Jgut\Spiral\Client::getTransport
60
     * @covers Jgut\Spiral\Client::getTransferHeaders
61
     * @covers Jgut\Spiral\Client::populateResponse
62
     */
63
    public function testRequest()
64
    {
65
        $responseContent = <<<RESP
66
HTTP/1.1 302 FOUND
67
Server: nginx
68
Date: Tue, 09 Feb 2016 11:54:35 GMT
69
Content-Type: text/html; charset=utf-8
70
Content-Length: 0
71
Connection: keep-alive
72
Location: get
73
Access-Control-Allow-Origin: *
74
Access-Control-Allow-Credentials: true
75
76
HTTP/1.1 200 OK
77
Server: nginx
78
Date: Tue, 09 Feb 2016 11:54:35 GMT
79
Content-Type: text/html; charset=utf-8
80
Content-Length: 30
81
Connection: keep-alive
82
Access-Control-Allow-Origin: *
83
Access-Control-Allow-Credentials: true
84
85
<!doctype html>
86
<html>
87
</html>
88
RESP;
89
        $transferInfo = [
90
            'header_size' => 452,
91
            'http_code' => 200,
92
            'content_type' => 'text/html; charset=utf-8',
93
        ];
94
95
        $transport = $this->getMockBuilder('\Jgut\Spiral\Transport\Curl')->disableOriginalConstructor()->getMock();
96
        $transport->expects($this->once())->method('request')->will($this->returnValue($responseContent));
97
        $transport->expects($this->once())->method('responseInfo')->will($this->returnValue($transferInfo));
98
        $transport->expects($this->once())->method('close');
99
100
        $request = new Request('', 'GET');
101
        $response = new Response;
102
103
        $client = new Client($transport);
104
        $response = $client->request($request, $response);
105
106
        $this->assertEquals(200, $response->getStatusCode());
107
        $this->assertEquals('nginx', $response->getHeaderLine('Server'));
108
        $this->assertFalse($response->hasHeader('Location'));
109
        $this->assertEquals(1, preg_match('/^<!doctype html>/i', $response->getBody()));
110
    }
111
}
112