Skip to content

Commit e213974

Browse files
authored
Merge pull request #2305 from kiranannadatha8/feature/2295-nutriscore-range-filters
feat(nutrition): allow range lookups on nutriscore ingredient filter
2 parents 00d7a5d + 374b8e8 commit e213974

3 files changed

Lines changed: 58 additions & 1 deletion

File tree

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,5 @@
11
# Changelog for the next release
22

3+
* The ingredient API filter now supports range lookups on `nutriscore`
4+
(`gt`, `gte`, `lt`, `lte`) in addition to `exact` and `in`, enabling queries
5+
like "better than C" (#2295).

wger/nutrition/api/filtersets.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ class Meta:
120120
'sodium': ['exact'],
121121
'is_vegan': ['exact'],
122122
'is_vegetarian': ['exact'],
123-
'nutriscore': ['exact', 'in'],
123+
'nutriscore': ['exact', 'in', 'gt', 'gte', 'lt', 'lte'],
124124
'created': ['exact', 'gt', 'lt'],
125125
'last_update': ['exact', 'gt', 'lt'],
126126
'last_imported': ['exact', 'gt', 'lt'],

wger/nutrition/tests/test_search_api.py

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,3 +96,57 @@ def test_search_all_languages(self):
9696

9797
self.assertEqual(response.status_code, status.HTTP_200_OK)
9898
self.assertEqual(response.data['count'], 7)
99+
100+
def test_filter_nutriscore_exact(self):
101+
"""
102+
Exact match on nutriscore returns only ingredients with that grade
103+
"""
104+
response = self.client.get(self.url + '?nutriscore=a')
105+
106+
self.assertEqual(response.status_code, status.HTTP_200_OK)
107+
self.assertEqual(response.data['count'], 3)
108+
109+
def test_filter_nutriscore_in(self):
110+
"""
111+
`in` lookup accepts a comma-separated list of grades
112+
"""
113+
response = self.client.get(self.url + '?nutriscore__in=a,b')
114+
115+
self.assertEqual(response.status_code, status.HTTP_200_OK)
116+
self.assertEqual(response.data['count'], 7)
117+
118+
def test_filter_nutriscore_lt(self):
119+
"""
120+
`lt` lookup returns ingredients with a better grade (e.g. better than C → A, B)
121+
"""
122+
response = self.client.get(self.url + '?nutriscore__lt=c')
123+
124+
self.assertEqual(response.status_code, status.HTTP_200_OK)
125+
self.assertEqual(response.data['count'], 7)
126+
127+
def test_filter_nutriscore_lte(self):
128+
"""
129+
`lte` lookup is inclusive (e.g. C or better → A, B, C)
130+
"""
131+
response = self.client.get(self.url + '?nutriscore__lte=c')
132+
133+
self.assertEqual(response.status_code, status.HTTP_200_OK)
134+
self.assertEqual(response.data['count'], 10)
135+
136+
def test_filter_nutriscore_gt(self):
137+
"""
138+
`gt` lookup returns ingredients with a worse grade (e.g. worse than C → D, E)
139+
"""
140+
response = self.client.get(self.url + '?nutriscore__gt=c')
141+
142+
self.assertEqual(response.status_code, status.HTTP_200_OK)
143+
self.assertEqual(response.data['count'], 3)
144+
145+
def test_filter_nutriscore_gte(self):
146+
"""
147+
`gte` lookup is inclusive (e.g. C or worse → C, D, E)
148+
"""
149+
response = self.client.get(self.url + '?nutriscore__gte=c')
150+
151+
self.assertEqual(response.status_code, status.HTTP_200_OK)
152+
self.assertEqual(response.data['count'], 6)

0 commit comments

Comments
 (0)