From 508d1cb256de0e213949ead1c7fae770dd366eed Mon Sep 17 00:00:00 2001 From: Ananias Carvalho Date: Thu, 9 Jul 2026 11:03:39 +0200 Subject: [PATCH] Fix biometric token polling for eventual consistency --- tests/conftest.py | 15 +++++++++++++++ tests/test_biometric_tokens.py | 11 +++++------ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 9740521..fe90ae5 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -179,6 +179,21 @@ def repeat_request_until_task_output_changes( return instance +def repeat_request_until(function, params, predicate, error_message, max_retries=15, sleep_time=1): + instance = function(*params) + + iteration = 0 + while not predicate(instance): + if iteration > max_retries: + pytest.fail(error_message) + + iteration += 1 + sleep(sleep_time) + instance = function(*params) + + return instance + + def repeat_request_until_http_code_changes( function, params, max_retries=15, sleep_time=1 ): diff --git a/tests/test_biometric_tokens.py b/tests/test_biometric_tokens.py index 9928210..40a6210 100644 --- a/tests/test_biometric_tokens.py +++ b/tests/test_biometric_tokens.py @@ -11,7 +11,7 @@ BiometricTokenUpdater, WorkflowRunBuilder, ) -from tests.conftest import create_applicant, repeat_request_until_http_code_changes, upload_live_photo +from tests.conftest import create_applicant, repeat_request_until, upload_live_photo @pytest.fixture(scope="function") @@ -74,17 +74,16 @@ def create_biometric_token( assert workflow_run.customer_user_id == biometric_customer_user_id - biometric_tokens = repeat_request_until_http_code_changes( + biometric_tokens = repeat_request_until( onfido_api.list_biometric_tokens, [biometric_customer_user_id], + lambda response: bool(response.biometric_tokens), + "Biometric tokens were not created in time", max_retries=10, sleep_time=3, ) - if biometric_tokens.biometric_tokens: - return biometric_tokens - - pytest.fail("Biometric tokens were not created in time") + return biometric_tokens @pytest.fixture(scope="function")