You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by be...@apache.org on 2022/02/09 17:18:43 UTC

[superset] 01/01: WIP

This is an automated email from the ASF dual-hosted git repository.

beto pushed a commit to branch better_unit_tests
in repository https://gitbox.apache.org/repos/asf/superset.git

commit 5a05d34e07abf7b5533938f8ca4b566b085794e1
Author: Beto Dealmeida <ro...@dealmeida.net>
AuthorDate: Wed Dec 15 16:24:56 2021 -0800

    WIP
---
 .../{conftest.py => annotation_layers/__init__.py} | 22 ---------
 tests/unit_tests/conftest.py                       | 52 +++++++++++++++++++++-
 .../{conftest.py => databases/__init__.py}         | 22 ---------
 .../{conftest.py => databases/api_test.py}         | 22 +++------
 tests/unit_tests/dataframe_test.py                 |  2 +-
 .../{conftest.py => db_engine_specs/__init__.py}   | 22 ---------
 .../unit_tests/{conftest.py => tasks/__init__.py}  | 22 ---------
 7 files changed, 56 insertions(+), 108 deletions(-)

diff --git a/tests/unit_tests/conftest.py b/tests/unit_tests/annotation_layers/__init__.py
similarity index 60%
copy from tests/unit_tests/conftest.py
copy to tests/unit_tests/annotation_layers/__init__.py
index 4700cd1..13a8339 100644
--- a/tests/unit_tests/conftest.py
+++ b/tests/unit_tests/annotation_layers/__init__.py
@@ -14,25 +14,3 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-
-import pytest
-
-from superset.app import SupersetApp
-from superset.initialization import SupersetAppInitializer
-
-
-@pytest.fixture
-def app_context():
-    """
-    A fixture for running the test inside an app context.
-    """
-    app = SupersetApp(__name__)
-
-    app.config.from_object("superset.config")
-    app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite://"
-
-    app_initializer = app.config.get("APP_INITIALIZER", SupersetAppInitializer)(app)
-    app_initializer.init_app()
-
-    with app.app_context():
-        yield
diff --git a/tests/unit_tests/conftest.py b/tests/unit_tests/conftest.py
index 4700cd1..3188b50 100644
--- a/tests/unit_tests/conftest.py
+++ b/tests/unit_tests/conftest.py
@@ -14,25 +14,73 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
+# pylint: disable=redefined-outer-name
+
+from typing import Iterator
 
 import pytest
+from flask.testing import FlaskClient
+from pytest_mock import MockFixture
+from sqlalchemy import create_engine
+from sqlalchemy.orm import sessionmaker
+from sqlalchemy.orm.session import Session
 
 from superset.app import SupersetApp
 from superset.initialization import SupersetAppInitializer
 
 
+@pytest.fixture()
+def session() -> Iterator[Session]:
+    """
+    Create an in-memory SQLite session to test models.
+    """
+    engine = create_engine("sqlite://")
+    Session_ = sessionmaker(bind=engine)  # pylint: disable=invalid-name
+    in_memory_session = Session_()
+
+    # flask calls session.remove()
+    in_memory_session.remove = lambda: None
+
+    yield in_memory_session
+
+
 @pytest.fixture
-def app_context():
+def app(mocker: MockFixture, session: Session) -> Iterator[None]:
     """
-    A fixture for running the test inside an app context.
+    A fixture that generates a Superset app.
     """
     app = SupersetApp(__name__)
 
     app.config.from_object("superset.config")
     app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite://"
+    app.config["FAB_ADD_SECURITY_VIEWS"] = False
 
     app_initializer = app.config.get("APP_INITIALIZER", SupersetAppInitializer)(app)
     app_initializer.init_app()
 
+    # patch session
+    mocker.patch(
+        "superset.security.SupersetSecurityManager.get_session",
+        return_value=session,
+    )
+    mocker.patch("superset.db.session", session)
+
+    yield app
+
+
+@pytest.fixture
+def app_context(app: SupersetApp) -> Iterator[None]:
+    """
+    A fixture that yields and application context.
+    """
     with app.app_context():
         yield
