Merge lp:~sil/rnr-server/clickreview-api-more-parameters into lp:rnr-server

Proposed by Stuart Langridge
Status: Rejected
Rejected by: Natalia Bidart
Proposed branch: lp:~sil/rnr-server/clickreview-api-more-parameters
Merge into: lp:rnr-server
Diff against target: 125 lines (+72/-6)
4 files modified
src/clickreviews/admin.py (+14/-0)
src/clickreviews/api/handlers.py (+10/-3)
src/clickreviews/forms.py (+11/-1)
src/clickreviews/tests/test_handlers.py (+37/-2)
To merge this branch: bzr merge lp:~sil/rnr-server/clickreview-api-more-parameters
Reviewer Review Type Date Requested Status
Ratings and Reviews Developers Pending
Review via email: mp+245958@code.launchpad.net

Description of the change

Allow the click reviews API to be queried by package_name (as currently) OR reviewer_username, with an eye to possibly broadening it still further in the future.

To post a comment you must log in.
Revision history for this message
Natalia Bidart (nataliabidart) wrote :

Hi!

There are some tests missing, for example for the changes in the forms.py and admin.py. Also the MP looks quite old, setting MP as Rejected to reduce numbers of landing candidates in @reviewlist. Change status again if this MP is still current.

Thanks!

Unmerged revisions

293. By Stuart Langridge

Allow the click reviews API to be queried by package_name (as currently) OR reviewer_username

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== added file 'src/clickreviews/admin.py'
--- src/clickreviews/admin.py 1970-01-01 00:00:00 +0000
+++ src/clickreviews/admin.py 2015-01-09 13:30:38 +0000
@@ -0,0 +1,14 @@
1from django.contrib import admin
2
3from clickreviews.models import (
4 ClickPackage, ClickPackageReview,
5 ClickPackageModeration, ClickPackageReviewModeration,
6 ClickPackageFlag, ClickPackageReviewFlag
7)
8
9admin.site.register(ClickPackage)
10admin.site.register(ClickPackageReview)
11admin.site.register(ClickPackageModeration)
12admin.site.register(ClickPackageReviewModeration)
13admin.site.register(ClickPackageFlag)
14admin.site.register(ClickPackageReviewFlag)
015
=== modified file 'src/clickreviews/api/handlers.py'
--- src/clickreviews/api/handlers.py 2014-10-14 16:08:08 +0000
+++ src/clickreviews/api/handlers.py 2015-01-09 13:30:38 +0000
@@ -54,9 +54,16 @@
54 if not form.is_valid():54 if not form.is_valid():
55 return HttpResponseBadRequest(form.errors_json())55 return HttpResponseBadRequest(form.errors_json())
5656
57 return ClickPackageReview.objects.filter(57 reviews = ClickPackageReview.objects.filter(date_deleted=None)
58 click_package__package_name=form.cleaned_data['package_name'],58 if form.cleaned_data["package_name"]:
59 date_deleted=None).order_by(59 reviews = reviews.filter(
60 click_package__package_name=form.cleaned_data['package_name']
61 )
62 if form.cleaned_data["reviewer_username"]:
63 reviews = reviews.filter(
64 reviewer__username=form.cleaned_data['reviewer_username']
65 )
66 return reviews.order_by(
60 '-usefulness_wilson_rating').select_related(67 '-usefulness_wilson_rating').select_related(
61 'click_package', 'reviewer')68 'click_package', 'reviewer')
6269
6370
=== modified file 'src/clickreviews/forms.py'
--- src/clickreviews/forms.py 2014-10-07 19:04:20 +0000
+++ src/clickreviews/forms.py 2015-01-09 13:30:38 +0000
@@ -1,6 +1,7 @@
1from django import forms1from django import forms
2from django.conf import settings2from django.conf import settings
3from django.core import validators3from django.core import validators
4from django.core.exceptions import ValidationError
4from django.utils.translation import ugettext as _5from django.utils.translation import ugettext as _
56
6from clickreviews.models import (7from clickreviews.models import (
@@ -87,7 +88,16 @@
8788
8889
89class ClickPackageReviewFilterForm(forms.Form, JSONErrorMixin):90class ClickPackageReviewFilterForm(forms.Form, JSONErrorMixin):
90 package_name = forms.CharField(max_length=255)91 package_name = forms.CharField(max_length=255, required=False)
92 reviewer_username = forms.CharField(max_length=255, required=False)
93
94 def clean(self):
95 check = [self.cleaned_data.get(k) for k in self.fields.keys()]
96 if not any(check):
97 raise ValidationError('You must provide one of %(fns)s',
98 params={'fns':
99 ', '.join(self.fields.keys())})
100 return self.cleaned_data
91101
92102
93class BaseClickPackageFlagForm(forms.ModelForm, JSONErrorMixin):103class BaseClickPackageFlagForm(forms.ModelForm, JSONErrorMixin):
94104
=== modified file 'src/clickreviews/tests/test_handlers.py'
--- src/clickreviews/tests/test_handlers.py 2014-10-16 13:09:52 +0000
+++ src/clickreviews/tests/test_handlers.py 2015-01-09 13:30:38 +0000
@@ -194,11 +194,46 @@
194 'usefulness_favorable': 0,194 'usefulness_favorable': 0,
195 }, result_review)195 }, result_review)
196196
197 def test_must_filter_by_packagename(self):197 def test_get_reviews_contains_correct_data_by_reviewer(self):
198 package = self.factory.makeClickPackage(
199 package_name="com.example.me.myapp")
200 review = self.factory.makeClickPackageReview(
201 click_package=package, language='en',
202 rating=5, summary='Best app', review_text='Unlimited fun!',
203 version='0.1.1', date_created=datetime(
204 2014, 1, 15, 11, 13, 55, 123456, tzinfo=pytz.UTC))
205
206 json_result = self._get_reviews(data={
207 'reviewer_username': review.reviewer_username(),
208 })
209 self.assertEqual(200, json_result.status_code)
210 result = json.loads(json_result.content)
211 self.assertEqual(1, len(result))
212 result_review = result[0]
213 DateTimeAwareJSONEncoder().encode(
214 review.date_created).strip('"')
215 self.assertEqual({
216 'id': review.id,
217 'package_name': 'com.example.me.myapp',
218 'language': 'en',
219 'date_created': '2014-01-15T11:13:55.123Z',
220 'rating': 5,
221 'reviewer_username': review.reviewer_username(),
222 'reviewer_displayname': review.reviewer_displayname(),
223 'summary': 'Best app',
224 'review_text': 'Unlimited fun!',
225 'hide': False,
226 'date_deleted': None,
227 'version': '0.1.1',
228 'usefulness_total': 0,
229 'usefulness_favorable': 0,
230 }, result_review)
231
232 def test_must_filter_by_something(self):
198 result = self._get_reviews()233 result = self._get_reviews()
199234
200 self.assertEqual(400, result.status_code)235 self.assertEqual(400, result.status_code)
201 self.assertEqual(['package_name'],236 self.assertEqual(['__all__'],
202 json.loads(result.content)['errors'].keys())237 json.loads(result.content)['errors'].keys())
203238
204 def test_doesnt_include_deleted(self):239 def test_doesnt_include_deleted(self):

Subscribers

People subscribed via source and target branches