29
29
from users .models import FFAdminUser
30
30
31
31
32
+ @pytest .mark .skipif (
33
+ settings .IS_RBAC_INSTALLED is True ,
34
+ reason = "Skip this test if RBAC is installed" ,
35
+ )
32
36
@pytest .mark .parametrize (
33
- "client,is_admin_master_api_key_client, num_queries" ,
37
+ "client, num_queries" ,
34
38
[
35
39
(
36
40
lazy_fixture ("admin_client" ),
37
- False ,
38
41
6 ,
39
42
), # 1 for paging, 3 for permissions, 1 for result, 1 for getting the current live version
40
43
(
41
44
lazy_fixture ("admin_master_api_key_client" ),
42
- True ,
43
45
4 ,
44
- ), # an extra one for master_api_key
46
+ ), # one for each for master_api_key
45
47
],
46
48
)
47
- def test_list_feature_segments (
49
+ def test_list_feature_segments_without_rbac (
48
50
segment : Segment ,
49
51
feature : Feature ,
50
52
environment : Environment ,
@@ -53,16 +55,77 @@ def test_list_feature_segments(
53
55
client : APIClient ,
54
56
feature_segment : FeatureSegment ,
55
57
num_queries : int ,
56
- is_admin_master_api_key_client : bool ,
57
- ):
58
+ ) -> None :
58
59
# Given
59
- if (
60
- settings .IS_RBAC_INSTALLED and not is_admin_master_api_key_client
61
- ): # pragma: no cover
62
- num_queries += 1
60
+ base_url = reverse ("api-v1:features:feature-segment-list" )
61
+ url = f"{ base_url } ?environment={ environment .id } &feature={ feature .id } "
62
+ list_feature_segment_setup_data (project , environment , feature , segment )
63
+
64
+ # When
65
+ with django_assert_num_queries (num_queries ):
66
+ response = client .get (url )
63
67
68
+ # Then
69
+ assert response .status_code == status .HTTP_200_OK
70
+ response_json = response .json ()
71
+ assert response_json ["count" ] == 3
72
+ for result in response_json ["results" ]:
73
+ assert result ["environment" ] == environment .id
74
+ assert "uuid" in result
75
+ assert "segment_name" in result
76
+ assert not result ["is_feature_specific" ]
77
+
78
+
79
+ @pytest .mark .skipif (
80
+ settings .IS_RBAC_INSTALLED is False ,
81
+ reason = "Skip this test if RBAC is not installed" ,
82
+ )
83
+ @pytest .mark .parametrize (
84
+ "client, num_queries" ,
85
+ [
86
+ (
87
+ lazy_fixture ("admin_client" ),
88
+ 7 ,
89
+ ), # 1 for paging, 4 for permissions, 1 for result, 1 for getting the current live version
90
+ (
91
+ lazy_fixture ("admin_master_api_key_client" ),
92
+ 4 ,
93
+ ), # one for each for master_api_key
94
+ ],
95
+ )
96
+ def test_list_feature_segments_with_rbac (
97
+ segment : Segment ,
98
+ feature : Feature ,
99
+ environment : Environment ,
100
+ project : Project ,
101
+ django_assert_num_queries : DjangoAssertNumQueries ,
102
+ client : APIClient ,
103
+ feature_segment : FeatureSegment ,
104
+ num_queries : int ,
105
+ ) -> None : # pragma: no cover
106
+ # Given
64
107
base_url = reverse ("api-v1:features:feature-segment-list" )
65
108
url = f"{ base_url } ?environment={ environment .id } &feature={ feature .id } "
109
+ list_feature_segment_setup_data (project , environment , feature , segment )
110
+
111
+ # When
112
+ with django_assert_num_queries (num_queries ):
113
+ response = client .get (url )
114
+
115
+ # Then
116
+ assert response .status_code == status .HTTP_200_OK
117
+ response_json = response .json ()
118
+ assert response_json ["count" ] == 3
119
+ for result in response_json ["results" ]:
120
+ assert result ["environment" ] == environment .id
121
+ assert "uuid" in result
122
+ assert "segment_name" in result
123
+ assert not result ["is_feature_specific" ]
124
+
125
+
126
+ def list_feature_segment_setup_data (
127
+ project : Project , environment : Environment , feature : Feature , segment : Segment
128
+ ) -> None :
66
129
environment_2 = Environment .objects .create (
67
130
project = project , name = "Test environment 2"
68
131
)
@@ -79,20 +142,6 @@ def test_list_feature_segments(
79
142
feature = feature , segment = segment , environment = environment_2
80
143
)
81
144
82
- # When
83
- with django_assert_num_queries (num_queries ):
84
- response = client .get (url )
85
-
86
- # Then
87
- assert response .status_code == status .HTTP_200_OK
88
- response_json = response .json ()
89
- assert response_json ["count" ] == 3
90
- for result in response_json ["results" ]:
91
- assert result ["environment" ] == environment .id
92
- assert "uuid" in result
93
- assert "segment_name" in result
94
- assert not result ["is_feature_specific" ]
95
-
96
145
97
146
@pytest .mark .parametrize (
98
147
"client" ,
0 commit comments