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'])