Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
191 changes: 191 additions & 0 deletions tests/test_biometric_tokens.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,191 @@
import json
from time import sleep
from uuid import uuid4

import pytest

from onfido import (
ApiException,
ApplicantBuilder,
ApplicantConsentBuilder,
ApplicantConsentName,
BiometricTokenUpdater,
WorkflowRunBuilder,
)
from tests.conftest import create_applicant, upload_live_photo


@pytest.fixture(scope="function")
def applicant_id(onfido_api):
unique_suffix = uuid4().hex[:8]
applicant = create_applicant(
onfido_api,
ApplicantBuilder(
Comment thread
anancarv marked this conversation as resolved.
first_name=f"First{unique_suffix}",
last_name=f"Last{unique_suffix}",
email=f"first.last.{unique_suffix}@example.com",
consents=[
ApplicantConsentBuilder(
name=ApplicantConsentName.PRIVACY_NOTICES_READ,
granted=True,
)
],
),
)
return applicant.id


@pytest.fixture(scope="function")
def biometric_workflow_id():
return "b79dcf69-41a0-412d-b803-d1a618730f72"
Comment thread
anancarv marked this conversation as resolved.


@pytest.fixture(scope="function")
def biometric_customer_user_id():
return f"test-user-id-{uuid4()}"


@pytest.fixture(scope="function", autouse=True)
def live_photo(onfido_api, applicant_id):
return upload_live_photo(onfido_api, applicant_id)


@pytest.fixture(scope="function")
def create_biometric_token(
onfido_api,
applicant_id,
biometric_workflow_id,
biometric_customer_user_id,
live_photo,
):
workflow_run = onfido_api.create_workflow_run(
WorkflowRunBuilder(
applicant_id=applicant_id,
workflow_id=biometric_workflow_id,
customer_user_id=biometric_customer_user_id,
custom_data={
"media_ids": [
{
"id": str(live_photo.id),
}
]
},
)
)

assert workflow_run.customer_user_id == biometric_customer_user_id

max_retries = 3

# Wait for the biometric token to be created
for _ in range(max_retries + 1):
biometric_tokens = onfido_api.list_biometric_tokens(
biometric_customer_user_id
)
if biometric_tokens.biometric_tokens:
return biometric_tokens
sleep(2)

pytest.fail("Biometric tokens were not created in time")


@pytest.fixture(scope="function")
def biometric_token_id(create_biometric_token):
token_uuid = create_biometric_token.biometric_tokens[0].uuid
if token_uuid is None:
Comment thread
anancarv marked this conversation as resolved.
pytest.fail("Biometric token response did not include a uuid")

return token_uuid


def test_list_biometric_tokens(create_biometric_token):
assert len(create_biometric_token.biometric_tokens) > 0
assert create_biometric_token.biometric_tokens[0].uuid is not None
assert create_biometric_token.biometric_tokens[0].data.status is not None


def test_find_biometric_token(onfido_api, biometric_customer_user_id, biometric_token_id):
biometric_token_response = onfido_api.find_biometric_token(
biometric_customer_user_id,
biometric_token_id,
)

assert biometric_token_response.biometric_token.uuid == biometric_token_id
assert biometric_token_response.biometric_token.data.status is not None


def test_update_biometric_token_status(onfido_api, biometric_customer_user_id, biometric_token_id):
approved_status = "approved"
updated_biometric_token = onfido_api.update_biometric_token(
biometric_customer_user_id,
biometric_token_id,
BiometricTokenUpdater(status=approved_status),
)

assert updated_biometric_token.biometric_token.uuid == biometric_token_id
assert updated_biometric_token.biometric_token.data.status == approved_status


def test_invalidate_biometric_token_success(onfido_api, biometric_customer_user_id, biometric_token_id):
response = onfido_api.invalidate_biometric_token_without_preload_content(
biometric_customer_user_id,
biometric_token_id,
)

assert response.status == 200


def test_invalidate_biometric_token_not_found_when_already_deleted(
onfido_api,
biometric_customer_user_id,
biometric_token_id,
):
onfido_api.invalidate_biometric_token_without_preload_content(
biometric_customer_user_id,
biometric_token_id,
)

with pytest.raises(ApiException) as exc_info:
onfido_api.invalidate_biometric_token(
biometric_customer_user_id,
biometric_token_id,
)

error_response = json.loads(exc_info.value.body)

assert exc_info.value.status == 404
assert error_response["error"]["message"] == "Not found"
assert error_response["error"]["type"] == "resource_not_found"


def test_invalidate_biometric_tokens_success(
onfido_api,
biometric_customer_user_id,
create_biometric_token,
):
response = onfido_api.invalidate_biometric_tokens_without_preload_content(
biometric_customer_user_id
)

assert response.status == 200


def test_invalidate_biometric_tokens_not_found_when_already_deleted(
onfido_api,
biometric_customer_user_id,
create_biometric_token,
):
onfido_api.invalidate_biometric_tokens_without_preload_content(
biometric_customer_user_id
)

with pytest.raises(ApiException) as exc_info:
onfido_api.invalidate_biometric_tokens(
biometric_customer_user_id
)

error_response = json.loads(exc_info.value.body)

assert exc_info.value.status == 404
assert error_response["error"]["message"] == "Not found"
assert error_response["error"]["type"] == "resource_not_found"
Loading