def test_query(self):
        with patch.object(KairosDBRestClient, '_make_request') as mock_method:
            client = KairosDBRestClient()
            client.query(100, 200, metrics=[Metric('metric.name')])

        mock_method.assert_called_once_with(
            QueryMetricDataPointsRequest(100, 200, [Metric('metric.name')],
                                         None, 0))
class TestMetricLimit(unittest.TestCase):
    def setUp(self):
        self.metric = Metric('metric.name')

    def test_limit(self):
        self.metric.limit_to(100)

        self.assertEqual(self.metric.limit, 100)

    def test_should_fail_if_limit_not_number(self):
        with self.assertRaises(ValueError):
            self.metric.limit_to('not_a_number')
class TestMetricLimit(unittest.TestCase):
    def setUp(self):
        self.metric = Metric('metric.name')

    def test_limit(self):
        self.metric.limit_to(100)

        self.assertEqual(self.metric.limit, 100)

    def test_should_fail_if_limit_not_number(self):
        with self.assertRaises(ValueError):
            self.metric.limit_to('not_a_number')
class TestMetricTag(unittest.TestCase):
    def setUp(self):
        self.metric = Metric('metric.name')

    def test_metric_tag(self):
        self.metric.tag(host=['azure', 'amazon'], server=['server1'])

        self.assertEqual(self.metric.tags, {'host': ['azure', 'amazon'], 'server': ['server1']})

    def test_metric_tag_as_str(self):
        self.metric.tag(host='azure')

        self.assertEqual(self.metric.tags, {'host': ['azure']})
class TestMetricTag(unittest.TestCase):
    def setUp(self):
        self.metric = Metric('metric.name')

    def test_metric_tag(self):
        self.metric.tag(host=['azure', 'amazon'], server=['server1'])

        self.assertEqual(self.metric.tags, {
            'host': ['azure', 'amazon'],
            'server': ['server1']
        })

    def test_metric_tag_as_str(self):
        self.metric.tag(host='azure')

        self.assertEqual(self.metric.tags, {'host': ['azure']})
class TestMetricOrder(unittest.TestCase):
    def setUp(self):
        self.metric = Metric('metric.name')

    def test_order_asc(self):
        self.metric.order_asc()

        self.assertEqual(self.metric.order, 'asc')

    def test_order_desc(self):
        self.metric.order_desc()

        self.assertEqual(self.metric.order, 'desc')

    def test_order_direction(self):
        self.metric.order_direction('asc')

        self.assertEqual(self.metric.order, 'asc')

    def test_should_fail_if_invalid_direction(self):
        with self.assertRaises(MetricException):
            self.metric.order_direction('invalid')
class TestMetricAggregate(unittest.TestCase):
    def setUp(self):
        self.metric = Metric('metric.name')

    def test_aggregate(self):
        self.metric.aggregate(sum=(1, 'days'))

        self.assertEqual(self.metric.aggregators, [SumAggregator(1, 'days')])

    def test_aggregate_as_args(self):
        aggregator = SumAggregator(1, 'days')
        self.metric.aggregate(aggregator)

        self.assertEqual(self.metric.aggregators, [aggregator])

    def test_should_fail_if_invalid_method(self):
        with self.assertRaises(MetricException):
            self.metric.aggregate(invalid=(1, 'days'))

    def test_should_fail_if_invalid_aggregator(self):
        with self.assertRaises(MetricException):
            self.metric.aggregate('invalid_aggregator')
class TestMetricOrder(unittest.TestCase):
    def setUp(self):
        self.metric = Metric('metric.name')

    def test_order_asc(self):
        self.metric.order_asc()

        self.assertEqual(self.metric.order, 'asc')

    def test_order_desc(self):
        self.metric.order_desc()

        self.assertEqual(self.metric.order, 'desc')

    def test_order_direction(self):
        self.metric.order_direction('asc')

        self.assertEqual(self.metric.order, 'asc')

    def test_should_fail_if_invalid_direction(self):
        with self.assertRaises(MetricException):
            self.metric.order_direction('invalid')
class TestMetricAggregate(unittest.TestCase):
    def setUp(self):
        self.metric = Metric('metric.name')

    def test_aggregate(self):
        self.metric.aggregate(sum=(1, 'days'))

        self.assertEqual(self.metric.aggregators, [SumAggregator(1, 'days')])

    def test_aggregate_as_args(self):
        aggregator = SumAggregator(1, 'days')
        self.metric.aggregate(aggregator)

        self.assertEqual(self.metric.aggregators, [aggregator])

    def test_should_fail_if_invalid_method(self):
        with self.assertRaises(MetricException):
            self.metric.aggregate(invalid=(1, 'days'))

    def test_should_fail_if_invalid_aggregator(self):
        with self.assertRaises(MetricException):
            self.metric.aggregate('invalid_aggregator')
 def setUp(self):
     self.metric = Metric('metric.name')
class TestMetricGroupBy(unittest.TestCase):
    def setUp(self):
        self.metric = Metric('metric.name')

    def test_group_by_tag(self):
        self.metric.group_by(tags=['host'])

        self.assertEqual(self.metric.group_bys, [TagGroupBy(['host'])])

    def test_group_by_time(self):
        self.metric.group_by(time=(1, 'milliseconds', 2))

        self.assertEqual(self.metric.group_bys, [TimeGroupBy(1, 'milliseconds', 2)])

    def test_group_by_value(self):
        self.metric.group_by(value=1)

        self.assertEqual(self.metric.group_bys, [ValueGroupBy(1)])

    def test_group_by_as_args(self):
        groupers = [TagGroupBy(['host']), TimeGroupBy(1, 'milliseconds', 2), ValueGroupBy(1)]
        self.metric.group_by(*groupers)

        self.assertEqual(self.metric.group_bys, groupers)

    def test_should_fail_if_invalid_method(self):
        with self.assertRaises(MetricException):
            self.metric.group_by(invalid=1)

    def test_should_fail_if_invalid_grouper(self):
        with self.assertRaises(MetricException):
            self.metric.group_by('grouper')
 def setUp(self):
     self.metric = Metric('metric.name')
    def test_metric_name(self):
        metric = Metric('metric.name')

        self.assertEqual(metric.name, 'metric.name')
class TestMetricGroupBy(unittest.TestCase):
    def setUp(self):
        self.metric = Metric('metric.name')

    def test_group_by_tag(self):
        self.metric.group_by(tags=['host'])

        self.assertEqual(self.metric.group_bys, [TagGroupBy(['host'])])

    def test_group_by_time(self):
        self.metric.group_by(time=(1, 'milliseconds', 2))

        self.assertEqual(self.metric.group_bys,
                         [TimeGroupBy(1, 'milliseconds', 2)])

    def test_group_by_value(self):
        self.metric.group_by(value=1)

        self.assertEqual(self.metric.group_bys, [ValueGroupBy(1)])

    def test_group_by_as_args(self):
        groupers = [
            TagGroupBy(['host']),
            TimeGroupBy(1, 'milliseconds', 2),
            ValueGroupBy(1)
        ]
        self.metric.group_by(*groupers)

        self.assertEqual(self.metric.group_bys, groupers)

    def test_should_fail_if_invalid_method(self):
        with self.assertRaises(MetricException):
            self.metric.group_by(invalid=1)

    def test_should_fail_if_invalid_grouper(self):
        with self.assertRaises(MetricException):
            self.metric.group_by('grouper')