From cafb2acac360fa95d9b1d87d043cbffa44c3b268 Mon Sep 17 00:00:00 2001 From: "Michael S. Molina" Date: Thu, 9 Feb 2023 12:24:21 -0500 Subject: [PATCH] Adds a test --- .../integration_tests/dashboards/api_tests.py | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/tests/integration_tests/dashboards/api_tests.py b/tests/integration_tests/dashboards/api_tests.py index 7288889bf1157..0520b8726c760 100644 --- a/tests/integration_tests/dashboards/api_tests.py +++ b/tests/integration_tests/dashboards/api_tests.py @@ -1347,6 +1347,65 @@ def test_update_dashboard_chart_owners(self): db.session.delete(user_alpha2) db.session.commit() + @pytest.mark.usefixtures("load_birth_names_dashboard_with_slices") + def test_update_dashboard_chart_owners_propagation(self): + """ + Dashboard API: Test update chart owners propagation + """ + user_alpha1 = self.create_user( + "alpha1", + "password", + "Alpha", + email="alpha1@superset.org", + first_name="alpha1", + ) + admin = self.get_user("admin") + slices = [] + slices.append(db.session.query(Slice).filter_by(slice_name="Trends").one()) + slices.append(db.session.query(Slice).filter_by(slice_name="Boys").one()) + + # Insert dashboard with admin as owner + dashboard = self.insert_dashboard( + "title1", + "slug1", + [admin.id], + slices=slices, + ) + + # Updates dashboard without Boys in json_metadata positions + # and user_alpha1 as owner + dashboard_data = { + "owners": [user_alpha1.id], + "json_metadata": json.dumps( + { + "positions": { + f"{slices[0].id}": { + "type": "CHART", + "meta": {"chartId": slices[0].id}, + }, + } + } + ), + } + self.login(username="admin") + uri = f"api/v1/dashboard/{dashboard.id}" + rv = self.client.put(uri, json=dashboard_data) + self.assertEqual(rv.status_code, 200) + + # Check that chart named Boys does not contain alpha 1 in its owners + boys = db.session.query(Slice).filter_by(slice_name="Boys").one() + self.assertNotIn(user_alpha1, boys.owners) + + # Revert owners on slice + for slice in slices: + slice.owners = [] + db.session.commit() + + # Rollback changes + db.session.delete(dashboard) + db.session.delete(user_alpha1) + db.session.commit() + def test_update_partial_dashboard(self): """ Dashboard API: Test update partial