1+ import unittest
2+ import urllib
3+ import base64
4+ from pydantic .error_wrappers import ValidationError
5+ from capmonstercloudclient .requests import RecognitionComplexImageTaskRequest
6+ from capmonstercloudclient .exceptions import NumbersImagesErrors , TaskNotDefinedError , ZeroImagesErrors , \
7+ UserAgentNotDefinedError
8+
9+ def read_image (image_url : str ,):
10+ image_bytes = urllib .request .urlopen (image_url ).read ()
11+ return base64 .b64encode (image_bytes ).decode ('utf-8' )
12+
13+ class RecognitionCITImageRequestTest (unittest .TestCase ):
14+
15+ websiteUrlExample = 'https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=middle'
16+ imageUrlsExamples = ['https://i.postimg.cc/H8yBD5FJ/0-2.png' , 'https://i.postimg.cc/rz0hrXz8/0-0.png' ,
17+ 'https://i.postimg.cc/qgP1cbC2/0-1.png' ]
18+ imageBase64Examples = [read_image (i ) for i in imageUrlsExamples ]
19+ metadataExample = {"Task" : "oocl_rotate_double_new" }
20+
21+ def testImagesTypes (self ):
22+
23+ with self .assertRaises (ValidationError ):
24+ request = RecognitionComplexImageTaskRequest (metadata = RecognitionCITImageRequestTest .metadataExample ,
25+ imagesBase64 = '[]' )
26+
27+
28+ def testImagesFilling (self ):
29+
30+ with self .assertRaises (ZeroImagesErrors ,
31+ msg = 'Empty array imagesBase64 must be cause ZeroImagesErrors' ):
32+ request = RecognitionComplexImageTaskRequest (metadata = RecognitionCITImageRequestTest .metadataExample ,
33+ imagesBase64 = [])
34+
35+ def testAllRequiredFieldsFilling (self ):
36+ required_fields = ['class' , 'type' , 'metadata' ]
37+ metadata_fields = ['Task' ]
38+ request = RecognitionComplexImageTaskRequest (
39+ metadata = RecognitionCITImageRequestTest .metadataExample ,
40+ imagesBase64 = RecognitionCITImageRequestTest .imageBase64Examples )
41+ request_dict = request .getTaskDict ()
42+ for i in required_fields :
43+ self .assertTrue (i in list (request_dict .keys ()),
44+ msg = f'Required field { i } not in { request_dict } ' )
45+
46+ metadata_dict = request_dict ['metadata' ]
47+ for i in metadata_fields :
48+ self .assertTrue (i in list (metadata_dict .keys ()),
49+ msg = f'Required field { i } not in { request_dict } ' )
50+
51+ self .assertEqual (request_dict ['class' ], 'recognition' )
52+ self .assertEqual (request_dict ['type' ], 'ComplexImageTask' )
53+
54+ def testTaskDefined (self ):
55+ with self .assertRaises (TaskNotDefinedError ,
56+ msg = 'Expect that empty "Task" field will be cause TaskNotDefinedError' ):
57+ request = RecognitionComplexImageTaskRequest (metadata = {},
58+ imagesBase64 = RecognitionCITImageRequestTest .imageBase64Examples )
59+
60+ with self .assertRaises (TaskNotDefinedError ):
61+ request = RecognitionComplexImageTaskRequest (metadata = {'dsfsdf' : 'sdfsdf' },
62+ imagesUrls = RecognitionCITImageRequestTest .imageUrlsExamples )
63+
64+ def testExtraMetadata (self ):
65+ with self .assertRaises (TypeError ,
66+ msg = 'Expect that extra metadata fields will be cause TypeError' ):
67+ request = RecognitionComplexImageTaskRequest (metadata = {"Task" : "oocl_rotate_new" , 'asd' : 'asd' },
68+ imagesBase64 = RecognitionCITImageRequestTest .imageBase64Examples )
69+
70+ if __name__ == '__main__' :
71+ unittest .main ()
0 commit comments