from unittest import mock import pytest from anydi import Container from faker import Faker from fansifter_common.adapters.graphql_router import GlobalParticipant from ows_text_campaigns.artist.handlers import ( CreateArtistImageHandler, CreateArtistImageRequest, ) from ows_text_campaigns.artist.models import ArtistSettings from ows_text_campaigns.assets.models import Asset from ows_text_campaigns.assets.services import AssetService from ows_text_campaigns.assets.types import BinaryAsset from ows_text_campaigns.rosters.models import ArtistRosterMainRep from tests.unit.types import BuildModel, CreateModel class TestCreateArtistImageHandler: @pytest.mark.db def test_create_artist_image( self, container: Container, handler: CreateArtistImageHandler, create_model: CreateModel, build_model: BuildModel, identity_id: str, faker: Faker, graphql_router_client_mock: mock.MagicMock, ) -> None: global_participant = build_model(GlobalParticipant) graphql_router_client_mock.get_global_participant_by_gp_id.return_value = ( global_participant ) artist_settings = create_model( ArtistSettings, global_participant_id=global_participant.id ) create_model( ArtistRosterMainRep, global_participant_id=global_participant.id, vendor_id=1, subaccount_id=0, ) image_key = "/path/to/image.jpg" asset = create_model(Asset, key=image_key) asset_service_mock = mock.MagicMock(spec=AssetService) asset_service_mock.get_asset_from_s3.return_value = BinaryAsset.from_data( faker.image((1000, 1000), image_format="JPEG"), ) asset_service_mock.create_and_upload_image_to_s3.return_value = asset with container.override(AssetService, asset_service_mock): created_asset = handler.handle( CreateArtistImageRequest( identity_id=identity_id, global_participant_id=artist_settings.global_participant_id, image_key=image_key, ) ) asset_service_mock.create_and_upload_image_to_s3.assert_called_once() assert created_asset == asset