Passed
Pull Request — master (#3)
by Gordon
01:51
created

SearchTest::testIndexOneDocumentAndSuggest()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 12
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 7
nc 1
nop 0
dl 0
loc 12
rs 10
c 0
b 0
f 0
1
<?php
2
namespace Suilven\ManticoreSearch\Tests\Service;
3
4
use SilverStripe\Dev\SapphireTest;
5
use SilverStripe\ORM\DataObject;
6
use SilverStripe\Security\Member;
7
use Suilven\FreeTextSearch\Indexes;
8
use Suilven\ManticoreSearch\Helper\IndexingHelper;
9
use Suilven\ManticoreSearch\Service\Indexer;
10
use Suilven\ManticoreSearch\Service\Searcher;
11
use Suilven\ManticoreSearch\Service\Suggester;
12
use Suilven\ManticoreSearch\Tests\Models\FlickrAuthor;
13
use Suilven\ManticoreSearch\Tests\Models\FlickrPhoto;
14
use Suilven\ManticoreSearch\Tests\Models\FlickrSet;
15
use Suilven\ManticoreSearch\Tests\Models\FlickrTag;
16
17
class SearchTest extends SapphireTest
18
{
19
    protected static $extra_dataobjects = [
20
        FlickrPhoto::class,
21
        FlickrTag::class,
22
        FlickrSet::class,
23
        FlickrAuthor::class
24
    ];
25
26
    /**
27
     * @var int
28
     */
29
    private static $pageID;
30
31
    public static function setUpBeforeClass()
32
    {
33
        parent::setUpBeforeClass();
34
35
        $flickrPhoto = new FlickrPhoto();
36
        $flickrPhoto->Title = 'test';
37
        $flickrPhoto->Description = 'test';
0 ignored issues
show
Bug Best Practice introduced by
The property Description does not exist on Suilven\ManticoreSearch\Tests\Models\FlickrPhoto. Since you implemented __set, consider adding a @property annotation.
Loading history...
38
        $flickrPhoto->write();
39
40
41
        $page = new \Page();
42
        $page->Title = 'Hometown Sandlot Knitted Saddens Days';
43
        $page->Content = 'Webmaster fakes disconnections overdose.  Windowing preschooler malfunctions dolts statutes.';
44
        $page->write();
45
        self::$pageID = $page->ID;
46
    }
47
48
49
    public function setUp()
50
    {
51
        parent::setUp();
52
        /** @var Indexes $indexesService */
53
        $indexesService = new Indexes();
54
        $indexesObj = $indexesService->getIndexes();
55
        $indexer = new Indexer($indexesObj);
0 ignored issues
show
Bug introduced by
$indexesObj of type Suilven\FreeTextSearch\Index[]|array is incompatible with the type Suilven\FreeTextSearch\Indexes expected by parameter $indexes of Suilven\ManticoreSearch\...\Indexer::__construct(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

55
        $indexer = new Indexer(/** @scrutinizer ignore-type */ $indexesObj);
Loading history...
56
        $indexer->reconfigureIndexes();
57
    }
58
59
60
    /**
61
     * This test will hopefully deal with the hardwired sitetree index name
62
     *
63
     * @throws \SilverStripe\ORM\ValidationException
64
     */
65
    public function testIndexOneMemberAndSuggest()
66
    {
67
        $helper = new IndexingHelper();
68
        $member = new Member;
69
        $member->FirstName = 'Gordon';
70
        $member->Surname = 'Anderson';
71
72
        // a fake address!
73
        $member->Email = '[email protected]';
74
75
        $member->write();
76
        $helper->indexObject($member);
77
78
        /** @var Suggester $suggester */
79
        $suggester = new Suggester();
80
        $suggester->setIndex('members');
81
        $suggestions = $suggester->suggest('Andersin');
82
        $this->assertEquals(['anderson'], $suggestions);
83
    }
84
85
    public function testIndexOneDocumentAndSuggest()
86
    {
87
        $helper = new IndexingHelper();
88
        $doc = DataObject::get_by_id(\Page::class, self::$pageID);
89
        $helper->indexObject($doc);
90
91
        // search for webmister, a deliberate error (should be webmaster)
92
        /** @var Suggester $suggester */
93
        $suggester = new Suggester();
94
        $suggester->setIndex('sitetree');
95
        $suggestions = $suggester->suggest('webmister');
96
        $this->assertEquals(['webmaster'], $suggestions);
97
    }
98
99
100
    public function testIndexOneDocumentAndSearch()
101
    {
102
        $helper = new IndexingHelper();
103
        $doc = DataObject::get_by_id(\Page::class, self::$pageID);
104
        $helper->indexObject($doc);
105
106
        $searcher = new Searcher();
107
        $searcher->setIndex('sitetree');
108
        $result = $searcher->search('Webmaster disconnections');
109
        $arrayResult = $result->toArray();
110
        $this->assertEquals(1, sizeof($arrayResult));
111
        $this->assertContains('Webmaster fakes disconnections overdose', $arrayResult[0]->content);
112
        $this->assertEquals(self::$pageID, $arrayResult[0]->ID);
113
    }
114
}
115