aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorstuppie2026-10-27 12:14:59 -0600
committerstuppie2026-10-27 12:14:59 -0600
commit420ce82145531d6bc7b511701a1704c037e91fdb (patch)
tree14a5f6f45c4d848b70defc2395c8692682e4c3e5
parent1c73e7f2338dadc327b88c580a57298568bc254c (diff)
downloadgeneralresearch-420ce82145531d6bc7b511701a1704c037e91fdb.tar.gz
generalresearch-420ce82145531d6bc7b511701a1704c037e91fdb.zip
fix gr user tests
-rw-r--r--generalresearch/managers/gr/authentication.py17
-rw-r--r--test_utils/models/gr/conftest.py25
-rw-r--r--tests/managers/gr/test_authentication.py75
-rw-r--r--tests/managers/gr/test_team.py43
4 files changed, 60 insertions, 100 deletions
diff --git a/generalresearch/managers/gr/authentication.py b/generalresearch/managers/gr/authentication.py
index 8e3b84e..9263f65 100644
--- a/generalresearch/managers/gr/authentication.py
+++ b/generalresearch/managers/gr/authentication.py
@@ -130,23 +130,6 @@ class GRUserManager(PostgresManagerWithRedis):
return [GRUser.model_validate(item) for item in res]
- def list_product_uuids(
- self, user: GRUser, thl_pg_config: PostgresConfig
- ) -> list[UUIDStr] | None:
- if user.business_uuids is None:
- LOG.warning("prefetch not run")
- return None
-
- res = thl_pg_config.execute_sql_query(
- query="""
- SELECT bp.id::uuid as uuid
- FROM userprofile_brokerageproduct AS bp
- WHERE bp.business_id = ANY(%s)
- """,
- params=[user.business_uuids],
- )
- return [item["uuid"] for item in res]
-
class GRTokenManager(PostgresManager):
def get_by_key(
diff --git a/test_utils/models/gr/conftest.py b/test_utils/models/gr/conftest.py
index d99bd89..4b9ff4c 100644
--- a/test_utils/models/gr/conftest.py
+++ b/test_utils/models/gr/conftest.py
@@ -5,6 +5,7 @@ from random import randint
from typing import TYPE_CHECKING
from uuid import uuid4
+import faker
import pytest
from pydantic import PositiveInt
from pydantic_extra_types.phone_numbers import PhoneNumber
@@ -28,7 +29,9 @@ if TYPE_CHECKING:
)
from generalresearch.models.gr.team import Membership, Team
from generalresearch.pg_helper import PostgresConfig
- from generalresearch.redis_helper import RedisConfig
+
+
+fake = faker.Faker()
# --- Static ---
@@ -216,15 +219,16 @@ def gr_user_factory(gr_user_manager: GRUserManager) -> Callable[..., GRUser]:
def _inner(
save: bool = True,
- sub: str | None = None,
+ name: str | None = None,
email: str | None = None,
is_superuser: bool = False,
) -> GRUser:
- sub = sub or f"{uuid4().hex}-{uuid4().hex}"
+ name = name or fake.name()
+ email = email or f"{uuid4().hex}@example.com"
if save:
return gr_user_manager.create(
- sub=sub,
+ name=name,
email=email,
is_superuser=is_superuser,
)
@@ -235,19 +239,6 @@ def gr_user_factory(gr_user_manager: GRUserManager) -> Callable[..., GRUser]:
@pytest.fixture
-def gr_user_cache(
- gr_user: GRUser,
- gr_db: PostgresConfig,
- thl_web_rr: PostgresConfig,
- gr_redis_config: RedisConfig,
-) -> GRUser:
- gr_user.set_cache(
- pg_config=gr_db, thl_web_rr=thl_web_rr, redis_config=gr_redis_config
- )
- return gr_user
-
-
-@pytest.fixture
def gr_user(gr_user_factory: Callable[..., GRUser]) -> GRUser:
return gr_user_factory(save=True)
diff --git a/tests/managers/gr/test_authentication.py b/tests/managers/gr/test_authentication.py
index 1310c79..324bfa6 100644
--- a/tests/managers/gr/test_authentication.py
+++ b/tests/managers/gr/test_authentication.py
@@ -1,11 +1,9 @@
-import logging
from collections.abc import Callable
from uuid import uuid4
import pytest
from generalresearch.managers.gr.authentication import GRTokenManager, GRUserManager
-from generalresearch.managers.gr.team import TeamManager
from generalresearch.models.gr.authentication import GRToken, GRUser
from generalresearch.pg_helper import PostgresConfig
from generalresearch.redis_helper import RedisConfig
@@ -14,12 +12,13 @@ SSO_ISSUER = ""
class TestGRUserManager:
-
def test_create(self, gr_user: GRUser, gr_user_manager: GRUserManager):
+ assert gr_user.id is not None
instance = gr_user_manager.get_by_id(gr_user.id)
assert isinstance(instance, GRUser)
assert gr_user.id == instance.id
+ assert gr_user.id is not None
instance2 = gr_user_manager.get_by_id(gr_user.id)
assert isinstance(instance2, GRUser)
assert gr_user.model_dump_json() == instance2.model_dump_json()
@@ -28,32 +27,25 @@ class TestGRUserManager:
with pytest.raises(expected_exception=ValueError) as cm:
gr_user_manager.get_by_id(gr_user_id=999_999_999)
assert "GRUser not found" in str(cm.value)
-
+ assert gr_user.id is not None
instance = gr_user_manager.get_by_id(gr_user_id=gr_user.id)
assert isinstance(instance, GRUser)
- assert instance.sub == gr_user.sub
-
- def test_get_by_sub(self, gr_user: GRUser, gr_user_manager: GRUserManager):
- with pytest.raises(expected_exception=ValueError) as cm:
- gr_user_manager.get_by_sub(sub=uuid4().hex)
- assert "GRUser not found" in str(cm.value)
-
- instance = gr_user_manager.get_by_sub(sub=gr_user.sub)
- assert isinstance(instance, GRUser)
- assert instance.id == gr_user.id
+ assert instance.email == gr_user.email
- def test_get_by_sub_or_create(
- self, gr_user: GRUser, gr_user_manager: GRUserManager
+ def test_get_by_email(
+ self,
+ gr_user_factory: Callable[..., GRUser],
+ gr_user_manager: GRUserManager,
):
- sub = f"{uuid4().hex}-{uuid4().hex}"
+ email = f"{uuid4().hex}@example.com"
+ gr_user = gr_user_factory(email=email)
- with pytest.raises(expected_exception=ValueError) as cm:
- gr_user_manager.get_by_sub(sub=sub)
- assert "GRUser not found" in str(cm.value)
+ with pytest.raises(expected_exception=ValueError, match="GRUser not found"):
+ gr_user_manager.get_by_email(email="missing@example.com")
- instance = gr_user_manager.get_by_sub_or_create(sub=sub)
+ instance = gr_user_manager.get_by_email(email=email)
assert isinstance(instance, GRUser)
- assert instance.sub == sub
+ assert instance.id == gr_user.id
def test_get_all(
self, gr_user_factory: Callable[..., GRUser], gr_user_manager: GRUserManager
@@ -70,21 +62,10 @@ class TestGRUserManager:
assert isinstance(res, list)
assert res == []
- def test_list_product_uuids(
- self,
- caplog,
- gr_user: GRUser,
- gr_user_manager: GRUserManager,
- thl_web_rr: PostgresConfig,
- ):
- with caplog.at_level(logging.WARNING):
- gr_user_manager.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: GRUser, gr_token_manager: GRTokenManager):
+ assert gr_user.id is not None
assert gr_token_manager.create(user_id=gr_user.id) is None
token = gr_token_manager.get_by_user_id(user_id=gr_user.id)
@@ -92,6 +73,7 @@ class TestGRTokenManager:
assert gr_user.id == token.user_id
def test_get_by_user_id(self, gr_user: GRUser, gr_token_manager: GRTokenManager):
+ assert gr_user.id is not None
assert gr_token_manager.create(user_id=gr_user.id) is None
token = gr_token_manager.get_by_user_id(user_id=gr_user.id)
@@ -105,7 +87,7 @@ class TestGRTokenManager:
gr_db: PostgresConfig,
gr_redis_config: RedisConfig,
):
-
+ assert gr_user.id is not None
gr_token_manager.create(user_id=gr_user.id)
token: GRToken | None = gr_token_manager.get_by_user_id(user_id=gr_user.id)
@@ -120,6 +102,7 @@ class TestGRTokenManager:
gr_user: GRUser,
gr_token_manager: GRTokenManager,
):
+ assert gr_user.id is not None
gr_token_manager.create(user_id=gr_user.id)
token = gr_token_manager.get_by_user_id(user_id=gr_user.id)
assert isinstance(token, GRToken)
@@ -131,25 +114,3 @@ class TestGRTokenManager:
with pytest.raises(expected_exception=Exception) as cm:
gr_token_manager.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_team_manager: TeamManager,
- gr_redis_config: RedisConfig,
- ):
-
- api_key = "..."
- jwks = {
- # ...
- }
-
- instance = gr_team_manager.get_by_key(
- api_key=api_key,
- jwks=jwks,
- audience="...",
- issuer=SSO_ISSUER,
- gr_redis_config=gr_redis_config,
- )
-
- assert isinstance(instance, GRToken)
diff --git a/tests/managers/gr/test_team.py b/tests/managers/gr/test_team.py
index 689c4be..6c38a49 100644
--- a/tests/managers/gr/test_team.py
+++ b/tests/managers/gr/test_team.py
@@ -11,13 +11,13 @@ if TYPE_CHECKING:
from generalresearch.managers.gr.authentication import GRUserManager
from generalresearch.managers.gr.team import MembershipManager, TeamManager
from generalresearch.models.gr.authentication import GRUser
+ from generalresearch.models.gr.business import Business
from generalresearch.models.thl.product import Product
from generalresearch.pg_helper import PostgresConfig
from generalresearch.redis_helper import RedisConfig
class TestMembershipManager:
-
def test_init(
self, gr_membership_manager: MembershipManager, gr_db: PostgresConfig
):
@@ -25,7 +25,6 @@ class TestMembershipManager:
class TestTeamManager:
-
def test_init(self, gr_team_manager: TeamManager, gr_db: PostgresConfig):
assert gr_team_manager.pg_config == gr_db
@@ -81,13 +80,11 @@ class TestTeamManager:
gr_team_manager: TeamManager,
gr_user_manager: GRUserManager,
gr_user_factory: Callable[..., GRUser],
+ gr_membership_factory: Callable[..., Membership],
):
user: GRUser = gr_user_factory()
-
- instance = gr_team_manager.add_user(
- gr_user_manager=gr_user_manager, team=gr_team, gr_user=user
- )
+ instance = gr_membership_factory(gr_team=gr_team, gr_user=user)
assert isinstance(instance, Membership)
# assert team.gr_users is None
@@ -122,11 +119,10 @@ class TestTeamManager:
gr_user_factory: Callable[..., GRUser],
gr_team_manager: TeamManager,
gr_user_manager: GRUserManager,
+ gr_membership_factory: Callable[..., Membership],
):
user: GRUser = gr_user_factory()
- gr_team_manager.add_user(
- gr_user_manager=gr_user_manager, team=gr_team, gr_user=user
- )
+ gr_membership_factory(gr_team=gr_team, gr_user=user)
res = gr_team_manager.get_by_user(gr_user=user)
assert isinstance(res, list)
@@ -135,6 +131,35 @@ class TestTeamManager:
assert isinstance(instance, Team)
assert instance.uuid == gr_team.uuid
+ def test_filter_includes_relationship_counts(
+ self,
+ gr_team_factory: Callable[..., Team],
+ gr_team_manager: TeamManager,
+ gr_user_factory: Callable[..., GRUser],
+ gr_membership_factory: Callable[..., Membership],
+ gr_business_factory: Callable[..., Business],
+ ):
+ team = gr_team_factory()
+ other_team = gr_team_factory()
+ user = gr_user_factory()
+ other_user = gr_user_factory()
+ business = gr_business_factory()
+
+ gr_membership_factory(gr_team=team, gr_user=user)
+ gr_membership_factory(gr_team=team, gr_user=other_user)
+ gr_team_manager.add_business(team_id=team.id, business_id=business.id)
+
+ assert gr_team_manager.filter(team_id=other_team.id) == [other_team]
+
+ teams = gr_team_manager.filter(
+ team_uuid=team.uuid,
+ gr_user_id=user.id,
+ )
+ assert len(teams) == 1
+ assert teams[0].id == team.id
+ assert teams[0].business_count == 1
+ assert teams[0].membership_count == 2
+
def test_get_by_user_duplicates(
self,
gr_user: GRUser,