Commit 104a375e authored by John Davis's avatar John Davis
Browse files

Add get_private_role_user_emails_dict, test

Retrieves a mapping of private role ids to associated users' emails.
Used to lookup a user's email when generating a displayed_name for
private roles.
parent c4c66078
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
from typing import Dict

from sqlalchemy import (
    and_,
    false,
@@ -6,6 +8,7 @@ from sqlalchemy import (

from galaxy.model import (
    Role,
    User,
    UserRoleAssociation,
)
from galaxy.model.scoped_session import galaxy_scoped_session
@@ -50,3 +53,10 @@ def get_displayable_roles(session, trans_user, user_is_admin, security_agent):
        if user_is_admin or security_agent.ok_to_display(trans_user, role):
            roles.append(role)
    return roles


def get_private_role_user_emails_dict(session) -> Dict[int, str]:
    """Return a mapping of private role ids to user emails."""
    stmt = select(UserRoleAssociation.role_id, User.email).join(Role).join(User).where(Role.type == Role.types.PRIVATE)
    roleid_email_tuples = session.execute(stmt).all()
    return dict(roleid_email_tuples)
+17 −0
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@ from galaxy.model import Role
from galaxy.model.db.role import (
    get_displayable_roles,
    get_npns_roles,
    get_private_role_user_emails_dict,
    get_private_user_role,
    get_roles_by_ids,
)
@@ -159,3 +160,19 @@ def test_get_displayable_roles(session, make_role, make_user_and_role):
    assert roles[0].name == "private role"
    assert roles[1].name == "private role"
    assert roles[2].name == "admin-role-1"


def test_get_private_role_user_emails_dict(session, make_role, make_user_and_role):
    # make users with private roles
    user1, private_role1 = make_user_and_role(email="user1@example.com")
    user2, private_role2 = make_user_and_role(email="user2@example.com")
    user3, private_role3 = make_user_and_role(email="user3@example.com")
    # make 2 non-private roles
    make_role(type="admin", name="admin-role-1", description="Description of admin-role1")
    make_role(type="admin", name="admin-role-2", description="Description of admin-role2")

    data = get_private_role_user_emails_dict(session)
    assert len(data) == 3  # only private role mappings are returned
    assert data[private_role1.id] == "user1@example.com"
    assert data[private_role2.id] == "user2@example.com"
    assert data[private_role3.id] == "user3@example.com"