Skip to content

Commit ff6f162

Browse files
committed
fixup! split rbac tests
1 parent 2d99cad commit ff6f162

File tree

1 file changed

+74
-25
lines changed

1 file changed

+74
-25
lines changed

api/tests/unit/features/feature_segments/test_unit_feature_segments_views.py

+74-25
Original file line numberDiff line numberDiff line change
@@ -29,22 +29,24 @@
2929
from users.models import FFAdminUser
3030

3131

32+
@pytest.mark.skipif(
33+
settings.IS_RBAC_INSTALLED is True,
34+
reason="Skip this test if RBAC is installed",
35+
)
3236
@pytest.mark.parametrize(
33-
"client,is_admin_master_api_key_client, num_queries",
37+
"client, num_queries",
3438
[
3539
(
3640
lazy_fixture("admin_client"),
37-
False,
3841
6,
3942
), # 1 for paging, 3 for permissions, 1 for result, 1 for getting the current live version
4043
(
4144
lazy_fixture("admin_master_api_key_client"),
42-
True,
4345
4,
44-
), # an extra one for master_api_key
46+
), # one for each for master_api_key
4547
],
4648
)
47-
def test_list_feature_segments(
49+
def test_list_feature_segments_without_rbac(
4850
segment: Segment,
4951
feature: Feature,
5052
environment: Environment,
@@ -53,16 +55,77 @@ def test_list_feature_segments(
5355
client: APIClient,
5456
feature_segment: FeatureSegment,
5557
num_queries: int,
56-
is_admin_master_api_key_client: bool,
57-
):
58+
) -> None:
5859
# 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)
6367

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
64107
base_url = reverse("api-v1:features:feature-segment-list")
65108
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:
66129
environment_2 = Environment.objects.create(
67130
project=project, name="Test environment 2"
68131
)
@@ -79,20 +142,6 @@ def test_list_feature_segments(
79142
feature=feature, segment=segment, environment=environment_2
80143
)
81144

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-
96145

97146
@pytest.mark.parametrize(
98147
"client",

0 commit comments

Comments
 (0)