class DrilldownQueriesTest(SeecrTestCase):
    def setUp(self):
        SeecrTestCase.setUp(self)
        self.dbdq = DrilldownQueries()
        self.observer = CallTrace(methods=dict(executeQuery=mockExecuteQuery))
        self.dbdq.addObserver(self.observer)


    def testDrilldownQuery(self):
        result = retval(self.dbdq.executeQuery(extraArguments={'x-drilldown-query': ['a = b']}))
        self.assertEquals('result', result)
        self.assertEquals(['executeQuery'], self.observer.calledMethodNames())
        executeQueryMethod = self.observer.calledMethods[0]
        self.assertEquals([('a', ['b'])], executeQueryMethod.kwargs['drilldownQueries'])

        self.observer.calledMethods.reset()

        result = retval(self.dbdq.executeQuery(extraArguments={'x-drilldown-query': ['a exact b']}))
        self.assertEquals('result', result)
        self.assertEquals(['executeQuery'], self.observer.calledMethodNames())
        executeQueryMethod = self.observer.calledMethods[0]
        self.assertEquals([('a', ['b'])], executeQueryMethod.kwargs['drilldownQueries'])

    def testErrorForInvalidFormatDrilldownQuery(self):
        try:
            retval(self.dbdq.executeQuery(extraArguments={'x-drilldown-query': ['a']}))
            self.fail()
        except ValueError, e:
            self.assertEquals('x-drilldown-query format should be field=value', str(e))
        self.assertEquals([], self.observer.calledMethodNames())
class DrilldownQueriesTest(SeecrTestCase):
    def setUp(self):
        SeecrTestCase.setUp(self)
        self.dbdq = DrilldownQueries()
        self.observer = CallTrace(methods=dict(executeQuery=mockExecuteQuery))
        self.dbdq.addObserver(self.observer)

    def testDrilldownQuery(self):
        result = retval(
            self.dbdq.executeQuery(
                extraArguments={'x-drilldown-query': ['a = b']}))
        self.assertEqual('result', result)
        self.assertEqual(['executeQuery'], self.observer.calledMethodNames())
        executeQueryMethod = self.observer.calledMethods[0]
        self.assertEqual([('a', ['b'])],
                         executeQueryMethod.kwargs['drilldownQueries'])

        self.observer.calledMethods.reset()

        result = retval(
            self.dbdq.executeQuery(
                extraArguments={'x-drilldown-query': ['a exact b']}))
        self.assertEqual('result', result)
        self.assertEqual(['executeQuery'], self.observer.calledMethodNames())
        executeQueryMethod = self.observer.calledMethods[0]
        self.assertEqual([('a', ['b'])],
                         executeQueryMethod.kwargs['drilldownQueries'])

    def testErrorForInvalidFormatDrilldownQuery(self):
        try:
            retval(
                self.dbdq.executeQuery(
                    extraArguments={'x-drilldown-query': ['a']}))
            self.fail()
        except ValueError as e:
            self.assertEqual('x-drilldown-query format should be field=value',
                             str(e))
        self.assertEqual([], self.observer.calledMethodNames())

    def testNoDrilldownQuery(self):
        result = retval(self.dbdq.executeQuery(extraArguments={}, query='*'))
        self.assertEqual('result', result)
        self.assertEqual(['executeQuery'], self.observer.calledMethodNames())
        executeQueryMethod = self.observer.calledMethods[0]
        self.assertEqual([], executeQueryMethod.kwargs['drilldownQueries'])
        self.assertEqual("*", executeQueryMethod.kwargs['query'])