|
1 | 1 | from tests import BaseTestCase
|
| 2 | +from redash.models import Query |
2 | 3 |
|
3 | 4 |
|
4 |
| -# Add tests for change tracking |
| 5 | +class TestApiKeyGetByObject(BaseTestCase): |
| 6 | + |
| 7 | + def assert_visualizations(self, origin_q, origin_v, forked_q, forked_v): |
| 8 | + self.assertEqual(origin_v.options, forked_v.options) |
| 9 | + self.assertEqual(origin_v.type, forked_v.type) |
| 10 | + self.assertNotEqual(origin_v.id, forked_v.id) |
| 11 | + self.assertNotEqual(origin_v.query, forked_v.query) |
| 12 | + self.assertEqual(forked_q.id, forked_v.query.id) |
| 13 | + |
| 14 | + |
| 15 | + def test_fork_with_visualizations(self): |
| 16 | + # prepare original query and visualizations |
| 17 | + data_source = self.factory.create_data_source(group=self.factory.create_group()) |
| 18 | + query = self.factory.create_query(data_source=data_source, description="this is description") |
| 19 | + visualization_chart = self.factory.create_visualization(query=query, description="chart vis", type="CHART", options="""{"yAxis": [{"type": "linear"}, {"type": "linear", "opposite": true}], "series": {"stacking": null}, "globalSeriesType": "line", "sortX": true, "seriesOptions": {"count": {"zIndex": 0, "index": 0, "type": "line", "yAxis": 0}}, "xAxis": {"labels": {"enabled": true}, "type": "datetime"}, "columnMapping": {"count": "y", "created_at": "x"}, "bottomMargin": 50, "legend": {"enabled": true}}""") |
| 20 | + visualization_box = self.factory.create_visualization(query=query, description="box vis", type="BOXPLOT", options="{}") |
| 21 | + fork_user = self.factory.create_user() |
| 22 | + |
| 23 | + forked_query = query.fork(fork_user) |
| 24 | + |
| 25 | + |
| 26 | + forked_visualization_chart = None |
| 27 | + forked_visualization_box = None |
| 28 | + forked_table = None |
| 29 | + count_table = 0 |
| 30 | + for v in forked_query.visualizations: |
| 31 | + if v.description == "chart vis": |
| 32 | + forked_visualization_chart = v |
| 33 | + if v.description == "box vis": |
| 34 | + forked_visualization_box = v |
| 35 | + if v.type == "TABLE": |
| 36 | + count_table += 1 |
| 37 | + forked_table = v |
| 38 | + self.assert_visualizations(query, visualization_chart, forked_query, forked_visualization_chart) |
| 39 | + self.assert_visualizations(query, visualization_box, forked_query, forked_visualization_box) |
| 40 | + |
| 41 | + self.assertEqual(forked_query.org, query.org) |
| 42 | + self.assertEqual(forked_query.data_source, query.data_source) |
| 43 | + self.assertEqual(forked_query.latest_query_data, query.latest_query_data) |
| 44 | + self.assertEqual(forked_query.description, query.description) |
| 45 | + self.assertEqual(forked_query.query, query.query) |
| 46 | + self.assertEqual(forked_query.query_hash, query.query_hash) |
| 47 | + self.assertEqual(forked_query.user, fork_user) |
| 48 | + self.assertEqual(forked_query.description, query.description) |
| 49 | + self.assertTrue(forked_query.name.startswith('Copy')) |
| 50 | + # num of TABLE must be 1. default table only |
| 51 | + self.assertEqual(count_table, 1) |
| 52 | + self.assertEqual(forked_table.name, "Table") |
| 53 | + self.assertEqual(forked_table.description, "") |
| 54 | + self.assertEqual(forked_table.options, "{}") |
| 55 | + |
| 56 | + def test_fork_from_query_that_has_no_visualization(self): |
| 57 | + # prepare original query and visualizations |
| 58 | + data_source = self.factory.create_data_source(group=self.factory.create_group()) |
| 59 | + query = self.factory.create_query(data_source=data_source, description="this is description") |
| 60 | + fork_user = self.factory.create_user() |
| 61 | + |
| 62 | + forked_query = query.fork(fork_user) |
| 63 | + |
| 64 | + count_table = 0 |
| 65 | + count_vis = 0 |
| 66 | + for v in forked_query.visualizations: |
| 67 | + count_vis += 1 |
| 68 | + if v.type == "TABLE": |
| 69 | + count_table += 1 |
| 70 | + |
| 71 | + self.assertEqual(count_table, 1) |
| 72 | + self.assertEqual(count_vis, 1) |
5 | 73 |
|
0 commit comments