Skip to content

Commit 50c9376

Browse files
committed
Add proper passportdata decryption tests
1 parent b3f4de2 commit 50c9376

File tree

3 files changed

+170
-5
lines changed

3 files changed

+170
-5
lines changed

tests/conftest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636

3737
# THIS KEY IS OBVIOUSLY COMPROMISED
3838
# DO NOT USE IN PRODUCTION!
39-
PRIVATE_KEY = b"-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEA0AvEbNaOnfIL3GjB8VI4M5IaWe+GcK8eSPHkLkXREIsaddum\nwPBm/+w8lFYdnY+O06OEJrsaDtwGdU//8cbGJ/H/9cJH3dh0tNbfszP7nTrQD+88\nydlcYHzClaG8G+oTe9uEZSVdDXj5IUqR0y6rDXXb9tC9l+oSz+ShYg6+C4grAb3E\nSTv5khZ9Zsi/JEPWStqNdpoNuRh7qEYc3t4B/a5BH7bsQENyJSc8AWrfv+drPAEe\njQ8xm1ygzWvJp8yZPwOIYuL+obtANcoVT2G2150Wy6qLC0bD88Bm40GqLbSazueC\nRHZRug0B9rMUKvKc4FhG4AlNzBCaKgIcCWEqKwIDAQABAoIBACcIjin9d3Sa3S7V\nWM32JyVF3DvTfN3XfU8iUzV7U+ZOswA53eeFM04A/Ly4C4ZsUNfUbg72O8Vd8rg/\n8j1ilfsYpHVvphwxaHQlfIMa1bKCPlc/A6C7b2GLBtccKTbzjARJA2YWxIaqk9Nz\nMjj1IJK98i80qt29xRnMQ5sqOO3gn2SxTErvNchtBiwOH8NirqERXig8VCY6fr3n\nz7ZImPU3G/4qpD0+9ULrt9x/VkjqVvNdK1l7CyAuve3D7ha3jPMfVHFtVH5gqbyp\nKotyIHAyD+Ex3FQ1JV+H7DkP0cPctQiss7OiO9Zd9C1G2OrfQz9el7ewAPqOmZtC\nKjB3hUECgYEA/4MfKa1cvaCqzd3yUprp1JhvssVkhM1HyucIxB5xmBcVLX2/Kdhn\nhiDApZXARK0O9IRpFF6QVeMEX7TzFwB6dfkyIePsGxputA5SPbtBlHOvjZa8omMl\nEYfNa8x/mJkvSEpzvkWPascuHJWv1cEypqphu/70DxubWB5UKo/8o6cCgYEA0HFy\ncgwPMB//nltHGrmaQZPFT7/Qgl9ErZT3G9S8teWY4o4CXnkdU75tBoKAaJnpSfX3\nq8VuRerF45AFhqCKhlG4l51oW7TUH50qE3GM+4ivaH5YZB3biwQ9Wqw+QyNLAh/Q\nnS4/Wwb8qC9QuyEgcCju5lsCaPEXZiZqtPVxZd0CgYEAshBG31yZjO0zG1TZUwfy\nfN3euc8mRgZpSdXIHiS5NSyg7Zr8ZcUSID8jAkJiQ3n3OiAsuq1MGQ6kNa582kLT\nFPQdI9Ea8ahyDbkNR0gAY9xbM2kg/Gnro1PorH9PTKE0ekSodKk1UUyNrg4DBAwn\nqE6E3ebHXt/2WmqIbUD653ECgYBQCC8EAQNX3AFegPd1GGxU33Lz4tchJ4kMCNU0\nN2NZh9VCr3nTYjdTbxsXU8YP44CCKFG2/zAO4kymyiaFAWEOn5P7irGF/JExrjt4\nibGy5lFLEq/HiPtBjhgsl1O0nXlwUFzd7OLghXc+8CPUJaz5w42unqT3PBJa40c3\nQcIPdQKBgBnSb7BcDAAQ/Qx9juo/RKpvhyeqlnp0GzPSQjvtWi9dQRIu9Pe7luHc\nm1Img1EO1OyE3dis/rLaDsAa2AKu1Yx6h85EmNjavBqP9wqmFa0NIQQH8fvzKY3/\nP8IHY6009aoamLqYaexvrkHVq7fFKiI6k8myMJ6qblVNFv14+KXU\n-----END RSA PRIVATE KEY-----" # noqa: E501
39+
PRIVATE_KEY = b"-----BEGIN RSA PRIVATE KEY-----\r\nMIIEowIBAAKCAQEA0AvEbNaOnfIL3GjB8VI4M5IaWe+GcK8eSPHkLkXREIsaddum\r\nwPBm/+w8lFYdnY+O06OEJrsaDtwGdU//8cbGJ/H/9cJH3dh0tNbfszP7nTrQD+88\r\nydlcYHzClaG8G+oTe9uEZSVdDXj5IUqR0y6rDXXb9tC9l+oSz+ShYg6+C4grAb3E\r\nSTv5khZ9Zsi/JEPWStqNdpoNuRh7qEYc3t4B/a5BH7bsQENyJSc8AWrfv+drPAEe\r\njQ8xm1ygzWvJp8yZPwOIYuL+obtANcoVT2G2150Wy6qLC0bD88Bm40GqLbSazueC\r\nRHZRug0B9rMUKvKc4FhG4AlNzBCaKgIcCWEqKwIDAQABAoIBACcIjin9d3Sa3S7V\r\nWM32JyVF3DvTfN3XfU8iUzV7U+ZOswA53eeFM04A/Ly4C4ZsUNfUbg72O8Vd8rg/\r\n8j1ilfsYpHVvphwxaHQlfIMa1bKCPlc/A6C7b2GLBtccKTbzjARJA2YWxIaqk9Nz\r\nMjj1IJK98i80qt29xRnMQ5sqOO3gn2SxTErvNchtBiwOH8NirqERXig8VCY6fr3n\r\nz7ZImPU3G/4qpD0+9ULrt9x/VkjqVvNdK1l7CyAuve3D7ha3jPMfVHFtVH5gqbyp\r\nKotyIHAyD+Ex3FQ1JV+H7DkP0cPctQiss7OiO9Zd9C1G2OrfQz9el7ewAPqOmZtC\r\nKjB3hUECgYEA/4MfKa1cvaCqzd3yUprp1JhvssVkhM1HyucIxB5xmBcVLX2/Kdhn\r\nhiDApZXARK0O9IRpFF6QVeMEX7TzFwB6dfkyIePsGxputA5SPbtBlHOvjZa8omMl\r\nEYfNa8x/mJkvSEpzvkWPascuHJWv1cEypqphu/70DxubWB5UKo/8o6cCgYEA0HFy\r\ncgwPMB//nltHGrmaQZPFT7/Qgl9ErZT3G9S8teWY4o4CXnkdU75tBoKAaJnpSfX3\r\nq8VuRerF45AFhqCKhlG4l51oW7TUH50qE3GM+4ivaH5YZB3biwQ9Wqw+QyNLAh/Q\r\nnS4/Wwb8qC9QuyEgcCju5lsCaPEXZiZqtPVxZd0CgYEAshBG31yZjO0zG1TZUwfy\r\nfN3euc8mRgZpSdXIHiS5NSyg7Zr8ZcUSID8jAkJiQ3n3OiAsuq1MGQ6kNa582kLT\r\nFPQdI9Ea8ahyDbkNR0gAY9xbM2kg/Gnro1PorH9PTKE0ekSodKk1UUyNrg4DBAwn\r\nqE6E3ebHXt/2WmqIbUD653ECgYBQCC8EAQNX3AFegPd1GGxU33Lz4tchJ4kMCNU0\r\nN2NZh9VCr3nTYjdTbxsXU8YP44CCKFG2/zAO4kymyiaFAWEOn5P7irGF/JExrjt4\r\nibGy5lFLEq/HiPtBjhgsl1O0nXlwUFzd7OLghXc+8CPUJaz5w42unqT3PBJa40c3\r\nQcIPdQKBgBnSb7BcDAAQ/Qx9juo/RKpvhyeqlnp0GzPSQjvtWi9dQRIu9Pe7luHc\r\nm1Img1EO1OyE3dis/rLaDsAa2AKu1Yx6h85EmNjavBqP9wqmFa0NIQQH8fvzKY3/\r\nP8IHY6009aoamLqYaexvrkHVq7fFKiI6k8myMJ6qblVNFv14+KXU\r\n-----END RSA PRIVATE KEY-----" # noqa: E501
4040