+
+
+@pytest.fixture
+def client(app: SupersetApp) -> Iterator[FlaskClient]:
+    """
+    A fixture that yields a Flask test client.
+    """
+    with app.test_client() as client:
+        yield client
diff --git a/tests/unit_tests/conftest.py b/tests/unit_tests/databases/__init__.py
similarity index 60%
copy from tests/unit_tests/conftest.py
copy to tests/unit_tests/databases/__init__.py
index 4700cd1..13a8339 100644
--- a/tests/unit_tests/conftest.py
+++ b/tests/unit_tests/databases/__init__.py
@@ -14,25 +14,3 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-
-import pytest
-
-from superset.app import SupersetApp
-from superset.initialization import SupersetAppInitializer
-
-
-@pytest.fixture
-def app_context():
-    """
-    A fixture for running the test inside an app context.
-    """
-    app = SupersetApp(__name__)
-
-    app.config.from_object("superset.config")
-    app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite://"
-
-    app_initializer = app.config.get("APP_INITIALIZER", SupersetAppInitializer)(app)
-    app_initializer.init_app()
-
-    with app.app_context():
-        yield
diff --git a/tests/unit_tests/conftest.py b/tests/unit_tests/databases/api_test.py
similarity index 61%
copy from tests/unit_tests/conftest.py
copy to tests/unit_tests/databases/api_test.py
index 4700cd1..e67bc76 100644
--- a/tests/unit_tests/conftest.py
+++ b/tests/unit_tests/databases/api_test.py
@@ -15,24 +15,12 @@
 # specific language governing permissions and limitations
 # under the License.
 
-import pytest
+from flask.testing import FlaskClient
 
-from superset.app import SupersetApp
-from superset.initialization import SupersetAppInitializer
 
-
-@pytest.fixture
-def app_context():
+def test_unauthenticated(client: FlaskClient) -> None:
     """
-    A fixture for running the test inside an app context.
+    Test that an error is returned when not authenticated.
     """
-    app = SupersetApp(__name__)
-
-    app.config.from_object("superset.config")
-    app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite://"
-
-    app_initializer = app.config.get("APP_INITIALIZER", SupersetAppInitializer)(app)
-    app_initializer.init_app()
-
-    with app.app_context():
-        yield
+    response = client.get("api/v1/database/")
+    assert response.json == {"msg": "Missing Authorization Header"}
diff --git a/tests/unit_tests/dataframe_test.py b/tests/unit_tests/dataframe_test.py
index 3e986a5..9c6b923 100644
--- a/tests/unit_tests/dataframe_test.py
+++ b/tests/unit_tests/dataframe_test.py
@@ -19,7 +19,7 @@ from superset.dataframe import df_to_records
 from superset.typing import DbapiDescription
 
 
-def test_df_to_records(app_context: None) -> None:
+def test_df_to_records(app, client, app_context: None) -> None:
     from superset.db_engine_specs import BaseEngineSpec
     from superset.result_set import SupersetResultSet
 
diff --git a/tests/unit_tests/conftest.py b/tests/unit_tests/db_engine_specs/__init__.py
similarity index 60%
copy from tests/unit_tests/conftest.py
copy to tests/unit_tests/db_engine_specs/__init__.py
index 4700cd1..13a8339 100644
--- a/tests/unit_tests/conftest.py
+++ b/tests/unit_tests/db_engine_specs/__init__.py
@@ -14,25 +14,3 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-
-import pytest
-
-from superset.app import SupersetApp
-from superset.initialization import SupersetAppInitializer
-
-
-@pytest.fixture
-def app_context():
-    """
-    A fixture for running the test inside an app context.
-    """
-    app = SupersetApp(__name__)
-
-    app.config.from_object("superset.config")
-    app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite://"
-
-    app_initializer = app.config.get("APP_INITIALIZER", SupersetAppInitializer)(app)
-    app_initializer.init_app()
-
-    with app.app_context():
-        yield
diff --git a/tests/unit_tests/conftest.py b/tests/unit_tests/tasks/__init__.py
similarity index 60%
copy from tests/unit_tests/conftest.py
copy to tests/unit_tests/tasks/__init__.py
index 4700cd1..13a8339 100644
--- a/tests/unit_tests/conftest.py
+++ b/tests/unit_tests/tasks/__init__.py
@@ -14,25 +14,3 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-
-import pytest
-
-from superset.app import SupersetApp
-from superset.initialization import SupersetAppInitializer
-
-
-@pytest.fixture
-def app_context():
-    """
-    A fixture for running the test inside an app context.
-    """
-    app = SupersetApp(__name__)
-
-    app.config.from_object("superset.config")
-    app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite://"
-
-    app_initializer = app.config.get("APP_INITIALIZER", SupersetAppInitializer)(app)
-    app_initializer.init_app()
-
-    with app.app_context():
-        yield