def test_enqueues_query_with_correct_data_source(self): query = query_factory.create(schedule="60") query2 = query_factory.create(schedule="60", query=query.query, query_hash=query.query_hash) retrieved_at = utcnow() - datetime.timedelta(minutes=10) query_result = query_result_factory.create(retrieved_at=retrieved_at, query=query.query, query_hash=query.query_hash) query.latest_query_data = query_result query2.latest_query_data = query_result query.save() query2.save() with patch('redash.tasks.QueryTask.add_task') as add_job_mock: refresh_queries() add_job_mock.assert_has_calls([ call(query2.query, query2.data_source, scheduled=True, metadata=ANY), call(query.query, query.data_source, scheduled=True, metadata=ANY) ], any_order=True) self.assertEquals(2, add_job_mock.call_count)
def test_doesnt_update_queries_with_different_data_source(self): query1 = query_factory.create(query=self.query, data_source=self.data_source) query2 = query_factory.create(query=self.query, data_source=self.data_source) query3 = query_factory.create(query=self.query, data_source=data_source_factory.create()) query_result_id = data_manager.store_query_result(self.data_source.id, self.query, self.data, self.runtime, self.utcnow) self.assertEqual(models.Query.get_by_id(query1.id)._data['latest_query_data'], query_result_id) self.assertEqual(models.Query.get_by_id(query2.id)._data['latest_query_data'], query_result_id) self.assertNotEqual(models.Query.get_by_id(query3.id)._data['latest_query_data'], query_result_id)
def test_enqueues_only_for_relevant_data_source(self): query = query_factory.create(ttl=60) query2 = query_factory.create(ttl=3600, query=query.query, query_hash=query.query_hash) retrieved_at = datetime.datetime.utcnow() - datetime.timedelta(minutes=10) query_result = query_result_factory.create(retrieved_at=retrieved_at, query=query.query, query_hash=query.query_hash) query.latest_query_data = query_result query2.latest_query_data = query_result query.save() query2.save() with patch('redash.data.Manager.add_job') as add_job_mock: data_manager.refresh_queries() add_job_mock.assert_called_once_with(query.query, worker.Job.LOW_PRIORITY, query.data_source)
def test_enqueues_only_for_relevant_data_source(self): query = query_factory.create(ttl=60) query2 = query_factory.create(ttl=3600, query=query.query, query_hash=query.query_hash) retrieved_at = datetime.datetime.utcnow() - datetime.timedelta(minutes=10) query_result = query_result_factory.create(retrieved_at=retrieved_at, query=query.query, query_hash=query.query_hash) query.latest_query_data = query_result query2.latest_query_data = query_result query.save() query2.save() with patch('redash.tasks.QueryTask.add_task') as add_job_mock: refresh_queries() add_job_mock.assert_called_once_with(query.query, query.data_source, scheduled=True)
def test_enqueues_query_with_correct_data_source(self): query = query_factory.create(ttl=60) query2 = query_factory.create(ttl=60, query=query.query, query_hash=query.query_hash) retrieved_at = datetime.datetime.utcnow() - datetime.timedelta(minutes=10) query_result = query_result_factory.create(retrieved_at=retrieved_at, query=query.query, query_hash=query.query_hash) query.latest_query_data = query_result query2.latest_query_data = query_result query.save() query2.save() with patch('redash.data.Manager.add_job') as add_job_mock: data_manager.refresh_queries() add_job_mock.assert_has_calls([call(query2.query, worker.Job.LOW_PRIORITY, query2.data_source), call(query.query, worker.Job.LOW_PRIORITY, query.data_source)], any_order=True) self.assertEquals(2, add_job_mock.call_count)
def test_enqueues_query_only_once(self): query = query_factory.create(schedule="60") query2 = query_factory.create(schedule="60", query=query.query, query_hash=query.query_hash, data_source=query.data_source) retrieved_at = datetime.datetime.utcnow() - datetime.timedelta(minutes=10) query_result = query_result_factory.create(retrieved_at=retrieved_at, query=query.query, query_hash=query.query_hash) query.latest_query_data = query_result query2.latest_query_data = query_result query.save() query2.save() with patch('redash.tasks.QueryTask.add_task') as add_job_mock: refresh_queries() add_job_mock.assert_called_once_with(query.query, query.data_source, scheduled=True, metadata=ANY)#{'Query ID': query.id, 'Username': '******'})
def test_enqueues_only_for_relevant_data_source(self): query = query_factory.create(schedule="60") query2 = query_factory.create(schedule="3600", query=query.query, query_hash=query.query_hash) import psycopg2 retrieved_at = datetime.datetime.utcnow().replace(tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=0, name=None)) - datetime.timedelta(minutes=10) query_result = query_result_factory.create(retrieved_at=retrieved_at, query=query.query, query_hash=query.query_hash) query.latest_query_data = query_result query2.latest_query_data = query_result query.save() query2.save() with patch('redash.tasks.QueryTask.add_task') as add_job_mock: refresh_queries() add_job_mock.assert_called_once_with(query.query, query.data_source, scheduled=True, metadata=ANY)
def test_enqueues_query_with_correct_data_source(self): query = query_factory.create(schedule="60") query2 = query_factory.create(schedule="60", query=query.query, query_hash=query.query_hash) retrieved_at = datetime.datetime.utcnow() - datetime.timedelta(minutes=10) query_result = query_result_factory.create(retrieved_at=retrieved_at, query=query.query, query_hash=query.query_hash) query.latest_query_data = query_result query2.latest_query_data = query_result query.save() query2.save() with patch('redash.tasks.QueryTask.add_task') as add_job_mock: refresh_queries() add_job_mock.assert_has_calls([call(query2.query, query2.data_source, scheduled=True), call(query.query, query.data_source, scheduled=True)], any_order=True) self.assertEquals(2, add_job_mock.call_count)
def setUp(self): super(CsvQueryResultAPITest, self).setUp() self.paths = [] self.query_result = query_result_factory.create() self.query = query_factory.create() self.path = '/api/queries/{0}/results/{1}.csv'.format(self.query.id, self.query_result.id)
def setUp(self): super(CsvQueryResultAPITest, self).setUp() self.paths = [] self.query_result = query_result_factory.create() self.query = query_factory.create() self.path = '/api/queries/{0}/results/{1}.csv'.format( self.query.id, self.query_result.id)
def test_doesnt_use_cache_headers_for_non_specific_result(self): query_result = query_result_factory.create() query = query_factory.create(latest_query_data=query_result) with app.test_client() as c, authenticated_user(c): rv = json_request(c.get, '/api/queries/{}/results.json'.format(query.id)) self.assertNotIn('Cache-Control', rv.headers)
def test_update_query(self): query = query_factory.create() with app.test_client() as c, authenticated_user(c): rv = json_request(c.post, '/api/queries/{0}'.format(query.id), data={'name': 'Testing'}) self.assertEqual(rv.status_code, 200) self.assertEquals(rv.json['name'], 'Testing')
def test_get_all_queries(self): queries = [query_factory.create() for _ in range(10)] with app.test_client() as c, authenticated_user(c): rv = json_request(c.get, '/api/queries') self.assertEquals(rv.status_code, 200) self.assertEquals(len(rv.json), 10)
def test_get_query(self): query = query_factory.create() with app.test_client() as c, authenticated_user(c): rv = json_request(c.get, '/api/queries/{0}'.format(query.id)) self.assertEquals(rv.status_code, 200) self.assertResponseEqual(rv.json, query.to_dict(with_visualizations=True))
def test_skips_queries_with_no_ttl(self): query = query_factory.create(schedule=None) retrieved_at = datetime.datetime.utcnow() - datetime.timedelta(minutes=10) query_result = query_result_factory.create(retrieved_at=retrieved_at, query=query.query, query_hash=query.query_hash) with patch('redash.tasks.QueryTask.add_task') as add_job_mock: refresh_queries() self.assertFalse(add_job_mock.called)
def test_skips_queries_with_no_ttl(self): query = query_factory.create(ttl=-1) retrieved_at = datetime.datetime.utcnow() - datetime.timedelta(minutes=10) query_result = query_result_factory.create(retrieved_at=retrieved_at, query=query.query, query_hash=query.query_hash) with patch('redash.data.Manager.add_job') as add_job_mock: data_manager.refresh_queries() self.assertFalse(add_job_mock.called)
def test_post_result_list(self): data_source = data_source_factory.create() query_result = query_result_factory.create() query = query_factory.create() with app.test_client() as c, authenticated_user(c): rv = json_request( c.post, "/api/query_results", data={"data_source_id": data_source.id, "query": query.query} ) self.assertEquals(rv.status_code, 200)
def test_get_query(self): query = query_factory.create() with app.test_client() as c, authenticated_user(c): rv = json_request(c.get, '/api/queries/{0}'.format(query.id)) self.assertEquals(rv.status_code, 200) d = query.to_dict(with_visualizations=True) d.pop('created_at') self.assertDictContainsSubset(d, rv.json)
def test_update_query(self): query = query_factory.create() other_user = user_factory.create() with app.test_client() as c, authenticated_user(c, user=other_user): rv = json_request(c.post, "/api/queries/{0}".format(query.id), data={"name": "Testing"}) self.assertEqual(rv.status_code, 200) self.assertEqual(rv.json["name"], "Testing") self.assertEqual(rv.json["last_modified_by"]["id"], other_user.id)
def test_create_visualization(self): query = query_factory.create() data = {"query_id": query.id, "name": "Chart", "description": "", "options": {}, "type": "CHART"} with app.test_client() as c, authenticated_user(c): rv = json_request(c.post, "/api/visualizations", data=data) self.assertEquals(rv.status_code, 200) data.pop("query_id") self.assertDictContainsSubset(data, rv.json)
def test_enqueues_only_for_relevant_data_source(self): query = query_factory.create(ttl=60) query2 = query_factory.create(ttl=3600, query=query.query, query_hash=query.query_hash) retrieved_at = datetime.datetime.utcnow() - datetime.timedelta( minutes=10) query_result = query_result_factory.create(retrieved_at=retrieved_at, query=query.query, query_hash=query.query_hash) query.latest_query_data = query_result query2.latest_query_data = query_result query.save() query2.save() with patch('redash.tasks.QueryTask.add_task') as add_job_mock: refresh_queries() add_job_mock.assert_called_once_with(query.query, query.data_source, scheduled=True)
def test_skips_queries_with_no_ttl(self): query = query_factory.create(ttl=-1) retrieved_at = datetime.datetime.utcnow() - datetime.timedelta( minutes=10) query_result = query_result_factory.create(retrieved_at=retrieved_at, query=query.query, query_hash=query.query_hash) with patch('redash.data.Manager.add_job') as add_job_mock: data_manager.refresh_queries() self.assertFalse(add_job_mock.called)
def test_enqueues_outdated_queries(self): query = query_factory.create(schedule="60") retrieved_at = datetime.datetime.utcnow() - datetime.timedelta(minutes=10) query_result = query_result_factory.create(retrieved_at=retrieved_at, query=query.query, query_hash=query.query_hash) query.latest_query_data = query_result query.save() with patch('redash.tasks.QueryTask.add_task') as add_job_mock: refresh_queries() add_job_mock.assert_called_with(query.query, query.data_source, scheduled=True, metadata=ANY)
def test_enqueues_only_for_relevant_data_source(self): query = query_factory.create(ttl=60) query2 = query_factory.create(ttl=3600, query=query.query, query_hash=query.query_hash) retrieved_at = datetime.datetime.utcnow() - datetime.timedelta( minutes=10) query_result = query_result_factory.create(retrieved_at=retrieved_at, query=query.query, query_hash=query.query_hash) query.latest_query_data = query_result query2.latest_query_data = query_result query.save() query2.save() with patch('redash.data.Manager.add_job') as add_job_mock: data_manager.refresh_queries() add_job_mock.assert_called_once_with(query.query, worker.Job.LOW_PRIORITY, query.data_source)
def test_doesnt_update_queries_with_different_data_source(self): query1 = query_factory.create(query=self.query, data_source=self.data_source) query2 = query_factory.create(query=self.query, data_source=self.data_source) query3 = query_factory.create(query=self.query, data_source=data_source_factory.create()) query_result_id = data_manager.store_query_result( self.data_source.id, self.query, self.data, self.runtime, self.utcnow) self.assertEqual( models.Query.get_by_id(query1.id)._data['latest_query_data'], query_result_id) self.assertEqual( models.Query.get_by_id(query2.id)._data['latest_query_data'], query_result_id) self.assertNotEqual( models.Query.get_by_id(query3.id)._data['latest_query_data'], query_result_id)
def test_post_result_list(self): data_source = data_source_factory.create() query_result = query_result_factory.create() query = query_factory.create() with app.test_client() as c, authenticated_user(c): rv = json_request(c.post, '/api/query_results', data={ 'data_source_id': data_source.id, 'query': query.query }) self.assertEquals(rv.status_code, 200)
def test_enqueues_query_with_correct_data_source(self): query = query_factory.create(ttl=60) query2 = query_factory.create(ttl=60, query=query.query, query_hash=query.query_hash) retrieved_at = datetime.datetime.utcnow() - datetime.timedelta( minutes=10) query_result = query_result_factory.create(retrieved_at=retrieved_at, query=query.query, query_hash=query.query_hash) query.latest_query_data = query_result query2.latest_query_data = query_result query.save() query2.save() with patch('redash.data.Manager.add_job') as add_job_mock: data_manager.refresh_queries() add_job_mock.assert_has_calls([ call(query2.query, worker.Job.LOW_PRIORITY, query2.data_source), call(query.query, worker.Job.LOW_PRIORITY, query.data_source) ], any_order=True) self.assertEquals(2, add_job_mock.call_count)
def test_create_visualization(self): query = query_factory.create() data = { 'query_id': query.id, 'name': 'Chart', 'description':'', 'options': {}, 'type': 'CHART' } with app.test_client() as c, authenticated_user(c): rv = json_request(c.post, '/api/visualizations', data=data) self.assertEquals(rv.status_code, 200) data.pop('query_id') self.assertDictContainsSubset(data, rv.json)
def test_create_visualization(self): query = query_factory.create() data = { 'query_id': query.id, 'name': 'Chart', 'description': '', 'options': {}, 'type': 'CHART' } with app.test_client() as c, authenticated_user(c): rv = json_request(c.post, '/api/visualizations', data=data) self.assertEquals(rv.status_code, 200) data.pop('query_id') self.assertDictContainsSubset(data, rv.json)
def setUp(self): super(TestApiKeyAuthentication, self).setUp() self.api_key = 10 self.query = query_factory.create(api_key=self.api_key)
def setUp(self): super(TestHMACAuthentication, self).setUp() self.api_key = 10 self.query = query_factory.create(api_key=self.api_key) self.path = '/api/queries/{0}'.format(self.query.id) self.expires = time.time() + 1800
def test_uses_cache_headers_for_specific_result(self): query_result = query_result_factory.create() query = query_factory.create(latest_query_data=query_result) with app.test_client() as c, authenticated_user(c): rv = json_request(c.get, '/api/queries/{}/results/{}.json'.format(query.id, query_result.id)) self.assertIn('Cache-Control', rv.headers)