def testEchoedExtraRequestData(self):
     d = SruFieldDrilldown()
     result = "".join(
         d.echoedExtraRequestData(
             sruArguments={
                 'x-field-drilldown': ['term'],
                 'x-field-drilldown-fields': ['field0,field1'],
                 'otherArgument': ['ignored']
             }))
     self.assertEquals(
         DRILLDOWN_HEADER +
         '<dd:field-drilldown>term</dd:field-drilldown><dd:field-drilldown-fields>field0,field1</dd:field-drilldown-fields></dd:drilldown>',
         result)
 def testDrilldown(self):
     adapter = SruFieldDrilldown()
     observer = CallTrace("Observer")
     def executeQuery(**kwargs):
         raise StopIteration(Response(total=16, hits=range(16)))
         yield
     observer.methods['executeQuery'] = executeQuery
     adapter.addObserver(observer)
     def dd():
         result = yield adapter.drilldown('original', 'term', ['field0', 'field1'])
         yield result
     result = compose(dd()).next()
     self.assertEquals(2, len(observer.calledMethods))
     self.assertEquals(['executeQuery', 'executeQuery'], observer.calledMethodNames())
     self.assertEquals(cqlToExpression("(original) and field0=term"),  observer.calledMethods[0].kwargs['query'])
     self.assertEquals([("field0", 16), ("field1", 16)], result)
    def testDrilldown(self):
        adapter = SruFieldDrilldown()
        observer = CallTrace("Observer")

        def executeQuery(**kwargs):
            raise StopIteration(Response(total=16, hits=range(16)))
            yield

        observer.methods['executeQuery'] = executeQuery
        adapter.addObserver(observer)

        def dd():
            result = yield adapter.drilldown('original', 'term',
                                             ['field0', 'field1'])
            yield result

        result = compose(dd()).next()
        self.assertEquals(2, len(observer.calledMethods))
        self.assertEquals(['executeQuery', 'executeQuery'],
                          observer.calledMethodNames())
        self.assertEquals(cqlToExpression("(original) and field0=term"),
                          observer.calledMethods[0].kwargs['query'])
        self.assertEquals([("field0", 16), ("field1", 16)], result)
    def testSRUParamsAndXMLOutput(self):
        firstCall = []
        def executeQuery(**kwargs):
            if not firstCall:
                firstCall.append(True)
                raise StopIteration(Response(total=5, hits=range(5)))
            else:
                raise StopIteration(Response(total=10, hits=range(10)))
            yield
        sruFieldDrilldown = SruFieldDrilldown()
        observer = CallTrace("observer")
        sruFieldDrilldown.addObserver(observer)
        observer.methods["executeQuery"] = executeQuery

        result = compose(sruFieldDrilldown.extraResponseData(sruArguments={'x-field-drilldown': ['term'], 'x-field-drilldown-fields': ['field0,field1']}, query='original'))
        self.assertEqualsWS(DRILLDOWN_HEADER + """<dd:field-drilldown>
<dd:field name="field0">5</dd:field>
<dd:field name="field1">10</dd:field></dd:field-drilldown></dd:drilldown>""", "".join(result))

        self.assertEquals(['executeQuery', 'executeQuery'], [m.name for m in observer.calledMethods])
        self.assertEquals(['query', 'query'], [','.join((m.kwargs.keys())) for m in observer.calledMethods])
        self.assertEquals(cqlToExpression('(original) AND field0=term'), observer.calledMethods[0].kwargs['query'])
        self.assertEquals(cqlToExpression('(original) AND field1=term'), observer.calledMethods[1].kwargs['query'])
    def testSRUParamsAndXMLOutput(self):
        firstCall = []

        def executeQuery(**kwargs):
            if not firstCall:
                firstCall.append(True)
                raise StopIteration(Response(total=5, hits=range(5)))
            else:
                raise StopIteration(Response(total=10, hits=range(10)))
            yield

        sruFieldDrilldown = SruFieldDrilldown()
        observer = CallTrace("observer")
        sruFieldDrilldown.addObserver(observer)
        observer.methods["executeQuery"] = executeQuery

        result = compose(
            sruFieldDrilldown.extraResponseData(sruArguments={
                'x-field-drilldown': ['term'],
                'x-field-drilldown-fields': ['field0,field1']
            },
                                                query='original'))
        self.assertEqualsWS(
            DRILLDOWN_HEADER + """<dd:field-drilldown>
<dd:field name="field0">5</dd:field>
<dd:field name="field1">10</dd:field></dd:field-drilldown></dd:drilldown>""",
            "".join(result))

        self.assertEquals(['executeQuery', 'executeQuery'],
                          [m.name for m in observer.calledMethods])
        self.assertEquals(
            ['query', 'query'],
            [','.join((m.kwargs.keys())) for m in observer.calledMethods])
        self.assertEquals(cqlToExpression('(original) AND field0=term'),
                          observer.calledMethods[0].kwargs['query'])
        self.assertEquals(cqlToExpression('(original) AND field1=term'),
                          observer.calledMethods[1].kwargs['query'])
 def testEchoedExtraRequestData(self):
     d = SruFieldDrilldown()
     result = "".join(d.echoedExtraRequestData(sruArguments={'x-field-drilldown': ['term'], 'x-field-drilldown-fields': ['field0,field1'], 'otherArgument': ['ignored']}))
     self.assertEquals(DRILLDOWN_HEADER + '<dd:field-drilldown>term</dd:field-drilldown><dd:field-drilldown-fields>field0,field1</dd:field-drilldown-fields></dd:drilldown>', result)