import asyncio import logging import random from typing import Any, Generator import pytest_asyncio from apps.job.sched import felicity_workforce_init from core.config import settings from database.base_class import DBModel from faker import Faker from httpx import AsyncClient from init.setup.create_superuser import create_super_user from main import flims from sqlalchemy import create_engine fake_engine = Faker() sync_engine = create_engine(settings.SQLALCHEMY_TEST_DATABASE_URI) logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) def pytest_configure(config): logger.info(f"pytest_configure ...") if settings.RETAIN_TESTING_DB_DATA: DBModel.metadata.drop_all(bind=sync_engine) DBModel.metadata.create_all(bind=sync_engine) # start scheduler felicity_workforce_init() def pytest_unconfigure(config): logger.info(f"pytest_un_configure ...") if not settings.RETAIN_TESTING_DB_DATA: DBModel.metadata.drop_all(bind=sync_engine) @pytest_asyncio.fixture(scope="session") def event_loop(): """Overrides pytest default function scoped event loop""" # return asyncio.get_event_loop() policy = asyncio.get_event_loop_policy() loop = policy.new_event_loop() yield loop loop.close() @pytest_asyncio.fixture(scope="session", autouse=True) async def initialise(): logger.info(f"init_db_add_super_user start") await create_super_user() yield logger.info(f"init_db_add_super_user teardown") @pytest_asyncio.fixture(scope="function") async def client_root() -> Generator[AsyncClient, Any, None]: async with AsyncClient(app=flims, base_url="http://localhost:8080") as clt: yield clt @pytest_asyncio.fixture(scope="function") async def client() -> Generator[AsyncClient, Any, None]: async with AsyncClient(app=flims, base_url="http://localhost:8080/api/v1") as clt: yield clt @pytest_asyncio.fixture(scope="function") async def gql_client() -> Generator[AsyncClient, Any, None]: async with AsyncClient(app=flims, base_url="http://localhost:8080") as clt: yield clt @pytest_asyncio.fixture(autouse=True) async def auth_data(client): superuser = { "username": settings.FIRST_SEPERUSER_USERNAME, "password": settings.FIRST_SUPERUSER_PASSWORD, } response = await client.post("/login/access-token", data=superuser) return { "token": response.json()["access_token"], "headers": {"Authorization": f"bearer {response.json()['access_token']}"}, } @pytest_asyncio.fixture(autouse=True) async def users(): return [ { "firstName": "Daniel", "lastName": "Diesel", "email": f"daniel@felcity.com", "openReg": False, }, { "firstName": "Brian", "lastName": "Moyo", "email": f"brian@felcity.com", "openReg": False, }, { "firstName": "Teddy", "lastName": "Estat", "email": f"teddy@felcity.com", "openReg": False, }, { "firstName": "Samantha", "lastName": "Mapako", "email": f"samantha@felcity.com", "openReg": False, }, { "firstName": "Peter", "lastName": "Tosh", "email": f"peter@felcity.com", "openReg": False, }, ] @pytest_asyncio.fixture(autouse=True) async def patients(): return [ { "payload": { "clientPatientId": fake_engine.ssn(), "firstName": fake_engine.first_name(), "middleName": fake_engine.first_name(), "lastName": fake_engine.last_name(), "age": random.randint(1, 90), "gender": random.choice([1, 2, 3]), "dateOfBirth": str(fake_engine.date_time()), "ageDobEstimated": fake_engine.boolean(), "clientUid": random.randint(1, 2), "phoneMobile": fake_engine.phone_number(), "phoneHome": fake_engine.phone_number(), "consentSms": fake_engine.boolean(), } } for i in range(1) ]