59 lines
2.7 KiB
Python
59 lines
2.7 KiB
Python
from __future__ import annotations
|
|
|
|
import unittest
|
|
|
|
from sqlalchemy import create_engine
|
|
from sqlalchemy.orm import sessionmaker
|
|
|
|
from govoplan_access.backend.api.v1.admin_common import (
|
|
_accounts_by_user_id,
|
|
_group_member_ids_by_group_id,
|
|
_groups_by_user_id,
|
|
_roles_by_group_id,
|
|
_roles_by_user_id,
|
|
_tenant_role_assignment_counts,
|
|
)
|
|
from govoplan_access.backend.db.models import Account, Group, GroupRoleAssignment, Role, User, UserGroupMembership, UserRoleAssignment
|
|
from govoplan_core.db.base import Base
|
|
|
|
|
|
class AdminBatchHelperTests(unittest.TestCase):
|
|
def setUp(self) -> None:
|
|
self.engine = create_engine("sqlite:///:memory:")
|
|
Base.metadata.create_all(bind=self.engine)
|
|
self.Session = sessionmaker(bind=self.engine)
|
|
|
|
def tearDown(self) -> None:
|
|
Base.metadata.drop_all(bind=self.engine)
|
|
|
|
def test_access_admin_batch_maps_related_rows(self) -> None:
|
|
session = self.Session()
|
|
account = Account(id="account-1", email="ada@example.test", normalized_email="ada@example.test")
|
|
user = User(id="user-1", tenant_id="tenant-1", account_id=account.id, email=account.email)
|
|
group = Group(id="group-1", tenant_id="tenant-1", slug="clerks", name="Clerks")
|
|
role = Role(id="role-1", tenant_id="tenant-1", slug="reader", name="Reader", permissions=["admin:users:read"])
|
|
session.add_all([account, user, group, role])
|
|
session.flush()
|
|
session.add(UserGroupMembership(tenant_id="tenant-1", user_id=user.id, group_id=group.id))
|
|
session.add(UserRoleAssignment(tenant_id="tenant-1", user_id=user.id, role_id=role.id))
|
|
session.add(GroupRoleAssignment(tenant_id="tenant-1", group_id=group.id, role_id=role.id))
|
|
session.commit()
|
|
|
|
accounts_by_user = _accounts_by_user_id(session, [user.id])
|
|
group_member_ids = _group_member_ids_by_group_id(session, tenant_id="tenant-1", group_ids=[group.id])
|
|
groups_by_user = _groups_by_user_id(session, tenant_id="tenant-1", user_ids=[user.id])
|
|
roles_by_group = _roles_by_group_id(session, tenant_id="tenant-1", group_ids=[group.id])
|
|
roles_by_user = _roles_by_user_id(session, tenant_id="tenant-1", user_ids=[user.id])
|
|
role_counts = _tenant_role_assignment_counts(session, [role.id])
|
|
|
|
self.assertEqual(accounts_by_user[user.id].id, account.id)
|
|
self.assertEqual(group_member_ids, {group.id: [user.id]})
|
|
self.assertEqual([item.id for item in groups_by_user[user.id]], [group.id])
|
|
self.assertEqual([item.id for item in roles_by_group[group.id]], [role.id])
|
|
self.assertEqual([item.id for item in roles_by_user[user.id]], [role.id])
|
|
self.assertEqual(role_counts, {role.id: (1, 1)})
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|