diff options
Diffstat (limited to 'tests/managers/gr/test_authentication.py')
| -rw-r--r-- | tests/managers/gr/test_authentication.py | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/tests/managers/gr/test_authentication.py b/tests/managers/gr/test_authentication.py new file mode 100644 index 0000000..53b6931 --- /dev/null +++ b/tests/managers/gr/test_authentication.py @@ -0,0 +1,125 @@ +import logging +from random import randint +from uuid import uuid4 + +import pytest + +from generalresearch.models.gr.authentication import GRUser +from test_utils.models.conftest import gr_user + +SSO_ISSUER = "" + + +class TestGRUserManager: + + def test_create(self, gr_um): + from generalresearch.models.gr.authentication import GRUser + + user: GRUser = gr_um.create_dummy() + instance = gr_um.get_by_id(user.id) + assert user.id == instance.id + + instance2 = gr_um.get_by_id(user.id) + assert user.model_dump_json() == instance2.model_dump_json() + + def test_get_by_id(self, gr_user, gr_um): + with pytest.raises(expected_exception=ValueError) as cm: + gr_um.get_by_id(gr_user_id=999_999_999) + assert "GRUser not found" in str(cm.value) + + instance = gr_um.get_by_id(gr_user_id=gr_user.id) + assert instance.sub == gr_user.sub + + def test_get_by_sub(self, gr_user, gr_um): + with pytest.raises(expected_exception=ValueError) as cm: + gr_um.get_by_sub(sub=uuid4().hex) + assert "GRUser not found" in str(cm.value) + + instance = gr_um.get_by_sub(sub=gr_user.sub) + assert instance.id == gr_user.id + + def test_get_by_sub_or_create(self, gr_user, gr_um): + sub = f"{uuid4().hex}-{uuid4().hex}" + + with pytest.raises(expected_exception=ValueError) as cm: + gr_um.get_by_sub(sub=sub) + assert "GRUser not found" in str(cm.value) + + instance = gr_um.get_by_sub_or_create(sub=sub) + assert isinstance(instance, GRUser) + assert instance.sub == sub + + def test_get_all(self, gr_um): + res1 = gr_um.get_all() + assert isinstance(res1, list) + + gr_um.create_dummy() + res2 = gr_um.get_all() + assert len(res1) == len(res2) - 1 + + def test_get_by_team(self, gr_um): + res = gr_um.get_by_team(team_id=999_999_999) + assert isinstance(res, list) + assert res == [] + + def test_list_product_uuids(self, caplog, gr_user, gr_um, thl_web_rr): + with caplog.at_level(logging.WARNING): + gr_um.list_product_uuids(user=gr_user, thl_pg_config=thl_web_rr) + assert "prefetch not run" in caplog.text + + +class TestGRTokenManager: + + def test_create(self, gr_user, gr_tm): + assert gr_tm.create(user_id=gr_user.id) is None + + token = gr_tm.get_by_user_id(user_id=gr_user.id) + assert gr_user.id == token.user_id + + def test_get_by_user_id(self, gr_user, gr_tm): + assert gr_tm.create(user_id=gr_user.id) is None + + token = gr_tm.get_by_user_id(user_id=gr_user.id) + assert gr_user.id == token.user_id + + def test_prefetch_user(self, gr_user, gr_tm, gr_db, gr_redis_config): + from generalresearch.models.gr.authentication import GRToken + + gr_tm.create(user_id=gr_user.id) + + token: GRToken = gr_tm.get_by_user_id(user_id=gr_user.id) + assert token.user is None + + token.prefetch_user(pg_config=gr_db, redis_config=gr_redis_config) + assert token.user.id == gr_user.id + + def test_get_by_key(self, gr_user, gr_um, gr_tm): + gr_tm.create(user_id=gr_user.id) + token = gr_tm.get_by_user_id(user_id=gr_user.id) + + instance = gr_tm.get_by_key(api_key=token.key) + assert token.created == instance.created + + # Search for non-existent key + with pytest.raises(expected_exception=Exception) as cm: + gr_tm.get_by_key(api_key=uuid4().hex) + assert "No GRUser with token of " in str(cm.value) + + @pytest.mark.skip(reason="no idea how to actually test this...") + def test_get_by_sso_key(self, gr_user, gr_um, gr_tm, gr_redis_config): + from generalresearch.models.gr.authentication import GRToken + + api_key = "..." + jwks = { + # ... + } + + instance = gr_tm.get_by_key( + api_key=api_key, + jwks=jwks, + audience="...", + issuer=SSO_ISSUER, + gr_redis_config=gr_redis_config, + ) + + assert isinstance(instance, GRToken) |
