|
| 1 | +from unittest.mock import ANY |
| 2 | + |
| 3 | +import pytest |
| 4 | +import respx |
| 5 | +from httpx import Response |
| 6 | +from sqlmodel import select |
| 7 | + |
| 8 | +from auth0.client import get_auth0_client |
| 9 | +from db.models import BiocommonsGroup |
| 10 | +from main import app |
| 11 | +from tests.biocommons.datagen import RoleFactory |
| 12 | +from tests.db.datagen import Auth0RoleFactory |
| 13 | + |
| 14 | + |
| 15 | +@pytest.fixture |
| 16 | +def override_auth0_client(auth0_client): |
| 17 | + app.dependency_overrides[get_auth0_client] = lambda: auth0_client |
| 18 | + yield |
| 19 | + app.dependency_overrides.clear() |
| 20 | + |
| 21 | + |
| 22 | +@respx.mock |
| 23 | +def test_create_group(test_client, as_admin_user, override_auth0_client, test_db_session): |
| 24 | + Auth0RoleFactory.__session__ = test_db_session |
| 25 | + # Mock Auth0 response to check group exists |
| 26 | + mock_group = RoleFactory.build(name="biocommons/group/tsi") |
| 27 | + route = respx.get("https://example.auth0.com/api/v2/roles", params={"name_filter": ANY}).mock( |
| 28 | + return_value=Response(200, json=[mock_group.model_dump(mode="json")]) |
| 29 | + ) |
| 30 | + |
| 31 | + admin_role = Auth0RoleFactory.create_sync(name="biocommons/role/tsi/admin") |
| 32 | + resp = test_client.post( |
| 33 | + "/biocommons/groups/create", |
| 34 | + json={ |
| 35 | + "group_id": "biocommons/group/tsi", |
| 36 | + "name": "Threatened Species Initiative", |
| 37 | + "admin_roles": [admin_role.name] |
| 38 | + } |
| 39 | + ) |
| 40 | + print(resp.json()) |
| 41 | + assert resp.status_code == 200 |
| 42 | + assert route.called |
| 43 | + group_from_db = test_db_session.exec(select(BiocommonsGroup).where(BiocommonsGroup.group_id == "biocommons/group/tsi")).one() |
| 44 | + assert group_from_db.group_id == "biocommons/group/tsi" |
| 45 | + assert group_from_db.name == "Threatened Species Initiative" |
| 46 | + assert admin_role in group_from_db.admin_roles |
0 commit comments