Merge lp:~ricardokirkner/rnr-server/flags-n-macaroons into lp:rnr-server

Proposed by Ricardo Kirkner
Status: Merged
Approved by: Ricardo Kirkner
Approved revision: 335
Merged at revision: 319
Proposed branch: lp:~ricardokirkner/rnr-server/flags-n-macaroons
Merge into: lp:rnr-server
Prerequisite: lp:~ricardokirkner/rnr-server/review-crud-api-with-macaroons
Diff against target: 148 lines (+60/-13)
2 files modified
src/clickreviews/api/urls.py (+2/-2)
src/clickreviews/tests/test_handlers.py (+58/-11)
To merge this branch: bzr merge lp:~ricardokirkner/rnr-server/flags-n-macaroons
Reviewer Review Type Date Requested Status
Fabián Ezequiel Gallina (community) Approve
Review via email: mp+294956@code.launchpad.net

Commit message

added macaroons support to packages and reviews flags apis

To post a comment you must log in.
Revision history for this message
Fabián Ezequiel Gallina (fgallina) wrote :

Looking good, added comments.

333. By Ricardo Kirkner

Merged review-crud-api-with-macaroons into flags-n-macaroons.

Revision history for this message
Ricardo Kirkner (ricardokirkner) :
334. By Ricardo Kirkner

assert right package/review have been flagged

335. By Ricardo Kirkner

Merged review-crud-api-with-macaroons into flags-n-macaroons.

Revision history for this message
Fabián Ezequiel Gallina (fgallina) wrote :

