mirror of
https://github.com/apache/superset.git
synced 2026-04-20 16:44:46 +00:00
feat(embedded+async queries): support async queries to work with embedded guest user (#26332)
This commit is contained in:
@@ -14,12 +14,14 @@
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
from unittest import mock
|
||||
from unittest.mock import ANY, Mock
|
||||
|
||||
from unittest.mock import Mock
|
||||
|
||||
from flask import g
|
||||
from jwt import encode
|
||||
from pytest import fixture, raises
|
||||
|
||||
from superset import security_manager
|
||||
from superset.async_events.async_query_manager import (
|
||||
AsyncQueryManager,
|
||||
AsyncQueryTokenException,
|
||||
@@ -38,6 +40,12 @@ def async_query_manager():
|
||||
return query_manager
|
||||
|
||||
|
||||
def set_current_as_guest_user():
|
||||
g.user = security_manager.get_guest_user_from_token(
|
||||
{"user": {}, "resources": [{"type": "dashboard", "id": "some-uuid"}]}
|
||||
)
|
||||
|
||||
|
||||
def test_parse_channel_id_from_request(async_query_manager):
|
||||
encoded_token = encode(
|
||||
{"channel": "test_channel_id"}, JWT_TOKEN_SECRET, algorithm="HS256"
|
||||
@@ -65,3 +73,70 @@ def test_parse_channel_id_from_request_bad_jwt(async_query_manager):
|
||||
|
||||
with raises(AsyncQueryTokenException):
|
||||
async_query_manager.parse_channel_id_from_request(request)
|
||||
|
||||
|
||||
@mock.patch("superset.is_feature_enabled")
|
||||
def test_submit_chart_data_job_as_guest_user(
|
||||
is_feature_enabled_mock, async_query_manager
|
||||
):
|
||||
is_feature_enabled_mock.return_value = True
|
||||
set_current_as_guest_user()
|
||||
job_mock = Mock()
|
||||
async_query_manager._load_chart_data_into_cache_job = job_mock
|
||||
job_meta = async_query_manager.submit_chart_data_job(
|
||||
channel_id="test_channel_id",
|
||||
form_data={},
|
||||
)
|
||||
|
||||
job_mock.delay.assert_called_once_with(
|
||||
{
|
||||
"channel_id": "test_channel_id",
|
||||
"errors": [],
|
||||
"guest_token": {
|
||||
"resources": [{"id": "some-uuid", "type": "dashboard"}],
|
||||
"user": {},
|
||||
},
|
||||
"job_id": ANY,
|
||||
"result_url": None,
|
||||
"status": "pending",
|
||||
"user_id": None,
|
||||
},
|
||||
{},
|
||||
)
|
||||
|
||||
assert "guest_token" not in job_meta
|
||||
|
||||
|
||||
@mock.patch("superset.is_feature_enabled")
|
||||
def test_submit_explore_json_job_as_guest_user(
|
||||
is_feature_enabled_mock, async_query_manager
|
||||
):
|
||||
is_feature_enabled_mock.return_value = True
|
||||
set_current_as_guest_user()
|
||||
job_mock = Mock()
|
||||
async_query_manager._load_explore_json_into_cache_job = job_mock
|
||||
job_meta = async_query_manager.submit_explore_json_job(
|
||||
channel_id="test_channel_id",
|
||||
form_data={},
|
||||
response_type="json",
|
||||
)
|
||||
|
||||
job_mock.delay.assert_called_once_with(
|
||||
{
|
||||
"channel_id": "test_channel_id",
|
||||
"errors": [],
|
||||
"guest_token": {
|
||||
"resources": [{"id": "some-uuid", "type": "dashboard"}],
|
||||
"user": {},
|
||||
},
|
||||
"job_id": ANY,
|
||||
"result_url": None,
|
||||
"status": "pending",
|
||||
"user_id": None,
|
||||
},
|
||||
{},
|
||||
"json",
|
||||
False,
|
||||
)
|
||||
|
||||
assert "guest_token" not in job_meta
|
||||
|
||||
Reference in New Issue
Block a user