Source code for graphene_elastic.tests.test_query_string_backend

import unittest
import uuid

import factories
from ..constants import ALL, VALUE
from ..logging import logger
from .base import BaseGrapheneElasticTestCase

__all__ = ("QueryStringBackendElasticTestCase",)


[docs]class QueryStringBackendElasticTestCase(BaseGrapheneElasticTestCase):
[docs] def setUp(self): super(QueryStringBackendElasticTestCase, self).setUp() self.black_rabbit_partial = "Black Rabbit is dead {}".format( uuid.uuid4() ) self.alice = "Alice" self.num_alice_posts = 9 self.alice_posts = factories.PostFactory.create_batch( self.num_alice_posts ) for _counter, _post in enumerate(self.alice_posts): _partial = self.black_rabbit_partial if _counter == 0 else '' _post.content = "{} {} {} {}".format( self.faker.paragraph(), self.alice, self.faker.paragraph(), _partial ) _post.save() self.beast = "Jabberwocky" self.num_beast_posts = 5 self.beast_posts = factories.PostFactory.create_batch( self.num_beast_posts ) for _post in self.beast_posts: _post.content = "{} {} {}".format( self.faker.paragraph(), self.beast, self.faker.paragraph() ) _post.save() self.num_other_posts = 40 self.other_posts = factories.PostFactory.create_batch( self.num_other_posts ) for _post in self.other_posts: _post.save() self.sleep(2)
def __test_search_content(self, search, num_posts): """Test search. :param num_posts: :return: """ query = ( """ query { allPostDocuments(queryString:%s) { edges { node { category title comments { author{ name age } tag content createdAt } } } } } """ % search ) logger.debug_json(query) executed = self.client.execute(query) self.assertEqual( len(executed["data"]["allPostDocuments"]["edges"]), num_posts, query ) def _test_search_content(self): """Test search content. :return: """ # Covering specific field lookups: `search:{title:{value:"Another"}}` with self.subTest('Test search the content on term "Alice"'): self.__test_search_content( '"%s"' % self.alice, self.num_alice_posts, ) with self.subTest('Test search the content on term "Jabberwocky"'): self.__test_search_content( '"%s"' % self.beast, self.num_beast_posts, ) with self.subTest( 'Test search the content on term "Alice Jabberwocky"' ): self.__test_search_content( '"%s %s"' % (self.alice, self.beast), self.num_alice_posts + self.num_beast_posts, ) with self.subTest( 'Test search the content on term: "White Rabbit" +Alice' ): self.__test_search_content( '"%s"' % "({black_rabbit}) AND {alice}".format( black_rabbit=self.black_rabbit_partial, alice=self.alice ), 1, )
[docs] def test_all(self): """Test all. Since we don't write in specific tests, it's more efficient to run them all from a single method in order to save on speed ups between tests. """ self._test_search_content()
if __name__ == "__main__": unittest.main()