from unittest import mock import pytest from campaigns.connectors.db import Database from campaigns.connectors.facebook.models import CreatedAdVideo from campaigns.meta.handlers import ( CreateCampaignAdVideoHandler, CreateCampaignAdVideoRequest, ) from campaigns.meta.models import CampaignVideo from campaigns.meta.repositories import CampaignVideoRepository from campaigns.meta.services import CampaignVideoService from tests.unit.faker import FakerTyped from tests.unit.types import CreateModel @pytest.fixture def handler( db: Database, facebook_client_mock: mock.MagicMock, campaign_video_repository: CampaignVideoRepository, campaign_video_service: CampaignVideoService, ) -> CreateCampaignAdVideoHandler: return CreateCampaignAdVideoHandler( db=db, facebook_client=facebook_client_mock, campaign_video_repository=campaign_video_repository, campaign_video_service=campaign_video_service, ) async def test_create_ad_video_has_external_id( handler: CreateCampaignAdVideoHandler, create_model: CreateModel, facebook_client_mock: mock.MagicMock, fake: FakerTyped, ) -> None: video_url = fake.video_url() external_id = fake.numeric_string(length=16) video = await create_model(CampaignVideo, external_id=external_id) video = await handler.handle( request=CreateCampaignAdVideoRequest( video_id=video.id, video_url=video_url, ), ) facebook_client_mock.create_ad_video.assert_not_called() assert video.external_id == external_id async def test_create_ad_video( handler: CreateCampaignAdVideoHandler, facebook_client_mock: mock.MagicMock, create_model: CreateModel, fake: FakerTyped, ) -> None: video_url = fake.video_url() external_id = fake.numeric_string(length=16) video = await create_model(CampaignVideo) facebook_client_mock.create_ad_video.return_value = CreatedAdVideo(id=external_id) video = await handler.handle( request=CreateCampaignAdVideoRequest( video_id=video.id, video_url=video_url, ), ) assert video.external_id == external_id