4141

4242
@pytest.fixture(scope='session')

tests/test_message.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,16 @@
1616
#
1717
# You should have received a copy of the GNU Lesser Public License
1818
# along with this program. If not, see [http://www.gnu.org/licenses/].
19+
from copy import deepcopy
1920
from datetime import datetime
2021

2122
import pytest
2223

2324
from telegram import ParseMode
2425
from telegram import (Update, Message, User, MessageEntity, Chat, Audio, Document,
2526
Game, PhotoSize, Sticker, Video, Voice, VideoNote, Contact, Location, Venue,
26-
Invoice, SuccessfulPayment, PassportData, EncryptedCredentials)
27+
Invoice, SuccessfulPayment, PassportData)
28+
from tests.test_passport import RAW_PASSPORT_DATA
2729

2830

2931
@pytest.fixture(scope='class')
@@ -85,9 +87,7 @@ def message(bot):
8587
{'photo': [PhotoSize('photo_id', 50, 50)],
8688
'caption': 'photo_file',
8789
'media_group_id': 1234443322222},
88-
{'passport_data': PassportData([], EncryptedCredentials('secret',
89-
'hash',
90-
'data'))}
90+
'PASSPORT'
9191
],
9292
ids=['forwarded_user', 'forwarded_channel', 'reply', 'edited', 'text',
9393
'caption_entities', 'audio', 'document', 'game', 'photo', 'sticker', 'video',
@@ -98,6 +98,9 @@ def message(bot):
9898
'forward_signature', 'author_signature', 'photo_from_media_group',
9999
'passport_data'])
100100
def message_params(bot, request):
101+
if request.param == 'PASSPORT': # We need a bot to decrypt stuff
102+
request.param = {'passport_data': PassportData.de_json(deepcopy(RAW_PASSPORT_DATA),
103+
bot=bot)}
101104
return Message(message_id=TestMessage.id,
102105
from_user=TestMessage.from_user,
103106
date=TestMessage.date,

tests/test_passport.py

Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
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

Comments
 (0)