Update and refactor users API team filter (#3703)
This should hopefully fix the lint issue [here](https://drone.grafana.net/grafana/oncall/3361/1/7)
This commit is contained in:
parent
36d2c3bdb7
commit
0a077ccfdb
3 changed files with 13 additions and 9 deletions
|
|
@ -298,6 +298,7 @@ def test_list_users_filtered_by_team(
|
|||
organization = make_organization()
|
||||
user1 = make_user_for_organization(organization)
|
||||
user2 = make_user_for_organization(organization)
|
||||
user3 = make_user_for_organization(organization)
|
||||
|
||||
team1 = make_team(organization)
|
||||
team2 = make_team(organization)
|
||||
|
|
@ -314,7 +315,7 @@ def test_list_users_filtered_by_team(
|
|||
def _get_user_pks(teams):
|
||||
response = client.get(
|
||||
url,
|
||||
data={"team": [team.public_primary_key for team in teams]}, # these are query params
|
||||
data={"team": [team.public_primary_key if team else "null" for team in teams]}, # these are query params
|
||||
**make_user_auth_headers(user1, token),
|
||||
)
|
||||
assert response.status_code == status.HTTP_200_OK
|
||||
|
|
@ -323,9 +324,11 @@ def test_list_users_filtered_by_team(
|
|||
assert _get_user_pks([team1]) == [user1.public_primary_key]
|
||||
assert _get_user_pks([team1, team2]) == [user1.public_primary_key, user2.public_primary_key]
|
||||
assert _get_user_pks([team3]) == []
|
||||
assert _get_user_pks([team1, None]) == [user1.public_primary_key, user3.public_primary_key]
|
||||
assert _get_user_pks([None]) == [user3.public_primary_key]
|
||||
|
||||
# check non-existent team returns bad request
|
||||
response = client.get(f"{url}?team=null", **make_user_auth_headers(user1, token))
|
||||
response = client.get(f"{url}?team=non-existing", **make_user_auth_headers(user1, token))
|
||||
assert response.status_code == status.HTTP_400_BAD_REQUEST
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -138,7 +138,7 @@ class UserFilter(ByTeamModelFieldFilterMixin, filters.FilterSet):
|
|||
# TODO: remove "roles" in next version
|
||||
roles = filters.MultipleChoiceFilter(field_name="role", choices=LegacyAccessControlRole.choices())
|
||||
permission = filters.ChoiceFilter(method="filter_by_permission", choices=ALL_PERMISSION_CHOICES)
|
||||
team = TeamModelMultipleChoiceFilter(field_name="teams", null_label=None, null_value=None)
|
||||
team = TeamModelMultipleChoiceFilter(field_name="teams")
|
||||
|
||||
class Meta:
|
||||
model = User
|
||||
|
|
|
|||
|
|
@ -86,13 +86,14 @@ class ByTeamModelFieldFilterMixin:
|
|||
return queryset
|
||||
filter = self.filters[ByTeamModelFieldFilterMixin.FILTER_FIELD_NAME]
|
||||
null_team_lookup = None
|
||||
for value in values:
|
||||
if filter.null_value == value:
|
||||
null_team_lookup = Q(**{f"{name}__isnull": True})
|
||||
values.remove(value)
|
||||
teams_lookup = Q(**{f"{name}__in": values})
|
||||
if filter.null_value in values:
|
||||
null_team_lookup = Q(**{f"{name}__isnull": True})
|
||||
values.remove(filter.null_value)
|
||||
teams_lookup = None
|
||||
if values:
|
||||
teams_lookup = Q(**{f"{name}__in": values})
|
||||
if null_team_lookup is not None:
|
||||
teams_lookup = teams_lookup | null_team_lookup
|
||||
teams_lookup = teams_lookup | null_team_lookup if teams_lookup else null_team_lookup
|
||||
|
||||
return queryset.filter(teams_lookup).distinct()
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue