~ricardokirkner/rnr-server/sentry

« back to all changes in this revision

Viewing changes to src/reviewsapp/tests/test_handlers.py

  • Committer: Tarmac
  • Author(s): Ricardo Kirkner
  • Date: 2016-05-17 14:37:37 UTC
  • mfrom: (316.1.11 trunk)
  • Revision ID: tarmac-20160517143737-upuntzyo0kv78mzg
[r=fgallina] support submitting reviews using macaroon based authentication

Show diffs side-by-side

added added

removed removed

Lines of Context:
56
56
from piston.emitters import Emitter
57
57
from piston.handler import typemapper
58
58
 
59
 
from core.tests.helpers import assert_no_extra_queries_after
 
59
from core.tests.doubles import SCADouble
 
60
from core.tests.helpers import (
 
61
    RequestsDoubleTestCaseMixin,
 
62
    assert_no_extra_queries_after,
 
63
)
60
64
from reviewsapp.api.handlers import (
61
65
    Django13JSONEncoder,
62
66
    Django13JSONEmitter,
983
987
        self.assertEqual(response['vary'], 'Accept')
984
988
 
985
989
 
986
 
class SubmitReviewHandlerTestCase(TestCaseWithFactory):
 
990
class SubmitReviewHandlerTestCase(TestCaseWithFactory,
 
991
                                  RequestsDoubleTestCaseMixin):
987
992
 
988
993
    def setUp(self):
989
994
        super(SubmitReviewHandlerTestCase, self).setUp()
1000
1005
        }
1001
1006
        self.factory.makeArch('i386')
1002
1007
 
1003
 
    def _post_new_review(self, data, user=None, verify_result=True):
 
1008
        self.patch_requests()
 
1009
        self.sca_double = SCADouble(self.requests_double)
 
1010
        p = patch('core.utilities.web_services', new=self.sca_double)
 
1011
        p.start()
 
1012
        self.addCleanup(p.stop)
 
1013
 
 
1014
    def _post_new_review(self, data, user=None, verify_result=True,
 
1015
                         auth='oauth'):
1004
1016
        # Post a review as an authenticated user.
1005
1017
        url = reverse('rnr-api-reviews')
1006
1018
 
1007
 
        if user is None:
1008
 
            user = self.factory.makeUser()
1009
 
        self.client.login(username=user.username, password='test')
 
1019
        headers = {}
 
1020
        if auth == 'macaroon':
 
1021
            authorization = 'Macaroon root="%s", discharge="%s"' % (
 
1022
                'root-macaroon-data', 'discharge-macaroon-data')
 
1023
            headers['HTTP_AUTHORIZATION'] = authorization
 
1024
        else:
 
1025
            if user is None:
 
1026
                user = self.factory.makeUser()
 
1027
            self.client.login(username=user.username, password='test')
1010
1028
 
1011
1029
        # Ensure we don't hit the network for our tests.
1012
1030
        is_authed_fn = ('core.api.auth.SSOOAuthAuthentication.'
1022
1040
                with patch(sca_verify_fn) as mock_sca_verify_method:
1023
1041
                    mock_sca_verify_method.return_value = verify_result
1024
1042
                    response = self.client.post(
1025
 
                        url, data=data, content_type='application/json')
 
1043
                        url, data=data, content_type='application/json',
 
1044
                        **headers)
1026
1045
        return response
1027
1046
 
1028
1047
    def test_bogus_data(self):
1058
1077
        response_dict = simplejson.loads(response.content)
1059
1078
        self.assertEqual('inkscape', response_dict['package_name'])
1060
1079
 
 
1080
    def test_create_using_macaroon_auth(self):
 
1081
        self.sca_double.set_verify_acl_response(
 
1082
            is_verified=True, openid='oid1234',
 
1083
            email='user@example.com', displayname='user1234')
 
1084
        response = self._post_new_review(simplejson.dumps(self.required_data),
 
1085
                                         auth='macaroon')
 
1086
        self.assertEqual(httplib.OK, response.status_code)
 
1087
        self.assertEqual('application/json; charset=utf-8',
 
1088
                         response['content-type'])
 
1089
        response_dict = simplejson.loads(response.content)
 
1090
        self.assertEqual('inkscape', response_dict['package_name'])
 
1091
 
1061
1092
    def test_creates_repository_and_software_item(self):
1062
1093
        # Submitting a review for a software item or repository of which
1063
1094
        # we don't yet have a record will create those records (after