/** * Check if precision setting works as expected. */ public function testContextSuggesterPrecision() { $geoContext = new Context\GeoContext('location', ['lat' => 0, 'lon' => 0]); $geoContext->setPrecision('10000km'); $categoryContext = new Context\CategoryContext('price', '500'); $context = new Context('suggestions', 'cons'); $context->addContext($geoContext); $context->addContext($categoryContext); $repository = $this->getManager()->getRepository('AcmeTestBundle:Product'); $search = $repository->createSearch()->addSuggester($context); $result = $repository->execute($search, Repository::RESULTS_RAW); $this->assertEmpty($result['suggest']['suggestions-completion'][0]['options']); }
/** * Tests toArray method when $this->getSize() !== null. */ public function testToArrayNotNull() { $name = 'testName'; $context = new Context('', '', $name); $context->setSize(123); $context->setContext(new Phrase('', '')); $result = $context->toArray(); $this->assertArrayHasKey($name, $result); $data = $result[$name]; $this->assertArrayHasKey('completion', $data); $completion = $data['completion']; $this->assertArrayHasKey('size', $completion); $this->assertEquals($completion['size'], 123); }
/** * Data provider for testSuggestionIterator(). * * @return array */ public function getSuggestIterationData() { $out = []; // Case #0, Phrase type with all parameters set. $phrase = new Phrase('description', 'Lorm adip'); $phrase->setAnalyzer('simple'); $phrase->setSize(1); $phrase->setRealWordErrorLikelihood(0.95); $phrase->setMaxErrors(0.5); $phrase->setGramSize(2); $phrase->setHighlight(['pre_tag' => '<span class="highlight">', 'post_tag' => '</span>']); $expectedOption = new PhraseOption('lorem adip', 0.0, '<span class="highlight">lorem</span> adip'); $out[] = ['suggesters' => [$phrase], 'expectedOptions' => [$expectedOption]]; // Case #1, Phrase type with almost nothing set. $phrase = new Phrase('description', 'Lorm adip'); $expectedOption = new SimpleOption('lorem adip', 0.0); $out[] = ['suggesters' => [$phrase], 'expectedOptions' => [$expectedOption]]; // Case #2, Term type with almost nothing set. $term = new Term('description', 'ipsu'); $expectedOption = new TermOption('ipsum', 0.0, 3); $out[] = ['suggesters' => [$term], 'expectedOptions' => [$expectedOption]]; // Case #3, Multiple suggesters. $term = new Term('description', 'ipsu'); $phrase = new Phrase('description', 'Lorm adip'); $expectedOptions = [new SimpleOption('lorem adip', 0.0), new TermOption('ipsum', 0.0, 3)]; $out[] = ['suggesters' => [$term, $phrase], 'expectedOptions' => $expectedOptions]; // Case #4, Multiple options within multiple suggesters. $term = new Term('description', 'distibutd'); $phrase = new Phrase('description', 'Lorm adip'); $expectedOptions = [new SimpleOption('lorem adip', 0.0), new TermOption('disributed', 0.0, 1), new TermOption('distributed', 0.0, 1)]; $out[] = ['suggesters' => [$term, $phrase], 'expectedOptions' => $expectedOptions]; // Case #5, completion option using context suggester, with payload. $geoContext = new Context\GeoContext('location', ['lat' => 0, 'lon' => 0]); $categoryContext = new Context\CategoryContext('price', '500'); $context = new Context('suggestions', 'cons'); $context->addContext($geoContext); $context->addContext($categoryContext); $expectedOption = new CompletionOption('Lorem ipsum', 0.0, ['test' => true]); $out[] = ['suggesters' => [$context], 'expectedOptions' => [$expectedOption]]; // Case #6, completion option using completion suggester, no payload. $completion = new Completion('completion_suggesting', 'ipsum'); $expectedOption = new SimpleOption('Lorem ipsum', 0.0, null); $out[] = ['suggesters' => [$completion], 'expectedOptions' => [$expectedOption]]; return $out; }
/** * Data provider for testSuggest(). * * @return array */ public function getSuggestData() { $out = []; // Case #0: simple single term suggester. $expectedResults = ['description-term' => [['text' => 'distibutd', 'offset' => '0', 'length' => '9', 'options' => [new TermOption('disributed', 0.0, 1), new TermOption('distributed', 0.0, 1)]]]]; $suggesters = [new Term('description', 'distibutd')]; $out[] = ['suggesters' => $suggesters, 'expectedResults' => $expectedResults]; // Case #1: simple single phrase suggester. $expectedResults = ['description-phrase' => [['text' => 'Lorm adip', 'offset' => '0', 'length' => '9', 'options' => [new SimpleOption('lorem adip', 0.0)]]]]; $suggesters = [new Phrase('description', 'Lorm adip')]; $out[] = ['suggesters' => $suggesters, 'expectedResults' => $expectedResults]; // Case #2: simple context suggester. $geoContext = new Context\GeoContext('location', ['lat' => 0, 'lon' => 0]); $categoryContext = new Context\CategoryContext('price', '500'); $context = new Context('suggestions', 'cons'); $context->addContext($geoContext); $context->addContext($categoryContext); $expectedResults = ['suggestions-completion' => [['text' => 'cons', 'offset' => '0', 'length' => '4', 'options' => [new CompletionOption('Lorem ipsum', 0.0, ['test' => true])]]]]; $out[] = ['suggesters' => $context, 'expectedResults' => $expectedResults]; // Case #3: simple completion suggester. $completion = new Completion('completion_suggesting', 'ipsum'); $expectedResults = ['completion_suggesting-completion' => [['text' => 'ipsum', 'offset' => '0', 'length' => '5', 'options' => [new SimpleOption('Lorem ipsum', 0.0, null)]]]]; $out[] = ['suggesters' => $completion, 'expectedResults' => $expectedResults]; // Case #4: all together. $geoContext = new Context\GeoContext('location', ['lat' => 0, 'lon' => 0]); $categoryContext = new Context\CategoryContext('price', '500'); $context = new Context('suggestions', 'cons'); $context->addContext($geoContext); $context->addContext($categoryContext); $suggesters = [new Term('description', 'distibutd'), new Phrase('description', 'Lorm adip'), $context, new Completion('completion_suggesting', 'ipsum')]; $expectedResults = ['description-term' => [['text' => 'distibutd', 'offset' => '0', 'length' => '9', 'options' => [new TermOption('disributed', 0.0, 1), new TermOption('distributed', 0.0, 1)]]], 'description-phrase' => [['text' => 'Lorm adip', 'offset' => '0', 'length' => '9', 'options' => [new SimpleOption('lorem adip', 0.0)]]], 'suggestions-completion' => [['text' => 'cons', 'offset' => '0', 'length' => '4', 'options' => [new CompletionOption('Lorem ipsum', 0.0, ['test' => true])]]], 'completion_suggesting-completion' => [['text' => 'ipsum', 'offset' => '0', 'length' => '5', 'options' => [new SimpleOption('Lorem ipsum', 0.0, null)]]]]; $out[] = ['suggesters' => $suggesters, 'expectedResults' => $expectedResults]; return $out; }