LGTM

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/clickreviews/api/urls.py'
--- src/clickreviews/api/urls.py 2016-05-20 14:00:39 +0000
+++ src/clickreviews/api/urls.py 2016-05-20 14:00:39 +0000
@@ -44,13 +44,13 @@
4444
45click_package_flag_resource = CSRFExemptResource(45click_package_flag_resource = CSRFExemptResource(
46 handler=ClickPackageFlagHandler,46 handler=ClickPackageFlagHandler,
47 authentication=auth)47 authentication=(macaroons_auth, auth))
48click_package_flag_resource.__name__ = "Resource"48click_package_flag_resource.__name__ = "Resource"
49click_package_flag_resource = never_cache(click_package_flag_resource)49click_package_flag_resource = never_cache(click_package_flag_resource)
5050
51click_package_review_flag_resource = CSRFExemptResource(51click_package_review_flag_resource = CSRFExemptResource(
52 handler=ClickPackageReviewFlagHandler,52 handler=ClickPackageReviewFlagHandler,
53 authentication=auth)53 authentication=(macaroons_auth, auth))
54click_package_review_flag_resource.__name__ = "Resource"54click_package_review_flag_resource.__name__ = "Resource"
55click_package_review_flag_resource = never_cache(55click_package_review_flag_resource = never_cache(
56 click_package_review_flag_resource)56 click_package_review_flag_resource)
5757
=== modified file 'src/clickreviews/tests/test_handlers.py'
--- src/clickreviews/tests/test_handlers.py 2016-05-20 14:00:39 +0000
+++ src/clickreviews/tests/test_handlers.py 2016-05-20 14:00:39 +0000
@@ -44,6 +44,14 @@
44 p.start()44 p.start()
45 self.addCleanup(p.stop)45 self.addCleanup(p.stop)
4646
47 def make_account_data(self, user):
48 return {
49 'verified': True,
50 'openid': user.useropenid_set.first().claimed_id.split('/')[-1],
51 'email': user.email,
52 'displayname': user.username,
53 }
54
4755
48class ClickReviewsHandlerTestCase(MacaroonsAuthenticatedTestCase):56class ClickReviewsHandlerTestCase(MacaroonsAuthenticatedTestCase):
4957
@@ -327,14 +335,6 @@
327 response = self.update_review(review, data)335 response = self.update_review(review, data)
328 self.assert_review_updated(response, data)336 self.assert_review_updated(response, data)
329337
330 def make_account_data(self, user):
331 return {
332 'verified': True,
333 'openid': user.useropenid_set.first().claimed_id.split('/')[-1],
334 'email': user.email,
335 'displayname': user.username,
336 }
337
338 def test_update_review_using_macaroon_auth(self):338 def test_update_review_using_macaroon_auth(self):
339 user = self.factory.makeUser()339 user = self.factory.makeUser()
340 account = self.make_account_data(user)340 account = self.make_account_data(user)
@@ -570,7 +570,7 @@
570 self.assertEqual('Accept, Accept-Encoding', vary)570 self.assertEqual('Accept, Accept-Encoding', vary)
571571
572572
573class BaseClickPackageFlagHandlerTestCase(TestCaseWithFactory):573class BaseClickPackageFlagHandlerTestCase(MacaroonsAuthenticatedTestCase):
574574
575 url_name = None575 url_name = None
576576
@@ -583,7 +583,6 @@
583 self.mock_is_authenticated.return_value = True583 self.mock_is_authenticated.return_value = True
584 self.addCleanup(p.stop)584 self.addCleanup(p.stop)
585 self.user = self.factory.makeUser()585 self.user = self.factory.makeUser()
586 self.client.login(username=self.user.username, password='test')
587 click_verify_fn = ('clickreviews.forms.'586 click_verify_fn = ('clickreviews.forms.'
588 'verify_click_package_published')587 'verify_click_package_published')
589 patcher = mock.patch(click_verify_fn)588 patcher = mock.patch(click_verify_fn)
@@ -597,7 +596,7 @@
597 'description': description}596 'description': description}
598597
599 def do_request(598 def do_request(
600 self, data=None, headers=None, user=None, **kwargs):599 self, data=None, headers=None, user=None, auth='oauth', **kwargs):
601 url = reverse(self.url_name, kwargs=kwargs)600 url = reverse(self.url_name, kwargs=kwargs)
602 if data is None:601 if data is None:
603 data = {}602 data = {}
@@ -605,6 +604,12 @@
605 headers = {}604 headers = {}
606 if user is None:605 if user is None:
607 user = self.factory.makeUser()606 user = self.factory.makeUser()
607 if auth == 'macaroon':
608 authorization = 'Macaroon root="%s", discharge="%s"' % (
609 'root-macaroon-data', 'discharge-macaroon-data')
610 headers['HTTP_AUTHORIZATION'] = authorization
611 else:
612 self.client.login(username=self.user.username, password='test')
608 return self.client.post(url, data, **headers)613 return self.client.post(url, data, **headers)
609614
610615
@@ -682,6 +687,27 @@
682 self.assertIn(error, response_data['errors']['package_name'])687 self.assertIn(error, response_data['errors']['package_name'])
683 self.assertEqual(ClickPackageFlag.objects.count(), 1)688 self.assertEqual(ClickPackageFlag.objects.count(), 1)
684689
690 def test_support_macaroon_authentication(self):
691 user = self.factory.makeUser()
692 account = self.make_account_data(user)
693 self.sca_double.set_verify_acl_response(account=account)
694
695 package = self.factory.makeClickPackage(package_name='some_package')
696 assert not ClickPackageFlag.objects.exists()
697 data = self.make_data()
698 response = self.do_request(
699 package_name=package.package_name, data=data,
700 user=user, auth='macaroon')
701 self.assertEqual(response.status_code, httplib.OK)
702 data = json.loads(response.content)
703 self.assert_package_flagged(package, data)
704
705 def assert_package_flagged(self, package, data):
706 flag = ClickPackageFlag.objects.get(id=data['id'])
707 self.assertEqual(flag.description, data['description'])
708 self.assertEqual(flag.summary, data['summary'])
709 self.assertEqual(flag.moderation.package, package)
710
685711
686class ClickPackageReviewFlagHandlerTestCase(712class ClickPackageReviewFlagHandlerTestCase(
687 BaseClickPackageFlagHandlerTestCase):713 BaseClickPackageFlagHandlerTestCase):
@@ -746,6 +772,27 @@
746 self.assertIn(error, response_data['errors']['review'])772 self.assertIn(error, response_data['errors']['review'])
747 self.assertEqual(ClickPackageReviewFlag.objects.count(), 1)773 self.assertEqual(ClickPackageReviewFlag.objects.count(), 1)
748774
775 def test_support_macaroon_authentication(self):
776 user = self.factory.makeUser()
777 account = self.make_account_data(user)
778 self.sca_double.set_verify_acl_response(account=account)
779
780 self.client.logout()
781 review = self.factory.makeClickPackageReview()
782 assert not ClickPackageReviewFlag.objects.exists()
783 data = self.make_data()
784 response = self.do_request(
785 review_id=review.pk, data=data, user=user, auth='macaroon')
786 self.assertEqual(response.status_code, httplib.OK)
787 data = json.loads(response.content)
788 self.assert_review_flagged(review, data)
789
790 def assert_review_flagged(self, review, data):
791 flag = ClickPackageReviewFlag.objects.get(id=data['id'])
792 self.assertEqual(flag.description, data['description'])
793 self.assertEqual(flag.summary, data['summary'])
794 self.assertEqual(flag.moderation.review, review)
795
749796
750class BaseClickPackageModerationHandlerTestCase(797class BaseClickPackageModerationHandlerTestCase(
751 SSOTestCaseMixin, TestCaseWithFactory):798 SSOTestCaseMixin, TestCaseWithFactory):

Subscribers

People subscribed via source and target branches