Refactor RoleStore to fully async (#13184)

Co-authored-by: openhands <openhands@all-hands.dev>
This commit is contained in:
Tim O'Farrell
2026-03-03 16:01:20 -07:00
committed by GitHub
parent 4688741324
commit 45b970c0dd
11 changed files with 243 additions and 204 deletions

View File

@@ -710,7 +710,7 @@ class TestOrgMemberServiceRemoveOrgMember:
new_callable=AsyncMock,
) as mock_get_member,
patch(
'server.services.org_member_service.RoleStore.get_role_by_id_async',
'server.services.org_member_service.RoleStore.get_role_by_id',
new_callable=AsyncMock,
) as mock_get_role,
patch(
@@ -759,7 +759,7 @@ class TestOrgMemberServiceRemoveOrgMember:
new_callable=AsyncMock,
) as mock_get_member,
patch(
'server.services.org_member_service.RoleStore.get_role_by_id_async',
'server.services.org_member_service.RoleStore.get_role_by_id',
new_callable=AsyncMock,
) as mock_get_role,
patch(
@@ -807,7 +807,7 @@ class TestOrgMemberServiceRemoveOrgMember:
new_callable=AsyncMock,
) as mock_get_member,
patch(
'server.services.org_member_service.RoleStore.get_role_by_id_async',
'server.services.org_member_service.RoleStore.get_role_by_id',
new_callable=AsyncMock,
) as mock_get_role,
patch(
@@ -922,7 +922,7 @@ class TestOrgMemberServiceRemoveOrgMember:
new_callable=AsyncMock,
) as mock_get_member,
patch(
'server.services.org_member_service.RoleStore.get_role_by_id_async',
'server.services.org_member_service.RoleStore.get_role_by_id',
new_callable=AsyncMock,
) as mock_get_role,
):
@@ -959,7 +959,7 @@ class TestOrgMemberServiceRemoveOrgMember:
new_callable=AsyncMock,
) as mock_get_member,
patch(
'server.services.org_member_service.RoleStore.get_role_by_id_async',
'server.services.org_member_service.RoleStore.get_role_by_id',
new_callable=AsyncMock,
) as mock_get_role,
patch(
@@ -1011,7 +1011,7 @@ class TestOrgMemberServiceRemoveOrgMember:
new_callable=AsyncMock,
) as mock_get_member,
patch(
'server.services.org_member_service.RoleStore.get_role_by_id_async',
'server.services.org_member_service.RoleStore.get_role_by_id',
new_callable=AsyncMock,
) as mock_get_role,
):
@@ -1053,7 +1053,7 @@ class TestOrgMemberServiceRemoveOrgMember:
new_callable=AsyncMock,
) as mock_get_member,
patch(
'server.services.org_member_service.RoleStore.get_role_by_id_async',
'server.services.org_member_service.RoleStore.get_role_by_id',
new_callable=AsyncMock,
) as mock_get_role,
):
@@ -1090,7 +1090,7 @@ class TestOrgMemberServiceRemoveOrgMember:
new_callable=AsyncMock,
) as mock_get_member,
patch(
'server.services.org_member_service.RoleStore.get_role_by_id_async',
'server.services.org_member_service.RoleStore.get_role_by_id',
new_callable=AsyncMock,
) as mock_get_role,
patch(
@@ -1137,7 +1137,7 @@ class TestOrgMemberServiceRemoveOrgMember:
new_callable=AsyncMock,
) as mock_get_member,
patch(
'server.services.org_member_service.RoleStore.get_role_by_id_async',
'server.services.org_member_service.RoleStore.get_role_by_id',
new_callable=AsyncMock,
) as mock_get_role,
patch(
@@ -1195,7 +1195,7 @@ class TestOrgMemberServiceRemoveOrgMember:
new_callable=AsyncMock,
) as mock_get_member,
patch(
'server.services.org_member_service.RoleStore.get_role_by_id_async',
'server.services.org_member_service.RoleStore.get_role_by_id',
new_callable=AsyncMock,
) as mock_get_role,
patch(
@@ -1243,7 +1243,7 @@ class TestOrgMemberServiceRemoveOrgMember:
new_callable=AsyncMock,
) as mock_get_member,
patch(
'server.services.org_member_service.RoleStore.get_role_by_id_async',
'server.services.org_member_service.RoleStore.get_role_by_id',
new_callable=AsyncMock,
) as mock_get_role,
patch(
@@ -1299,7 +1299,7 @@ class TestOrgMemberServiceRemoveOrgMember:
new_callable=AsyncMock,
) as mock_get_member,
patch(
'server.services.org_member_service.RoleStore.get_role_by_id_async',
'server.services.org_member_service.RoleStore.get_role_by_id',
new_callable=AsyncMock,
) as mock_get_role,
patch(
@@ -1351,7 +1351,7 @@ class TestOrgMemberServiceRemoveOrgMember:
new_callable=AsyncMock,
) as mock_get_member,
patch(
'server.services.org_member_service.RoleStore.get_role_by_id_async',
'server.services.org_member_service.RoleStore.get_role_by_id',
new_callable=AsyncMock,
) as mock_get_role,
patch(
@@ -1403,7 +1403,7 @@ class TestOrgMemberServiceRemoveOrgMember:
new_callable=AsyncMock,
) as mock_get_member,
patch(
'server.services.org_member_service.RoleStore.get_role_by_id_async',
'server.services.org_member_service.RoleStore.get_role_by_id',
new_callable=AsyncMock,
) as mock_get_role,
patch(
@@ -1457,7 +1457,7 @@ class TestOrgMemberServiceRemoveOrgMember:
new_callable=AsyncMock,
) as mock_get_member,
patch(
'server.services.org_member_service.RoleStore.get_role_by_id_async',
'server.services.org_member_service.RoleStore.get_role_by_id',
new_callable=AsyncMock,
) as mock_get_role,
patch(
@@ -1510,7 +1510,7 @@ class TestOrgMemberServiceRemoveOrgMember:
new_callable=AsyncMock,
) as mock_get_member,
patch(
'server.services.org_member_service.RoleStore.get_role_by_id_async',
'server.services.org_member_service.RoleStore.get_role_by_id',
new_callable=AsyncMock,
) as mock_get_role,
patch(
@@ -1620,11 +1620,11 @@ class TestOrgMemberServiceUpdateOrgMember:
new_callable=AsyncMock,
) as mock_get_member,
patch(
'server.services.org_member_service.RoleStore.get_role_by_id_async',
'server.services.org_member_service.RoleStore.get_role_by_id',
new_callable=AsyncMock,
) as mock_get_role,
patch(
'server.services.org_member_service.RoleStore.get_role_by_name_async',
'server.services.org_member_service.RoleStore.get_role_by_name',
new_callable=AsyncMock,
) as mock_get_role_by_name,
patch(
@@ -1681,11 +1681,11 @@ class TestOrgMemberServiceUpdateOrgMember:
new_callable=AsyncMock,
) as mock_get_member,
patch(
'server.services.org_member_service.RoleStore.get_role_by_id_async',
'server.services.org_member_service.RoleStore.get_role_by_id',
new_callable=AsyncMock,
) as mock_get_role,
patch(
'server.services.org_member_service.RoleStore.get_role_by_name_async',
'server.services.org_member_service.RoleStore.get_role_by_name',
new_callable=AsyncMock,
) as mock_get_role_by_name,
patch(
@@ -1740,11 +1740,11 @@ class TestOrgMemberServiceUpdateOrgMember:
new_callable=AsyncMock,
) as mock_get_member,
patch(
'server.services.org_member_service.RoleStore.get_role_by_id_async',
'server.services.org_member_service.RoleStore.get_role_by_id',
new_callable=AsyncMock,
) as mock_get_role,
patch(
'server.services.org_member_service.RoleStore.get_role_by_name_async',
'server.services.org_member_service.RoleStore.get_role_by_name',
new_callable=AsyncMock,
) as mock_get_role_by_name,
patch(
@@ -1803,11 +1803,11 @@ class TestOrgMemberServiceUpdateOrgMember:
new_callable=AsyncMock,
) as mock_get_member,
patch(
'server.services.org_member_service.RoleStore.get_role_by_id_async',
'server.services.org_member_service.RoleStore.get_role_by_id',
new_callable=AsyncMock,
) as mock_get_role,
patch(
'server.services.org_member_service.RoleStore.get_role_by_name_async',
'server.services.org_member_service.RoleStore.get_role_by_name',
new_callable=AsyncMock,
) as mock_get_role_by_name,
patch(
@@ -1934,11 +1934,11 @@ class TestOrgMemberServiceUpdateOrgMember:
new_callable=AsyncMock,
) as mock_get_member,
patch(
'server.services.org_member_service.RoleStore.get_role_by_id_async',
'server.services.org_member_service.RoleStore.get_role_by_id',
new_callable=AsyncMock,
) as mock_get_role,
patch(
'server.services.org_member_service.RoleStore.get_role_by_name_async',
'server.services.org_member_service.RoleStore.get_role_by_name',
new_callable=AsyncMock,
) as mock_get_role_by_name,
):
@@ -1977,11 +1977,11 @@ class TestOrgMemberServiceUpdateOrgMember:
new_callable=AsyncMock,
) as mock_get_member,
patch(
'server.services.org_member_service.RoleStore.get_role_by_id_async',
'server.services.org_member_service.RoleStore.get_role_by_id',
new_callable=AsyncMock,
) as mock_get_role,
patch(
'server.services.org_member_service.RoleStore.get_role_by_name_async',
'server.services.org_member_service.RoleStore.get_role_by_name',
new_callable=AsyncMock,
) as mock_get_role_by_name,
patch(
@@ -2032,7 +2032,7 @@ class TestOrgMemberServiceUpdateOrgMember:
new_callable=AsyncMock,
) as mock_get_member,
patch(
'server.services.org_member_service.RoleStore.get_role_by_id_async',
'server.services.org_member_service.RoleStore.get_role_by_id',
new_callable=AsyncMock,
) as mock_get_role,
patch(
@@ -2134,7 +2134,7 @@ class TestOrgMemberServiceIsLastOwner:
new_callable=AsyncMock,
) as mock_get_members,
patch(
'server.services.org_member_service.RoleStore.get_role_by_id_async',
'server.services.org_member_service.RoleStore.get_role_by_id',
new_callable=AsyncMock,
) as mock_get_role,
):
@@ -2166,7 +2166,7 @@ class TestOrgMemberServiceIsLastOwner:
new_callable=AsyncMock,
) as mock_get_members,
patch(
'server.services.org_member_service.RoleStore.get_role_by_id_async',
'server.services.org_member_service.RoleStore.get_role_by_id',
new_callable=AsyncMock,
) as mock_get_role,
):
@@ -2194,7 +2194,7 @@ class TestOrgMemberServiceIsLastOwner:
new_callable=AsyncMock,
) as mock_get_members,
patch(
'server.services.org_member_service.RoleStore.get_role_by_id_async',
'server.services.org_member_service.RoleStore.get_role_by_id',
new_callable=AsyncMock,
) as mock_get_role,
):
@@ -2249,7 +2249,7 @@ class TestOrgMemberServiceGetMe:
new_callable=AsyncMock,
) as mock_get_member,
patch(
'server.services.org_member_service.RoleStore.get_role_by_id_async',
'server.services.org_member_service.RoleStore.get_role_by_id',
new_callable=AsyncMock,
) as mock_get_role,
patch(
@@ -2308,7 +2308,7 @@ class TestOrgMemberServiceGetMe:
new_callable=AsyncMock,
) as mock_get_member,
patch(
'server.services.org_member_service.RoleStore.get_role_by_id_async',
'server.services.org_member_service.RoleStore.get_role_by_id',
new_callable=AsyncMock,
) as mock_get_role,
):
@@ -2336,7 +2336,7 @@ class TestOrgMemberServiceGetMe:
new_callable=AsyncMock,
) as mock_get_member,
patch(
'server.services.org_member_service.RoleStore.get_role_by_id_async',
'server.services.org_member_service.RoleStore.get_role_by_id',
new_callable=AsyncMock,
) as mock_get_role,
patch(

View File

@@ -359,7 +359,7 @@ class TestGetUserOrgRole:
return_value=mock_org_member,
),
patch(
'server.auth.authorization.RoleStore.get_role_by_id_async',
'server.auth.authorization.RoleStore.get_role_by_id',
new_callable=AsyncMock,
return_value=mock_role,
),
@@ -411,7 +411,7 @@ class TestGetUserOrgRole:
new_callable=AsyncMock,
) as mock_get_org_member,
patch(
'server.auth.authorization.RoleStore.get_role_by_id_async',
'server.auth.authorization.RoleStore.get_role_by_id',
new_callable=AsyncMock,
return_value=mock_role,
),

