Completed
Push — master ( f8a88d...dd8807 )
by Nicolas
02:45
created

tests/Suggest/TermTest.php (1 issue)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
namespace Elastica\Test\Suggest;
4
5
use Elastica\Document;
6
use Elastica\Index;
7
use Elastica\Suggest;
8
use Elastica\Suggest\Term;
9
use Elastica\Test\Base as BaseTest;
10
11
/**
12
 * @internal
13
 */
14
class TermTest extends BaseTest
15
{
16
    /**
17
     * @group unit
18
     */
19
    public function testToArray(): void
20
    {
21
        $suggest = new Suggest();
22
23
        $suggest1 = new Term('suggest1', '_all');
24
        $suggest1->setSort(Term::SORT_FREQUENCY);
25
26
        $suggest->addSuggestion($suggest1->setText('Foor'));
27
28
        $suggest2 = new Term('suggest2', '_all');
29
        $suggest2->setSuggestMode(Term::SUGGEST_MODE_POPULAR);
30
        $suggest->addSuggestion($suggest2->setText('Girhub'));
31
32
        $expected = [
33
            'suggest' => [
34
                'suggest1' => [
35
                    'term' => [
36
                        'field' => '_all',
37
                        'sort' => 'frequency',
38
                    ],
39
                    'text' => 'Foor',
40
                ],
41
                'suggest2' => [
42
                    'term' => [
43
                        'field' => '_all',
44
                        'suggest_mode' => 'popular',
45
                    ],
46
                    'text' => 'Girhub',
47
                ],
48
            ],
49
        ];
50
51
        $this->assertEquals($expected, $suggest->toArray());
52
    }
53
54
    /**
55
     * @group unit
56
     */
57
    public function testDistanceAlgorithm(): void
58
    {
59
        $suggest = new Suggest();
60
61
        $suggest1 = new Term('suggest1', '_all');
62
        $suggest1->setSort(Term::SORT_FREQUENCY);
63
64
        $suggest->addSuggestion($suggest1->setText('Foor'));
65
66
        $suggest2 = new Term('suggest2', '_all');
67
        $suggest2->setSuggestMode(Term::SUGGEST_MODE_POPULAR);
68
        $suggest2->setStringDistanceAlgorithm('jaro_winkler');
69
        $suggest->addSuggestion($suggest2->setText('Girhub'));
70
71
        $expected = [
72
            'suggest' => [
73
                'suggest1' => [
74
                    'term' => [
75
                        'field' => '_all',
76
                        'sort' => 'frequency',
77
                    ],
78
                    'text' => 'Foor',
79
                ],
80
                'suggest2' => [
81
                    'term' => [
82
                        'field' => '_all',
83
                        'suggest_mode' => 'popular',
84
                        'string_distance' => 'jaro_winkler',
85
                    ],
86
                    'text' => 'Girhub',
87
                ],
88
            ],
89
        ];
90
91
        $this->assertEquals($expected, $suggest->toArray());
92
    }
93
94
    /**
95
     * @group functional
96
     */
97
    public function testSuggestResults(): void
98
    {
99
        $suggest = new Suggest();
100
        $suggest1 = new Term('suggest1', 'text');
101
        $suggest->addSuggestion($suggest1->setText('Foor seach'));
102
        $suggest2 = new Term('suggest2', 'text');
103
        $suggest->addSuggestion($suggest2->setText('Girhub'));
104
        $suggest2->setStringDistanceAlgorithm('jaro_winkler');
105
106
        $index = $this->_getIndexForTest();
107
        $result = $index->search($suggest);
108
109
        $this->assertEquals(2, $result->countSuggests());
110
111
        $suggests = $result->getSuggests();
112
113
        // Ensure that two suggestion results are returned for suggest1
114
        $this->assertCount(2, $suggests['suggest1']);
115
116
        $this->assertEquals('github', $suggests['suggest2'][0]['options'][0]['text']);
117
        $this->assertEquals('food', $suggests['suggest1'][0]['options'][0]['text']);
118
    }
119
120
    /**
121
     * @group functional
122
     */
123
    public function testSuggestNoResults(): void
124
    {
125
        $termSuggest = new Term('suggest1', 'text');
126
        $termSuggest->setText('Foobar')->setSize(4);
127
128
        $index = $this->_getIndexForTest();
129
        $result = $index->search($termSuggest);
130
131
        $this->assertEquals(1, $result->countSuggests());
132
133
        // Assert that no suggestions were returned
134
        $suggests = $result->getSuggests();
135
        $this->assertCount(0, $suggests['suggest1'][0]['options']);
136
    }
137
138 View Code Duplication
    protected function _getIndexForTest(): Index
0 ignored issues
show
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
139
    {
140
        $index = $this->_createIndex();
141
        $index->addDocuments([
142
            new Document(1, ['id' => 1, 'text' => 'GitHub']),
143
            new Document(2, ['id' => 1, 'text' => 'Elastic']),
144
            new Document(3, ['id' => 1, 'text' => 'Search']),
145
            new Document(4, ['id' => 1, 'text' => 'Food']),
146
            new Document(5, ['id' => 1, 'text' => 'Flood']),
147
            new Document(6, ['id' => 1, 'text' => 'Folks']),
148
        ]);
149
        $index->refresh();
150
151
        return $index;
152
    }
153
}
154