Skip to content

Commit ac40d8e

Browse files
authored
feat(hybrid-cloud): Match RpcOrganizationMember data audit log to org member's data audit log (#49038)
1 parent 6a40c27 commit ac40d8e

File tree

3 files changed

+26
-3
lines changed

3 files changed

+26
-3
lines changed

src/sentry/services/hybrid_cloud/organization/model.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ def class_name(self) -> str:
4949

5050
class RpcTeamMember(RpcModel):
5151
id: int = -1
52+
slug: str = ""
5253
is_active: bool = False
5354
role_id: str = ""
5455
project_ids: List[int] = Field(default_factory=list)
@@ -101,16 +102,25 @@ class RpcOrganizationMember(RpcOrganizationMemberSummary):
101102
project_ids: List[int] = Field(default_factory=list)
102103
scopes: List[str] = Field(default_factory=list)
103104
invite_status: int = Field(default_factory=_DefaultEnumHelpers.get_default_invite_status_value)
105+
email: str = ""
106+
107+
def get_audit_log_metadata(self, user_email: Optional[str] = None) -> Mapping[str, Any]:
108+
from sentry.models.organizationmember import invite_status_names
104109

105-
def get_audit_log_metadata(self, user_email: str) -> Mapping[str, Any]:
106110
team_ids = [mt.team_id for mt in self.member_teams]
111+
team_slugs = [mt.slug for mt in self.member_teams]
112+
113+
if user_email is None:
114+
user_email = self.email
107115

108116
return {
109117
"email": user_email,
110118
"teams": team_ids,
111119
"has_global_access": self.has_global_access,
112120
"role": self.role,
113-
"invite_status": self.invite_status,
121+
"invite_status": invite_status_names[self.invite_status],
122+
"user": self.user_id,
123+
"teams_slugs": team_slugs,
114124
}
115125

116126

src/sentry/services/hybrid_cloud/organization/serial.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ def serialize_member(member: OrganizationMember) -> RpcOrganizationMember:
5353
scopes=list(member.get_scopes()),
5454
flags=_serialize_member_flags(member),
5555
invite_status=member.invite_status,
56+
email=member.get_email(),
5657
)
5758

5859
omts = OrganizationMemberTeam.objects.filter(
@@ -108,6 +109,7 @@ def _serialize_team_member(
108109
) -> RpcTeamMember:
109110
result = RpcTeamMember(
110111
id=team_member.id,
112+
slug=team_member.team.slug,
111113
is_active=team_member.is_active,
112114
role_id=team_member.get_team_role().id,
113115
team_id=team_member.team_id,

tests/sentry/hybrid_cloud/test_organization.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@
2020
RpcTeamMember,
2121
organization_service,
2222
)
23-
from sentry.services.hybrid_cloud.organization.serial import unescape_flag_name
23+
from sentry.services.hybrid_cloud.organization.serial import serialize_member, unescape_flag_name
24+
from sentry.testutils import TestCase
2425
from sentry.testutils.factories import Factories
2526
from sentry.testutils.hybrid_cloud import use_real_service
2627
from sentry.testutils.silo import all_silo_test
@@ -229,3 +230,13 @@ def test_get_top_dog_team_member_ids(org_factory: Callable[[], Organization]):
229230
all_top_dogs = [members[1].id, members[2].id]
230231
service_top_dogs = organization_service.get_top_dog_team_member_ids(organization_id=orm_org)
231232
assert set(all_top_dogs) == set(service_top_dogs)
233+
234+
235+
class RpcOrganizationMemberTest(TestCase):
236+
def test_get_audit_log_metadata(self):
237+
org = self.create_organization(owner=self.user)
238+
user = self.create_user(email="[email protected]")
239+
member = self.create_member(user_id=user.id, role="owner", organization_id=org.id)
240+
self.create_team(organization=org, slug="baz", members=[user])
241+
rpc_member = serialize_member(member)
242+
assert member.get_audit_log_data() == rpc_member.get_audit_log_metadata()

0 commit comments

Comments
 (0)