python3-anticaptcha/tests/test_CustomCaptcha.py

202 lines
7.3 KiB
Python

import inspect
import pytest
import requests_mock
from python3_anticaptcha import CustomCaptchaTask, config
from tests.main import MainAntiCaptcha
class TestCustom(MainAntiCaptcha):
CUSTOM_TASK = "2+2=?"
"""
Params check
"""
def test_customcatpcha_params(self):
default_init_params = [
"self",
"anticaptcha_key",
"sleep_time",
"assignment",
"forms",
"callbackUrl",
]
default_handler_params = ["self", "imageUrl"]
# get customcaptcha init and captcha_handler params
aioinit_params = inspect.getfullargspec(CustomCaptchaTask.aioCustomCaptchaTask.__init__)
aiohandler_params = inspect.getfullargspec(
CustomCaptchaTask.aioCustomCaptchaTask.captcha_handler
)
# get customcaptcha init and captcha_handler params
init_params = inspect.getfullargspec(CustomCaptchaTask.CustomCaptchaTask.__init__)
handler_params = inspect.getfullargspec(
CustomCaptchaTask.CustomCaptchaTask.captcha_handler
)
# check aio module params
assert default_init_params == aioinit_params[0]
assert default_handler_params == aiohandler_params[0]
# check sync module params
assert default_init_params == init_params[0]
assert default_handler_params == handler_params[0]
def test_create_task_payload(self):
customcaptcha = CustomCaptchaTask.CustomCaptchaTask(
anticaptcha_key=self.anticaptcha_key_fail, assignment=self.CUSTOM_TASK
)
# check response type
assert isinstance(customcaptcha, CustomCaptchaTask.CustomCaptchaTask)
with requests_mock.Mocker() as req_mock:
req_mock.post(config.create_task_url, json=self.ERROR_RESPONSE_JSON)
customcaptcha.captcha_handler(imageUrl=self.image_url)
history = req_mock.request_history
assert len(history) == 1
request_payload = history[0].json()
# check all dict keys
assert ["clientKey", "task", "softId"] == list(request_payload.keys())
assert request_payload["softId"] == config.app_key
assert ["type", "assignment", "imageUrl"] == list(request_payload["task"].keys())
assert request_payload["task"]["type"] == "CustomCaptchaTask"
def test_get_result_payload(self):
customcaptcha = CustomCaptchaTask.CustomCaptchaTask(
anticaptcha_key=self.anticaptcha_key_fail, assignment=self.CUSTOM_TASK
)
# check response type
assert isinstance(customcaptcha, CustomCaptchaTask.CustomCaptchaTask)
with requests_mock.Mocker() as req_mock:
req_mock.register_uri("POST", config.create_task_url, json=self.VALID_RESPONSE_JSON)
req_mock.register_uri(
"POST", config.get_result_url, json=self.VALID_RESPONSE_RESULT_JSON
)
customcaptcha.captcha_handler(imageUrl=self.image_url)
history = req_mock.request_history
assert len(history) == 2
request_payload = history[1].json()
# check all dict keys
assert ["clientKey", "taskId"] == list(request_payload.keys())
assert request_payload["taskId"] == self.VALID_RESPONSE_JSON["taskId"]
"""
Response checking
"""
def test_response_customcaptcha(self):
customcaptcha = CustomCaptchaTask.CustomCaptchaTask(
anticaptcha_key=self.anticaptcha_key_fail, assignment=self.CUSTOM_TASK
)
# check response type
assert isinstance(customcaptcha, CustomCaptchaTask.CustomCaptchaTask)
with requests_mock.Mocker() as req_mock:
req_mock.post(config.create_task_url, json=self.ERROR_RESPONSE_JSON)
response = customcaptcha.captcha_handler(imageUrl=self.image_url)
# check response type
assert isinstance(response, dict)
# check all dict keys
assert ["errorId", "errorCode", "errorDescription"] == list(response.keys())
@pytest.mark.asyncio
async def test_response_aiocustomcaptcha(self):
customcaptcha = CustomCaptchaTask.aioCustomCaptchaTask(
anticaptcha_key=self.anticaptcha_key_fail, assignment=self.CUSTOM_TASK
)
# check response type
assert isinstance(customcaptcha, CustomCaptchaTask.aioCustomCaptchaTask)
response = await customcaptcha.captcha_handler(imageUrl=self.image_url)
# check response type
assert isinstance(response, dict)
# check all dict keys
assert ["errorId", "errorCode", "errorDescription"] == list(response.keys())
"""
Fail tests
"""
def test_fail_customcaptcha(self):
customcaptcha = CustomCaptchaTask.CustomCaptchaTask(
anticaptcha_key=self.anticaptcha_key_fail, assignment=self.CUSTOM_TASK
)
response = customcaptcha.captcha_handler(imageUrl=self.image_url)
assert 1 == response["errorId"]
def test_fail_customcaptcha_context(self):
with CustomCaptchaTask.CustomCaptchaTask(
anticaptcha_key=self.anticaptcha_key_fail, assignment=self.CUSTOM_TASK
) as customcaptcha:
response = customcaptcha.captcha_handler(imageUrl=self.image_url)
assert 1 == response["errorId"]
@pytest.mark.asyncio
async def test_fail_aiocustomcaptcha(self):
customcaptcha = CustomCaptchaTask.aioCustomCaptchaTask(
anticaptcha_key=self.anticaptcha_key_fail, assignment=self.CUSTOM_TASK
)
response = await customcaptcha.captcha_handler(imageUrl=self.image_url)
assert 1 == response["errorId"]
@pytest.mark.asyncio
async def test_fail_aiocustomcaptcha_context(self):
with CustomCaptchaTask.aioCustomCaptchaTask(
anticaptcha_key=self.anticaptcha_key_fail, assignment=self.CUSTOM_TASK
) as customcaptcha:
response = await customcaptcha.captcha_handler(imageUrl=self.image_url)
assert 1 == response["errorId"]
"""
True tests
"""
def test_true_customcaptcha(self):
customcaptcha = CustomCaptchaTask.CustomCaptchaTask(
anticaptcha_key=self.anticaptcha_key_true, assignment=self.CUSTOM_TASK
)
response = customcaptcha.captcha_handler(imageUrl=self.image_url)
assert 0 == response["errorId"]
def test_true_customcaptcha_context(self):
with CustomCaptchaTask.CustomCaptchaTask(
anticaptcha_key=self.anticaptcha_key_true, assignment=self.CUSTOM_TASK
) as customcaptcha:
response = customcaptcha.captcha_handler(imageUrl=self.image_url)
assert 0 == response["errorId"]
@pytest.mark.asyncio
async def test_true_aiocustomcaptcha(self):
customcaptcha = CustomCaptchaTask.aioCustomCaptchaTask(
anticaptcha_key=self.anticaptcha_key_true, assignment=self.CUSTOM_TASK
)
response = await customcaptcha.captcha_handler(imageUrl=self.image_url)
assert 0 == response["errorId"]
@pytest.mark.asyncio
async def test_true_aiocustomcaptcha_context(self):
with CustomCaptchaTask.aioCustomCaptchaTask(
anticaptcha_key=self.anticaptcha_key_true, assignment=self.CUSTOM_TASK
) as customcaptcha:
response = await customcaptcha.captcha_handler(imageUrl=self.image_url)
assert 0 == response["errorId"]