Skip to content

Commit

Permalink
fix(dashboard): Stop updating chart owners for charts removed from da…
Browse files Browse the repository at this point in the history
…shboard (apache#21720)

Co-authored-by: Michael S. Molina <michael.s.molina@gmail.com>
  • Loading branch information
2 people authored and PawankumarES committed Feb 13, 2023
1 parent 823c013 commit ac4d9a3
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 1 deletion.
2 changes: 1 addition & 1 deletion superset/dashboards/commands/update.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,13 @@ def run(self) -> Model:
self.validate()
try:
dashboard = DashboardDAO.update(self._model, self._properties, commit=False)
dashboard = DashboardDAO.update_charts_owners(dashboard, commit=False)
if self._properties.get("json_metadata"):
dashboard = DashboardDAO.set_dash_metadata(
dashboard,
data=json.loads(self._properties.get("json_metadata", "{}")),
commit=False,
)
dashboard = DashboardDAO.update_charts_owners(dashboard, commit=False)
db.session.commit()
except DAOUpdateFailedError as ex:
logger.exception(ex.exception)
Expand Down
59 changes: 59 additions & 0 deletions tests/integration_tests/dashboards/api_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit ac4d9a3

Please sign in to comment.