1+ from sentry .models .options .organization_option import OrganizationOption
12from sentry .models .organizationmemberreplayaccess import OrganizationMemberReplayAccess
23from sentry .replays .permissions import has_replay_permission
34from sentry .testutils .cases import TestCase
@@ -16,19 +17,38 @@ def setUp(self) -> None:
1617 self .member2 = self .create_member (organization = self .organization , user = self .user2 )
1718 self .member3 = self .create_member (organization = self .organization , user = self .user3 )
1819
20+ def _enable_granular_permissions (self ) -> None :
21+ """Enable the organization option for granular replay permissions"""
22+ OrganizationOption .objects .set_value (
23+ organization = self .organization ,
24+ key = "sentry:granular-replay-permissions" ,
25+ value = True ,
26+ )
27+
1928 def test_feature_flag_disabled_returns_true (self ) -> None :
2029 """When feature flag is disabled, all members should have access"""
30+ self ._enable_granular_permissions ()
2131 assert has_replay_permission (self .organization , self .user1 ) is True
2232
33+ def test_org_option_disabled_returns_true (self ) -> None :
34+ """When org option is disabled, all members should have access even with allowlist"""
35+ with self .feature ("organizations:granular-replay-permissions" ):
36+ OrganizationMemberReplayAccess .objects .create (
37+ organization = self .organization , organizationmember = self .member1
38+ )
39+ assert has_replay_permission (self .organization , self .user2 ) is True
40+
2341 def test_empty_allowlist_returns_true (self ) -> None :
2442 """When allowlist is empty, all members should have access"""
2543 with self .feature ("organizations:granular-replay-permissions" ):
44+ self ._enable_granular_permissions ()
2645 assert has_replay_permission (self .organization , self .user1 ) is True
2746 assert has_replay_permission (self .organization , self .user2 ) is True
2847
2948 def test_member_in_allowlist_returns_true (self ) -> None :
3049 """When member is in allowlist, they should have access"""
3150 with self .feature ("organizations:granular-replay-permissions" ):
51+ self ._enable_granular_permissions ()
3252 OrganizationMemberReplayAccess .objects .create (
3353 organization = self .organization , organizationmember = self .member1
3454 )
@@ -37,6 +57,7 @@ def test_member_in_allowlist_returns_true(self) -> None:
3757 def test_member_not_in_allowlist_returns_false (self ) -> None :
3858 """When member is not in allowlist and allowlist exists, they should not have access"""
3959 with self .feature ("organizations:granular-replay-permissions" ):
60+ self ._enable_granular_permissions ()
4061 OrganizationMemberReplayAccess .objects .create (
4162 organization = self .organization , organizationmember = self .member1
4263 )
@@ -45,6 +66,7 @@ def test_member_not_in_allowlist_returns_false(self) -> None:
4566 def test_multiple_members_in_allowlist (self ) -> None :
4667 """Test multiple members in allowlist"""
4768 with self .feature ("organizations:granular-replay-permissions" ):
69+ self ._enable_granular_permissions ()
4870 OrganizationMemberReplayAccess .objects .create (
4971 organization = self .organization , organizationmember = self .member1
5072 )
@@ -60,9 +82,27 @@ def test_non_member_returns_false(self) -> None:
6082 """Non-members should not have access"""
6183 non_member_user = self .create_user ()
6284 with self .feature ("organizations:granular-replay-permissions" ):
85+ self ._enable_granular_permissions ()
6386 assert has_replay_permission (self .organization , non_member_user ) is False
6487
6588 def test_unauthenticated_user_returns_false (self ) -> None :
6689 """Unauthenticated users should not have access"""
6790 with self .feature ("organizations:granular-replay-permissions" ):
91+ self ._enable_granular_permissions ()
6892 assert has_replay_permission (self .organization , None ) is False
93+
94+ def test_disabling_org_option_reopens_access (self ) -> None :
95+ """When org option is disabled after being enabled, access is restored"""
96+ with self .feature ("organizations:granular-replay-permissions" ):
97+ self ._enable_granular_permissions ()
98+ OrganizationMemberReplayAccess .objects .create (
99+ organization = self .organization , organizationmember = self .member1
100+ )
101+ assert has_replay_permission (self .organization , self .user2 ) is False
102+
103+ OrganizationOption .objects .set_value (
104+ organization = self .organization ,
105+ key = "sentry:granular-replay-permissions" ,
106+ value = False ,
107+ )
108+ assert has_replay_permission (self .organization , self .user2 ) is True
0 commit comments