def test_form_fails_blacklist(self): q = SimpleQueryFactory(sql="delete $$a$$;", created_by_user_id=None) q.params = {} form = QueryForm(model_to_dict(q)) self.assertFalse(form.is_valid())
def test_query_with_no_resultset_doesnt_throw_error(self): query = SimpleQueryFactory(sql="") resp = self.client.get('%s?query_id=%s' % (reverse("explorer_playground"), query.id)) self.assertTemplateUsed(resp, 'explorer/play.html')
def test_stream_csv_from_query(self): q = SimpleQueryFactory() resp = self.client.get( reverse("stream_query", kwargs={'query_id': q.id})) self.assertEqual('text/csv', resp['content-type'])
def test_fullscreen(self): query = SimpleQueryFactory(sql="select 1;") resp = self.client.get( reverse("query_detail", kwargs={'query_id': query.id}) + '?fullscreen=1') self.assertTemplateUsed(resp, 'explorer/fullscreen.html')
def test_params_in_download(self): q = SimpleQueryFactory(sql="select '$$foo$$';") url = '%s?params=%s' % (reverse("download_query", kwargs={'query_id': q.id}), 'foo:123') resp = self.client.get(url) self.assertContains(resp, "'123'")
def test_query_with_bad_sql_renders_error(self): query = SimpleQueryFactory(sql="error") resp = self.client.get( reverse("query_detail", kwargs={'query_id': query.id})) self.assertTemplateUsed(resp, 'explorer/query.html') self.assertContains(resp, "syntax error")
def test_doesnt_render_results_if_show_is_none(self): query = SimpleQueryFactory(sql='select 6870+1;') resp = self.client.get( reverse("query_detail", kwargs={'query_id': query.id}) + '?show=0') self.assertTemplateUsed(resp, 'explorer/query.html') self.assertNotContains(resp, '6871')
def test_query_with_bad_sql_renders_error_on_save(self): query = SimpleQueryFactory(sql="select 1;") resp = self.client.post(reverse("query_detail", kwargs={'query_id': query.id}), data={'sql': 'error'}) self.assertTemplateUsed(resp, 'explorer/query.html') self.assertContains(resp, "syntax error")
def test_form_is_invalid_with_non_select_statement(self): q = SimpleQueryFactory(sql="delete $$a$$;", created_by_user_id=None) q.params = {} form = QueryForm(model_to_dict(q)) self.assertFalse(form.is_valid())
def test_query_saves_to_log(self): query = SimpleQueryFactory() data = model_to_dict(query) data['sql'] = 'select 12345;' self.client.post(reverse("query_detail", kwargs={'query_id': query.id}), data) self.assertEqual(1, QueryLog.objects.count())
def test_email_calls_task(self, mocked_execute): query = SimpleQueryFactory() url = reverse("email_csv_query", kwargs={'query_id': query.id}) self.client.post(url, data={'email': '*****@*****.**'}, **{'HTTP_X_REQUESTED_WITH': 'XMLHttpRequest'}) self.assertEqual(mocked_execute.delay.call_count, 1)
def test_saving_non_executing_query_with__wrong_url_params_works(self): q = SimpleQueryFactory(sql="select $$swap$$;") data = model_to_dict(q) url = '{}?params={}'.format(reverse("query_detail", kwargs={'query_id': q.id}), 'foo:123') resp = self.client.post(url, data) self.assertContains(resp, 'saved')
def test_tab_delim_in_download(self): q = SimpleQueryFactory(sql="select 1, 2;") url = '%s?delim=tab' % reverse("query_download", kwargs={'query_id': q.id}) resp = self.client.get(url) self.assertContains(resp, "1\t2")
def test_custom_delimiter(self): q = SimpleQueryFactory(sql='select 1, 2') exporter = CSVExporter(query=q) res = exporter.get_output(delim='|') self.assertEqual(res, '1|2\r\n1|2\r\n')
def test_creating_query_does_not_save_to_log(self): query = SimpleQueryFactory() self.client.post(reverse("query_create"), model_to_dict(query)) self.assertEqual(0, QueryLog.objects.count())
def test_form_is_valid_with_valid_sql(self): q = SimpleQueryFactory(sql="select 1;", created_by_user_id=None) form = QueryForm(model_to_dict(q)) self.assertTrue(form.is_valid())
def test_is_playground(self): self.assertTrue(QueryLog(sql='foo').is_playground) q = SimpleQueryFactory() self.assertFalse(QueryLog(sql='foo', query_id=q.id).is_playground)
def test_shared(self): q = SimpleQueryFactory() q2 = SimpleQueryFactory() with self.settings(EXPLORER_USER_QUERY_VIEWS={'foo': [q.id]}): self.assertTrue(q.shared) self.assertFalse(q2.shared)
def test_modified_date_gets_updated_after_viewing_query(self): query = SimpleQueryFactory() old = query.last_run_date time.sleep(0.1) self.client.get(reverse("query_detail", kwargs={'query_id': query.id})) self.assertNotEqual(old, Query.objects.get(pk=query.id).last_run_date)
def test_blacklist_prevents_bad_sql_from_executing(self): q = SimpleQueryFactory(sql='select 1 "delete";') headers, data, duration, error = q.headers_and_data() self.assertEqual(error, MSG_FAILED_BLACKLIST)
def test_admin_required(self): self.client.logout() query = SimpleQueryFactory() resp = self.client.get( reverse("query_detail", kwargs={'query_id': query.id})) self.assertTemplateUsed(resp, 'admin/login.html')
def test_blacklist_prevents_bad_sql_with_params_from_executing(self): q = SimpleQueryFactory(sql="select '$$foo$$';") headers, data, duration, error = q.headers_and_data( params={"foo": "'; delete from *; select'"}) self.assertEqual(error, MSG_FAILED_BLACKLIST)
def setUp(self): self.query = SimpleQueryFactory(sql="select 1;") self.user = User.objects.create_superuser('admin', '*****@*****.**', 'pwd') self.client.login(username='******', password='******')
def test_params_get_merged(self): q = SimpleQueryFactory(sql="select '$$foo$$';") params = {'foo': 'bar', 'mux': 'qux'} self.assertEqual(q.available_params(params), {'foo': 'bar'})
def test_playground_renders_with_query_sql(self): query = SimpleQueryFactory(sql="select 1;") resp = self.client.get('%s?query_id=%s' % (reverse("explorer_playground"), query.id)) self.assertTemplateUsed(resp, 'explorer/play.html') self.assertContains(resp, 'select 1;')
def test_blacklist_check_runs_before_execution(self): q = SimpleQueryFactory(sql='select 1;') with AssertMethodIsCalled(q, "passes_blacklist"): headers, data, duration, error = q.headers_and_data()
def test_fullscreen(self): query = SimpleQueryFactory(sql="") resp = self.client.get('%s?query_id=%s&fullscreen=1' % (reverse("explorer_playground"), query.id)) self.assertTemplateUsed(resp, 'explorer/fullscreen.html')
def test_get_params_for_request_empty(self): q = SimpleQueryFactory() self.assertEqual(get_params_for_url(q), None)
def test_run_count(self): q = SimpleQueryFactory(title='foo - bar1') for i in range(0, 4): q.log() resp = self.client.get(reverse("explorer_index")) self.assertContains(resp, '<td>4</td>')
def test_retrieving_query_doesnt_save_to_log(self): query = SimpleQueryFactory() self.client.get(reverse("query_detail", kwargs={'query_id': query.id})) self.assertEqual(0, QueryLog.objects.count())