2021-09-23 04:27:59 -04:00
|
|
|
# Licensed to the Apache Software Foundation (ASF) under one
|
|
|
|
# or more contributor license agreements. See the NOTICE file
|
|
|
|
# distributed with this work for additional information
|
|
|
|
# regarding copyright ownership. The ASF licenses this file
|
|
|
|
# to you under the Apache License, Version 2.0 (the
|
|
|
|
# "License"); you may not use this file except in compliance
|
|
|
|
# with the License. You may obtain a copy of the License at
|
|
|
|
#
|
|
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
#
|
|
|
|
# Unless required by applicable law or agreed to in writing,
|
|
|
|
# software distributed under the License is distributed on an
|
|
|
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
|
|
# KIND, either express or implied. See the License for the
|
|
|
|
# specific language governing permissions and limitations
|
|
|
|
# under the License.
|
|
|
|
from __future__ import annotations
|
|
|
|
|
|
|
|
from typing import Any, Dict, List, Set, TYPE_CHECKING
|
|
|
|
|
|
|
|
from tests.integration_tests.dashboards.filter_sets.consts import (
|
|
|
|
DASHBOARD_OWNER_USERNAME,
|
|
|
|
FILTER_SET_OWNER_USERNAME,
|
|
|
|
REGULAR_USER,
|
|
|
|
)
|
|
|
|
from tests.integration_tests.dashboards.filter_sets.utils import (
|
|
|
|
call_get_filter_sets,
|
|
|
|
collect_all_ids,
|
|
|
|
)
|
2022-07-14 21:10:31 -04:00
|
|
|
from tests.integration_tests.test_app import login
|
2021-09-23 04:27:59 -04:00
|
|
|
|
|
|
|
if TYPE_CHECKING:
|
|
|
|
from flask.testing import FlaskClient
|
2021-10-25 05:57:38 -04:00
|
|
|
|
2021-09-23 04:27:59 -04:00
|
|
|
from superset.models.filter_set import FilterSet
|
|
|
|
|
|
|
|
|
|
|
|
class TestGetFilterSetsApi:
|
|
|
|
def test_with_dashboard_not_exists__404(
|
2022-03-29 13:03:09 -04:00
|
|
|
self,
|
|
|
|
not_exists_dashboard_id: int,
|
|
|
|
client: FlaskClient[Any],
|
2021-09-23 04:27:59 -04:00
|
|
|
):
|
|
|
|
# arrange
|
|
|
|
login(client, "admin")
|
|
|
|
|
|
|
|
# act
|
2022-02-24 14:02:01 -05:00
|
|
|
response = call_get_filter_sets(client, not_exists_dashboard_id)
|
2021-09-23 04:27:59 -04:00
|
|
|
|
|
|
|
# assert
|
|
|
|
assert response.status_code == 404
|
|
|
|
|
|
|
|
def test_dashboards_without_filtersets__200(
|
|
|
|
self, dashboard_id: int, client: FlaskClient[Any]
|
|
|
|
):
|
|
|
|
# arrange
|
|
|
|
login(client, "admin")
|
|
|
|
|
|
|
|
# act
|
|
|
|
response = call_get_filter_sets(client, dashboard_id)
|
|
|
|
|
|
|
|
# assert
|
|
|
|
assert response.status_code == 200
|
|
|
|
assert response.is_json and response.json["count"] == 0
|
|
|
|
|
|
|
|
def test_when_caller_admin__200(
|
|
|
|
self,
|
|
|
|
dashboard_id: int,
|
|
|
|
filtersets: Dict[str, List[FilterSet]],
|
|
|
|
client: FlaskClient[Any],
|
|
|
|
):
|
|
|
|
# arrange
|
|
|
|
login(client, "admin")
|
|
|
|
expected_ids: Set[int] = collect_all_ids(filtersets)
|
|
|
|
|
|
|
|
# act
|
|
|
|
response = call_get_filter_sets(client, dashboard_id)
|
|
|
|
|
|
|
|
# assert
|
|
|
|
assert response.status_code == 200
|
|
|
|
assert response.is_json and set(response.json["ids"]) == expected_ids
|
|
|
|
|
|
|
|
def test_when_caller_dashboard_owner__200(
|
|
|
|
self,
|
|
|
|
dashboard_id: int,
|
|
|
|
filtersets: Dict[str, List[FilterSet]],
|
|
|
|
client: FlaskClient[Any],
|
|
|
|
):
|
|
|
|
# arrange
|
|
|
|
login(client, DASHBOARD_OWNER_USERNAME)
|
|
|
|
expected_ids = collect_all_ids(filtersets["Dashboard"])
|
|
|
|
|
|
|
|
# act
|
|
|
|
response = call_get_filter_sets(client, dashboard_id)
|
|
|
|
|
|
|
|
# assert
|
|
|
|
assert response.status_code == 200
|
|
|
|
assert response.is_json and set(response.json["ids"]) == expected_ids
|
|
|
|
|
|
|
|
def test_when_caller_filterset_owner__200(
|
|
|
|
self,
|
|
|
|
dashboard_id: int,
|
|
|
|
filtersets: Dict[str, List[FilterSet]],
|
|
|
|
client: FlaskClient[Any],
|
|
|
|
):
|
|
|
|
# arrange
|
|
|
|
login(client, FILTER_SET_OWNER_USERNAME)
|
|
|
|
expected_ids = collect_all_ids(filtersets[FILTER_SET_OWNER_USERNAME])
|
|
|
|
|
|
|
|
# act
|
|
|
|
response = call_get_filter_sets(client, dashboard_id)
|
|
|
|
|
|
|
|
# assert
|
|
|
|
assert response.status_code == 200
|
|
|
|
assert response.is_json and set(response.json["ids"]) == expected_ids
|
|
|
|
|
|
|
|
def test_when_caller_regular_user__200(
|
|
|
|
self,
|
|
|
|
dashboard_id: int,
|
|
|
|
filtersets: Dict[str, List[int]],
|
|
|
|
client: FlaskClient[Any],
|
|
|
|
):
|
|
|
|
# arrange
|
|
|
|
login(client, REGULAR_USER)
|
|
|
|
expected_ids: Set[int] = set()
|
|
|
|
|
|
|
|
# act
|
|
|
|
response = call_get_filter_sets(client, dashboard_id)
|
|
|
|
|
|
|
|
# assert
|
|
|
|
assert response.status_code == 200
|
|
|
|
assert response.is_json and set(response.json["ids"]) == expected_ids
|