Passed
Push — hans/logtests ( 76c086...71695d )
by Simon
06:24 queued 02:27
created

QueryComponentFactoryTest::testBuildQuery()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 31
Code Lines 25

Duplication

Lines 0
Ratio 0 %

Importance

Changes 4
Bugs 0 Features 1
Metric Value
eloc 25
c 4
b 0
f 1
dl 0
loc 31
rs 9.52
cc 1
nc 1
nop 0
1
<?php
2
3
4
namespace Firesphere\SolrSearch\Tests;
5
6
use CircleCITestIndex;
7
use Firesphere\SolrSearch\Extensions\DataObjectExtension;
8
use Firesphere\SolrSearch\Factories\QueryComponentFactory;
9
use Firesphere\SolrSearch\Indexes\BaseIndex;
10
use Firesphere\SolrSearch\Queries\BaseQuery;
11
use Page;
12
use SilverStripe\Core\Config\Config;
13
use SilverStripe\Core\Injector\Injector;
14
use SilverStripe\Dev\SapphireTest;
15
use Solarium\Core\Query\Helper;
16
17
class QueryComponentFactoryTest extends SapphireTest
18
{
19
    protected static $fixture_file = '../fixtures/DataResolver.yml';
20
    protected static $extra_dataobjects = [
21
        TestObject::class,
22
        TestPage::class,
23
        TestRelationObject::class,
24
    ];
25
26
    /**
27
     * @var QueryComponentFactory
28
     */
29
    protected $factory;
30
31
    public function testBuildQuery()
32
    {
33
        $index = new CircleCITestIndex();
34
        $query = new BaseQuery();
35
        $clientQuery = $index->getClient()->createSelect();
36
        $query->addTerm('Home');
37
        $query->addField('SiteTree_Title');
38
        $query->addFilter('SiteTree_Title', 'Home');
39
        $query->addExclude('SiteTree_Title', 'Contact');
40
        $query->addBoostedField('SiteTree.Content', [], 2);
41
42
        $this->factory->setQuery($query);
43
        $this->factory->setIndex($index);
44
        $this->factory->setClientQuery($clientQuery);
45
        $this->factory->setHelper($clientQuery->getHelper());
46
        $this->factory->setQueryArray(['Home']);
47
48
        $this->factory->buildQuery();
49
50
        $expected = ['Home', 'SiteTree_Content:Home^2.0'];
51
        $this->assertEquals($expected, $this->factory->getQueryArray());
52
        $this->assertEquals(
53
            ['id', 'ObjectID', 'ClassName', 'SiteTree_Title'],
54
            $this->factory->getClientQuery()->getFields()
55
        );
56
        $this->assertCount(3, $this->factory->getClientQuery()->getFilterQueries());
57
        $this->assertInstanceOf(Helper::class, $this->factory->getHelper());
58
        $this->assertInstanceOf(BaseIndex::class, $this->factory->getIndex());
59
        $this->assertInstanceOf(BaseQuery::class, $this->factory->getQuery());
60
        $this->assertInternalType('array', $this->factory->getQueryArray());
61
        $this->assertInternalType('array', $this->factory->getBoostTerms());
62
    }
63
64
65
    public function testEscapeTerms()
66
    {
67
        $term = '"test me" help';
68
69
        $helper = $this->factory->getIndex()->getClient()->createSelect()->getHelper();
70
71
        $escaped = $this->factory->escapeSearch($term, $helper);
72
        $this->assertEquals('"\"test me\"" help', $escaped);
73
74
        $term = 'help me';
75
76
        $this->assertEquals('help me', $this->factory->escapeSearch($term, $helper));
77
    }
78
79
80
    protected function setUp()
81
    {
82
        parent::setUp();
83
        Injector::inst()->get(Page::class)->requireDefaultRecords();
84
        foreach (self::$extra_dataobjects as $className) {
85
            Config::modify()->merge($className, 'extensions', [DataObjectExtension::class]);
86
        }
87
        $this->factory = new QueryComponentFactory();
88
        $this->factory->setIndex(Injector::inst()->get(CircleCITestIndex::class));
89
    }
90
}
91