aboutsummaryrefslogtreecommitdiff
path: root/tests/managers/gr/test_authentication.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/managers/gr/test_authentication.py')
-rw-r--r--tests/managers/gr/test_authentication.py125
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)