from unittest import mock import pytest from audience_common.auth.account import AccountAccess from campaigns.auth.dtos import User, UserId from campaigns.connectors.db import Database from campaigns.connectors.facebook.models import PagePost from campaigns.meta.dtos import CampaignPost from campaigns.meta.handlers import GetCampaignPostHandler, GetCampaignPostRequest from campaigns.meta.models import Campaign from campaigns.meta.services import CampaignPostService, CampaignService from tests.unit.types import BuildModel, CreateModel @pytest.fixture def handler( db: Database, campaign_service: CampaignService, campaign_post_service: CampaignPostService, ) -> GetCampaignPostHandler: return GetCampaignPostHandler( db=db, campaign_service=campaign_service, campaign_post_service=campaign_post_service, ) async def test_get_campaign_post( handler: GetCampaignPostHandler, build_model: BuildModel, create_model: CreateModel, facebook_client_mock: mock.MagicMock, user_id: UserId, ) -> None: facebook_post = build_model(PagePost) campaign = await create_model(Campaign, facebook_post_external_id=facebook_post.id) facebook_client_mock.get_post.return_value = facebook_post result = await handler.handle( GetCampaignPostRequest( user=User( id=user_id, account_access=AccountAccess(accounts=[campaign.account]), ), campaign_id=campaign.id, ), ) assert result == CampaignPost.from_api_obj(facebook_post)