mirror of
https://github.com/apache/superset.git
synced 2026-04-19 08:04:53 +00:00
feat(tag): fast follow for Tags flatten api + update client with generator + some bug fixes (#25309)
This commit is contained in:
@@ -530,8 +530,23 @@ class TestTagApi(SupersetTestCase):
|
||||
rv = self.client.post(
|
||||
uri,
|
||||
json={
|
||||
"tags": ["tag1", "tag2", "tag3"],
|
||||
"objects_to_tag": [["dashboard", dashboard.id], ["chart", chart.id]],
|
||||
"tags": [
|
||||
{
|
||||
"name": "tag1",
|
||||
"objects_to_tag": [
|
||||
["dashboard", dashboard.id],
|
||||
["chart", chart.id],
|
||||
],
|
||||
},
|
||||
{
|
||||
"name": "tag2",
|
||||
"objects_to_tag": [["dashboard", dashboard.id]],
|
||||
},
|
||||
{
|
||||
"name": "tag3",
|
||||
"objects_to_tag": [["chart", chart.id]],
|
||||
},
|
||||
]
|
||||
},
|
||||
)
|
||||
|
||||
@@ -547,11 +562,10 @@ class TestTagApi(SupersetTestCase):
|
||||
TaggedObject.object_id == dashboard.id,
|
||||
TaggedObject.object_type == ObjectTypes.dashboard,
|
||||
)
|
||||
assert tagged_objects.count() == 3
|
||||
assert tagged_objects.count() == 2
|
||||
|
||||
tagged_objects = db.session.query(TaggedObject).filter(
|
||||
# TaggedObject.tag_id.in_([tag.id for tag in tags]),
|
||||
TaggedObject.object_id == chart.id,
|
||||
TaggedObject.object_type == ObjectTypes.chart,
|
||||
)
|
||||
assert tagged_objects.count() == 3
|
||||
assert tagged_objects.count() == 2
|
||||
|
||||
@@ -169,6 +169,3 @@ def test_create_tag_relationship(mocker):
|
||||
# Verify that the correct number of TaggedObjects are added to the session
|
||||
assert mock_session.add_all.call_count == 1
|
||||
assert len(mock_session.add_all.call_args[0][0]) == len(objects_to_tag)
|
||||
|
||||
# Verify that commit is called
|
||||
mock_session.commit.assert_called_once()
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import pytest
|
||||
from pytest_mock import MockFixture
|
||||
from sqlalchemy.orm.session import Session
|
||||
|
||||
from superset.utils.core import DatasourceType
|
||||
@@ -47,7 +48,7 @@ def session_with_data(session: Session):
|
||||
yield session
|
||||
|
||||
|
||||
def test_create_command_success(session_with_data: Session):
|
||||
def test_create_command_success(session_with_data: Session, mocker: MockFixture):
|
||||
from superset.connectors.sqla.models import SqlaTable
|
||||
from superset.daos.tag import TagDAO
|
||||
from superset.models.dashboard import Dashboard
|
||||
@@ -61,6 +62,12 @@ def test_create_command_success(session_with_data: Session):
|
||||
chart = session_with_data.query(Slice).first()
|
||||
dashboard = session_with_data.query(Dashboard).first()
|
||||
|
||||
mocker.patch(
|
||||
"superset.security.SupersetSecurityManager.is_admin", return_value=True
|
||||
)
|
||||
mocker.patch("superset.daos.chart.ChartDAO.find_by_id", return_value=chart)
|
||||
mocker.patch("superset.daos.query.SavedQueryDAO.find_by_id", return_value=query)
|
||||
|
||||
objects_to_tag = [
|
||||
(ObjectTypes.query, query.id),
|
||||
(ObjectTypes.chart, chart.id),
|
||||
@@ -84,7 +91,9 @@ def test_create_command_success(session_with_data: Session):
|
||||
)
|
||||
|
||||
|
||||
def test_create_command_failed_validate(session_with_data: Session):
|
||||
def test_create_command_failed_validate(
|
||||
session_with_data: Session, mocker: MockFixture
|
||||
):
|
||||
from superset.connectors.sqla.models import SqlaTable
|
||||
from superset.daos.tag import TagDAO
|
||||
from superset.models.dashboard import Dashboard
|
||||
@@ -98,6 +107,12 @@ def test_create_command_failed_validate(session_with_data: Session):
|
||||
chart = session_with_data.query(Slice).first()
|
||||
dashboard = session_with_data.query(Dashboard).first()
|
||||
|
||||
mocker.patch(
|
||||
"superset.security.SupersetSecurityManager.is_admin", return_value=True
|
||||
)
|
||||
mocker.patch("superset.daos.chart.ChartDAO.find_by_id", return_value=query)
|
||||
mocker.patch("superset.daos.query.SavedQueryDAO.find_by_id", return_value=chart)
|
||||
|
||||
objects_to_tag = [
|
||||
(ObjectTypes.query, query.id),
|
||||
(ObjectTypes.chart, chart.id),
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import pytest
|
||||
from pytest_mock import MockFixture
|
||||
from sqlalchemy.orm.session import Session
|
||||
|
||||
from superset.utils.core import DatasourceType
|
||||
@@ -56,13 +57,19 @@ def session_with_data(session: Session):
|
||||
yield session
|
||||
|
||||
|
||||
def test_update_command_success(session_with_data: Session):
|
||||
def test_update_command_success(session_with_data: Session, mocker: MockFixture):
|
||||
from superset.daos.tag import TagDAO
|
||||
from superset.models.dashboard import Dashboard
|
||||
from superset.tags.commands.update import UpdateTagCommand
|
||||
from superset.tags.models import ObjectTypes, TaggedObject
|
||||
|
||||
dashboard = session_with_data.query(Dashboard).first()
|
||||
mocker.patch(
|
||||
"superset.security.SupersetSecurityManager.is_admin", return_value=True
|
||||
)
|
||||
mocker.patch(
|
||||
"superset.daos.dashboard.DashboardDAO.find_by_id", return_value=dashboard
|
||||
)
|
||||
|
||||
objects_to_tag = [
|
||||
(ObjectTypes.dashboard, dashboard.id),
|
||||
@@ -84,7 +91,9 @@ def test_update_command_success(session_with_data: Session):
|
||||
assert len(session_with_data.query(TaggedObject).all()) == len(objects_to_tag)
|
||||
|
||||
|
||||
def test_update_command_success_duplicates(session_with_data: Session):
|
||||
def test_update_command_success_duplicates(
|
||||
session_with_data: Session, mocker: MockFixture
|
||||
):
|
||||
from superset.daos.tag import TagDAO
|
||||
from superset.models.dashboard import Dashboard
|
||||
from superset.models.slice import Slice
|
||||
@@ -95,6 +104,14 @@ def test_update_command_success_duplicates(session_with_data: Session):
|
||||
dashboard = session_with_data.query(Dashboard).first()
|
||||
chart = session_with_data.query(Slice).first()
|
||||
|
||||
mocker.patch(
|
||||
"superset.security.SupersetSecurityManager.is_admin", return_value=True
|
||||
)
|
||||
mocker.patch("superset.daos.chart.ChartDAO.find_by_id", return_value=chart)
|
||||
mocker.patch(
|
||||
"superset.daos.dashboard.DashboardDAO.find_by_id", return_value=dashboard
|
||||
)
|
||||
|
||||
objects_to_tag = [
|
||||
(ObjectTypes.dashboard, dashboard.id),
|
||||
]
|
||||
@@ -124,14 +141,16 @@ def test_update_command_success_duplicates(session_with_data: Session):
|
||||
assert changed_model.objects[0].object_id == chart.id
|
||||
|
||||
|
||||
def test_update_command_failed_validation(session_with_data: Session):
|
||||
def test_update_command_failed_validation(
|
||||
session_with_data: Session, mocker: MockFixture
|
||||
):
|
||||
from superset.daos.tag import TagDAO
|
||||
from superset.models.dashboard import Dashboard
|
||||
from superset.models.slice import Slice
|
||||
from superset.tags.commands.create import CreateCustomTagWithRelationshipsCommand
|
||||
from superset.tags.commands.exceptions import TagInvalidError
|
||||
from superset.tags.commands.update import UpdateTagCommand
|
||||
from superset.tags.models import ObjectTypes, TaggedObject
|
||||
from superset.tags.models import ObjectTypes
|
||||
|
||||
dashboard = session_with_data.query(Dashboard).first()
|
||||
chart = session_with_data.query(Slice).first()
|
||||
@@ -139,6 +158,14 @@ def test_update_command_failed_validation(session_with_data: Session):
|
||||
(ObjectTypes.chart, chart.id),
|
||||
]
|
||||
|
||||
mocker.patch(
|
||||
"superset.security.SupersetSecurityManager.is_admin", return_value=True
|
||||
)
|
||||
mocker.patch("superset.daos.chart.ChartDAO.find_by_id", return_value=chart)
|
||||
mocker.patch(
|
||||
"superset.daos.dashboard.DashboardDAO.find_by_id", return_value=dashboard
|
||||
)
|
||||
|
||||
CreateCustomTagWithRelationshipsCommand(
|
||||
data={"name": "test_tag", "objects_to_tag": objects_to_tag}
|
||||
).run()
|
||||
|
||||
Reference in New Issue
Block a user