Example #1
0
    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)
Example #2
0
    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)
Example #3
0
    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)
Example #4
0
    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)
Example #5
0
    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)
Example #6
0
    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': '******'})
Example #7
0
    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)
Example #9
0
    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)
Example #10
0
 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)
Example #11
0
 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)
Example #12
0
    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')
Example #13
0
    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')
Example #14
0
    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)
Example #15
0
    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))
Example #16
0
    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)
Example #17
0
    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))
Example #18
0
    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)
Example #19
0
    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)
Example #20
0
    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)
Example #21
0
    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)
Example #22
0
    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)
Example #23
0
    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)
Example #24
0
    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)
Example #26
0
    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)
Example #27
0
    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)
Example #28
0
    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)
Example #29
0
    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)
Example #30
0
    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)
Example #31
0
    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)
Example #32
0
    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)
Example #33
0
    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)
Example #34
0
 def setUp(self):
     super(TestApiKeyAuthentication, self).setUp()
     self.api_key = 10
     self.query = query_factory.create(api_key=self.api_key)
Example #35
0
 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
Example #36
0
 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)