"""conftest for integration tests.""" from os import getenv from typing import Callable from auth.auth import GrassAuth, UserType import pytest from jwtauth.testing import ( JwtAuthSecretsManager, SecretLookupInfo, ) from tests.testutils.api_client.api_client import APIClient # Include this line to discover the jwtauth plugin. pytest_plugins = ['jwtauth.testing.pytest_plugin'] SECRET_ENVIRONMENT = 'qa' OWS_PRODUCT_TEST_SERVICE_NAME = 'ows-product-integration-test' OWS_PRODUCT_TEST_APP_AUTH0_CREDENTIALS = 'OWS_PRODUCT_TEST_APP_AUTH0_CREDENTIALS' OWS_PRODUCT_TEST_USER_CREDENTIALS = 'OWS_PRODUCT_TEST_USER_CREDENTIALS' OWS_PRODUCT_TEST_CONTENT_USER_CREDENTIALS = 'OWS_PRODUCT_TEST_CONTENT_USER_CREDENTIALS' OWS_PRODUCT_TEST_PP_USER_CREDENTIALS = 'OWS_PRODUCT_TEST_PP_USER_CREDENTIALS' OWS_PRODUCT_TEST_PP_USER_NO_ACCESS_CREDENTIALS = 'OWS_PRODUCT_TEST_PP_USER_NO_ACCESS_CREDENTIALS' @pytest.fixture(scope='session') def workstation_user(): """Return data for workstation user.""" return {'user_id': 38271, 'vendor_id': 7123} @pytest.fixture(scope='session') def workstation_session_token(workstation_user): """Initialize workstation grass auth token at start of test session.""" return GrassAuth(UserType.WORKSTATION, workstation_user['user_id']).grass_token @pytest.fixture def workstation_api_client(workstation_session_token): """Create APIClient object with Workstation session token.""" return APIClient(getenv('BASE_QA_GRASS_URL'), workstation_session_token) @pytest.fixture def track_ids(): """Return a list of 7123 track IDs.""" return [29760673, 29760674, 29760675] @pytest.fixture def product_document_id(): """Return the product id for document endpoint test.""" return 2615208 @pytest.fixture def qa_ows_product_url(): """Return the URL of QA instance of ows-product.""" return 'https://qa-ows-product.theorchard.io' @pytest.fixture(scope='session') def unauthorized_headers() -> dict[str, str]: """ Invalid profile headers that should return a 401 error. """ return { 'Content-Type': 'application/json', 'Orchard-Requestor-Service': 'graphql-router', 'Orchard-Identity-Id': '2ae5d241-645e-4616-af28-d5ac9c2c8280', 'Orchard-Profile-Type': 'NoSuchProfile', 'Orchard-Profile-Id': '1', 'Orchard-Roles': 'no.such.role', } @pytest.fixture(scope='session') def content_profile_headers() -> dict[str, str]: """ Content profile headers. """ return { 'Content-Type': 'application/json', 'Orchard-Requestor-Service': 'graphql-router', 'Orchard-Identity-Id': '2ae5d241-645e-4616-af28-d5ac9c2c8280', 'Orchard-Profile-Type': 'ContentProfile', 'Orchard-Profile-Id': '1', 'Orchard-Roles': 'admin', } @pytest.fixture(scope='session') def bearer_token_ows_product_user( generate_bearer_token: Callable[..., str], jwtauth_secrets_manager: JwtAuthSecretsManager, ) -> str: """Generate a bearer token for OWS_PRODUCT_TEST_USER_CREDENTIALS.""" return generate_bearer_token( get_user_creds_args=SecretLookupInfo( environment=SECRET_ENVIRONMENT, service_name=OWS_PRODUCT_TEST_SERVICE_NAME, secret_name=OWS_PRODUCT_TEST_USER_CREDENTIALS, ), get_auth0_creds_args=SecretLookupInfo( environment=SECRET_ENVIRONMENT, service_name=OWS_PRODUCT_TEST_SERVICE_NAME, secret_name=OWS_PRODUCT_TEST_APP_AUTH0_CREDENTIALS, ), secrets_manager=jwtauth_secrets_manager, ) @pytest.fixture(scope='session') def ows_product_user_headers(bearer_token_ows_product_user: str) -> dict[str, str]: """Generate headers for a request from OWS_PRODUCT_TEST_USER_CREDENTIALS.""" return { 'Content-Type': 'application/json', 'Authorization': f'Bearer {bearer_token_ows_product_user}', } @pytest.fixture(scope='session') def bearer_token_ows_product_content_user( generate_bearer_token: Callable[..., str], jwtauth_secrets_manager: JwtAuthSecretsManager, ) -> str: """Generate a bearer token for OWS_PRODUCT_TEST_CONTENT_USER_CREDENTIALS. User with a content profile. """ return generate_bearer_token( get_user_creds_args=SecretLookupInfo( environment=SECRET_ENVIRONMENT, service_name=OWS_PRODUCT_TEST_SERVICE_NAME, secret_name=OWS_PRODUCT_TEST_CONTENT_USER_CREDENTIALS, ), get_auth0_creds_args=SecretLookupInfo( environment=SECRET_ENVIRONMENT, service_name=OWS_PRODUCT_TEST_SERVICE_NAME, secret_name=OWS_PRODUCT_TEST_APP_AUTH0_CREDENTIALS, ), secrets_manager=jwtauth_secrets_manager, ) @pytest.fixture(scope='session') def ows_product_content_user_headers( bearer_token_ows_product_content_user: str, ) -> dict[str, str]: """Generate headers for a request from OWS_PRODUCT_TEST_CONTENT_USER_CREDENTIALS.""" return { 'Content-Type': 'application/json', 'Authorization': f'Bearer {bearer_token_ows_product_content_user}', } @pytest.fixture(scope='session') def bearer_token_ows_product_pp_user( generate_bearer_token: Callable[..., str], jwtauth_secrets_manager: JwtAuthSecretsManager, ) -> str: """Generate a bearer token for OWS_PRODUCT_TEST_PP_USER_CREDENTIALS. Holds the ``content_ccm_digital_audio_can_bulk_create`` PP role. """ return generate_bearer_token( get_user_creds_args=SecretLookupInfo( environment=SECRET_ENVIRONMENT, service_name=OWS_PRODUCT_TEST_SERVICE_NAME, secret_name=OWS_PRODUCT_TEST_PP_USER_CREDENTIALS, ), get_auth0_creds_args=SecretLookupInfo( environment=SECRET_ENVIRONMENT, service_name=OWS_PRODUCT_TEST_SERVICE_NAME, secret_name=OWS_PRODUCT_TEST_APP_AUTH0_CREDENTIALS, ), secrets_manager=jwtauth_secrets_manager, ) @pytest.fixture(scope='session') def ows_product_pp_user_headers(bearer_token_ows_product_pp_user: str) -> dict[str, str]: """Generate headers for a request from OWS_PRODUCT_TEST_PP_USER_CREDENTIALS.""" return { 'Content-Type': 'application/json', 'Authorization': f'Bearer {bearer_token_ows_product_pp_user}', } @pytest.fixture(scope='session') def bearer_token_ows_product_pp_no_access_user( generate_bearer_token: Callable[..., str], jwtauth_secrets_manager: JwtAuthSecretsManager, ) -> str: """Generate a bearer token for OWS_PRODUCT_TEST_PP_USER_NO_ACCESS_CREDENTIALS. PP user without the ``content_ccm_digital_audio_can_bulk_create`` role. """ return generate_bearer_token( get_user_creds_args=SecretLookupInfo( environment=SECRET_ENVIRONMENT, service_name=OWS_PRODUCT_TEST_SERVICE_NAME, secret_name=OWS_PRODUCT_TEST_PP_USER_NO_ACCESS_CREDENTIALS, ), get_auth0_creds_args=SecretLookupInfo( environment=SECRET_ENVIRONMENT, service_name=OWS_PRODUCT_TEST_SERVICE_NAME, secret_name=OWS_PRODUCT_TEST_APP_AUTH0_CREDENTIALS, ), secrets_manager=jwtauth_secrets_manager, ) @pytest.fixture(scope='session') def ows_product_pp_no_access_user_headers( bearer_token_ows_product_pp_no_access_user: str, ) -> dict[str, str]: """Generate headers for a request from OWS_PRODUCT_TEST_PP_USER_NO_ACCESS_CREDENTIALS.""" return { 'Content-Type': 'application/json', 'Authorization': f'Bearer {bearer_token_ows_product_pp_no_access_user}' }