def testJoin(self):
     remote = SynchronousRemote(host='localhost', port=self.httpPort, path='/remote')
     q = ComposedQuery('main', query=cqlToExpression('*'))
     q.addMatch(dict(core='main', uniqueKey=KEY_PREFIX+'field'), dict(core='main2', key=KEY_PREFIX+'field'))
     q.start=0
     q.stop=100
     q.addFilterQuery(core='main', query=cqlToExpression('field2=value0 OR field2=value1'))
     q.addFacet(core='main2', facet=dict(fieldname='untokenized.field2', maxTerms=5))
     response = remote.executeComposedQuery(query=q)
     self.assertEquals(19, response.total)
     self.assertEquals(set([
             'record:10', 'record:11', 'record:20', 'record:21', 'record:30',
             'record:31', 'record:40', 'record:41', 'record:50', 'record:51',
             'record:60', 'record:61', 'record:70', 'record:71', 'record:80',
             'record:81', 'record:90', 'record:91', 'record:100'
         ]), set([hit.id for hit in response.hits]))
     self.assertEquals([{
             'fieldname': 'untokenized.field2',
             'path': [],
             'terms': [
                 {'count': 27, 'term': 'value3'},
                 {'count': 22, 'term': 'value0'},
                 {'count': 19, 'term': 'value5'},
                 {'count': 19, 'term': 'value7'},
                 {'count': 19, 'term': 'value9'},
             ]
         }], response.drilldownData)
    def testConversionOfComposedQuery(self):
        conversion = Conversion()
        cq = ComposedQuery('coreA')
        cq.setCoreQuery(core='coreA', query=parseString('Q0'), filterQueries=['Q1', 'Q2'], facets=['F0', 'F1'])
        cq.setCoreQuery(core='coreB', query=QueryExpression.searchterm(term='Q3'), filterQueries=['Q4'])
        cq.addMatch(dict(core='coreA', uniqueKey='keyA'), dict(core='coreB', key='keyB'))
        cq.addUnite(dict(core='coreA', query='AQuery'), dict(core='coreB', query='anotherQuery'))
        cq.start = 0
        cq.sortKeys = [dict(sortBy='field', sortDescending=True)]

        kwargs = {'q': cq}
        dump = conversion.jsonDumpMessage(message='aMessage', **kwargs)
        self.assertEquals(str, type(dump))
        message, kwargs = conversion.jsonLoadMessage(dump)
        self.assertEquals('aMessage', message)
        cq2 = kwargs['q']
        self.assertEquals(parseString('Q0'), cq2.queryFor('coreA'))
    def testConversionOfComposedQuery(self):
        conversion = Conversion()
        cq = ComposedQuery('coreA')
        cq.setCoreQuery(core='coreA',
                        query=parseString('Q0'),
                        filterQueries=['Q1', 'Q2'],
                        facets=['F0', 'F1'])
        cq.setCoreQuery(core='coreB',
                        query=QueryExpression.searchterm(term='Q3'),
                        filterQueries=['Q4'])
        cq.addMatch(dict(core='coreA', uniqueKey='keyA'),
                    dict(core='coreB', key='keyB'))
        cq.addUnite(dict(core='coreA', query='AQuery'),
                    dict(core='coreB', query='anotherQuery'))
        cq.start = 0
        cq.sortKeys = [dict(sortBy='field', sortDescending=True)]

        kwargs = {'q': cq}
        dump = conversion.jsonDumpMessage(message='aMessage', **kwargs)
        self.assertEquals(str, type(dump))
        message, kwargs = conversion.jsonLoadMessage(dump)
        self.assertEquals('aMessage', message)
        cq2 = kwargs['q']
        self.assertEquals(parseString('Q0'), cq2.queryFor('coreA'))