diff --git a/superset/views/dashboard/api.py b/superset/views/dashboard/api.py index 87984b22950..6f6e010b302 100644 --- a/superset/views/dashboard/api.py +++ b/superset/views/dashboard/api.py @@ -88,12 +88,12 @@ class BaseDashboardSchema(BaseOwnedSchema): @pre_load def pre_load(self, data): # pylint: disable=no-self-use super().pre_load(data) - data["slug"] = data.get("slug") - data["owners"] = data.get("owners", []) - if data["slug"]: + if data.get("slug"): data["slug"] = data["slug"].strip() data["slug"] = data["slug"].replace(" ", "-") data["slug"] = re.sub(r"[^\w\-]+", "", data["slug"]) + if "owners" in data and data["owners"] is None: + data["owners"] = [] class DashboardPostSchema(BaseDashboardSchema): diff --git a/tests/dashboard_api_tests.py b/tests/dashboard_api_tests.py index 56fe4c0e5f2..83881f4fef6 100644 --- a/tests/dashboard_api_tests.py +++ b/tests/dashboard_api_tests.py @@ -477,6 +477,28 @@ class DashboardApiTests(SupersetTestCase, ApiOwnersTestCaseMixin): db.session.delete(model) db.session.commit() + def test_update_published(self): + """ + Dashboard API: Test update published patch + """ + admin = self.get_user("admin") + gamma = self.get_user("gamma") + + dashboard = self.insert_dashboard("title1", "slug1", [admin.id, gamma.id]) + dashboard_data = {"published": True} + 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) + + model = db.session.query(models.Dashboard).get(dashboard.id) + self.assertEqual(model.published, True) + self.assertEqual(model.slug, "slug1") + self.assertIn(admin, model.owners) + self.assertIn(gamma, model.owners) + db.session.delete(model) + db.session.commit() + def test_update_dashboard_not_owned(self): """ Dashboard API: Test update dashboard not owned