|
| 1 | +#!/usr/bin/env python |
| 2 | +# |
| 3 | +# A library that provides a Python interface to the Telegram Bot API |
| 4 | +# Copyright (C) 2015-2018 |
| 5 | +# Leandro Toledo de Souza <devs@python-telegram-bot.org> |
| 6 | +# |
| 7 | +# This program is free software: you can redistribute it and/or modify |
| 8 | +# it under the terms of the GNU Lesser Public License as published by |
| 9 | +# the Free Software Foundation, either version 3 of the License, or |
| 10 | +# (at your option) any later version. |
| 11 | +# |
| 12 | +# This program is distributed in the hope that it will be useful, |
| 13 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 14 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 15 | +# GNU Lesser Public License for more details. |
| 16 | +# |
| 17 | +# You should have received a copy of the GNU Lesser Public License |
| 18 | +# along with this program. If not, see [http://www.gnu.org/licenses/]. |
| 19 | +from copy import deepcopy |
| 20 | + |
| 21 | +import pytest |
| 22 | + |
| 23 | +from telegram import PassportData, PassportFile |
| 24 | + |
| 25 | +RAW_PASSPORT_DATA = {'data': [{'type': 'personal_details', |
| 26 | + 'data': 'tj3pNwOpN+ZHsyb6F3aJcNmEyPxrOtGTbu3waBlCQDNaQ9oJlkbXpw+HI3y9faq/+TCeB/WsS/2TxRXTKZw4zXvGP2UsfdRkJ2SQq6x+Ffe/oTF9/q8sWp2BwU3hHUOz7ec1/QrdPBhPJjbwSykEBNggPweiBVDZ0x/DWJ0guCkGT9smYGqog1vqlqbIWG7AWcxVy2fpUy9w/zDXjxj5WQ3lRpHJmi46s9xIHobNGGBvWw6/bGBCInMoovgqRCEu1sgz2QXF3wNiUzGFycEzLz7o+1htLys5n8Pdi9MG4RY='}, # noqa: E501 |
| 27 | + {'type': 'driver_license', |
| 28 | + 'data': 'hOXQ/iHSGRDFXqql3yETA4AiP0mdlwmo9RtGS+Qg9E5okrN/yTcPNtBKb2fLA0posk35bvevN53cyJMHZnxErEFTSw/FQjPyRFdJUyjGNPeu4yOI73uk5eRVLTAlA2G0eN2azzfS/QOBGL19N3pHk9hMTZYPCBTDt89MHhRQS7Z3YWRSzFcFiEhktHv/ezgcg3EWtsUQ8K4J2445uoZzbB8wsQ6RM4ibn08RfjV6dNyVrj8jBGUpCBlA6iY60rFQM+LZ9ByI3OeS53bnIAMQC2rHHbV/wkzS6PbufOzjZgJq26aCLmC5YDomrpcrdvk0fvi6aEuBJEI3zcteh2fh/Q==', # noqa: E501 |
| 29 | + 'selfie': {'file_id': 'DgADBAADEQQAAkopgFNr6oi-wISRtAI', |
| 30 | + 'file_date': 1534074942}, |
| 31 | + 'reverse_side': {'file_id': 'DgADBAADNQQAAtoagFPf4wwmFZdmyQI', |
| 32 | + 'file_date': 1534074942}, |
| 33 | + 'front_side': {'file_id': 'DgADBAADxwMAApnQgVPK2-ckL2eXVAI', |
| 34 | + 'file_date': 1534074942}}, |
| 35 | + {'type': 'address', |
| 36 | + 'data': 'j9SksVkSj128DBtZA+3aNjSFNirzv+R97guZaMgae4Gi0oDVNAF7twPR7j9VSmPedfJrEwL3O889Ei+a5F1xyLLyEI/qEBljvL70GFIhYGitS0JmNabHPHSZrjOl8b4s/0Z0Px2GpLO5siusTLQonimdUvu4UPjKquYISmlKEKhtmGATy+h+JDjNCYuOkhakeNw0Rk0BHgj0C3fCb7WZNQSyVb+2GTu6caR6eXf/AFwFp0TV3sRz3h0WIVPW8bna'}, # noqa: E501 |
| 37 | + {'type': 'utility_bill', 'files': [ |
| 38 | + {'file_id': 'DgADBAADLAMAAhwfgVMyfGa5Nr0LvAI', |
| 39 | + 'file_date': 1534074988}, |
| 40 | + {'file_id': 'DgADBAADaQQAAsFxgVNVfLZuT-_3ZQI', |
| 41 | + 'file_date': 1534074988}]}, |
| 42 | + {'type': 'email', 'email': 'fb3e3i47zt@dispostable.com'}], |
| 43 | + 'credentials': { |
| 44 | + 'data': 'uI/g4fJLVO6132t+yuBvKExTpTubinscH8KLVc8YPuo1SiXaBg4A6AaVdv60CPViMw8n+ShVWOTL6oN5Ye0+CC2/URZ0eeTMJcKkvJYRI0Q6YJ3aeeEzslwORKho0mGk5xSWpPV5LHXhRIlgUMA32NkbNuzzoij7OhqxvuDE50/0pAUKtxy69h+heAzxFj8+jYjgnOwgwNa6FGUG59oUozgpB98XrEeWGW+JIGE9fux8dSGkFhF2SjkmdW6b2Gexuq94TVGDgFigSvqMOgZj9slZI4UEdZBIGldPHrc8/+EuqWv+WKWU8hdj1dxfY/pNvonb8MwrQLrUyNafdLq5QD4Kmg3XPnZTI9bsYUf6xO9oKU42JezDcRbaCqKkUn6UceCkV2hHMJP4aVVI9Bad1k/rXlaDh8PUV19n6tct5UH8JfkBbGlj2uASI5lPasIvnWg9s1vsZ4ynE2YAuU4iotMkgmJkj1+JCl8Ul9uqzfiK0IbYfu57V82gUEjn6c4br49pY+Cvo9od9Lx8fSJCiXq+DdmDTfIZxpeFqEYeJi6/v0CjJni4CtS6LJGo9JUR2MlqOAiyOLomadlrZyzC2eLm8X6ouIXTxtbUqzxcTiH/r23NQ44YwJpMdDiulNuPg0tEyio8TokHj9APORiW+QIw4zLZFyBEorT1DSALm4AV3A1lIg0svOncDkOqa3ZydQ0tdysoXOq5Zsu+Qu/DQZQz5IGEHb7N9QW6KZDGfBOP5Ok04OxlXO8UaTZr6mysmu8jDOlqtitLKSCGDy0LPfITzehTqfEu0KrtmxI91zJtiNyE4g+oBzQsLwQ7vSp1xl7YNViDi8ea/upZdRavh3NthVD5TxyNJedt4Xp8q5/H5kSV/EFhumONPwBwOuN4KrsCQEaNtHZfYB8SH1v0rWbiFw3/owxCrCPqgEwMGnx+JTqsAplurIZfxsNz+57O4Hq10VVt7yhroq9UpIAR8C8hW58dcZBflWyQwG8HalYAaPJ/teSLP9o6MyiqrUkADbNBOFsUhIerq6Q0BnQ941sWg10BkG8oQSU6JdnZ1Ygml2gpFabBRXeeF5ijD0Y9Bq8D3vDnHKx/GziAK0aKlwSqfTmJ+C1hm7AxBekjtDavkBeq5bIOtxYaXqrtunQFAZRCrcnQEg0DPY6dYw+jmOR0NuHRMU5KeZ0994Jn0TRGiUoJtLp1MHJ2D1MCWG3Fp9Ps7vB46a9XiGYHJUdJjHsavvQRQjhB1FvA/kxXNubCjAOPLUz1j+BEkUUgwi65l8+pViHUCIhBdLJn7S0J9HbMsc3jXOFusfvXfyvf2SZMqyhEscs/2HzYgbCWVSxQ//6eimZqvW4an1JIEfH1xUH3zS0HvS7NWChtX1Cj+jJ2vw+lyom6a84wJ2mjSRVcaV6JZa2mIf2IuXfX8EMZwKMDJagkQ7effV3MrnCNrXUXJYn8wVm6l+uP+R9mCn9qbGlvWToCID0YM8MTxJ0LgzC0n93m46OxxCI1p1hPzVrmDCcKt3OASe0zVat415/sz9TTU7Rm8oNSAVUVNo7FRg2XwEb9VupGMjlscu4cJKLCtUpImSKDKlVLH2KYy6s4NdPjOjqtjQLRoaCxbYHmNXXE+vVwPiNBK/bBVT3XJgdmbkXa/PDnMjhAmn0huuxBu8GsTOs+bBdyDCbr6mY6EzN9lCPspEoOPs7nmREpjrvGmEqEddRteyAebpVqZQhqklyT3RVl8AmfoF7QgTi0NYqFb50Lgou3hFrMg7isG5EKU+IKI5WfzyWONlHNSpvO', # noqa: E501 |
| 45 | + 'hash': 'qyi5vQ2HCVjVMHb+l6HQ4krmvwwEkvm6Qmdf5GJcohM=', |
| 46 | + 'secret': 'kgJE0VLB9enOq5fhhX8gOv0xoaMIcskmRPOG1eMbiC/Q8slr7kur12H/YIoOfd7/DQ0ggE7TAAe34PypFvtmwt5fDVtqtPl9YoCeAOCFWxHxLgTCLbzoJ0lTJXoJkdHjlvR2lKaP+rMtaU1w8WOpYOGiNXyblQoWwFRrWNTHmHnmwBfGBFCj/vp89+C1viEYHeWPPUkBhf1vT31L70BEoe8hxORJEDg+jY+80W2nFdIWNBF+o9GSmbMWFtd7UFiuLPp2JUBCy8XuHozk8xFk/PN6m6DgSu32rC4YBJv/sWGUo/MmH0nxR3gaiEkj+9rWIybCNAwgfdQpk/KH2RCF8g=='}} # noqa: E501 |
| 47 | + |
| 48 | + |
| 49 | +@pytest.fixture(scope='function') |
| 50 | +def all_passport_data(): |
| 51 | + raw_passport_data = deepcopy(RAW_PASSPORT_DATA) |
| 52 | + return [{'type': 'personal_details', |
| 53 | + 'data': raw_passport_data['data'][0]['data']}, |
| 54 | + {'type': 'passport', |
| 55 | + 'data': raw_passport_data['data'][1]['data'], |
| 56 | + 'front_side': raw_passport_data['data'][1]['front_side'], |
| 57 | + 'selfie': raw_passport_data['data'][1]['selfie']}, |
| 58 | + {'type': 'internal_passport', |
| 59 | + 'data': raw_passport_data['data'][1]['data'], |
| 60 | + 'front_side': raw_passport_data['data'][1]['front_side'], |
| 61 | + 'selfie': raw_passport_data['data'][1]['selfie']}, |
| 62 | + {'type': 'driver_license', |
| 63 | + 'data': raw_passport_data['data'][1]['data'], |
| 64 | + 'front_side': raw_passport_data['data'][1]['front_side'], |
| 65 | + 'reverse_side': raw_passport_data['data'][1]['reverse_side'], |
| 66 | + 'selfie': raw_passport_data['data'][1]['selfie']}, |
| 67 | + {'type': 'identity_card', |
| 68 | + 'data': raw_passport_data['data'][1]['data'], |
| 69 | + 'front_side': raw_passport_data['data'][1]['front_side'], |
| 70 | + 'reverse_side': raw_passport_data['data'][1]['reverse_side'], |
| 71 | + 'selfie': raw_passport_data['data'][1]['selfie']}, |
| 72 | + {'type': 'address', |
| 73 | + 'data': raw_passport_data['data'][2]['data']}, |
| 74 | + {'type': 'utility_bill', |
| 75 | + 'files': raw_passport_data['data'][3]['files']}, |
| 76 | + {'type': 'bank_statement', |
| 77 | + 'files': raw_passport_data['data'][3]['files']}, |
| 78 | + {'type': 'rental_agreement', |
| 79 | + 'files': raw_passport_data['data'][3]['files']}, |
| 80 | + {'type': 'passport_registration', |
| 81 | + 'files': raw_passport_data['data'][3]['files']}, |
| 82 | + {'type': 'temporary_registration', |
| 83 | + 'files': raw_passport_data['data'][3]['files']}, |
| 84 | + {'type': 'email', |
| 85 | + 'email': 'fb3e3i47zt@dispostable.com'}, |
| 86 | + {'type': 'phone_number', |
| 87 | + 'phone_number': 'fb3e3i47zt@dispostable.com'}] |
| 88 | + |
| 89 | + |
| 90 | +@pytest.fixture(scope='function') |
| 91 | +def passport_data(bot): |
| 92 | + return PassportData.de_json(deepcopy(RAW_PASSPORT_DATA), bot=bot) |
| 93 | + |
| 94 | + |
| 95 | +class TestPassport(object): |
| 96 | + driver_license_selfie_file_id = 'DgADBAADEQQAAkopgFNr6oi-wISRtAI' |
| 97 | + driver_license_front_side_file_id = 'DgADBAADxwMAApnQgVPK2-ckL2eXVAI' |
| 98 | + driver_license_reverse_side_file_id = 'DgADBAADNQQAAtoagFPf4wwmFZdmyQI' |
| 99 | + utility_bill_1_file_id = 'DgADBAADLAMAAhwfgVMyfGa5Nr0LvAI' |
| 100 | + utility_bill_2_file_id = 'DgADBAADaQQAAsFxgVNVfLZuT-_3ZQI' |
| 101 | + |
| 102 | + def test_creation(self, passport_data): |
| 103 | + assert isinstance(passport_data, PassportData) |
| 104 | + |
| 105 | + def test_expected_values(self, passport_data): |
| 106 | + personal_details, driver_license, address, utility_bill, email = passport_data.data |
| 107 | + |
| 108 | + assert personal_details.type == 'personal_details' |
| 109 | + assert personal_details.data.to_dict() == {'gender': 'female', |
| 110 | + 'residence_country_code': 'DK', |
| 111 | + 'country_code': 'DK', |
| 112 | + 'birth_date': '01.01.2001', |
| 113 | + 'first_name': 'FIRSTNAME', |
| 114 | + 'last_name': 'LASTNAME'} |
| 115 | + |
| 116 | + assert driver_license.type == 'driver_license' |
| 117 | + assert driver_license.data.to_dict() == {'expiry_date': '01.01.2001', |
| 118 | + 'document_no': 'DOCUMENT_NO'} |
| 119 | + assert isinstance(driver_license.selfie, PassportFile) |
| 120 | + assert driver_license.selfie.file_id == self.driver_license_selfie_file_id |
| 121 | + assert isinstance(driver_license.front_side, PassportFile) |
| 122 | + assert driver_license.front_side.file_id == self.driver_license_front_side_file_id |
| 123 | + assert isinstance(driver_license.reverse_side, PassportFile) |
| 124 | + assert driver_license.reverse_side.file_id == self.driver_license_reverse_side_file_id |
| 125 | + |
| 126 | + assert address.type == 'address' |
| 127 | + assert address.data.to_dict() == {'city': 'CITY', 'street_line2': 'STREET_LINE2', |
| 128 | + 'state': 'STATE', 'post_code': 'POSTCODE', |
| 129 | + 'country_code': 'DK', 'street_line1': 'STREET_LINE1'} |
| 130 | + |
| 131 | + assert utility_bill.type == 'utility_bill' |
| 132 | + assert isinstance(utility_bill.files[0], PassportFile) |
| 133 | + assert utility_bill.files[0].file_id == self.utility_bill_1_file_id |
| 134 | + assert isinstance(utility_bill.files[1], PassportFile) |
| 135 | + assert utility_bill.files[1].file_id == self.utility_bill_2_file_id |
| 136 | + |
| 137 | + assert email.type == 'email' |
| 138 | + assert email.email == 'fb3e3i47zt@dispostable.com' |
| 139 | + |
| 140 | + def test_all_types(self, passport_data, bot, all_passport_data): |
| 141 | + credentials = passport_data.credentials.to_dict() |
| 142 | + |
| 143 | + # Copy credentials from other types to all types so we can decrypt everything |
| 144 | + sd = credentials['data']['secure_data'] |
| 145 | + credentials['data']['secure_data'] = { |
| 146 | + 'personal_details': sd['personal_details'].copy(), |
| 147 | + 'passport': sd['driver_license'].copy(), |
| 148 | + 'internal_passport': sd['driver_license'].copy(), |
| 149 | + 'driver_license': sd['driver_license'].copy(), |
| 150 | + 'identity_card': sd['driver_license'].copy(), |
| 151 | + 'address': sd['address'].copy(), |
| 152 | + 'utility_bill': sd['utility_bill'].copy(), |
| 153 | + 'bank_statement': sd['utility_bill'].copy(), |
| 154 | + 'rental_agreement': sd['utility_bill'].copy(), |
| 155 | + 'passport_registration': sd['utility_bill'].copy(), |
| 156 | + 'temporary_registration': sd['utility_bill'].copy(), |
| 157 | + } |
| 158 | + |
| 159 | + assert isinstance(PassportData.de_json({ |
| 160 | + 'data': all_passport_data, |
| 161 | + 'credentials': credentials |
| 162 | + }, bot=bot), PassportData) |
0 commit comments