diff --git a/.gitignore b/.gitignore index 5c000e3..137472a 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,12 @@ /.mypy_cache/ /dist/ /venv/ +/.idea/ +/tests/.pytest_cache +/tests/__pycache__/ +/tests/api_tests.py +/tests/data.json +/tests/data.py +/tests/data_responses.py +/inpost/static/__pycache__/ +/inpost/__pycache__/ diff --git a/tests/static_tests.py b/tests/static_tests.py new file mode 100644 index 0000000..f34fcd3 --- /dev/null +++ b/tests/static_tests.py @@ -0,0 +1,8 @@ +import asyncio + +import data +import data_responses +import pytest +import pytest_mock + +from inpost.static.parcels import Parcel diff --git a/tests/test_data.py b/tests/test_data.py new file mode 100644 index 0000000..ca1f785 --- /dev/null +++ b/tests/test_data.py @@ -0,0 +1,386 @@ +courier_parcel = { + "shipmentNumber": "954928772800409758129169", + "shipmentType": "courier", + "pickUpDate": "2022-12-13T11:20:59.000Z", + "parcelSize": "OTHER", + "receiver": {"email": "john@doe.com", "phoneNumber": "594244881", "name": "John Doe"}, + "sender": {"name": "Blueboat Trade Bulik J\\u00f3\\u017awiak sp.j."}, + "endOfWeekCollection": False, + "operations": { + "manualArchive": True, + "autoArchivableSince": "2022-12-13T11:20:59.000Z", + "delete": True, + "collect": False, + "expandAvizo": False, + "highlight": False, + "refreshUntil": "2023-01-23T15:16:38.395Z", + "requestEasyAccessZone": "DISALLOWED", + "voicebot": True, + "canShareToObserve": False, + "canShareOpenCode": False, + "canShareParcel": False, + }, + "status": "DELIVERED", + "eventLog": [ + {"type": "PARCEL_STATUS", "name": "DELIVERED", "date": "2022-12-13T11:20:59.000Z"}, + {"type": "PARCEL_STATUS", "name": "OUT_FOR_DELIVERY_TO_ADDRESS", "date": "2022-12-13T06:41:09.000Z"}, + {"type": "PARCEL_STATUS", "name": "ADOPTED_AT_SOURCE_BRANCH", "date": "2022-12-13T05:05:03.000Z"}, + {"type": "PARCEL_STATUS", "name": "SENT_FROM_SOURCE_BRANCH", "date": "2022-12-12T17:10:33.000Z"}, + {"type": "PARCEL_STATUS", "name": "ADOPTED_AT_SOURCE_BRANCH", "date": "2022-12-12T15:26:03.000Z"}, + {"type": "PARCEL_STATUS", "name": "COLLECTED_FROM_SENDER", "date": "2022-12-12T13:52:57.000Z"}, + {"type": "PARCEL_STATUS", "name": "CONFIRMED", "date": "2022-12-09T15:16:04.000Z"}, + ], + "avizoTransactionStatus": "NONE", + "sharedTo": [], + "ownershipStatus": "OWN", +} +parcel_locker = { + "shipmentNumber": "991798006092038618752844", + "shipmentType": "parcel", + "openCode": "465649", + "qrCode": "P|524507211|465649", + "storedDate": "2022-11-30T06:55:08.000Z", + "pickUpDate": "2022-11-30T13:00:46.000Z", + "parcelSize": "B", + "receiver": {"email": "john@doe.com", "phoneNumber": "524507211", "name": "john@doe.com"}, + "sender": {"name": "Wrapster Sp. z o.o."}, + "pickUpPoint": { + "name": "WRO23A", + "location": {"latitude": 51.0775, "longitude": 17.04745}, + "locationDescription": "Przy Centrum Handlowym Gaj", + "openingHours": "24/7", + "addressDetails": { + "postCode": "50-559", + "city": "Wroc\\u0142aw", + "province": "dolno\\u015bl\\u0105skie", + "street": "\\u015awieradowska", + "buildingNumber": "70", + }, + "virtual": 0, + "pointType": "PL", + "type": ["parcel_locker"], + "location247": True, + "doubled": False, + "imageUrl": "https://static.easypack24.net/points/pl/images/WRO23A.jpg", + "easyAccessZone": True, + "airSensor": True, + "airSensorData": { + "updatedUntil": "2022-11-30T06:55:08.000Z", + "airQuality": "good", + "temperature": 25.2, + "humidity": 35.3, + "pressure": 1020.5, + "pollutants": { + "pm25": { + "value": 25.2, + "percent": 30.5, + }, + "pm10": { + "value": 25.2, + "percent": 30.5, + }, + }, + }, + }, + "endOfWeekCollection": False, + "operations": { + "manualArchive": True, + "autoArchivableSince": "2022-11-30T13:00:46.000Z", + "delete": True, + "collect": False, + "expandAvizo": False, + "highlight": False, + "refreshUntil": "2023-01-13T12:51:55.329Z", + "requestEasyAccessZone": "DISALLOWED", + "voicebot": True, + "canShareToObserve": False, + "canShareOpenCode": False, + "canShareParcel": False, + }, + "status": "DELIVERED", + "eventLog": [ + {"type": "PARCEL_STATUS", "name": "DELIVERED", "date": "2022-11-30T13:00:46.000Z"}, + {"type": "PARCEL_STATUS", "name": "READY_TO_PICKUP", "date": "2022-11-30T06:55:08.000Z"}, + {"type": "PARCEL_STATUS", "name": "OUT_FOR_DELIVERY", "date": "2022-11-30T05:20:16.000Z"}, + {"type": "PARCEL_STATUS", "name": "ADOPTED_AT_SOURCE_BRANCH", "date": "2022-11-30T02:00:41.000Z"}, + {"type": "PARCEL_STATUS", "name": "SENT_FROM_SOURCE_BRANCH", "date": "2022-11-29T19:24:41.000Z"}, + {"type": "PARCEL_STATUS", "name": "ADOPTED_AT_SOURCE_BRANCH", "date": "2022-11-29T18:18:05.000Z"}, + {"type": "PARCEL_STATUS", "name": "COLLECTED_FROM_SENDER", "date": "2022-11-29T13:04:14.000Z"}, + {"type": "PARCEL_STATUS", "name": "CONFIRMED", "date": "2022-11-29T12:51:55.000Z"}, + ], + "avizoTransactionStatus": "NONE", + "sharedTo": [], + "ownershipStatus": "OWN", +} +parcel_locker_multi = { + "shipmentNumber": "687100956250559114549363", + "shipmentType": "parcel", + "openCode": "288432", + "qrCode": "P|794654933|288432", + "storedDate": "2022-12-08T09:13:15.000Z", + "pickUpDate": "2022-12-08T20:22:35.000Z", + "parcelSize": "A", + "receiver": { + "email": "ksvnlnbhmm+10a9590d7@allegromail.pl", + "phoneNumber": "794654933", + "name": "ksvnlnbhmm+10a9590d7@allegromail.pl", + }, + "sender": {"name": "RRMOTO.PL"}, + "pickUpPoint": { + "name": "WRO23A", + "location": {"latitude": 51.0775, "longitude": 17.04745}, + "locationDescription": "Przy Centrum Handlowym Gaj", + "openingHours": "24/7", + "addressDetails": { + "postCode": "50-559", + "city": "Wroc\\u0142aw", + "province": "dolno\\u015bl\\u0105skie", + "street": "\\u015awieradowska", + "buildingNumber": "70", + }, + "virtual": 0, + "pointType": "PL", + "type": ["parcel_locker"], + "location247": True, + "doubled": False, + "imageUrl": "https://static.easypack24.net/points/pl/images/WRO23A.jpg", + "easyAccessZone": True, + "airSensor": False, + }, + "multiCompartment": {"uuid": "ae863297-112a-4b6e-8c79-61aeda7ee540", "presentation": False, "collected": True}, + "endOfWeekCollection": False, + "operations": { + "manualArchive": True, + "autoArchivableSince": "2022-12-08T20:22:35.000Z", + "delete": True, + "collect": False, + "expandAvizo": False, + "highlight": False, + "refreshUntil": "2023-01-21T08:45:55.385Z", + "requestEasyAccessZone": "DISALLOWED", + "voicebot": True, + "canShareToObserve": False, + "canShareOpenCode": False, + "canShareParcel": False, + }, + "status": "DELIVERED", + "eventLog": [ + {"type": "PARCEL_STATUS", "name": "DELIVERED", "date": "2022-12-08T20:22:35.000Z"}, + {"type": "PARCEL_STATUS", "name": "READY_TO_PICKUP", "date": "2022-12-08T09:13:15.000Z"}, + {"type": "PARCEL_STATUS", "name": "OUT_FOR_DELIVERY", "date": "2022-12-08T05:43:59.000Z"}, + {"type": "PARCEL_STATUS", "name": "ADOPTED_AT_SOURCE_BRANCH", "date": "2022-12-08T03:24:30.000Z"}, + {"type": "PARCEL_STATUS", "name": "SENT_FROM_SOURCE_BRANCH", "date": "2022-12-07T18:38:23.000Z"}, + {"type": "PARCEL_STATUS", "name": "ADOPTED_AT_SOURCE_BRANCH", "date": "2022-12-07T16:31:53.000Z"}, + {"type": "PARCEL_STATUS", "name": "COLLECTED_FROM_SENDER", "date": "2022-12-07T14:52:42.000Z"}, + {"type": "PARCEL_STATUS", "name": "CONFIRMED", "date": "2022-12-07T08:45:55.000Z"}, + ], + "avizoTransactionStatus": "NONE", + "sharedTo": [], + "ownershipStatus": "OWN", +} +parcel_locker_multi_main = { + "shipmentNumber": "662025956250559113851741", + "shipmentType": "parcel", + "openCode": "250162", + "qrCode": "P|794654933|250162", + "storedDate": "2022-12-08T09:13:15.000Z", + "pickUpDate": "2022-12-08T20:22:35.000Z", + "parcelSize": "A", + "receiver": { + "email": "d38tp3wvmr+34f6eefb7@allegromail.pl", + "phoneNumber": "794654933", + "name": "d38tp3wvmr+34f6eefb7@allegromail.pl", + }, + "sender": {"name": "TM Products Tomasz Mali\\u0144ski"}, + "pickUpPoint": { + "name": "WRO23A", + "location": {"latitude": 51.0775, "longitude": 17.04745}, + "locationDescription": "Przy Centrum Handlowym Gaj", + "openingHours": "24/7", + "addressDetails": { + "postCode": "50-559", + "city": "Wroc\\u0142aw", + "province": "dolno\\u015bl\\u0105skie", + "street": "\\u015awieradowska", + "buildingNumber": "70", + }, + "virtual": 0, + "pointType": "PL", + "type": ["parcel_locker"], + "location247": True, + "doubled": False, + "imageUrl": "https://static.easypack24.net/points/pl/images/WRO23A.jpg", + "easyAccessZone": True, + "airSensor": True, + "airSensorData": { + "updatedUntil": "2022-11-30T06:55:08.000Z", + "airQuality": "good", + "temperature": 25.2, + "humidity": 35.3, + "pressure": 1020.5, + "pollutants": { + "pm25": { + "value": 25.2, + "percent": 30.5, + }, + "pm10": { + "value": 25.2, + "percent": 30.5, + }, + }, + }, + }, + "multiCompartment": { + "uuid": "ae863297-112a-4b6e-8c79-61aeda7ee540", + "shipmentNumbers": [ + "614500956250559117908538", + "690768956250559116536063", + "687100956250559114549363", + "662025956250559113851741", + ], + "presentation": False, + "collected": True, + }, + "endOfWeekCollection": False, + "operations": { + "manualArchive": True, + "autoArchivableSince": "2022-12-08T20:22:35.000Z", + "delete": True, + "collect": False, + "expandAvizo": False, + "highlight": False, + "refreshUntil": "2023-01-21T05:35:37.816Z", + "requestEasyAccessZone": "DISALLOWED", + "voicebot": True, + "canShareToObserve": False, + "canShareOpenCode": False, + "canShareParcel": False, + }, + "status": "DELIVERED", + "eventLog": [ + {"type": "PARCEL_STATUS", "name": "DELIVERED", "date": "2022-12-08T20:22:35.000Z"}, + {"type": "PARCEL_STATUS", "name": "READY_TO_PICKUP", "date": "2022-12-08T09:13:15.000Z"}, + {"type": "PARCEL_STATUS", "name": "OUT_FOR_DELIVERY", "date": "2022-12-08T05:43:59.000Z"}, + {"type": "PARCEL_STATUS", "name": "ADOPTED_AT_SOURCE_BRANCH", "date": "2022-12-08T02:00:13.000Z"}, + {"type": "PARCEL_STATUS", "name": "SENT_FROM_SOURCE_BRANCH", "date": "2022-12-07T16:11:23.000Z"}, + {"type": "PARCEL_STATUS", "name": "ADOPTED_AT_SOURCE_BRANCH", "date": "2022-12-07T12:57:17.000Z"}, + {"type": "PARCEL_STATUS", "name": "COLLECTED_FROM_SENDER", "date": "2022-12-07T12:53:51.000Z"}, + {"type": "PARCEL_STATUS", "name": "CONFIRMED", "date": "2022-12-07T05:35:37.000Z"}, + ], + "avizoTransactionStatus": "NONE", + "sharedTo": [], + "ownershipStatus": "OWN", +} + +parcel_properties = { + "sessionUuid": "426b2d3f-68ef-418e-b38b-ab1395bd0797", + "sessionExpirationTime": 40000, + "compartment": {"name": "3R1", "location": {"side": "R", "column": "2", "row": "1"}}, + "openCompartmentWaitingTime": 37000, + "actionTime": 25000, + "confirmActionTime": 50000, +} + +qr_result = ( + b"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x02\xe4\x00\x00\x02\xe4\x01\x00\x00\x00\x00o\xdf\x1d\xc8" + b"\x00\x00\x03\x95IDATx\x9c\xed\xddK\x92\x9b0\x10\x00\xd0V*{\xb8A\xee\x7f\xac\xb9\x01\x9c@Y\xf0\xd1\x07<" + b"\x13\xc7\x9e\x94\x89_/\x98\x11\x86\xb7\xd0F%Zj\xa5\x1c\xdf\x17\xf3\x8fo\xc4#\xe8t:\x9dN\xa7\xd3\xe9t:" + b"\x9dN\xa7\xd3\xe9t:\x9dN\xa7\xd3\xe9t:\xfd_\xea\x91\xf78\xfc4\xac\xf7r\x9e\xeaf\xf7\xee\xd9kkLW\xee\x19" + b":\x9dN\xa7\xd3\x1f\xd4\xcb\x88\x98\xeb!5\xa5\xb1~\xea0\x9a\x1e_;\xd5\x9f\x1et:\x9dN\xa7\xbf\xba\x9e\x96" + b"\x18\xf7\xe6\xaf\x93\x19i\x1c\x06\xdc\xee\xb5[\xfas\x83N\xa7\xd3\xe9\xf4W\xd3\x7f~\xfes\x8e9E\x8e\x88Hk" + b"s\x8c\x88y\\\xee}\xb9G\xe7\xca=C\xa7\xd3\xe9t\xfa\xfd\xf1\xc5\xb8\x9ab\xc8\xcb\x90\x1a\xcb\x08;\xe4\x88" + b"\xe5\xf2'q\xe5\x9e\xa1\xd3\xe9t:\xfd\xfe\xe8\xc7\xd5\xdc7\xe7\xd4\xbf\x92b\x98\xb6\x01w\x98N_\xdb\xe2" + b"\xca=C\xa7\xd3\xe9t\xfa\x83\xfa\x9c\xaa\x88\x88=\xbf:\xac\x97c\x06\xf5\xfc\xb5S\xfd\xe9A\xa7\xd3\xe9t" + b"\xfa\xab\xe9\xd5|\xf5\xe6\xc7\xdd.\x97\x9aO.7\xe2\xca=C\xa7\xd3\xe9t\xfa\xd3\xf4y]\xdd\x9b\xf3\xc7>\x05" + b"\x9dS*\xcd\x94\xc6O._\xe8O\n:\x9dN\xa7\xd3_Mo\xf2\xab\xf3\xb8\xfc]\xe7\xa1s\x8a\xd8\xd3\xa8\xa9Z\xad" + b"\xb4\xad\x07n\xdeM\x11\xfb\xe2\xe1-\xae\xdc3t:\x9dN\xa7\xffE\xe46\xca\xbd\xa6p\xd2\xbaa\xb5~n\xd8\x1f" + b'\x99"\xeaf\x89\xe9\xca=C\xa7\xd3\xe9t\xfa\xfdq:_]g\xa4\xcb|uZ\xf6\xd9\xac\xf3\xd5f\xaa\x9a\xab\xbd7q' + b"\x96i\xbdr\xcf\xd0\xe9t:\x9d\xfe\x90\xbe&T\xa7\xb6\xf9\x91\xd2:A\x9d\xebLki\xd6\t\xd5--{\xa2\x7fC\xd0" + b"\xe9t:\x9d\xfe\xc2z\x19RK\xb3^\x8a4\xec_\x7f\x8f\x0f\xabcH\xa7\xd3\xe9tz\xc4!eZ'OK\x0cu\xe2\xf5\xfc\xe1" + b"-\xd3*\xbfJ\xa7\xd3\xe9\xf47\xd6O\xcf\x89+\x03d=|F\xdc8\xcafZ\xff;,^2\xae\xd2\xe9t:\xfd\xcd\xf4c}\xe0" + b"a\x8a\xa8\x8a\x146[gJ5\xa5\xee^\xa9wh\x9f\r\x9dN\xa7\xd3\xdfX\xbf]\x1f8\xb7Cj\xb7\xd8w\xdb\xd3:\xb5\xa7" + b"\xdd\xd8\xbfJ\xa7\xd3\xe9\xf4\xb7\xd6\xfb\xef\xc0\x87\xdd\xa8S\xfb\xf0t\xfe\xe5\xd8w`:\x9dN\xa7\xd3\xa3" + b"\x9b\xaf\x96sj\xe2\xd6Q6\xb1OU\xb77\xba2MM\\\xb9g\xe8t:\x9dN\xbf?\x8e\xdf\x81\xe7T\x950,\x85 \xd2\xe1" + b"\x911\xa2\x1az\xe5W\xe9t:\x9dN?9\xcf\xa69\xb9\xbc\x9e\xbeFT\x07\xae\xae\xb15\x0f3\xdb%\xae\xdc3t:\x9dN" + b"\xa7?\xa4\xa7>\xc6=\xa1:\xed\x0f\xcd\xa9\x1fBK5\x88.\x19\x1b\xffM\xcf\xd0\xe9t:\x9d\xfe\x87\xd1\xe7WK" + b"\xa4\xfd\xb2\xce]\x97\x9a\xc1cU.\xb8\xfeu\xdb\x9e\xd3\xc4\x95{\x86N\xa7\xd3\xe9\xf4\xfb\xa3\xcf\xaf\xd6" + b'\xeb\x91"\xaa\x814\xfa\x81t;\x18\xee\xb3\xb8r\xcf\xd0\xe9t:\x9d\xfe=\xfaZ)8\xa5\xd4U\xe5\xaf\xab\x17' + b"~\xd4\xb5\xf8\xef\xd1\xff>\xe8t:\x9dN\x7f5\xfdXo\xa9\x8bm\x19S\xaaO\x8c\x9b\x96\xdf\xb6\xb5L\xb9\xfa," + b"\xdc\xc4\x95{\x86N\xa7\xd3\xe9\xf4\xc7\xf5\xad\xa2\xc3~c^\x171u+\x98\xcai7\xa5\x191\xe4\xec\x9c8:\x9d" + b"N\xa7\xbf\xb1\xde\x9ek\xfei\xb6t\x1e\xa3$YS{\x9a\xf9Y\xe1\xe0\xb8v\xcf\xd0\xe9t:\x9d~\x7f\xa4c\x91\xa4" + b"\xe7\xc5|\xe5\x9e\xa1\xd3\xe9t:\x9dN\xa7\xd3\xe9t:\x9dN\xa7\xd3\xe9t:\x9dN\xa7\xd3\xe9\xf46~\x03\x0f" + b"\xb5\t\xa2\xca\nmu\x00\x00\x00\x00IEND\xaeB`\x82" +) + +qr_result_multi = ( + b"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x02\xe4\x00\x00\x02\xe4\x01\x00\x00\x00\x00o\xdf" + b"\x1d\xc8\x00\x00\x03\x85IDATx\x9c\xed\xddM\x92\x9b0\x10\x06\xd0V*{|\xff\xdb\xe5\x06\xe6\x04\xca" + b"\x02a\xfd\x80+\xc1\x99IF\xf1\xfb\x16\x8e1\xf0*\xa5\x8dJ\xa0\xeeI9>/\xeb\xb7O\xc4#\xe8t:\x9dN\xa7" + b"\xd3\xe9t:\x9dN\xa7\xd3\xe9t:\x9dN\xa7\xd3\xe9t:\xfd\x1f\xe9i\xcc\xad\xfc\x16\xb1\x96\xc3\x92" + b"\xb5\\\xf0\xf4\xb6\xbf\xfe\x7f\xa7\xd3\xe9t:\xfd\xeb\xe9Kn\x12\x11\x119\xdf\xcb\xb9\x9c\x7f\x94" + b"\x19\xf6`\x1co;\xd5?ve\xe6\x91\xa1\xd3\xe9" + b"t:\xfdz\x8e\xfb\x81\xd7[D\xa9\xa4y<\xd4]\xee\xdbK\xd6\xdc\x7f\x0c\xa9k\xd8=3\x8f\x0c\x9dN\xa7\xd3" + b"\xe9\xd7\xd3\xcc\xab\xe91}F\xfb\xe0\xf76~K\xfd\x0e\xa6v\x9a]\x86\xe9v\xe6\x91\xa1\xd3\xe9t:\xfd" + b"\x85\x0cO\x7f\x0f\x1f]\xca\x1d\xdd\x89\xc3\xd3\xdf\xc6\x9byd\xe8t:\x9dN\x7f!\x87\x0e\x84K[\xab:" + b"|k\x8bX\xeb\xd9\xe6\x85\xeap8\xf3\xc8\xd0\xe9t:\x9d~='\xefWKo\xa5x<\xf8-\xa5\xabK\x8e\xe8;\x1a" + b"\xd6\x1c\x9b\x06G\xc4\xdc#C\xa7\xd3\xe9t\xfa\xf5<\xefcX\xbb\x02\x1f\x9aCl[\x9b\xee{s\x88\xee\x84" + b"}Kt:\x9dN\x7fc\xbd\x9bW\x87m\xbfk\x8a\xdc\xac\\\xb7\x99\xb3\xfcV\x17\xa8\xb5\xba5\xd9\xb7D\xa7" + b"\xd3\xe9\xf47\xd7\xbb\xbe\x10\xb5L\xa6\x16\xdbtg\xa39\xbb_\x9c\x9a\xb3\xeal\xe8t:\x9d\xfe\xdez_g" + b"\x93\xf7Y\xb2\x9bRS\xf3j\xb5\x96\xddD\xa9\xb8\xc9\xfd\xbd]f\x1e\x19:\x9dN\xa7\xd3_\xc8\xa1\x88" + b"\xa6\x96\xceD[S3\x94\xd3\x1c\x1a,\xdd#\xf4[\xa2\xd3\xe9t\xfa\xbb\xebc!\xea\xa1\x92\xb5\xabZ\x1d" + b"\xbeU`\x98p\xcd\xabt:\x9dN\x7fO}\xdc\x0f\xbc\xef\xee\xcd\xe3_\x82\xfbU\x89M\xed\xd0\xd4d\xe6\x91" + b"\xa1\xd3\xe9t:\xfd\x85\x9c\xb4IjR.\xea\x1e\xf7\x9e\xf5\x808\xf7\xacW\xe9t:\x9d\xfefz\xb7oi\xc8r" + b"\xdf\xba\x02\xe7~\xef\xefP\xa6:\xb4\x0b\xee2\xf3\xc8\xd0\xe9t:\x9d~=c\xfdjM:\xf9\x88\xfe\xb1p-v" + b"\x8d\xf3\xc9u\xe6\x91\xa1\xd3\xe9t:\xfdz\x9e\xbd_\xbdo\xff\xb6\x15\xaa\x11\x91\x0e+\xd7'\r\x0cKf" + b"\x1e\x19:\x9dN\xa7\xd3?G/\xefR\xd7\x94\x9e\xfc\xf9\xf2\x88\x9c\x7f\xa4T.\xb9\xa8\xbf\x1e:\x9dN" + b"\xa7\xd3\xbf\x9a\xfe\xbc?p\xcdaM:\xbcs\xdd7\x0f\x1f3\xf3\xc8\xd0\xe9t:\x9d~=\xe3\xbcz\x98\x1d\x87" + b"V\xfa]\x7f\xe0\xf4\xe8\x19\x1c\xe5\xb0\xaf\xcc\x99zd\xe8t:\x9dN\xbf\x9en^={[Z\xd7\xa1C\xfdj\xf7\n" + b"V\xfd*\x9dN\xa7\xd3\xe9\x11\x91\xce\x1e\xdf~T\xd6\x99G\x86N\xa7\xd3\xe9t:\x9dN\xa7\xd3\xe9t:\x9dN" + b"\xa7\xd3\xe9t:\x9dN\xa7\xd3\xfb\xfc\x04@\xc6C\xc0\xb4\x1e\xf6\xfb\x00\x00\x00\x00IEND\xaeB`\x82" +) + +qr_result_multi_main = ( + b"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x02\xe4\x00\x00\x02\xe4\x01\x00\x00\x00\x00o\xdf" + b"\x1d\xc8\x00\x00\x03\x8fIDATx\x9c\xed\xddA\x92\xa38\x10\x00\xc0\xd2\xc6\xde\xe1\x07\xf3\xffg" + b"\xcd\x0f\xe0\x05\xda\x83\x85\x11\x92\xd8i\xbb\xbbg\xcc8\xeb@t#\x94\xe1\xd0\x85\xa8B\x14)\xc7" + b"\xf7\xc5\xfa\xcf7\xe2\x11t:\x9dN\xa7\xd3\xe9t:\x9dN\xa7\xd3\xe9t:\x9dN\xa7\xd3\xe9t:\x9d\xfe" + b"\x87\xf4\xd4\xc6|?7\x1f'\xad\xe5\xf4\xe9\xb4\xdf\xfe\xdb\xe9t:\x9dN\x7f=}\xcaUDDD\xceK9\x94" + b"\x1b\xe9:\xb8\xcd\xf6\xd3\x86\xfa\x97\x07\x9dN\xa7\xd3\xe9\xaf\xae79\xe7\x9e\xb4\x96\x9b\xeb" + b'\x8f\x9c\xcb\x8dt)\xa3\xa3ig\xfa\xd7\x06\x9dN\xa7\xd3\xe9\xaf\xa6\xff\xfb\xff\xc39""\xdd\x0e' + b"S\xbe\xfd\x15\xb1\xa6\xdb\xc0/\xdf\xd1\xb9\xf2\xca\xd0\xe9t:\x9d\xfe\xe5zJsD\xa9\xf0\xfe,u" + b"\xe0\x88)\x7f\xf0\xad\xd7\xbfxe\xe8t:\x9dN\x1fD\x9b\xaf\xe6\xf6\xdf5\r\xe7\x95\xf4uZ\x86\xd3" + b"\xb6\xb8\xf2\xca\xd0\xe9t:\x9d\xfeI}\xad\xb7\xf5FD\xfd@\xb5>4\xd1O\x1b\xea_\x1et:\x9dN\xa7" + b"\xbf\x9a^\xe5\xab\xa7\xb5\xdd:i\xdd\x1f\xad~\xe4!\xeb\x95W\x86N\xa7\xd3\xe9\xf4'\"\x0fc\x89" + b"\xd8\xb7\xfd\x8e\xae\xebr\xd8\xc3aS\xae\xbc2t:\x9dN\xa7?\x1e\x87\xe7\xab\xeb\xbcm\x00\x9e" + b"\xea,4\xdfG\xe3\xfc\x81\xea\x9ab\xcff\xb7\xb8\xf2\xca\xd0\xe9t:\x9d\xfexT\xf7\xd5\xe6M\x9a" + b'\x88i\xd9^\xb1\xd9"\xdf\x07\xa2:w\x1b\x98\x07\x15\xe1+\xaf\x0c\x9dN\xa7\xd3\xe9ODW\xfd\x8d' + b'\xba\xcb\xd2^\xd5\xdd\xb7,\x95\xd1\xbe"\xdcW\x93\xaf\xbc2t:\x9dN\xa7?\x1e\x87|5"\xf6d4E\xd4' + b"\t\xea\xbeQ)\xd5\xa3\xf3\xed\xe2Q\xa98\xae\xbd2t:\x9dN\xa7\x7fJ/\t\xea\xd6\xf9aO_K\x1c\xf2" + b"\xd5&\xf41\xa4\xd3\xe9t:=b\xb0\xcf7\xceJ\xc0}\xa5\xb7\xdb\x05\xbc4u\xe5+\xaf\x0c\x9dN\xa7" + b"\xd3\xe9\x8f\xc7I\x7f\xe0)G\xd9\xdd\xbb\xce[1x{\x89\xf5\xb4%S\xb3\x8d8\xae\xbd2t:\x9dN\xa7?" + b"\x11M\xf6Y\x17y\xa7A\xfa\xba\xdc\xa7-en}I\xc8W\xe9t:\x9d\xfe\xd6\xfa\xe1\xbe::7uu\xe0rQsN" + b"\x1d\x98N\xa7\xd3\xe9\xf4A\x1dxZn\xfd\xf4\xf7\xfd\xc0\xcdV\xe0\xfd\xc5\xd6\xb8\x9f\xdb\xf6" + b'\r\xd7\xbd\xf8\xe3\xda+C\xa7\xd3\xe9t\xfa\x13\xd1\xd5\x81\xf3=\xf1\\"\xbaF\xfbM\xa98\xc6\x9b' + b"\x9c\xe4\xabt:\x9dN\x7fO\xbd\xcfWo\xef\xa0\xe6\xa8\xbfL\xb3\xa7\xa0\xfdg\xe3\xd2q@\x1fC:\x9d" + b"N\xa7\xbf\xb1\xde\x7f\xcff\xdb\xd3[\n\xbf\xfbf\xdf\xed\xdc\xb6Gx\x8e\xa6\x89D\x1fW^\x19:\x9d" + b"N\xa7\xd3?\xa5\xa76\xe6{\x95\xf8gJ\xa3n\x10e\xda\xfc\x11\xfd\x1b\x82N\xa7\xd3\xe9\xf4W\xd3" + b"\x0fu\xe0C?\xfd\xd2\xaepo\xbe\x7f\xdb\x94t\xaf\xf3n\xa5\xe2<\x98\xbb\xc5\x95W\x86N\xa7\xd3" + b"\xe9\xf4\xc7\xa3}\xbe\xda4\t\xce\xf7\xe6\x10%\xd6\x14\xb9\xfd\xee\xcdy\\ye\xe8t:\x9dN\x7f