def test_ga_query_hook_is_called(self): service = Mock() ga_hook = Mock() client = QueryClient(service, ga_hook) self.mock_get('short-query', service) client.get('12345', date(2012, 1, 1), date(2012, 1, 2), 'metric') kwargs = { 'ids': 'ga:12345', 'metrics': 'ga:metric', 'start_date': '2012-01-01', 'end_date': '2012-01-02', } ga_hook.assert_called_once_with(kwargs)
class QueryClientTest(unittest.TestCase): def setUp(self): self.service = Mock() self.client = QueryClient(self.service) def mock_get(self, name): data = fixture("%s.json" % name) self.service.data.return_value.ga.return_value.get.return_value. \ execute.return_value = data def assert_get_called(self, **kwargs): self.service.data.return_value.ga.return_value.get. \ assert_called_once_with(**kwargs) def get_call_args_list(self): return self.service.data.return_value.ga.return_value.get. \ call_args_list def test_short_query(self): self.mock_get("short-query") results = self.client.get("12345", date(2012, 1, 1), date(2012, 1, 2), "metric", "dimension", "dimension2==value") self.assert_get_called( ids="ga:12345", start_date="2012-01-01", end_date="2012-01-02", metrics="ga:metric", dimensions="ga:dimension", filters="ga:dimension2==value" ) self.assertEqual(results.kind, "analytics#gaData") self.assertEqual(len(results), 48) result = iter(results).next() self.assertEqual(result["metrics"], {"metric": "00"}) self.assertEqual(result["dimensions"]["dimension"], u'20121110') def test_short_query_with_list_arguments(self): self.mock_get("short-query") results = self.client.get( ["12345", "123456"], date(2012, 11, 10), date(2012, 11, 11), ["metric", "metric2"], ["dimension", "dimension2"], ["dimension3==value", "dimension4==value"] ) self.assert_get_called( ids="ga:12345,ga:123456", start_date="2012-11-10", end_date="2012-11-11", metrics="ga:metric,ga:metric2", dimensions="ga:dimension,ga:dimension2", filters="ga:dimension3==value,ga:dimension4==value" ) self.assertEqual(results.kind, "analytics#gaData") self.assertEqual(len(results), 48) result = iter(results).next() self.assertEqual(result["metrics"], {"metric": "8083", "metric2": "7643"}) self.assertEqual(result["dimensions"], {"dimension": "20121110", "dimension2": "00"}) self.assertEqual(result["start_date"], date(2012, 11, 10)) self.assertEqual(result["end_date"], date(2012, 11, 11)) def test_short_query_with_no_dimension_or_filters(self): self.mock_get("short-query") results = self.client.get("12345", date(2012, 1, 1), date(2012, 1, 2), "metric") self.assert_get_called( ids="ga:12345", start_date="2012-01-01", end_date="2012-01-02", metrics="ga:metric" ) self.assertEqual(results.kind, "analytics#gaData") self.assertEqual(len(results), 48) def test_short_query_with_no_rows(self): self.mock_get("no-rows") results = self.client.get("12345", date(2012, 1, 1), date(2012, 1, 2), "metric") self.assertEqual(len(results), 0) self.assertEqual(len([r for r in results]), 0) def test_long_query(self): self.mock_get("long-query") results = self.client.get("12345", date(2012, 1, 1), date(2012, 1, 2), ["metric", "metric2"], ["dimension", "dimension2"]) self.assert_get_called( ids="ga:12345", start_date="2012-01-01", end_date="2012-01-02", metrics="ga:metric,ga:metric2", dimensions="ga:dimension,ga:dimension2") self.assertEqual(results.kind, "analytics#gaData") self.assertEqual(len(results), 2) i = iter(results) i.next() i.next() i.next() i.next() calls = self.get_call_args_list() self.assertEqual(len(calls), 2) self.assertEqual(calls[0], call( metrics='ga:metric,ga:metric2', dimensions='ga:dimension,ga:dimension2', ids='ga:12345', end_date='2012-01-02', start_date='2012-01-01' )) self.assertEqual(calls[1], call( metrics='ga:visits,ga:visitors', dimensions='ga:date,ga:hour', ids='ga:12345', end_date='2012-01-15', start_date='2012-01-10', start_index="1001", max_results="1000" ))
class QueryClientTest(unittest.TestCase): def setUp(self): self.service = Mock() self.client = QueryClient(self.service) def mock_get(self, name, service=None): if service is None: service = self.service data = fixture("%s.json" % name) service.data.return_value.ga.return_value.get.return_value. \ execute.return_value = data def assert_get_called(self, **kwargs): self.service.data.return_value.ga.return_value.get. \ assert_called_once_with(**kwargs) def get_call_args_list(self): return self.service.data.return_value.ga.return_value.get. \ call_args_list def test_short_query(self): self.mock_get("short-query") results = self.client.get("12345", date(2012, 1, 1), date(2012, 1, 2), "metric", "dimension", "dimension2==value") self.assert_get_called( ids="ga:12345", start_date="2012-01-01", end_date="2012-01-02", metrics="ga:metric", dimensions="ga:dimension", filters="ga:dimension2==value" ) self.assertEqual(results.kind, "analytics#gaData") self.assertEqual(len(results), 48) result = iter(results).next() self.assertEqual(result["metrics"], {"metric": "00"}) self.assertEqual(result["dimensions"]["dimension"], u'20121110') def test_short_query_with_ga_prefixes(self): self.mock_get("short-query") self.client.get("ga:12345", date(2012, 1, 1), date(2012, 1, 2), "ga:metric", "ga:dimension", "ga:dimension2==value") self.assert_get_called( ids="ga:12345", start_date="2012-01-01", end_date="2012-01-02", metrics="ga:metric", dimensions="ga:dimension", filters="ga:dimension2==value" ) def test_short_query_with_list_arguments(self): self.mock_get("short-query") results = self.client.get( ["12345", "123456"], date(2012, 11, 10), date(2012, 11, 11), ["metric", "metric2"], ["dimension", "dimension2"], ["dimension3==value", "dimension4==value"] ) self.assert_get_called( ids="ga:12345,ga:123456", start_date="2012-11-10", end_date="2012-11-11", metrics="ga:metric,ga:metric2", dimensions="ga:dimension,ga:dimension2", filters="ga:dimension3==value,ga:dimension4==value" ) self.assertEqual(results.kind, "analytics#gaData") self.assertEqual(len(results), 48) result = iter(results).next() self.assertEqual(result["metrics"], {"metric": "8083", "metric2": "7643"}) self.assertEqual(result["dimensions"], {"dimension": "20121110", "dimension2": "00"}) self.assertEqual(result["start_date"], date(2012, 11, 10)) self.assertEqual(result["end_date"], date(2012, 11, 11)) def test_short_query_with_no_dimension_or_filters(self): self.mock_get("short-query") results = self.client.get("12345", date(2012, 1, 1), date(2012, 1, 2), "metric") self.assert_get_called( ids="ga:12345", start_date="2012-01-01", end_date="2012-01-02", metrics="ga:metric" ) self.assertEqual(results.kind, "analytics#gaData") self.assertEqual(len(results), 48) def test_short_query_call_with_max_results(self): self.mock_get("short-query") # Result is intentionally ignored: short-query doesn't mock length # since that wouldn't test any logic in gapy. self.client.get("12345", date(2012, 1, 1), date(2012, 1, 2), "metric", max_results=10) self.assert_get_called( ids="ga:12345", start_date="2012-01-01", end_date="2012-01-02", metrics="ga:metric", max_results=10, ) def test_short_query_call_with_sort(self): self.mock_get("short-query") # Result is intentionally ignored: short-query doesn't mock length # since that wouldn't test any logic in gapy. self.client.get("12345", date(2012, 1, 1), date(2012, 1, 2), "metric", sort=["foo", "-bar"]) self.assert_get_called( ids="ga:12345", start_date="2012-01-01", end_date="2012-01-02", metrics="ga:metric", sort="ga:foo,-ga:bar", ) def test_short_query_with_no_rows(self): self.mock_get("no-rows") results = self.client.get("12345", date(2012, 1, 1), date(2012, 1, 2), "metric") self.assertEqual(len(results), 0) self.assertEqual(len([r for r in results]), 0) def test_short_query_call_with_segment(self): self.mock_get("short-query") # Result is intentionally ignored: short-query doesn't mock length # since that wouldn't test any logic in gapy. self.client.get("12345", date(2012, 1, 1), date(2012, 1, 2), "metric", sort=["foo", "-bar"], segment="gaid::5bSnKB8rR6iYZqYezSS1sQ") self.assert_get_called( ids="ga:12345", start_date="2012-01-01", end_date="2012-01-02", metrics="ga:metric", sort="ga:foo,-ga:bar", segment="gaid::5bSnKB8rR6iYZqYezSS1sQ" ) def test_long_query(self): self.mock_get("long-query") results = self.client.get("12345", date(2012, 1, 1), date(2012, 1, 2), ["metric", "metric2"], ["dimension", "dimension2"]) self.assert_get_called( ids="ga:12345", start_date="2012-01-01", end_date="2012-01-02", metrics="ga:metric,ga:metric2", dimensions="ga:dimension,ga:dimension2") self.assertEqual(results.kind, "analytics#gaData") self.assertEqual(len(results), 2) i = iter(results) i.next() i.next() i.next() i.next() calls = self.get_call_args_list() self.assertEqual(len(calls), 2) self.assertEqual(calls[0], call( metrics='ga:metric,ga:metric2', dimensions='ga:dimension,ga:dimension2', ids='ga:12345', end_date='2012-01-02', start_date='2012-01-01', )) self.assertEqual(calls[1], call( metrics='ga:visits,ga:visitors', dimensions='ga:date,ga:hour', ids='ga:12345', end_date='2012-01-15', start_date='2012-01-10', start_index="1001", max_results="1000", # Because the next-link instructs us to use # this as max_results. )) def test_long_query_max_results(self): # Check that when max_results is specified and sufficient results # are fetched already, nextLink is not followed and the API is called # with max_results = N_MAX self.mock_get("long-query") # This is the number of results N_MAX = 2 results = self.client.get("12345", date(2012, 1, 1), date(2012, 1, 2), ["metric", "metric2"], ["dimension", "dimension2"], max_results=N_MAX) # Fetch a limited number of results r = list(islice(results, 0, 99)) N_ROWS_IN_FIXTURE = 2 self.assertEqual(len(r), N_ROWS_IN_FIXTURE) calls = self.get_call_args_list() self.assertEqual(len(calls), 1) self.assertEqual(calls[0], call( metrics='ga:metric,ga:metric2', dimensions='ga:dimension,ga:dimension2', ids='ga:12345', end_date='2012-01-02', start_date='2012-01-01', max_results=N_MAX, )) def test_ga_query_hook_is_called(self): service = Mock() ga_hook = Mock() client = QueryClient(service, ga_hook) self.mock_get('short-query', service) client.get('12345', date(2012, 1, 1), date(2012, 1, 2), 'metric') kwargs = { 'ids': 'ga:12345', 'metrics': 'ga:metric', 'start_date': '2012-01-01', 'end_date': '2012-01-02', } ga_hook.assert_called_once_with(kwargs)
class QueryClientTest(unittest.TestCase): def setUp(self): self.service = Mock() self.client = QueryClient(self.service) def mock_get(self, name, service=None): if service is None: service = self.service data = fixture("%s.json" % name) service.data.return_value.ga.return_value.get.return_value. \ execute.return_value = data def assert_get_called(self, **kwargs): self.service.data.return_value.ga.return_value.get. \ assert_called_once_with(**kwargs) def get_call_args_list(self): return self.service.data.return_value.ga.return_value.get. \ call_args_list def test_short_query(self): self.mock_get("short-query") results = self.client.get("12345", date(2012, 1, 1), date(2012, 1, 2), "metric", "dimension", "dimension2==value") self.assert_get_called(ids="ga:12345", start_date="2012-01-01", end_date="2012-01-02", metrics="ga:metric", dimensions="ga:dimension", filters="ga:dimension2==value") self.assertEqual(results.kind, "analytics#gaData") self.assertEqual(len(results), 48) result = iter(results).next() self.assertEqual(result["metrics"], {"metric": "00"}) self.assertEqual(result["dimensions"]["dimension"], u'20121110') def test_short_query_with_ga_prefixes(self): self.mock_get("short-query") self.client.get("ga:12345", date(2012, 1, 1), date(2012, 1, 2), "ga:metric", "ga:dimension", "ga:dimension2==value") self.assert_get_called(ids="ga:12345", start_date="2012-01-01", end_date="2012-01-02", metrics="ga:metric", dimensions="ga:dimension", filters="ga:dimension2==value") def test_short_query_with_list_arguments(self): self.mock_get("short-query") results = self.client.get(["12345", "123456"], date(2012, 11, 10), date(2012, 11, 11), ["metric", "metric2"], ["dimension", "dimension2"], ["dimension3==value", "dimension4==value"]) self.assert_get_called( ids="ga:12345,ga:123456", start_date="2012-11-10", end_date="2012-11-11", metrics="ga:metric,ga:metric2", dimensions="ga:dimension,ga:dimension2", filters="ga:dimension3==value,ga:dimension4==value") self.assertEqual(results.kind, "analytics#gaData") self.assertEqual(len(results), 48) result = iter(results).next() self.assertEqual(result["metrics"], { "metric": "8083", "metric2": "7643" }) self.assertEqual(result["dimensions"], { "dimension": "20121110", "dimension2": "00" }) self.assertEqual(result["start_date"], date(2012, 11, 10)) self.assertEqual(result["end_date"], date(2012, 11, 11)) def test_short_query_with_no_dimension_or_filters(self): self.mock_get("short-query") results = self.client.get("12345", date(2012, 1, 1), date(2012, 1, 2), "metric") self.assert_get_called(ids="ga:12345", start_date="2012-01-01", end_date="2012-01-02", metrics="ga:metric") self.assertEqual(results.kind, "analytics#gaData") self.assertEqual(len(results), 48) def test_short_query_call_with_max_results(self): self.mock_get("short-query") # Result is intentionally ignored: short-query doesn't mock length # since that wouldn't test any logic in gapy. self.client.get("12345", date(2012, 1, 1), date(2012, 1, 2), "metric", max_results=10) self.assert_get_called( ids="ga:12345", start_date="2012-01-01", end_date="2012-01-02", metrics="ga:metric", max_results=10, ) def test_short_query_call_with_sort(self): self.mock_get("short-query") # Result is intentionally ignored: short-query doesn't mock length # since that wouldn't test any logic in gapy. self.client.get("12345", date(2012, 1, 1), date(2012, 1, 2), "metric", sort=["foo", "-bar"]) self.assert_get_called( ids="ga:12345", start_date="2012-01-01", end_date="2012-01-02", metrics="ga:metric", sort="ga:foo,-ga:bar", ) def test_short_query_with_no_rows(self): self.mock_get("no-rows") results = self.client.get("12345", date(2012, 1, 1), date(2012, 1, 2), "metric") self.assertEqual(len(results), 0) self.assertEqual(len([r for r in results]), 0) def test_short_query_call_with_segment(self): self.mock_get("short-query") # Result is intentionally ignored: short-query doesn't mock length # since that wouldn't test any logic in gapy. self.client.get("12345", date(2012, 1, 1), date(2012, 1, 2), "metric", sort=["foo", "-bar"], segment="gaid::5bSnKB8rR6iYZqYezSS1sQ") self.assert_get_called(ids="ga:12345", start_date="2012-01-01", end_date="2012-01-02", metrics="ga:metric", sort="ga:foo,-ga:bar", segment="gaid::5bSnKB8rR6iYZqYezSS1sQ") def test_long_query(self): self.mock_get("long-query") results = self.client.get("12345", date(2012, 1, 1), date(2012, 1, 2), ["metric", "metric2"], ["dimension", "dimension2"]) self.assert_get_called(ids="ga:12345", start_date="2012-01-01", end_date="2012-01-02", metrics="ga:metric,ga:metric2", dimensions="ga:dimension,ga:dimension2") self.assertEqual(results.kind, "analytics#gaData") self.assertEqual(len(results), 2) i = iter(results) i.next() i.next() i.next() i.next() calls = self.get_call_args_list() self.assertEqual(len(calls), 2) self.assertEqual( calls[0], call( metrics='ga:metric,ga:metric2', dimensions='ga:dimension,ga:dimension2', ids='ga:12345', end_date='2012-01-02', start_date='2012-01-01', )) self.assertEqual( calls[1], call( metrics='ga:visits,ga:visitors', dimensions='ga:date,ga:hour', ids='ga:12345', end_date='2012-01-15', start_date='2012-01-10', start_index="1001", max_results="1000", # Because the next-link instructs us to use # this as max_results. )) def test_long_query_max_results(self): # Check that when max_results is specified and sufficient results # are fetched already, nextLink is not followed and the API is called # with max_results = N_MAX self.mock_get("long-query") # This is the number of results N_MAX = 2 results = self.client.get("12345", date(2012, 1, 1), date(2012, 1, 2), ["metric", "metric2"], ["dimension", "dimension2"], max_results=N_MAX) # Fetch a limited number of results r = list(islice(results, 0, 99)) N_ROWS_IN_FIXTURE = 2 self.assertEqual(len(r), N_ROWS_IN_FIXTURE) calls = self.get_call_args_list() self.assertEqual(len(calls), 1) self.assertEqual( calls[0], call( metrics='ga:metric,ga:metric2', dimensions='ga:dimension,ga:dimension2', ids='ga:12345', end_date='2012-01-02', start_date='2012-01-01', max_results=N_MAX, )) def test_ga_query_hook_is_called(self): service = Mock() ga_hook = Mock() client = QueryClient(service, ga_hook) self.mock_get('short-query', service) client.get('12345', date(2012, 1, 1), date(2012, 1, 2), 'metric') kwargs = { 'ids': 'ga:12345', 'metrics': 'ga:metric', 'start_date': '2012-01-01', 'end_date': '2012-01-02', } ga_hook.assert_called_once_with(kwargs)