Passed
Pull Request — master (#16)
by Chris
01:43
created

SwiftypeCrawlerTest::testCrawlFailResponseData()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 23
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

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