from collections.abc import Iterator import httpx import pytest import respx from faker import Faker from app.adapters.facebook import FacebookClient from tests.unit.adapters.facebook.factories import UploadUsersResponseFactory class TestFacebookClient: @pytest.fixture(scope="module") def client(self) -> Iterator[FacebookClient]: with FacebookClient() as client: yield client def test_upload_users( self, client: FacebookClient, respx_mock: respx.MockRouter, faker: Faker ) -> None: audience_external_id = faker.pystr() access_token = faker.pystr() session = { "session_id": 1000000, "batch_seq": 1, "last_batch_flag": True, "estimated_num_total": 1, } payload = {"schema": "EMAIL_SHA256", "data": ["abc123"]} upload_users_response = UploadUsersResponseFactory.build() respx_mock.post( f"https://graph.facebook.com/v25.0/{audience_external_id}/users", json={ "access_token": access_token, "session": session, "payload": payload, }, ).mock( return_value=httpx.Response( status_code=200, json=upload_users_response.model_dump(), ) ) result = client.upload_users( user_access_token=access_token, audience_external_id=audience_external_id, session={ "session_id": 1000000, "batch_seq": 1, "last_batch_flag": True, "estimated_num_total": 1, }, payload={"schema": "EMAIL_SHA256", "data": ["abc123"]}, ) assert result == upload_users_response