Ejemplo n.º 1
0
    def test_process_notification_partial_refund(self):
        """Test processing PayU partial refund notification"""
        self.payment.change_status(PaymentStatus.CONFIRMED)
        self.payment.total = 220
        self.payment.save()
        self.payment.refresh_from_db()

        self.set_up_provider(True, True)
        mocked_request = MagicMock()
        mocked_request.body = json.dumps({
            "order": {
                "status": "COMPLETED"
            },
            "refund": {
                "amount": "11000",
                "currencyCode": "USD",
                "status": "FINALIZED",
                "reasonDescription": "BlenderKit refund",
            },
        }).encode("utf8")
        mocked_request.META = {
            "CONTENT_TYPE":
            "application/json",
            "HTTP_OPENPAYU_SIGNATURE":
            "signature=6f1076d9d2fa7dc58a87f20f2c69ebf8;algorithm=MD5",
        }
        mocked_request.status_code = 200
        ret_val = self.provider.process_data(payment=self.payment,
                                             request=mocked_request)
        self.assertEqual(ret_val.__class__.__name__, "HttpResponse")
        self.assertEqual(ret_val.status_code, 200)
        self.assertEqual(ret_val.content, b"ok")
        self.payment.refresh_from_db()
        self.assertEqual(self.payment.total, Decimal("110"))
        self.assertEqual(self.payment.status, PaymentStatus.CONFIRMED)
    def setUp(self):
        mock_handler = Mock(**{
                'has_perm.return_value': False,
                'get_permissions.return_value': 'permission.add_article',
            })
        mock_request = Mock()
        mock_request.META = Mock()
        mock_request.user = Mock()
        mock_request.user.is_active.return_value = True
        mock_request.user.is_authenticated.return_value = True
        mock_request.user.has_perm.side_effect = mock_handler.has_perm

        self.mock_handler = mock_handler
        self.mock_request = mock_request

        # store original registry
        self._original_registry = registry._registry

        # clear registry and register mock handler
        registry._registry = {}
        registry.register(
                Article,
                Mock(return_value=self.mock_handler)
            )
        self.view_func = Mock(return_value=HttpResponse)
        view_class = type('MockView', (View,), {})
        view_class.dispatch = self.view_func
        view_class.dispatch = permission_required('permission.add_article')(view_class.dispatch)

        view_class_exc = type('MockView', (View,), {})
        view_class_exc.dispatch = self.view_func
        view_class_exc.dispatch = permission_required('permission.add_article',
                                                      raise_exception=True)(view_class_exc.dispatch)

        self.view_class_exc = view_class_exc
Ejemplo n.º 3
0
 def test_process_notification_refund_not_finalized(self):
     """Test processing PayU partial refund notification"""
     self.set_up_provider(True, True)
     mocked_request = MagicMock()
     mocked_request.body = json.dumps({
         "order": {
             "status": "COMPLETED"
         },
         "refund": {
             "amount": "11000",
             "currencyCode": "USD",
             "status": "FOO",
             "reasonDescription": "BlenderKit refund",
         },
     }).encode("utf8")
     mocked_request.META = {
         "CONTENT_TYPE":
         "application/json",
         "HTTP_OPENPAYU_SIGNATURE":
         "signature=0af4d2830ed40ec2cea5249a172bf6d9;algorithm=MD5",
     }
     mocked_request.status_code = 200
     with self.assertRaisesRegex(Exception, "Refund was not finelized"):
         self.provider.process_data(payment=self.payment,
                                    request=mocked_request)
Ejemplo n.º 4
0
 def test_process_notification_total_amount(self):
     """ Test processing PayU notification if it captures correct amount """
     self.set_up_provider(True, True)
     mocked_request = MagicMock()
     mocked_request.body = json.dumps(
         {
             "order": {
                 "status": "COMPLETED",
                 "totalAmount": 200,
                 "currencyCode": "USD"
             }
         }, ).encode("utf8")
     mocked_request.META = {
         'CONTENT_TYPE':
         'application/json',
         "HTTP_OPENPAYU_SIGNATURE":
         "signature=01a0e768ab1f762da4b955585aa4e59e;algorithm=MD5",
     }
     mocked_request.status_code = 200
     ret_val = self.provider.process_data(payment=self.payment,
                                          request=mocked_request)
     self.assertEqual(ret_val.__class__.__name__, "HttpResponse")
     self.assertEqual(ret_val.status_code, 200)
     self.assertEqual(ret_val.content, b"ok")
     self.assertEqual(self.payment.status, PaymentStatus.CONFIRMED)
     self.assertEqual(self.payment.captured_amount, Decimal('2'))
    def assert_expire_in_extended(self, req_path, should_expire_in, should_extend, headers=None, query_string=None):
        request = MagicMock(path=req_path)
        request.method = "GET"
        request.user = MagicMock()
        request.user.is_authenticated.return_value = True
        thirty_mins_ago = (datetime.datetime.now() - datetime.timedelta(minutes=30)).strftime("%Y-%m-%dT%H:%M:%S.%f")
        request.session = {"_session_security": thirty_mins_ago}

        if headers:
            request.META = headers

        if query_string:
            request.REQUEST = query_string

        before_response = {}
        response = self.middleware.process_response(request, before_response)
        self.assertIsNotNone(response.get("Session-Expires-In"))

        self.assertIsAlmostEqualMinutes(response.get("Session-Expires-In"), should_expire_in - 30, delta=1.0)
        self.middleware.process_request(request)
        response2 = self.middleware.process_response(request, before_response)
        self.assertIsNotNone(response2.get("Session-Expires-In"))
        if should_extend:
            self.assertIsAlmostEqualMinutes(response.get("Session-Expires-In"), should_expire_in, delta=1.0)
        else:
            self.assertIsAlmostEqualMinutes(response.get("Session-Expires-In"), should_expire_in - 30, delta=1.0)
Ejemplo n.º 6
0
 def test_process_notification_refund(self):
     """Test processing PayU refund notification"""
     self.set_up_provider(True, True)
     mocked_request = MagicMock()
     mocked_request.body = json.dumps({
         "order": {
             "status": "COMPLETED"
         },
         "refund": {
             "amount": "22000",
             "currencyCode": "USD",
             "status": "FINALIZED",
             "reasonDescription": "BlenderKit refund",
         },
     }).encode("utf8")
     mocked_request.META = {
         "CONTENT_TYPE":
         "application/json",
         "HTTP_OPENPAYU_SIGNATURE":
         "signature=dd8cdddaa98438e7a76f5e830395d7e8;algorithm=MD5",
     }
     mocked_request.status_code = 200
     ret_val = self.provider.process_data(payment=self.payment,
                                          request=mocked_request)
     self.assertEqual(ret_val.__class__.__name__, "HttpResponse")
     self.assertEqual(ret_val.status_code, 200)
     self.assertEqual(ret_val.content, b"ok")
     self.assertEqual(self.payment.status, PaymentStatus.REFUNDED)
     self.assertEqual(self.payment.captured_amount, Decimal("0"))
    def setUp(self):
        mock_handler = Mock(**{
                'has_perm.return_value': False,
                'get_permissions.return_value': 'permission.add_article',
            })
        mock_request = Mock()
        mock_request.META = Mock()
        mock_request.user = Mock()
        mock_request.user.is_active.return_value = True
        mock_request.user.is_authenticated.return_value = True
        mock_request.user.has_perm.side_effect = mock_handler.has_perm

        self.mock_handler = mock_handler
        self.mock_request = mock_request

        # store original registry
        self._original_registry = registry._registry

        # clear registry and register mock handler
        registry._registry = {}
        registry.register(
                Article,
                Mock(return_value=self.mock_handler)
            )
        self.view_func = Mock(return_value=HttpResponse())
        self.decorated = permission_required('permission.add_article')(self.view_func)
        self.decorated_exc = permission_required('permission.add_article',
                                                 raise_exception=True)(self.view_func)
Ejemplo n.º 8
0
    def test_multiple_proxy_should_leave_only_first(self):

        multiple_mid = MultipleProxyMiddleware()
        request = MagicMock(name='request_mock')
        request.META = {'HTTP_X_FORWARDED_FOR': 'first_address,last_address'}
        multiple_mid.process_request(request)

        self.assertEquals('last_address', request.META['HTTP_X_FORWARDED_FOR'])
Ejemplo n.º 9
0
 def test_process_notification_error_malformed_post(self):
     """ Test processing PayU notification with malformed POST """
     self.set_up_provider(True, True)
     mocked_request = MagicMock()
     mocked_request.body = b'{}'
     mocked_request.META = {'CONTENT_TYPE': 'application/json'}
     with self.assertRaises(PayuApiError) as context:
         self.provider.process_data(payment=self.payment, request=mocked_request)
     self.assertEqual(context.exception.args[0], "Malformed POST")
Ejemplo n.º 10
0
 def mock_request(self, authed, path='/'):
     mock_request = MagicMock()
     mock_request.method = 'GET'
     mock_request.user.is_authenticated.return_value = authed
     mock_request.POST = {}
     mock_request.META = {}
     mock_request.session = {}
     mock_request.build_absolute_uri.return_value = path
     mock_request.get_full_path.return_value = path
     return mock_request
Ejemplo n.º 11
0
    def test_ssl_middleware_should_handle_redirect2_secured(self):

        ssl_mid = SSLRedirectMiddleware()
        request = MagicMock(name='request_mock')
        request.is_secure.return_value = False
        request.META = {'HTTP_X_FORWARDED_SSL': 'on'}
        view_func = MagicMock(name='view_mock')
        resp = ssl_mid.process_view(request, view_func, (), {'SSL': True})

        self.assertTrue(resp is None)
Ejemplo n.º 12
0
    def test_remoteip_filter(self, mock_get_request):
        mock_request = MagicMock()
        mock_request.META = {'REMOTE_ADDR': '192.168.1.1'}
        mock_get_request.return_value = mock_request

        ip_filter = RemoteIpFilter()
        test_record = MockRecord()
        ip_filter.filter(test_record)

        self.assertEqual(test_record.remoteip, '192.168.1.1')
Ejemplo n.º 13
0
 def _get_mock_request(self, twofactor_required=False, devices=None):
     devices = devices or []
     mock_request = MagicMock()
     mock_request.user.is_authenticated.return_value = True
     mock_request.user.preferredemail.email = '*****@*****.**'
     mock_request.user.twofactor_required = twofactor_required
     mock_request.method = 'GET'
     mock_request.POST = {}
     mock_request.META = {}
     mock_request.user.devices.all.return_value = devices
     return mock_request
Ejemplo n.º 14
0
 def test_process_notification_error(self):
     """ Test processing PayU notification with wrong signature """
     self.set_up_provider(True, True)
     mocked_request = MagicMock()
     mocked_request.body = b'{}'
     mocked_request.META = {'CONTENT_TYPE': 'application/json', "HTTP_OPENPAYU_SIGNATURE": "signature=foo;algorithm=MD5"}
     ret_val = self.provider.process_data(payment=self.payment, request=mocked_request)
     self.assertEqual(ret_val.__class__.__name__, "HttpResponse")
     self.assertEqual(ret_val.status_code, 500)
     self.assertEqual(ret_val.content, b"not ok")
     self.assertEqual(self.payment.status, PaymentStatus.WAITING)
     self.assertEqual(self.payment.captured_amount, Decimal('0'))
Ejemplo n.º 15
0
 def test_create_request_with_custom_headers(self):
     http_request = MagicMock()
     mock_api = MagicMock()
     meta = dict(HTTP_CUSTOM_HEADER='custom_value')
     http_request.META = meta
     request_body = MagicMock()
     request = api_request_builder.build_request(http_request=http_request,
                                                 url='candidates',
                                                 api=mock_api,
                                                 request_data={},
                                                 request_body=request_body)
     assert_that(request.request_headers, has_entry('HTTP_CUSTOM_HEADER',
                                                    'custom_value'))
Ejemplo n.º 16
0
 def test_process_notification(self):
     """ Test processing PayU notification """
     self.set_up_provider(True, True)
     mocked_request = MagicMock()
     mocked_request.body = json.dumps({"order": {"status": "COMPLETED"}}).encode("utf8")
     mocked_request.META = {
         'CONTENT_TYPE': 'application/json',
         "HTTP_OPENPAYU_SIGNATURE": "signature=a12fbd21c48e69bedee18edf042b816c;algorithm=MD5",
     }
     mocked_request.status_code = 200
     ret_val = self.provider.process_data(payment=self.payment, request=mocked_request)
     self.assertEqual(ret_val.__class__.__name__, "HttpResponse")
     self.assertEqual(ret_val.status_code, 200)
     self.assertEqual(ret_val.content, b"ok")
     self.assertEqual(self.payment.status, PaymentStatus.CONFIRMED)
     self.assertEqual(self.payment.captured_amount, Decimal('0'))
Ejemplo n.º 17
0
    def test_oauth(self):
        # Test GET to ensure a provider name is returned for dynamically naming oauth login.
        oauth_name = "provider"
        client_id = "name"
        redirect_uri = "http://test.dev/callback"
        response_type = "code"
        scope = "profile"
        authorization_url = "http://remote.dev/authorize"
        referer = "/status/12345"

        with self.settings(OAUTH_NAME=oauth_name):
            response = self.client.get(reverse('oauth'),{'query':'name'})
            return_name = response.json().get('name')
            self.assertEqual(return_name, oauth_name)
            self.assertEqual(response.status_code, 200)

        # Test post to ensure that a valid redirect is returned.
        with self.settings(OAUTH_CLIENT_ID=client_id,
                           OAUTH_REDIRECT_URI=redirect_uri,
                           OAUTH_RESPONSE_TYPE=response_type,
                           OAUTH_SCOPE=scope,
                           OAUTH_NAME=oauth_name):
            response = self.client.post(reverse('oauth'))
            params = urllib.parse.urlencode((
                ('client_id', client_id),
                ('redirect_uri', redirect_uri),
                ('response_type', response_type),
                ('scope', scope)
            ))
            self.assertRedirects(response, '{url}?{params}'.format(url=authorization_url.rstrip('/'),
                                                                  params=params),
                                 fetch_redirect_response=False)

            mock_request = MagicMock()
            mock_request.META = {'HTTP_REFERER': referer}
            mock_request.GET = {'query': None}
            response = oauth(mock_request)
            params = urllib.parse.urlencode((
                ('client_id', client_id),
                ('redirect_uri', redirect_uri),
                ('response_type', response_type),
                ('scope', scope),
                ('state', base64.b64encode(referer.encode()))
            ))
            self.assertRedirects(response, '{url}?{params}'.format(url=authorization_url.rstrip('/'),
                                                                   params=params),
                                 fetch_redirect_response=False)
Ejemplo n.º 18
0
    def test_oauth(self):
        # Test GET to ensure a provider name is returned for dynamically naming oauth login.
        oauth_name = "provider"
        client_id = "name"
        redirect_uri = "http://test.dev/callback"
        response_type = "code"
        scope = "profile"
        authorization_url = "http://remote.dev/authorize"
        referer = "/status/12345"

        with self.settings(OAUTH_NAME=oauth_name):
            response = self.client.get(reverse('oauth'), {'query': 'name'})
            return_name = response.json().get('name')
            self.assertEqual(return_name, oauth_name)
            self.assertEqual(response.status_code, 200)

        # Test post to ensure that a valid redirect is returned.
        with self.settings(OAUTH_CLIENT_ID=client_id,
                           OAUTH_REDIRECT_URI=redirect_uri,
                           OAUTH_RESPONSE_TYPE=response_type,
                           OAUTH_SCOPE=scope,
                           OAUTH_NAME=oauth_name):
            response = self.client.post(reverse('oauth'))
            params = urllib.parse.urlencode(
                (('client_id', client_id), ('redirect_uri', redirect_uri),
                 ('response_type', response_type), ('scope', scope)))
            self.assertRedirects(response,
                                 '{url}?{params}'.format(
                                     url=authorization_url.rstrip('/'),
                                     params=params),
                                 fetch_redirect_response=False)

            mock_request = MagicMock()
            mock_request.META = {'HTTP_REFERER': referer}
            mock_request.GET = {'query': None}
            response = oauth(mock_request)
            params = urllib.parse.urlencode(
                (('client_id', client_id), ('redirect_uri', redirect_uri),
                 ('response_type', response_type), ('scope', scope),
                 ('state', base64.b64encode(referer.encode()))))
            self.assertRedirects(response,
                                 '{url}?{params}'.format(
                                     url=authorization_url.rstrip('/'),
                                     params=params),
                                 fetch_redirect_response=False)
Ejemplo n.º 19
0
    def test_helpscout_request(self):
        # Compute signature for request body
        request_body = 'Request body'
        secret = settings.HELPSCOUT_SECRET
        dig = hmac.new(b(secret), msg=b(request_body),
                       digestmod=hashlib.sha1).digest()
        computed_sig = b(base64.b64encode(dig).decode())

        # Valid signature should return decorated function
        request = MagicMock()
        request.META = {'HTTP_X_HELPSCOUT_SIGNATURE': computed_sig}
        request.body = request_body

        decorator = helpers.helpscout_request(lambda x: True)
        self.assertTrue(decorator(request))

        # Invalid signature should return a response code of 401
        request.META['HTTP_X_HELPSCOUT_SIGNATURE'] = '234'
        response = decorator(request)
        self.assertEquals(401, response.status_code)
Ejemplo n.º 20
0
    def assert_expire_in_extended(self,
                                  req_path,
                                  should_expire_in,
                                  should_extend,
                                  headers=None,
                                  query_string=None):
        request = MagicMock(path=req_path)
        request.method = "GET"
        request.user = MagicMock()
        request.user.is_authenticated.return_value = True
        thirty_mins_ago = (
            datetime.datetime.now() -
            datetime.timedelta(minutes=30)).strftime("%Y-%m-%dT%H:%M:%S.%f")
        request.session = {"_session_security": thirty_mins_ago}

        if headers:
            request.META = headers

        if query_string:
            request.REQUEST = query_string

        before_response = {}
        response = self.middleware.process_response(request, before_response)
        self.assertIsNotNone(response.get("Session-Expires-In"))

        self.assertIsAlmostEqualMinutes(response.get("Session-Expires-In"),
                                        should_expire_in - 30,
                                        delta=1.0)
        self.middleware.process_request(request)
        response2 = self.middleware.process_response(request, before_response)
        self.assertIsNotNone(response2.get("Session-Expires-In"))
        if should_extend:
            self.assertIsAlmostEqualMinutes(response.get("Session-Expires-In"),
                                            should_expire_in,
                                            delta=1.0)
        else:
            self.assertIsAlmostEqualMinutes(response.get("Session-Expires-In"),
                                            should_expire_in - 30,
                                            delta=1.0)
Ejemplo n.º 21
0
    def _build_mock_request(self, user=None, get=None, post=None):
        request = MagicMock()
        if user:
            request.user = user
            if django.VERSION[0] == 1:
                request.user.is_authenticated.__get__ = MagicMock(
                    return_value=True)
            elif django.VERSION[0] >= 2:
                request.user.__dict__['is_authenticated'] = True
        else:
            request.user = AnonymousUser()

        csrf = _salt_cipher_secret(_get_new_csrf_string())
        request.GET = {}
        request.POST = {}
        request.META = {"SCRIPT_NAME": "/"}
        request.COOKIES = {settings.CSRF_COOKIE_NAME: csrf}
        request.resolver_match.kwargs = {}
        if get is not None:
            request.GET.update(get)
        if post is not None:
            request.POST.update(post)
        return request