This is an automated email from the ASF dual-hosted git repository.
potiuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new 42ea951 Clean test_user once assert is complete (#18865)
42ea951 is described below
commit 42ea951b139b695c3eea98bf00302f5d3d9a508c
Author: Khalid Mammadov <[email protected]>
AuthorDate: Wed Oct 13 12:18:42 2021 +0100
Clean test_user once assert is complete (#18865)
* Clean test_user once assert is complete
* Remove redundant try block
* Add docstring
---
tests/test_utils/api_connexion_utils.py | 12 ++++++++++++
tests/www/views/conftest.py | 14 +-------------
tests/www/views/test_views_trigger_dag.py | 19 ++++++++++---------
3 files changed, 23 insertions(+), 22 deletions(-)
diff --git a/tests/test_utils/api_connexion_utils.py
b/tests/test_utils/api_connexion_utils.py
index fd75ec4..be09913 100644
--- a/tests/test_utils/api_connexion_utils.py
+++ b/tests/test_utils/api_connexion_utils.py
@@ -21,6 +21,18 @@ from airflow.www.security import EXISTING_ROLES
@contextmanager
+def create_test_client(app, user_name, role_name, permissions):
+ """
+ Helper function to create a client with a temporary user which will be
deleted once done
+ """
+ client = app.test_client()
+ with create_user_scope(app, username=user_name, role_name=role_name,
permissions=permissions) as _:
+ resp = client.post("/login/", data={"username": user_name, "password":
user_name})
+ assert resp.status_code == 302
+ yield client
+
+
+@contextmanager
def create_user_scope(app, username, **kwargs):
"""
Helper function designed to be used with pytest fixture mainly.
diff --git a/tests/www/views/conftest.py b/tests/www/views/conftest.py
index 05fe1e4..049742b 100644
--- a/tests/www/views/conftest.py
+++ b/tests/www/views/conftest.py
@@ -25,7 +25,7 @@ import pytest
from airflow import settings
from airflow.models import DagBag
from airflow.www.app import create_app
-from tests.test_utils.api_connexion_utils import create_user, delete_roles
+from tests.test_utils.api_connexion_utils import delete_roles
from tests.test_utils.decorators import dont_initialize_flask_app_submodules
from tests.test_utils.www import client_with_login
@@ -114,18 +114,6 @@ def user_client(app):
return client_with_login(app, username="test_user", password="test_user")
[email protected](scope="module")
-def client_factory(app):
- def factory(name, role_name, permissions):
- create_user(app, username=name, role_name=role_name,
permissions=permissions)
- client = app.test_client()
- resp = client.post("/login/", data={"username": name, "password":
name})
- assert resp.status_code == 302
- return client
-
- return factory
-
-
class _TemplateWithContext(NamedTuple):
template: jinja2.environment.Template
context: Dict[str, Any]
diff --git a/tests/www/views/test_views_trigger_dag.py
b/tests/www/views/test_views_trigger_dag.py
index f261438..3fbed1b 100644
--- a/tests/www/views/test_views_trigger_dag.py
+++ b/tests/www/views/test_views_trigger_dag.py
@@ -25,6 +25,7 @@ from airflow.security import permissions
from airflow.utils import timezone
from airflow.utils.session import create_session
from airflow.utils.types import DagRunType
+from tests.test_utils.api_connexion_utils import create_test_client
from tests.test_utils.www import check_content_in_response
@@ -196,21 +197,21 @@ def
test_trigger_endpoint_uses_existing_dagbag(admin_client):
check_content_in_response('example_bash_operator', resp)
-def test_viewer_cant_trigger_dag(client_factory):
+def test_viewer_cant_trigger_dag(app):
"""
Test that the test_viewer user can't trigger DAGs.
"""
- client = client_factory(
- name="test_user",
+ with create_test_client(
+ app,
+ user_name="test_user",
role_name="test_role",
permissions=[
(permissions.ACTION_CAN_READ, permissions.RESOURCE_WEBSITE),
(permissions.ACTION_CAN_READ, permissions.RESOURCE_DAG),
(permissions.ACTION_CAN_CREATE, permissions.RESOURCE_DAG_RUN),
],
- )
-
- url = 'trigger?dag_id=example_bash_operator'
- resp = client.get(url, follow_redirects=True)
- response_data = resp.data.decode()
- assert "Access is Denied" in response_data
+ ) as client:
+ url = 'trigger?dag_id=example_bash_operator'
+ resp = client.get(url, follow_redirects=True)
+ response_data = resp.data.decode()
+ assert "Access is Denied" in response_data