assertTrue(method_exists(QuotedTextNode::class, '__toString'), 'Class does not have method __toString'); $node = new QuotedTextNode('foo'); $this->assertEquals('', (string) $node); } public function testQueryBuild() { $field = new Field('foo', Mapping::TYPE_STRING, ['private' => false]); $query_context = $this->prophesize(QueryContext::class); $query_context->getUnrestrictedFields()->willReturn([$field]); $query_context->getPrivateFields()->willReturn([]); $query_context->localizeField($field)->willReturn(['foo.fr', 'foo.en']); $node = new QuotedTextNode('bar'); $query = $node->buildQuery($query_context->reveal()); $expected = '{ "multi_match": { "type": "phrase", "fields": ["foo.fr", "foo.en"], "query": "bar" } }'; $this->assertEquals(json_decode($expected, true), $query); } public function testQueryBuildWithPrivateFields() { $public_field = new Field('foo', Mapping::TYPE_STRING, ['private' => false]); $private_field = new Field('bar', Mapping::TYPE_STRING, [ 'private' => true, 'used_by_collections' => [1, 2, 3] ]); $query_context = $this->prophesize(QueryContext::class); $query_context ->getUnrestrictedFields() ->willReturn([$public_field]); $query_context ->getPrivateFields() ->willReturn([$private_field]); $query_context ->localizeField($public_field) ->willReturn(['foo.fr', 'foo.en']); $query_context ->localizeField($private_field) ->willReturn(['private_caption.bar.fr', 'private_caption.bar.en']); $node = new QuotedTextNode('baz'); $query = $node->buildQuery($query_context->reveal()); $expected = '{ "bool": { "should": [{ "multi_match": { "type": "phrase", "fields": ["foo.fr", "foo.en"], "query": "baz" } }, { "bool": { "must": [{ "terms": { "base_id": [1, 2, 3] } }, { "multi_match": { "type": "phrase", "fields": ["private_caption.bar.fr", "private_caption.bar.en"], "query": "baz" } }] } }] } }'; $this->assertEquals(json_decode($expected, true), $query); } }