[dashboards] Fix, API update slug uniqueness refusing empty string (#9417)
* [dashboards] Fix, API update slug uniqueness refusing empty string * [dashboards] tests
This commit is contained in:
parent
ec795a4711
commit
752de8fe9d
|
|
@ -57,7 +57,7 @@ class UpdateDashboardCommand(BaseCommand):
|
|||
def validate(self) -> None:
|
||||
exceptions: List[ValidationError] = []
|
||||
owner_ids: Optional[List[int]] = self._properties.get("owners")
|
||||
slug: str = self._properties.get("slug", "")
|
||||
slug: Optional[str] = self._properties.get("slug")
|
||||
|
||||
# Validate/populate model exists
|
||||
self._model = DashboardDAO.find_by_id(self._model_id)
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
import logging
|
||||
from typing import List
|
||||
from typing import List, Optional
|
||||
|
||||
from sqlalchemy.exc import SQLAlchemyError
|
||||
|
||||
|
|
@ -39,11 +39,13 @@ class DashboardDAO(BaseDAO):
|
|||
return not db.session.query(dashboard_query.exists()).scalar()
|
||||
|
||||
@staticmethod
|
||||
def validate_update_slug_uniqueness(dashboard_id: int, slug: str) -> bool:
|
||||
dashboard_query = db.session.query(Dashboard).filter(
|
||||
Dashboard.slug == slug, Dashboard.id != dashboard_id
|
||||
)
|
||||
return not db.session.query(dashboard_query.exists()).scalar()
|
||||
def validate_update_slug_uniqueness(dashboard_id: int, slug: Optional[str]) -> bool:
|
||||
if slug is not None:
|
||||
dashboard_query = db.session.query(Dashboard).filter(
|
||||
Dashboard.slug == slug, Dashboard.id != dashboard_id
|
||||
)
|
||||
return not db.session.query(dashboard_query.exists()).scalar()
|
||||
return True
|
||||
|
||||
@staticmethod
|
||||
def bulk_delete(models: List[Dashboard], commit=True):
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ class DashboardApiTests(SupersetTestCase, ApiOwnersTestCaseMixin):
|
|||
def insert_dashboard(
|
||||
self,
|
||||
dashboard_title: str,
|
||||
slug: str,
|
||||
slug: Optional[str],
|
||||
owners: List[int],
|
||||
slices: Optional[List[Slice]] = None,
|
||||
position_json: str = "",
|
||||
|
|
@ -647,6 +647,19 @@ class DashboardApiTests(SupersetTestCase, ApiOwnersTestCaseMixin):
|
|||
db.session.delete(dashboard2)
|
||||
db.session.commit()
|
||||
|
||||
dashboard1 = self.insert_dashboard("title1", None, [admin_id])
|
||||
dashboard2 = self.insert_dashboard("title2", None, [admin_id])
|
||||
self.login(username="admin")
|
||||
# Accept empty slugs and don't validate them has unique
|
||||
dashboard_data = {"dashboard_title": "title2_changed", "slug": ""}
|
||||
uri = f"api/v1/dashboard/{dashboard2.id}"
|
||||
rv = self.client.put(uri, json=dashboard_data)
|
||||
self.assertEqual(rv.status_code, 200)
|
||||
|
||||
db.session.delete(dashboard1)
|
||||
db.session.delete(dashboard2)
|
||||
db.session.commit()
|
||||
|
||||
def test_update_published(self):
|
||||
"""
|
||||
Dashboard API: Test update published patch
|
||||
|
|
|
|||
Loading…
Reference in New Issue