Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions src/openhound_github/models/org_role.py
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ class OrgRole(BaseAsset):

# node_id: int = Field(alias="id")
id: int
name: str # full: "my-org/owners"
name: str # role-only name from the API, e.g. "owners" or "Custom Role Manager"
created_at: datetime
updated_at: datetime | None = None
organization: Organization | None = None
Expand All @@ -221,11 +221,12 @@ def node_id(self) -> str:

@property
def as_node(self) -> GHNode:
qualified_name = f"{self.org_login}/{self.name}"
Comment thread
coderabbitai[bot] marked this conversation as resolved.
return GHNode(
kinds=[nk.ORG_ROLE, "GH_Role"],
properties=GHOrgRoleProperties(
name=self.name,
displayname=f"{self.org_login}/{self.name}",
name=qualified_name,
displayname=qualified_name,
node_id=self.node_id,
short_name=self.name,
type=self.type,
Expand Down
68 changes: 68 additions & 0 deletions tests/test_org_role_model.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
from datetime import datetime

from openhound_github.models.org_role import OrgRole
from openhound_github.models.org_role_member import OrgRoleMember
from openhound_github.models.org_role_team import OrgRoleTeam


def _role(
org_node_id: str, org_login: str, name: str = "owners", role_type: str = "default"
) -> OrgRole:
return OrgRole(
id=1,
name=name,
type=role_type,
base_role="admin",
created_at=datetime.now(),
org_node_id=org_node_id,
org_login=org_login,
)


def test_org_role_name_is_qualified_by_organization() -> None:
acme_role = _role("ORG_1", "acme")
example_role = _role("ORG_2", "example")

assert acme_role.as_node.properties.name == "acme/owners"
assert acme_role.as_node.properties.displayname == "acme/owners"
assert acme_role.as_node.properties.short_name == "owners"

assert example_role.as_node.properties.name == "example/owners"
assert example_role.as_node.properties.displayname == "example/owners"
assert example_role.as_node.properties.short_name == "owners"


def test_custom_org_role_uses_role_only_name_for_assignment_node_ids() -> None:
role = _role("ORG_1", "acme", name="Custom Role Manager", role_type="custom")
member = OrgRoleMember(
id=1,
node_id="USER_1",
login="alice",
type="User",
site_admin=False,
org_role_id=role.id,
org_role_name=role.name,
org_node_id=role.org_node_id,
org_login=role.org_login,
)
team = OrgRoleTeam(
id=2,
node_id="TEAM_1",
url="https://api.github.com/teams/2",
name="security",
slug="security",
description="Security team",
permission="pull",
members_url="https://api.github.com/teams/2/members{/member}",
repositories_url="https://api.github.com/teams/2/repos",
org_role_id=role.id,
org_role_name=role.name,
org_node_id=role.org_node_id,
org_login=role.org_login,
)

assert role.name == "Custom Role Manager"
assert role.node_id == "ORG_1_Custom Role Manager"
assert role.as_node.properties.name == "acme/Custom Role Manager"
assert member.org_role_node_id == role.node_id
assert team.org_role_node_id == role.node_id
Loading