From ced6fb2bf7c66863c8590c7f47572b84bbd0a1b5 Mon Sep 17 00:00:00 2001 From: Andrei Date: Tue, 17 Dec 2024 01:50:30 +0300 Subject: [PATCH] Create test_recaptcha_v3.py --- tests/test_recaptcha_v3.py | 139 +++++++++++++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 tests/test_recaptcha_v3.py diff --git a/tests/test_recaptcha_v3.py b/tests/test_recaptcha_v3.py new file mode 100644 index 0000000..dd776d6 --- /dev/null +++ b/tests/test_recaptcha_v3.py @@ -0,0 +1,139 @@ +import pytest + +from tests.conftest import BaseTest +from python3_anticaptcha.core.enum import CaptchaTypeEnm +from python3_anticaptcha.recaptcha_v3 import ReCaptchaV3 +from python3_anticaptcha.core.serializer import GetTaskResultResponseSer +from python3_anticaptcha.core.context_instr import AIOContextManager, SIOContextManager + + +class TestReCaptchaV3(BaseTest): + pageAction = "demo_action" + minScore = 0.3 + websiteURL = "https://rucaptcha.com/demo/recaptcha-v3" + websiteKey = "6LfB5_IbAAAAAMCtsjEHEHKqcB9iQocwwxTiihJu" + websiteURLEnterprise = "https://rucaptcha.com/demo/recaptcha-v3-enterprise" + websiteKeyEnterprise = "6Lel38UnAAAAAMRwKj9qLH2Ws4Tf2uTDQCyfgR6b" + + def test_sio_success(self): + instance = ReCaptchaV3( + api_key=self.API_KEY, + websiteKey=self.websiteKey, + websiteURL=self.websiteURL, + captcha_type=CaptchaTypeEnm.RecaptchaV3TaskProxyless, + pageAction=self.pageAction, + minScore=self.minScore, + ) + result = instance.captcha_handler() + + assert isinstance(result, dict) + ser_result = GetTaskResultResponseSer(**result) + assert ser_result.errorId == 0 + assert ser_result.taskId is not None + assert ser_result.cost != 0.0 + + async def test_aio_success(self): + instance = ReCaptchaV3( + api_key=self.API_KEY, + websiteKey=self.websiteKey, + websiteURL=self.websiteURL, + captcha_type=CaptchaTypeEnm.RecaptchaV3TaskProxyless, + pageAction=self.pageAction, + minScore=self.minScore, + ) + result = await instance.aio_captcha_handler() + + assert isinstance(result, dict) + ser_result = GetTaskResultResponseSer(**result) + assert ser_result.errorId == 0 + assert ser_result.taskId is not None + assert ser_result.cost != 0.0 + + def test_sio_enterprise_success(self): + instance = ReCaptchaV3( + api_key=self.API_KEY, + websiteKey=self.websiteKeyEnterprise, + websiteURL=self.websiteURLEnterprise, + captcha_type=CaptchaTypeEnm.RecaptchaV3TaskProxyless, + isEnterprise=True, + pageAction=self.pageAction, + minScore=self.minScore, + ) + result = instance.captcha_handler() + + assert isinstance(result, dict) + ser_result = GetTaskResultResponseSer(**result) + assert ser_result.errorId == 0 + assert ser_result.taskId is not None + assert ser_result.cost != 0.0 + + async def test_aio_enterprise_success(self): + instance = ReCaptchaV3( + api_key=self.API_KEY, + websiteKey=self.websiteKeyEnterprise, + websiteURL=self.websiteURLEnterprise, + captcha_type=CaptchaTypeEnm.RecaptchaV3TaskProxyless, + isEnterprise=True, + pageAction=self.pageAction, + minScore=self.minScore, + ) + result = await instance.aio_captcha_handler() + + assert isinstance(result, dict) + ser_result = GetTaskResultResponseSer(**result) + assert ser_result.errorId == 0 + assert ser_result.taskId is not None + assert ser_result.cost != 0.0 + + def get_proxy_args(self) -> dict: + proxy_args = super().get_proxy_args() + proxy_args.update({"userAgent": self.get_random_string(), "cookies": self.get_random_string()}) + return proxy_args + + def test_context(self, mocker): + context_enter_spy = mocker.spy(SIOContextManager, "__enter__") + context_exit_spy = mocker.spy(SIOContextManager, "__exit__") + with ReCaptchaV3( + api_key=self.API_KEY, + websiteKey=self.websiteKey, + websiteURL=self.websiteURL, + pageAction=self.pageAction, + minScore=self.minScore, + ) as instance: + assert context_enter_spy.call_count == 1 + assert context_exit_spy.call_count == 1 + + async def test_aio_context(self, mocker): + context_enter_spy = mocker.spy(AIOContextManager, "__aenter__") + context_exit_spy = mocker.spy(AIOContextManager, "__aexit__") + async with ReCaptchaV3( + api_key=self.API_KEY, + websiteKey=self.websiteKey, + websiteURL=self.websiteURL, + pageAction=self.pageAction, + minScore=self.minScore, + ) as instance: + assert context_enter_spy.call_count == 1 + assert context_exit_spy.call_count == 1 + + def test_err_context(self): + with pytest.raises(ValueError): + with ReCaptchaV3( + api_key=self.API_KEY, + websiteKey=self.websiteKey, + websiteURL=self.websiteURL, + pageAction=self.pageAction, + minScore=self.minScore, + ) as instance: + raise ValueError("Test error") + + async def test_err_aio_context(self): + with pytest.raises(ValueError): + async with ReCaptchaV3( + api_key=self.API_KEY, + websiteKey=self.websiteKey, + websiteURL=self.websiteURL, + pageAction=self.pageAction, + minScore=self.minScore, + ) as instance: + raise ValueError("Test error")