Skip to content

Commit ca3af66

Browse files
committed
fix type issue and make sure we dont have audit log if unchanged+
1 parent 2d5d0e4 commit ca3af66

File tree

3 files changed

+46
-5
lines changed

3 files changed

+46
-5
lines changed

src/sentry/api/serializers/models/organization.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -764,11 +764,13 @@ def serialize( # type: ignore[override]
764764
.first()
765765
)
766766
context["hasGranularReplayPermissions"] = bool(permissions_enabled)
767-
context["replayAccessMembers"] = list(
768-
OrganizationMemberReplayAccess.objects.filter(
767+
context["replayAccessMembers"] = [
768+
user_id
769+
for user_id in OrganizationMemberReplayAccess.objects.filter(
769770
organizationmember__organization=obj
770771
).values_list("organizationmember__user_id", flat=True)
771-
)
772+
if user_id is not None
773+
]
772774

773775
if has_custom_dynamic_sampling(obj, actor=user):
774776
context["targetSampleRate"] = float(

src/sentry/core/endpoints/organization_details.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -622,10 +622,16 @@ def save(self, **kwargs):
622622
if "hasGranularReplayPermissions" in data:
623623
option_key = "sentry:granular-replay-permissions"
624624
new_value = data["hasGranularReplayPermissions"]
625-
option_inst, created = OrganizationOption.objects.update_or_create(
625+
option_inst, created = OrganizationOption.objects.get_or_create(
626626
organization=org, key=option_key, defaults={"value": new_value}
627627
)
628-
changed_data["hasGranularReplayPermissions"] = f"to {new_value}"
628+
if not created and option_inst.value != new_value:
629+
old_val = option_inst.value
630+
option_inst.value = new_value
631+
option_inst.save()
632+
changed_data["hasGranularReplayPermissions"] = f"from {old_val} to {new_value}"
633+
elif created:
634+
changed_data["hasGranularReplayPermissions"] = f"to {new_value}"
629635

630636
if "replayAccessMembers" in data:
631637
user_ids = data["replayAccessMembers"]

tests/sentry/core/endpoints/test_organization_details.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1515,6 +1515,39 @@ def test_granular_replay_permissions_flag_unset(self) -> None:
15151515

15161516
assert "to False" in log.data["hasGranularReplayPermissions"]
15171517

1518+
@with_feature("organizations:granular-replay-permissions")
1519+
def test_granular_replay_permissions_no_spurious_audit_log(self) -> None:
1520+
self.organization.update_option("sentry:granular-replay-permissions", True)
1521+
with assume_test_silo_mode_of(AuditLogEntry):
1522+
AuditLogEntry.objects.filter(organization_id=self.organization.id).delete()
1523+
1524+
data = {"hasGranularReplayPermissions": True}
1525+
with outbox_runner():
1526+
self.get_success_response(self.organization.slug, **data)
1527+
1528+
with assume_test_silo_mode_of(AuditLogEntry):
1529+
audit_logs = AuditLogEntry.objects.filter(organization_id=self.organization.id)
1530+
assert audit_logs.count() == 0
1531+
1532+
@with_feature("organizations:granular-replay-permissions")
1533+
def test_granular_replay_permissions_change_logs_old_value(self) -> None:
1534+
self.organization.update_option("sentry:granular-replay-permissions", False)
1535+
with assume_test_silo_mode_of(AuditLogEntry):
1536+
AuditLogEntry.objects.filter(organization_id=self.organization.id).delete()
1537+
1538+
data = {"hasGranularReplayPermissions": True}
1539+
with outbox_runner():
1540+
self.get_success_response(self.organization.slug, **data)
1541+
1542+
option_value = OrganizationOption.objects.get(
1543+
organization=self.organization, key="sentry:granular-replay-permissions"
1544+
)
1545+
assert option_value.value is True
1546+
1547+
with assume_test_silo_mode_of(AuditLogEntry):
1548+
log = AuditLogEntry.objects.get(organization_id=self.organization.id)
1549+
assert log.data["hasGranularReplayPermissions"] == "from False to True"
1550+
15181551
def test_granular_replay_permissions_flag_requires_feature(self) -> None:
15191552
data = {"hasGranularReplayPermissions": True}
15201553
self.get_error_response(self.organization.slug, **data, status_code=404)

0 commit comments

Comments
 (0)