"""Tests for facebook collector.""" from unittest.mock import MagicMock from unittest.mock import patch from social_analytics import config from social_analytics.constants import collectors from social_analytics.logic import facebook_collector @patch('social_analytics.logic.facebook_collector.requests') @patch('social_analytics.logic.facebook_collector.construct_facebook_url') def test_collect_facebook_metrics( construct_facebook_url_mock, requests_mock): """Test collect facebook metrics.""" # mocking url_mock = MagicMock() construct_facebook_url_mock.return_value = url_mock get_mock = MagicMock() requests_mock.get.return_value = get_mock expected_result = MagicMock() get_mock.json.return_value = expected_result profile_id = '19614945368' facebook_auth_token = '123' # tested function call result = facebook_collector.collect_facebook_metrics( profile_id, facebook_auth_token) # checks construct_facebook_url_mock.assert_called_once_with( profile_id, facebook_auth_token) requests_mock.get.assert_called_once_with(url_mock) assert result == expected_result @patch('social_analytics.logic.facebook_collector.requests') def test_refresh_token(requests_mock): """Test refresh token.""" code_return_value = { 'code': 'test_code' } token_return_value = { 'access_token': 'test_token', 'machine_id': 'test_machine_id', 'expires_in': 4674864 } code_params = { 'access_token': config.FACEBOOK_ACCESS_TOKEN, 'client_secret': config.FACEBOOK_CLIENT_SECRET, 'client_id': config.FACEBOOK_CLIENT_ID, 'redirect_uri': config.FACEBOOK_REDIRECT_URI } token_params = { 'code': 'test_code', 'client_id': config.FACEBOOK_CLIENT_ID, 'machine_id': config.FACEBOOK_MACHINE_ID, 'redirect_uri': config.FACEBOOK_REDIRECT_URI } code_mock = MagicMock() code_mock.json.return_value = code_return_value token_mock = MagicMock() token_mock.json.return_value = token_return_value requests_mock.get.side_effect = [code_mock, token_mock] result = facebook_collector.refresh_token() expected_call_args = [ ( (collectors.FACEBOOK_AUTHORIZATION_CODE_URL,), {'params': code_params} ), ( (collectors.FACEBOOK_AUTHORIZATION_TOKEN_URL,), {'params': token_params} ) ] assert result == 'test_token' assert len(requests_mock.get.call_args_list) == 2 assert requests_mock.get.call_args_list == expected_call_args @patch('social_analytics.logic.facebook_collector.requests') def test_recommend_facebook_profile_verified_profile_and_most_likes( requests_mock, monkeypatch): """Test recommend_facebook_profile with verified profile and most likes.""" get_mock = MagicMock() requests_mock.get.return_value = get_mock json_result = { 'data': [ { 'id': '19614945368', 'is_verified': True, 'fan_count': 74114459, 'talking_about_count': 126025, 'name': 'Taylor Swift', 'username': 'TaylorSwift'}, { 'id': '1550270115237763', 'is_verified': False, 'fan_count': 44264, 'talking_about_count': 577, 'name': 'TaylorSwift', 'username': 'HeartSwifties'}]} get_mock.json.return_value = json_result expected_result = { 'platform': 'facebook', 'platform_id': json_result['data'][0]['id'], 'platform_name': json_result['data'][0]['name'], 'is_verified': json_result['data'][0]['is_verified'], 'metric_value': json_result['data'][0]['fan_count'] } profile_name = 'Taylor Swift' monkeypatch.setattr(facebook_collector, 'refresh_token', MagicMock()) result = facebook_collector.recommend_facebook_profile(profile_name, None) assert result == expected_result @patch('social_analytics.logic.facebook_collector.requests') def test_recommend_facebook_profile_only_most_likes( requests_mock, monkeypatch): """Test recommend_facebook_profile with only most likes.""" get_mock = MagicMock() requests_mock.get.return_value = get_mock json_result = { 'data': [ { 'id': '19614945368', 'is_verified': False, 'fan_count': 74114459, 'talking_about_count': 126025, 'name': 'Taylor Swift', 'username': 'TaylorSwift'}, { 'id': '1550270115237763', 'is_verified': False, 'fan_count': 44264, 'talking_about_count': 577, 'name': 'TaylorSwift', 'username': 'HeartSwifties'}]} get_mock.json.return_value = json_result expected_result = { 'platform': 'facebook', 'platform_id': json_result['data'][0]['id'], 'platform_name': json_result['data'][0]['name'], 'is_verified': json_result['data'][0]['is_verified'], 'metric_value': json_result['data'][0]['fan_count'] } profile_name = 'Taylor Swift' monkeypatch.setattr(facebook_collector, 'refresh_token', MagicMock()) result = facebook_collector.recommend_facebook_profile(profile_name, None) assert result == expected_result @patch('social_analytics.logic.facebook_collector.requests') def test_verify_facebook_profile(requests_mock, monkeypatch): """Test verify facebook profile.""" get_mock = MagicMock() requests_mock.get.return_value = get_mock json_result = { 'id': '19614945368', 'is_verified': False, 'fan_count': 74114459, 'talking_about_count': 126025, 'name': 'Taylor Swift', 'username': 'TaylorSwift'} get_mock.json.return_value = json_result expected_result = { 'platform': 'facebook', 'platform_id': json_result['id'], 'platform_name': json_result['name'], 'is_verified': json_result['is_verified'], 'metric_value': json_result['fan_count'] } platform_id = 'Taylor Swift' monkeypatch.setattr(facebook_collector, 'refresh_token', MagicMock()) result = facebook_collector.verify_facebook_profile(platform_id) assert result == expected_result @patch('social_analytics.logic.facebook_collector.requests') def test_verify_facebook_profile_error(requests_mock, monkeypatch): """Test verify facebook profile.""" get_mock = MagicMock() requests_mock.get.return_value = get_mock json_result = {'error': 'This is an error'} get_mock.json.return_value = json_result platform_id = 'Taylor Swift' monkeypatch.setattr(facebook_collector, 'refresh_token', MagicMock()) result = facebook_collector.verify_facebook_profile(platform_id) assert not result