Passed
Pull Request — master (#16)
by Chris
02:21 queued 42s
created

SwiftypeCrawlerTest::testCrawlFailResponseCode()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 20
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 13
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 20
rs 9.8333
1
<?php
2
3
namespace Ichaber\SSSwiftype\Tests\Service;
4
5
use GuzzleHttp\Client;
6
use GuzzleHttp\Exception\RequestException;
7
use GuzzleHttp\Handler\MockHandler;
8
use GuzzleHttp\HandlerStack;
9
use GuzzleHttp\Psr7\Request;
10
use Ichaber\SSSwiftype\Service\SwiftypeCrawler;
11
use SilverStripe\Dev\SapphireTest;
12
use GuzzleHttp\Psr7\Response;
13
14
/**
15
 * Class SwiftypeCrawlerTest
16
 *
17
 * @package Ichaber\SSSwiftype\Tests\Service
18
 */
19
class SwiftypeCrawlerTest extends SapphireTest
20
{
21
    /**
22
     * @var string
23
     */
24
    protected static $fixture_file = 'SwiftypeCrawlerTest.yml';
25
26
    /**
27
     * Test that a crawl will succeed
28
     */
29
    public function testCrawlSuccess(): void
30
    {
31
        $responseCode = 201;
32
        $mock = new MockHandler([
33
            new Response($responseCode),
34
        ]);
35
36
        $handler = HandlerStack::create($mock);
37
        $client = new Client(['handler' => $handler]);
38
        $crawler = SwiftypeCrawler::create($client);
39
40
        // True represents a successful crawl request
41
        $this->assertTrue($crawler->send('https://www.someurl.com'));
42
    }
43
44
    /**
45
     * Test that a crawl will fail on invalid response code
46
     */
47
    public function testCrawlFailResponseCode(): void
48
    {
49
        $responseCode = 301;
50
        $mock = new MockHandler([
51
            new Response($responseCode),
52
        ]);
53
54
        $handler = HandlerStack::create($mock);
55
        $client = new Client(['handler' => $handler]);
56
        $crawler = new SwiftypeCrawler($client);
57
58
        $expectedMessage = sprintf(
59
            "Swiftype Crawl request failed - invalid response code \n%s\n%s\n%s",
60
            $responseCode,
61
            json_encode([]),
62
            ''
63
        );
64
65
        $this->assertFalse($crawler->send('https://www.someurl.com'));
66
        $this->assertEquals($expectedMessage, $crawler->getMessages()[0]);
67
    }
68
69
    /**
70
     * Test that a crawl will fail in invalid response data
71
     */
72
    public function testCrawlFailResponseData(): void
73
    {
74
        $responseCode = 200;
75
        $mockBody = json_encode([
76
            'error' => 'test error message',
77
        ]);
78
        $mock = new MockHandler([
79
            new Response($responseCode, [], $mockBody),
80
        ]);
81
82
        $handler = HandlerStack::create($mock);
83
        $client = new Client(['handler' => $handler]);
84
        $crawler = new SwiftypeCrawler($client);
85
86
        $expectedMessage = sprintf(
87
            "Swiftype Crawl request failed - invalid response data \n%s\n%s\n%s",
88
            $responseCode,
89
            json_encode([]),
90
            $mockBody
91
        );
92
93
        $this->assertFalse($crawler->send('https://www.someurl.com'));
94
        $this->assertEquals($expectedMessage, $crawler->getMessages()[0]);
95
    }
96
97
    /**
98
     * Test that a crawl will fail
99
     */
100
    public function testCrawlError(): void
101
    {
102
        $mock = new MockHandler([
103
            new RequestException("Error Communicating with Server", new Request('GET', 'test')),
104
        ]);
105
106
        $handler = HandlerStack::create($mock);
107
        $client = new Client(['handler' => $handler]);
108
        $crawler = new SwiftypeCrawler($client);
109
110
        $url = 'https://www.someurl.com';
111
        // Lets run it and get a not good response
112
        $expectedMessage = sprintf(
113
            'Exception %s for url: %s message: Error Communicating with Server',
114
            RequestException::class,
115
            $url
116
        );
117
118
        $this->assertFalse($crawler->send($url));
119
        $this->assertEquals($expectedMessage, $crawler->getMessages()[0]);
120
    }
121
}
122