BulkTest::testIndexAllDocumentsSiteTree()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 37
Code Lines 20

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 20
c 0
b 0
f 0
nc 1
nop 0
dl 0
loc 37
rs 9.6
1
<?php declare(strict_types = 1);
2
3
/**
4
 * Created by PhpStorm.
5
 * User: gordon
6
 * Date: 24/3/2561
7
 * Time: 20:36 น.
8
 */
9
10
namespace Suilven\ManticoreSearch\Tests\Service;
11
12
use SilverStripe\Dev\SapphireTest;
13
use SilverStripe\Dev\TestOnly;
14
use SilverStripe\ORM\DB;
15
use Suilven\FreeTextSearch\Helper\BulkIndexingHelper;
16
use Suilven\FreeTextSearch\Indexes;
17
use Suilven\ManticoreSearch\Helper\ReconfigureIndexesHelper;
18
use Suilven\ManticoreSearch\Service\BulkIndexer;
19
use Suilven\ManticoreSearch\Service\Searcher;
20
use Suilven\ManticoreSearch\Service\Suggester;
21
22
class BulkTest extends SapphireTest implements TestOnly
23
{
24
    protected static $fixture_file = ['tests/fixtures/sitetree.yml', 'tests/fixtures/flickrphotos.yml'];
25
26
    protected static $extra_dataobjects = [
27
        'Suilven\ManticoreSearch\Tests\Models\FlickrPhoto',
28
    ];
29
30
    public function setUp(): void
31
    {
32
        parent::setUp();
33
34
        $indexesService = new Indexes();
35
        $indexesArray = $indexesService->getIndexes();
36
        $helper = new ReconfigureIndexesHelper();
37
        $helper->reconfigureIndexes($indexesArray);
38
    }
39
40
41
    public function testIndexAllDocumentsSiteTree(): void
42
    {
43
        $helper = new BulkIndexingHelper();
44
        $nDocs = $helper->bulkIndex('sitetree');
45
        $this->assertEquals(50, $nDocs);
46
47
        // search against them
48
        $searcher = new Searcher();
49
        $searcher->setIndexName('sitetree');
50
        $results = $searcher->search('sodium');
51
52
        // assert number of results
53
        $this->assertEquals(4, $results->getTotaNumberOfResults());
54
        $recordsArray = $results->getRecords()->toArray();
55
56
        // assert IDs and that sodium is in the result set somewhere
57
        $this->assertEquals(34, $recordsArray[0]->ID);
58
59
        // @todo Why is ->title returning #34 here?
60
        $this->assertContains('Sodium', $recordsArray[0]->MenuTitle);
61
62
        $this->assertEquals(22, $recordsArray[1]->ID);
63
        $this->assertContains('sodium', $recordsArray[1]->Content);
64
65
        $this->assertEquals(17, $recordsArray[2]->ID);
66
        $this->assertContains('sodium', $recordsArray[2]->Content);
67
68
        $this->assertEquals(20, $recordsArray[3]->ID);
69
        $this->assertContains('sodium', $recordsArray[3]->Content);
70
71
72
        // now do a suggest
73
        /** @var \Suilven\ManticoreSearch\Service\Suggester $suggester */
74
        $suggester = new Suggester();
75
        $suggester->setIndex('sitetree');
76
        $result = $suggester->suggest('chessbored');
77
        $this->assertEquals(['chessboard'], $result->getResults());
78
    }
79
80
81
    public function testAlreadyIndexed(): void
82
    {
83
        // mark all SiteTree documents as clean, ie indexed
84
        DB::query("UPDATE \"SiteTree_Live\" SET \"IsDirtyFreeTextSearch\" = 0");
85
        DB::query("UPDATE \"SiteTree\" SET \"IsDirtyFreeTextSearch\" = 0");
86
87
        // assert that no new documents are indexed
88
        $helper = new BulkIndexingHelper();
89
        $nDocs = $helper->bulkIndex('sitetree', true);
90
        $this->assertEquals(0, $nDocs);
91
    }
92
93
94
    public function testAddNoDocumentsInBulk(): void
95
    {
96
        $indexer = new BulkIndexer();
97
        $nDocs = $indexer->indexDataObjects();
98
        $this->assertEquals(0, $nDocs);
99
    }
100
101
102
    public function testAddDocumentWithNullField(): void
103
    {
104
        $page = new \Page();
0 ignored issues
show
Bug introduced by
The type Page was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
105
        $page->Title = 'Test Page';
106
        $page->Content = null;
107
        $page->write();
108
        $helper = new BulkIndexingHelper();
109
        $nDocs = $helper->bulkIndex('sitetree', true);
110
111
        $this->assertEquals(51, $nDocs);
112
113
        $searcher = new Searcher();
114
        $searcher->setIndexName('sitetree');
115
        $results = $searcher->search('Test Page');
116
117
        // assert number of results
118
        $this->assertEquals(1, $results->getTotaNumberOfResults());
119
        $recordsArray = $results->getRecords()->toArray();
120
        $this->assertEquals('', $recordsArray[0]->Content);
121
    }
122
}
123