Add type hints to conftest.py
This commit is contained in:
Родитель
96af29886b
Коммит
d2178b3d3a
|
@ -3,6 +3,7 @@
|
|||
"""Plugin for running UI tests."""
|
||||
|
||||
import os
|
||||
import typing
|
||||
|
||||
import attr
|
||||
import pytest
|
||||
|
@ -13,42 +14,42 @@ from requests.packages.urllib3.util.retry import Retry
|
|||
from pages.login import LoginPage
|
||||
|
||||
|
||||
@attr.s
|
||||
@attr.s(auto_attribs=True)
|
||||
class User:
|
||||
"""User represents a Redash user."""
|
||||
|
||||
name = attr.ib(type=str)
|
||||
password = attr.ib(type=str)
|
||||
email = attr.ib(type=str)
|
||||
_id = attr.ib(type=int, default=None)
|
||||
name: str
|
||||
password: str
|
||||
email: str
|
||||
_id: int
|
||||
|
||||
|
||||
@attr.s
|
||||
@attr.s(auto_attribs=True)
|
||||
class UserFactory:
|
||||
"""UserFactory provides an interface to create Redash users."""
|
||||
|
||||
users = attr.ib(type=list, default=attr.Factory(list))
|
||||
users: typing.List[User] = attr.Factory(list)
|
||||
|
||||
def __iter__(self):
|
||||
def __iter__(self) -> typing.Generator[User, None, None]:
|
||||
for user in self.users:
|
||||
yield user
|
||||
|
||||
def __contains__(self, user):
|
||||
def __contains__(self, user: User) -> bool:
|
||||
return user in self.users
|
||||
|
||||
def create_user(self, **kwargs):
|
||||
def create_user(self, **kwargs: typing.Any) -> User:
|
||||
user = User(**kwargs)
|
||||
self.users.append(user)
|
||||
return user
|
||||
|
||||
|
||||
@pytest.fixture(name="user_factory", scope="session")
|
||||
def fixture_user_factory():
|
||||
def fixture_user_factory() -> UserFactory:
|
||||
return UserFactory()
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
def _verify_url(request, server_url, user, org):
|
||||
def _verify_url(request, server_url: str, user: User, org: str) -> None:
|
||||
"""Verifies the base URL.
|
||||
|
||||
This will ping the base url until it returns a 200.
|
||||
|
@ -63,25 +64,30 @@ def _verify_url(request, server_url, user, org):
|
|||
|
||||
|
||||
@pytest.fixture(name="server_url", scope="session")
|
||||
def fixture_server_url(request):
|
||||
def fixture_server_url(request) -> str:
|
||||
"""Return the URL to the Redash server."""
|
||||
return request.config.option.server_url
|
||||
|
||||
|
||||
@pytest.fixture(name="org", scope="session")
|
||||
def fixture_org():
|
||||
def fixture_org() -> str:
|
||||
"""Return the slug of an org."""
|
||||
return "default"
|
||||
|
||||
|
||||
@pytest.fixture(name="unknown_user")
|
||||
def fixture_unknown_user(variables, org):
|
||||
def fixture_unknown_user(variables: typing.Dict, org: str) -> User:
|
||||
"""Return a user that is not registered."""
|
||||
return User(**variables[org]["users"]["unknown"])
|
||||
|
||||
|
||||
@pytest.fixture(name="user", scope="session")
|
||||
def fixture_user(create_user, variables, org, user_factory):
|
||||
def fixture_user(
|
||||
create_user: typing.Callable,
|
||||
variables: typing.Dict,
|
||||
org: str,
|
||||
user_factory: UserFactory,
|
||||
) -> User:
|
||||
"""Return a registered user."""
|
||||
|
||||
user_info = variables[org]["users"]["ashley"]
|
||||
|
@ -94,7 +100,13 @@ def fixture_user(create_user, variables, org, user_factory):
|
|||
|
||||
|
||||
@pytest.fixture(name="users", scope="session")
|
||||
def fixture_users(variables, org, root_session, server_url, user_factory):
|
||||
def fixture_users(
|
||||
variables: typing.Dict,
|
||||
org: str,
|
||||
root_session,
|
||||
server_url: str,
|
||||
user_factory: UserFactory,
|
||||
) -> typing.List[User]:
|
||||
# Check if there are any users in the db, if not, Redash needs to be set up
|
||||
response = root_session.get(f"{server_url}/api/users")
|
||||
if response.status_code == 404:
|
||||
|
@ -112,25 +124,31 @@ def fixture_users(variables, org, root_session, server_url, user_factory):
|
|||
id=existing_user["id"],
|
||||
)
|
||||
|
||||
return user_factory.users
|
||||
|
||||
|
||||
@pytest.fixture(name="root_user", scope="session")
|
||||
def fixture_root_user(variables, org):
|
||||
def fixture_root_user(variables: typing.Dict, org: str) -> User:
|
||||
"""Return the root user used for setup."""
|
||||
return User(**variables[org]["users"]["rootuser"])
|
||||
|
||||
|
||||
@pytest.fixture(name="login_page")
|
||||
def fixture_login_page(selenium, server_url, org):
|
||||
def fixture_login_page(selenium, server_url: str, org: str) -> LoginPage:
|
||||
"""Return a page object model for the login page."""
|
||||
login_page = LoginPage(selenium, server_url, org=org)
|
||||
return login_page.open()
|
||||
|
||||
|
||||
@pytest.fixture(name="create_user", scope="session")
|
||||
def fixture_create_user(root_session, server_url, user_factory):
|
||||
def fixture_create_user(
|
||||
root_session: Session, server_url: str, user_factory: UserFactory
|
||||
) -> typing.Callable:
|
||||
"""Return a function to create a user."""
|
||||
|
||||
def create_user(name=None, email=None, password=None):
|
||||
def create_user(
|
||||
name: str = "", email: str = "", password: str = ""
|
||||
) -> User:
|
||||
"""Create a user via the Redash API.
|
||||
|
||||
This will use the authenticated root user requests session to create
|
||||
|
@ -180,7 +198,7 @@ def fixture_create_user(root_session, server_url, user_factory):
|
|||
|
||||
|
||||
@pytest.fixture(name="root_session", scope="session")
|
||||
def fixture_root_session(server_url, root_user):
|
||||
def fixture_root_session(server_url: str, root_user: User) -> Session:
|
||||
"""Root login.
|
||||
|
||||
This is only used to authenticate api calls as admin. It will login as the
|
||||
|
@ -209,7 +227,9 @@ def fixture_root_session(server_url, root_user):
|
|||
|
||||
|
||||
@pytest.fixture(name="create_queries", scope="session")
|
||||
def fixture_create_queries(root_session, server_url, variables):
|
||||
def fixture_create_queries(
|
||||
root_session: Session, server_url: str, variables: typing.Dict
|
||||
) -> None:
|
||||
"""Create 2 queries using the data from variables.json."""
|
||||
|
||||
# Check if query exists, if so, do not create it again
|
||||
|
@ -225,7 +245,7 @@ def fixture_create_queries(root_session, server_url, variables):
|
|||
raise RuntimeError(f"unable to log create query: {response.text}")
|
||||
|
||||
|
||||
def pytest_addoption(parser):
|
||||
def pytest_addoption(parser) -> None:
|
||||
"""Add custom options to pytest."""
|
||||
group = parser.getgroup("redash")
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче