def test_invalid_code(self):
     """Check invalid EDRPOU(IPN) number 123"""
     setup_routing(self.edr_api_app, func=response_code)
     response = self.app.get('/verify?id=123', status=404)
     self.assertEqual(response.content_type, 'application/json')
     self.assertEqual(response.status, '404 Not Found')
     expected_result = [{
         u'error': {
             u'errorDetails': u"Couldn't find this code in EDR.",
             u'code': u'notFound'
         },
         u'meta': {
             u'sourceDate': u'2017-04-25T11:56:36+00:00'
         }
     }]
     if SANDBOX_MODE:
         self.assertEqual(
             response.json['errors'][0]['description'][0]['error']
             ['errorDetails'], "Couldn't find this code in EDR.")
     else:
         self.assertTrue(self.redis.exists(db_key("123", "verify")))
         self.assertEqual(response.json['errors'][0]['description'],
                          expected_result)
         response = self.app.get('/verify?id=123', status=404)
         self.assertEqual(response.json,
                          loads(self.redis.get(db_key("123", "verify"))))
def verify_user(request):
    code = request.params.get('id', '').encode('utf-8')
    details = EDRDetails('code', code)
    role = request.authenticated_role
    if not code:
        passport = request.params.get('passport', '').encode('utf-8')
        if not passport:
            return error_handler(
                request, default_error_status, {
                    "location":
                    "url",
                    "name":
                    "id",
                    "description": [{
                        u'message':
                        u'Wrong name of the GET parameter'
                    }]
                })
        details = EDRDetails('passport', passport)
    data = get_sandbox_data(
        request, code
    )  # return test data if SANDBOX_MODE=True and data exists for given code
    if data:
        return data
    if role == "robots":
        res = cached_details(request, details.code)
        if res:
            return res
    elif request.registry.cache_db.has(db_key(details.code, "verify")):
        return cached_verify(request, details.code)
    LOGGER.info("Code {} was not found in cache at {}".format(
        details.code,
        db_key(details.code, "details" if role == "robots" else "verify")))
    try:
        response = request.registry.edr_client.get_subject(**details._asdict())
    except (requests.exceptions.ReadTimeout,
            requests.exceptions.ConnectTimeout):
        return error_handler(
            request, default_error_status, {
                "location": "url",
                "name": "id",
                "description": [{
                    u'message': u'Gateway Timeout Error'
                }]
            })
    return form_edr_response(request, response, details.code)
 def test_details(self):
     """Check data for get_subject_details request"""
     setup_routing(self.edr_api_app, func=response_code)
     setup_routing(self.edr_api_app,
                   path='/1.0/subjects/2842335',
                   func=response_details)
     expected_data = {
         u"additionalActivityKinds": [{
             u"scheme":
             u"КВЕД",
             u"id":
             u"64.92",
             u"description":
             u"Інші види кредитування"
         }, {
             u"scheme":
             u"КВЕД",
             u"id":
             u"64.99",
             u"description":
             u"Надання інших фінансових послуг (крім страхування та пенсійного забезпечення), н. в. і. у."
         }, {
             u"scheme":
             u"КВЕД",
             u"id":
             u"66.11",
             u"description":
             u"Управління фінансовими ринками"
         }, {
             u"scheme":
             u"КВЕД",
             u"id":
             u"66.12",
             u"description":
             u"Посередництво за договорами по цінних паперах або товарах"
         }, {
             u"scheme":
             u"КВЕД",
             u"id":
             u"66.19",
             u"description":
             u"Інша допоміжна діяльність у сфері фінансових послуг, крім страхування та пенсійного забезпечення"
         }],
         u"management":
         u"ЗАГАЛЬНІ ЗБОРИ",
         u"name":
         u"ПАТ КБ \"ПРИВАТБАНК\"",
         u"registrationStatus":
         u"registered",
         u"registrationStatusDetails":
         u"зареєстровано",
         u"identification": {
             u"scheme":
             u"UA-EDR",
             u"id":
             u"14360570",
             u"legalName":
             u"АКЦІОНЕРНЕ ТОВАРИСТВО КОМЕРЦІЙНИЙ БАНК \"ПРИВАТБАНК\""
         },
         u"address": {
             u"postalCode":
             u"49094",
             u"countryName":
             u"УКРАЇНА",
             u"streetAddress":
             u"Дніпропетровська обл., місто Дніпропетровськ, Жовтневий район"
         },
         u"founders": [{
             u"role_text": u"засновник",
             u"role": 4,
             u"name": u"АКЦІОНЕРИ - ЮРИДИЧНІ ТА ФІЗИЧНІ ОСОБИ"
         }],
         u"activityKind": {
             u"scheme": u"КВЕД",
             u"id": u"64.19",
             u"description": u"Інші види грошового посередництва"
         }
     }
     response = self.app.get('/verify?id=14360570', expect_errors=True)
     if SANDBOX_MODE:
         self.assertEqual(response.status, '404 Not Found')
         self.assertEqual(
             response.json['errors'][0]['description'][0]['error']
             ['errorDetails'], "Couldn't find this code in EDR.")
     else:
         self.assertTrue(self.redis.exists(db_key("14360570", "details")))
         response = self.app.get('/verify?id=14360570')
         self.assertEqual(
             response.json,
             loads(self.redis.get(db_key("14360570", "details"))))
         self.assertEqual(response.status, '200 OK')
         self.assertEqual(response.content_type, 'application/json')
         self.assertEqual(response.json['data'][0], expected_data)
         self.assertEqual(
             response.json['meta'], {
                 'sourceDate': '2017-04-25T11:56:36+00:00',
                 'detailsSourceDate': ['2017-04-25T11:56:36+00:00']
             })