from unittest import mock import pytest from campaigns.connectors.aws.kms import BaseKMS from campaigns.connectors.db import Database from campaigns.meta.dtos import FacebookConnection from campaigns.meta.handlers import ( DisconnectFacebookUserHandler, DisconnectFacebookUserRequest, ) from campaigns.meta.models import FacebookAssociation from campaigns.meta.repositories import FacebookAssociationRepository from tests.unit.faker import FakerTyped from tests.unit.types import CreateModel @pytest.fixture def handler( db: Database, dummy_kms: BaseKMS, facebook_client_mock: mock.MagicMock, facebook_association_repository: FacebookAssociationRepository, ) -> DisconnectFacebookUserHandler: return DisconnectFacebookUserHandler( db=db, kms=dummy_kms, facebook_client=facebook_client_mock, facebook_association_repository=facebook_association_repository, ) async def test_disconnect_facebook_user( handler: DisconnectFacebookUserHandler, facebook_client_mock: mock.MagicMock, create_model: CreateModel, ) -> None: association = await create_model(FacebookAssociation, is_connected=True) connection = await handler.handle( DisconnectFacebookUserRequest( identity_id=association.orchard_identity_id, ), ) facebook_client_mock.delete_user_permissions.assert_called_once_with( user_id=association.user_id, user_access_token=association.token ) assert not association.is_connected assert connection == FacebookConnection.not_connected() async def test_disconnect_facebook_user_not_connected( handler: DisconnectFacebookUserHandler, facebook_client_mock: mock.MagicMock, fake: FakerTyped, ) -> None: connection = await handler.handle( DisconnectFacebookUserRequest( identity_id=fake.uuid4_string(), ), ) assert connection == FacebookConnection.not_connected()