diff --git a/geonode/facets/providers/group.py b/geonode/facets/providers/group.py index d93404337f4..c8de489b461 100644 --- a/geonode/facets/providers/group.py +++ b/geonode/facets/providers/group.py @@ -62,6 +62,9 @@ def get_facet_items( logger.debug("Filtering by keys %r", keys) filters["group__id__in"] = keys + if topic_contains: + filters["group__name__icontains"] = topic_contains + visible_groups = get_user_visible_groups(user=kwargs["user"]) q = ( diff --git a/geonode/facets/tests.py b/geonode/facets/tests.py index 9bce8fc6a96..5cd6cba1b57 100644 --- a/geonode/facets/tests.py +++ b/geonode/facets/tests.py @@ -669,3 +669,28 @@ def test_group_facet_api_call(self): self.assertDictEqual(expected_response_filtered, response_dict_filtered) self.assertDictEqual(expected_response_base, response_dict_base) + + def test_group_facets_are_filtered_by_words(self): + # there are some groups and the facets return them + url = f"{reverse('get_facet',args=['group'])}" + + response = self.client.get(url) + self.assertEqual(200, response.status_code, response.json()) + + self.assertTrue(response.json().get("topics", {}).get("total", 0) > 0) + + # topic_contains with real name should return 1 + url = f"{reverse('get_facet',args=['group'])}?topic_contains=UserAdmin" + response = self.client.get(url) + + self.assertEqual(200, response.status_code, response.json()) + + self.assertEqual(1, response.json().get("topics", {}).get("total", 0)) + + # topic_contains with a random string to be searched for should be 0 + url = f"{reverse('get_facet',args=['group'])}?topic_contains=abc123scfuqbrwefbasascgiu" + response = self.client.get(url) + + self.assertEqual(200, response.status_code, response.json()) + + self.assertEqual(0, response.json().get("topics", {}).get("total", 0))