View File

@@ -327,12 +327,12 @@ class TestCreateInvitationsBatch:
return_value=mock_inviter_member,
),
patch(
'server.services.org_invitation_service.RoleStore.get_role_by_id_async',
'server.services.org_invitation_service.RoleStore.get_role_by_id',
new_callable=AsyncMock,
return_value=mock_owner_role,
),
patch(
'server.services.org_invitation_service.RoleStore.get_role_by_name_async',
'server.services.org_invitation_service.RoleStore.get_role_by_name',
new_callable=AsyncMock,
return_value=mock_member_role,
),
@@ -383,12 +383,12 @@ class TestCreateInvitationsBatch:
return_value=mock_inviter_member,
),
patch(
'server.services.org_invitation_service.RoleStore.get_role_by_id_async',
'server.services.org_invitation_service.RoleStore.get_role_by_id',
new_callable=AsyncMock,
return_value=mock_owner_role,
),
patch(
'server.services.org_invitation_service.RoleStore.get_role_by_name_async',
'server.services.org_invitation_service.RoleStore.get_role_by_name',
new_callable=AsyncMock,
return_value=mock_member_role,
),
@@ -452,12 +452,12 @@ class TestCreateInvitationsBatch:
return_value=mock_inviter_member,
),
patch(
'server.services.org_invitation_service.RoleStore.get_role_by_id_async',
'server.services.org_invitation_service.RoleStore.get_role_by_id',
new_callable=AsyncMock,
return_value=mock_owner_role,
),
patch(
'server.services.org_invitation_service.RoleStore.get_role_by_name_async',
'server.services.org_invitation_service.RoleStore.get_role_by_name',
new_callable=AsyncMock,
return_value=None, # Invalid role
),

View File

@@ -77,7 +77,7 @@ async def test_validate_name_uniqueness_with_unique_name(async_session_maker):
with (
patch('storage.org_store.a_session_maker', async_session_maker),
patch('storage.org_member_store.a_session_maker'),
patch('storage.role_store.session_maker'),
patch('storage.role_store.a_session_maker'),
):
await OrgService.validate_name_uniqueness(unique_name)
@@ -132,7 +132,7 @@ async def test_create_org_with_owner_success(
with (
patch('storage.org_store.a_session_maker', async_session_maker),
patch('storage.role_store.session_maker', session_maker),
patch('storage.role_store.a_session_maker', async_session_maker),
patch(
'storage.org_service.UserStore.create_default_settings',
AsyncMock(return_value=mock_settings),
@@ -200,7 +200,7 @@ async def test_create_org_with_owner_duplicate_name(
# Act & Assert
with (
patch('storage.org_store.a_session_maker', async_session_maker),
patch('storage.role_store.session_maker', session_maker),
patch('storage.role_store.a_session_maker', async_session_maker),
patch(
'storage.org_service.UserStore.create_default_settings',
mock_create_settings,
@@ -276,7 +276,7 @@ async def test_create_org_with_owner_database_failure_triggers_cleanup(
with (
patch('storage.org_store.a_session_maker', async_session_maker),
patch('storage.role_store.session_maker', session_maker),
patch('storage.role_store.a_session_maker', async_session_maker),
patch(
'storage.org_service.UserStore.create_default_settings',
AsyncMock(return_value=mock_settings),
@@ -843,7 +843,7 @@ async def test_verify_owner_authorization_success(session_maker, owner_role):
return_value=mock_org_member,
),
patch(
'storage.org_service.RoleStore.get_role_by_id_async',
'storage.org_service.RoleStore.get_role_by_id',
new_callable=AsyncMock,
return_value=mock_owner_role,
),
@@ -950,7 +950,7 @@ async def test_verify_owner_authorization_user_not_owner(session_maker):
return_value=mock_org_member,
),
patch(
'storage.org_service.RoleStore.get_role_by_id_async',
'storage.org_service.RoleStore.get_role_by_id',
new_callable=AsyncMock,
return_value=admin_role,
),
@@ -1136,7 +1136,7 @@ async def test_update_org_with_permissions_success_non_llm_fields(
with (
patch('storage.org_store.a_session_maker', async_session_maker),
patch('storage.org_member_store.a_session_maker', async_session_maker),
patch('storage.role_store.session_maker', session_maker),
patch('storage.role_store.a_session_maker', async_session_maker),
):
# Act
result = await OrgService.update_org_with_permissions(
@@ -1384,7 +1384,7 @@ async def test_update_org_with_permissions_empty_update(
with (
patch('storage.org_store.a_session_maker', async_session_maker),
patch('storage.org_member_store.a_session_maker', async_session_maker),
patch('storage.role_store.session_maker', session_maker),
patch('storage.role_store.a_session_maker', async_session_maker),
):
# Act
result = await OrgService.update_org_with_permissions(
@@ -1419,7 +1419,7 @@ async def test_update_org_with_permissions_org_not_found(
with (
patch('storage.org_store.a_session_maker', async_session_maker),
patch('storage.org_member_store.a_session_maker', async_session_maker),
patch('storage.role_store.session_maker', session_maker),
patch('storage.role_store.a_session_maker', async_session_maker),
):
# Act & Assert
with pytest.raises(ValueError) as exc_info:
@@ -1467,7 +1467,7 @@ async def test_update_org_with_permissions_non_member(
with (
patch('storage.org_store.a_session_maker', async_session_maker),
patch('storage.org_member_store.a_session_maker', async_session_maker),
patch('storage.role_store.session_maker', session_maker),
patch('storage.role_store.a_session_maker', async_session_maker),
):
# Act & Assert
with pytest.raises(PermissionError) as exc_info:
@@ -1525,7 +1525,7 @@ async def test_update_org_with_permissions_llm_fields_insufficient_permission(
with (
patch('storage.org_store.a_session_maker', async_session_maker),
patch('storage.org_member_store.a_session_maker', async_session_maker),
patch('storage.role_store.session_maker', session_maker),
patch('storage.role_store.a_session_maker', async_session_maker),
):
# Act & Assert
with pytest.raises(PermissionError) as exc_info:
@@ -1585,7 +1585,7 @@ async def test_update_org_with_permissions_database_error(
with (
patch('storage.org_store.a_session_maker', async_session_maker),
patch('storage.org_member_store.a_session_maker', async_session_maker),
patch('storage.role_store.session_maker', session_maker),
patch('storage.role_store.a_session_maker', async_session_maker),
patch(
'storage.org_service.OrgStore.update_org',
new_callable=AsyncMock,
@@ -1640,7 +1640,7 @@ async def test_update_org_with_permissions_duplicate_name_raises_org_name_exists
with (
patch('storage.org_store.a_session_maker', async_session_maker),
patch('storage.org_member_store.a_session_maker', async_session_maker),
patch('storage.role_store.session_maker', session_maker),
patch('storage.role_store.a_session_maker', async_session_maker),
patch(
'storage.org_service.OrgStore.get_org_by_id',
new_callable=AsyncMock,
@@ -1693,7 +1693,7 @@ async def test_update_org_with_permissions_same_name_allowed(
with (
patch('storage.org_store.a_session_maker', async_session_maker),
patch('storage.org_member_store.a_session_maker', async_session_maker),
patch('storage.role_store.session_maker', session_maker),
patch('storage.role_store.a_session_maker', async_session_maker),
patch(
'storage.org_service.OrgStore.get_org_by_id',
new_callable=AsyncMock,
@@ -1835,7 +1835,7 @@ async def test_update_org_with_permissions_only_non_llm_fields(
with (
patch('storage.org_store.a_session_maker', async_session_maker),
patch('storage.org_member_store.a_session_maker', async_session_maker),
patch('storage.role_store.session_maker', session_maker),
patch('storage.role_store.a_session_maker', async_session_maker),
):
# Act
result = await OrgService.update_org_with_permissions(

View File

@@ -33,86 +33,9 @@ async def async_session_maker(async_engine):
return async_sessionmaker(async_engine, class_=AsyncSession, expire_on_commit=False)
def test_get_role_by_id(session_maker):
# Test getting role by ID
with session_maker() as session:
# Create a test role
role = Role(name='admin', rank=1)
session.add(role)
session.commit()
role_id = role.id
# Test retrieval
with patch('storage.role_store.session_maker', session_maker):
retrieved_role = RoleStore.get_role_by_id(role_id)
assert retrieved_role is not None
assert retrieved_role.id == role_id
assert retrieved_role.name == 'admin'
def test_get_role_by_id_not_found(session_maker):
# Test getting role by ID when it doesn't exist
with patch('storage.role_store.session_maker', session_maker):
retrieved_role = RoleStore.get_role_by_id(99999)
assert retrieved_role is None
def test_get_role_by_name(session_maker):
# Test getting role by name
with session_maker() as session:
# Create a test role
role = Role(name='admin', rank=1)
session.add(role)
session.commit()
role_id = role.id
# Test retrieval
with patch('storage.role_store.session_maker', session_maker):
retrieved_role = RoleStore.get_role_by_name('admin')
assert retrieved_role is not None
assert retrieved_role.id == role_id
assert retrieved_role.name == 'admin'
def test_get_role_by_name_not_found(session_maker):
# Test getting role by name when it doesn't exist
with patch('storage.role_store.session_maker', session_maker):
retrieved_role = RoleStore.get_role_by_name('nonexistent')
assert retrieved_role is None
def test_list_roles(session_maker):
# Test listing all roles
with session_maker() as session:
# Create test roles
role1 = Role(name='admin', rank=1)
role2 = Role(name='user', rank=2)
session.add_all([role1, role2])
session.commit()
# Test listing
with patch('storage.role_store.session_maker', session_maker):
roles = RoleStore.list_roles()
assert len(roles) >= 2
role_names = [role.name for role in roles]
assert 'admin' in role_names
assert 'user' in role_names
def test_create_role(session_maker):
# Test creating a new role
with patch('storage.role_store.session_maker', session_maker):
role = RoleStore.create_role(name='moderator', rank=2)
assert role is not None
assert role.name == 'moderator'
assert role.rank == 2
assert role.id is not None
@pytest.mark.asyncio
async def test_get_role_by_name_async_with_session(async_session_maker):
"""Test getting role by name asynchronously with an explicit session."""
async def test_get_role_by_id_with_session(async_session_maker):
"""Test getting role by ID with an explicit session."""
# Create a test role
async with async_session_maker() as session:
role = Role(name='admin', rank=1)
@@ -123,9 +46,53 @@ async def test_get_role_by_name_async_with_session(async_session_maker):
# Test retrieval with explicit session
async with async_session_maker() as session:
retrieved_role = await RoleStore.get_role_by_name_async(
'admin', session=session
)
retrieved_role = await RoleStore.get_role_by_id(role_id, session=session)
assert retrieved_role is not None
assert retrieved_role.id == role_id
assert retrieved_role.name == 'admin'
@pytest.mark.asyncio
async def test_get_role_by_id_without_session(async_session_maker):
"""Test getting role by ID using internal session maker."""
# Create a test role
async with async_session_maker() as session:
role = Role(name='admin', rank=1)
session.add(role)
await session.commit()
await session.refresh(role)
role_id = role.id
# Test retrieval without explicit session (using patched a_session_maker)
with patch('storage.role_store.a_session_maker', async_session_maker):
retrieved_role = await RoleStore.get_role_by_id(role_id)
assert retrieved_role is not None
assert retrieved_role.id == role_id
assert retrieved_role.name == 'admin'
@pytest.mark.asyncio
async def test_get_role_by_id_not_found(async_session_maker):
"""Test getting role by ID when it doesn't exist."""
with patch('storage.role_store.a_session_maker', async_session_maker):
retrieved_role = await RoleStore.get_role_by_id(99999)
assert retrieved_role is None
@pytest.mark.asyncio
async def test_get_role_by_name_with_session(async_session_maker):
"""Test getting role by name with an explicit session."""
# Create a test role
async with async_session_maker() as session:
role = Role(name='admin', rank=1)
session.add(role)
await session.commit()
await session.refresh(role)
role_id = role.id
# Test retrieval with explicit session
async with async_session_maker() as session:
retrieved_role = await RoleStore.get_role_by_name('admin', session=session)
assert retrieved_role is not None
assert retrieved_role.id == role_id
assert retrieved_role.name == 'admin'
@@ -133,8 +100,8 @@ async def test_get_role_by_name_async_with_session(async_session_maker):
@pytest.mark.asyncio
async def test_get_role_by_name_async_without_session(async_session_maker):
"""Test getting role by name asynchronously using internal session maker."""
async def test_get_role_by_name_without_session(async_session_maker):
"""Test getting role by name using internal session maker."""
# Create a test role
async with async_session_maker() as session:
role = Role(name='editor', rank=2)
@@ -145,7 +112,7 @@ async def test_get_role_by_name_async_without_session(async_session_maker):
# Test retrieval without explicit session (using patched a_session_maker)
with patch('storage.role_store.a_session_maker', async_session_maker):
retrieved_role = await RoleStore.get_role_by_name_async('editor')
retrieved_role = await RoleStore.get_role_by_name('editor')
assert retrieved_role is not None
assert retrieved_role.id == role_id
assert retrieved_role.name == 'editor'
@@ -153,18 +120,81 @@ async def test_get_role_by_name_async_without_session(async_session_maker):
@pytest.mark.asyncio
async def test_get_role_by_name_async_not_found_with_session(async_session_maker):
async def test_get_role_by_name_not_found_with_session(async_session_maker):
"""Test getting role by name when it doesn't exist (with explicit session)."""
async with async_session_maker() as session:
retrieved_role = await RoleStore.get_role_by_name_async(
retrieved_role = await RoleStore.get_role_by_name(
'nonexistent', session=session
)
assert retrieved_role is None
@pytest.mark.asyncio
async def test_get_role_by_name_async_not_found_without_session(async_session_maker):
async def test_get_role_by_name_not_found_without_session(async_session_maker):
"""Test getting role by name when it doesn't exist (without explicit session)."""
with patch('storage.role_store.a_session_maker', async_session_maker):
retrieved_role = await RoleStore.get_role_by_name_async('nonexistent')
retrieved_role = await RoleStore.get_role_by_name('nonexistent')
assert retrieved_role is None
@pytest.mark.asyncio
async def test_list_roles_with_session(async_session_maker):
"""Test listing all roles with an explicit session."""
# Create test roles
async with async_session_maker() as session:
role1 = Role(name='admin', rank=1)
role2 = Role(name='user', rank=2)
session.add_all([role1, role2])
await session.commit()
# Test listing with explicit session
async with async_session_maker() as session:
roles = await RoleStore.list_roles(session=session)
assert len(roles) >= 2
role_names = [role.name for role in roles]
assert 'admin' in role_names
assert 'user' in role_names
@pytest.mark.asyncio
async def test_list_roles_without_session(async_session_maker):
"""Test listing all roles using internal session maker."""
# Create test roles
async with async_session_maker() as session:
role1 = Role(name='admin', rank=1)
role2 = Role(name='user', rank=2)
session.add_all([role1, role2])
await session.commit()
# Test listing without explicit session (using patched a_session_maker)
with patch('storage.role_store.a_session_maker', async_session_maker):
roles = await RoleStore.list_roles()
assert len(roles) >= 2
role_names = [role.name for role in roles]
assert 'admin' in role_names
assert 'user' in role_names
@pytest.mark.asyncio
async def test_create_role_with_session(async_session_maker):
"""Test creating a new role with an explicit session."""
async with async_session_maker() as session:
role = await RoleStore.create_role(name='moderator', rank=2, session=session)
await session.commit()
assert role is not None
assert role.name == 'moderator'
assert role.rank == 2
assert role.id is not None
@pytest.mark.asyncio
async def test_create_role_without_session(async_session_maker):
"""Test creating a new role using internal session maker."""
with patch('storage.role_store.a_session_maker', async_session_maker):
role = await RoleStore.create_role(name='moderator', rank=2)
assert role is not None
assert role.name == 'moderator'
assert role.rank == 2
assert role.id is not None