chore: migrate account role test to testcontainers (#38010)

This commit is contained in:
Escape0707 2026-06-26 14:51:14 +09:00 committed by GitHub
parent fa6f4b0ea5
commit eb4ec93cea
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 23 additions and 19 deletions

View File

@ -27,7 +27,6 @@ extend-select = ["ANN401", "ARG", "TID251"]
"controllers/web/test_wraps.py" = ["ARG"] "controllers/web/test_wraps.py" = ["ARG"]
"core/app/layers/test_pause_state_persist_layer.py" = ["ARG"] "core/app/layers/test_pause_state_persist_layer.py" = ["ARG"]
"core/rag/retrieval/test_dataset_retrieval_integration.py" = ["ARG"] "core/rag/retrieval/test_dataset_retrieval_integration.py" = ["ARG"]
"models/test_account.py" = ["ARG"]
"models/test_conversation_message_inputs.py" = ["ARG"] "models/test_conversation_message_inputs.py" = ["ARG"]
"models/test_conversation_status_count.py" = ["ARG"] "models/test_conversation_status_count.py" = ["ARG"]
"repositories/test_sqlalchemy_api_workflow_run_repository.py" = ["ARG"] "repositories/test_sqlalchemy_api_workflow_run_repository.py" = ["ARG"]

View File

@ -3,6 +3,7 @@ Integration tests for Account and Tenant model methods that interact with the da
Migrated from unit_tests/models/test_account_models.py, replacing Migrated from unit_tests/models/test_account_models.py, replacing
@patch("models.account.db") mock patches with real PostgreSQL operations. @patch("models.account.db") mock patches with real PostgreSQL operations.
Also absorbs unit_tests/models/test_account.py role helper coverage.
Covers: Covers:
- Account.current_tenant setter (sets _current_tenant and role from TenantAccountJoin) - Account.current_tenant setter (sets _current_tenant and role from TenantAccountJoin)
@ -12,6 +13,7 @@ Covers:
""" """
from collections.abc import Generator from collections.abc import Generator
from typing import cast
from uuid import uuid4 from uuid import uuid4
import pytest import pytest
@ -20,8 +22,10 @@ from sqlalchemy.orm import Session
from models.account import Account, AccountIntegrate, Tenant, TenantAccountJoin, TenantAccountRole from models.account import Account, AccountIntegrate, Tenant, TenantAccountJoin, TenantAccountRole
TrackedRow = Account | AccountIntegrate | Tenant | TenantAccountJoin
def _cleanup_tracked_rows(db_session: Session, tracked: list) -> None:
def _cleanup_tracked_rows(db_session: Session, tracked: list[TrackedRow]) -> None:
"""Delete rows tracked during the test so committed state does not leak into the DB. """Delete rows tracked during the test so committed state does not leak into the DB.
Rolls back any pending (uncommitted) session state first, then issues DELETE Rolls back any pending (uncommitted) session state first, then issues DELETE
@ -52,7 +56,7 @@ def _build_account(email_prefix: str = "account") -> Account:
class _DBTrackingTestBase: class _DBTrackingTestBase:
"""Base class providing a tracker list and shared row factories for account/tenant tests.""" """Base class providing a tracker list and shared row factories for account/tenant tests."""
_tracked: list _tracked: list[TrackedRow]
@pytest.fixture(autouse=True) @pytest.fixture(autouse=True)
def _setup_cleanup(self, db_session_with_containers: Session) -> Generator[None, None, None]: def _setup_cleanup(self, db_session_with_containers: Session) -> Generator[None, None, None]:
@ -84,6 +88,22 @@ class _DBTrackingTestBase:
return join return join
class TestTenantAccountRole:
"""Tests for TenantAccountRole helper methods."""
def test_account_is_privileged_role(self) -> None:
assert TenantAccountRole.ADMIN == "admin"
assert TenantAccountRole.OWNER == "owner"
assert TenantAccountRole.EDITOR == "editor"
assert TenantAccountRole.NORMAL == "normal"
assert TenantAccountRole.is_privileged_role(TenantAccountRole.ADMIN)
assert TenantAccountRole.is_privileged_role(TenantAccountRole.OWNER)
assert not TenantAccountRole.is_privileged_role(TenantAccountRole.NORMAL)
assert not TenantAccountRole.is_privileged_role(TenantAccountRole.EDITOR)
assert not TenantAccountRole.is_privileged_role(cast(TenantAccountRole, ""))
class TestAccountCurrentTenantSetter(_DBTrackingTestBase): class TestAccountCurrentTenantSetter(_DBTrackingTestBase):
"""Integration tests for Account.current_tenant property setter.""" """Integration tests for Account.current_tenant property setter."""
@ -176,7 +196,7 @@ class TestAccountGetByOpenId(_DBTrackingTestBase):
assert result is not None assert result is not None
assert result.id == account.id assert result.id == account.id
def test_get_by_openid_returns_none_when_no_integrate_exists(self, db_session_with_containers: Session) -> None: def test_get_by_openid_returns_none_when_no_integrate_exists(self) -> None:
"""get_by_openid returns None when no AccountIntegrate row matches.""" """get_by_openid returns None when no AccountIntegrate row matches."""
result = Account.get_by_openid("github", f"github_{uuid4()}") result = Account.get_by_openid("github", f"github_{uuid4()}")

View File

@ -50,7 +50,6 @@ project-excludes = [
"libs/broadcast_channel/redis/test_streams_channel.py", "libs/broadcast_channel/redis/test_streams_channel.py",
"libs/test_auto_renew_redis_lock_integration.py", "libs/test_auto_renew_redis_lock_integration.py",
"libs/test_rate_limiter_integration.py", "libs/test_rate_limiter_integration.py",
"models/test_account.py",
"models/test_conversation_message_inputs.py", "models/test_conversation_message_inputs.py",
"models/test_types_enum_text.py", "models/test_types_enum_text.py",
"repositories/test_sqlalchemy_api_workflow_node_execution_repository.py", "repositories/test_sqlalchemy_api_workflow_node_execution_repository.py",

View File

@ -1,14 +0,0 @@
from models.account import TenantAccountRole
def test_account_is_privileged_role():
assert TenantAccountRole.ADMIN == "admin"
assert TenantAccountRole.OWNER == "owner"
assert TenantAccountRole.EDITOR == "editor"
assert TenantAccountRole.NORMAL == "normal"
assert TenantAccountRole.is_privileged_role(TenantAccountRole.ADMIN)
assert TenantAccountRole.is_privileged_role(TenantAccountRole.OWNER)
assert not TenantAccountRole.is_privileged_role(TenantAccountRole.NORMAL)
assert not TenantAccountRole.is_privileged_role(TenantAccountRole.EDITOR)
assert not TenantAccountRole.is_privileged_role("")