============================= test session starts ==============================
platform linux -- Python 3.10.12, pytest-9.0.2, pluggy-1.6.0 -- /usr/bin/python
cachedir: .pytest_cache
rootdir: /workspace
plugins: isolate-0.0.13, cov-7.0.0, anyio-4.12.0, returns-0.26.0
collecting ... collected 203 items

tests/unit/test_analytics_logger.py::TestAnalyticsLogger::test_analytics_logger_initialization PASSED [  0%]
tests/unit/test_analytics_logger.py::TestAnalyticsLogger::test_export_logs_to_json PASSED [  0%]
tests/unit/test_analytics_logger.py::TestAnalyticsLogger::test_export_logs_to_json_error PASSED [  1%]
tests/unit/test_analytics_logger.py::TestAnalyticsLogger::test_get_session_summary PASSED [  1%]
tests/unit/test_analytics_logger.py::TestAnalyticsLogger::test_global_analytics_logger_instance PASSED [  2%]
tests/unit/test_analytics_logger.py::TestAnalyticsLogger::test_log_aggregation_stats PASSED [  2%]
tests/unit/test_analytics_logger.py::TestAnalyticsLogger::test_log_api_call PASSED [  3%]
tests/unit/test_analytics_logger.py::TestAnalyticsLogger::test_log_campaign_data PASSED [  3%]
tests/unit/test_analytics_logger.py::TestAnalyticsLogger::test_log_campaign_data_nested_conditions PASSED [  4%]
tests/unit/test_analytics_logger.py::TestAnalyticsLogger::test_log_error PASSED [  4%]
tests/unit/test_analytics_logger.py::TestAnalyticsLogger::test_setup_logging PASSED [  5%]
tests/unit/test_analytics_logger.py::TestAnalyticsLogger::test_write_event_to_file PASSED [  5%]
tests/unit/test_analytics_logger.py::TestUtilityFunctions::test_global_variables_exist PASSED [  6%]
tests/unit/test_analytics_logger.py::TestUtilityFunctions::test_log_performance_metric PASSED [  6%]
tests/unit/test_analytics_logger.py::TestUtilityFunctions::test_quick_log_debug PASSED [  7%]
tests/unit/test_analytics_logger.py::TestUtilityFunctions::test_quick_log_default_level PASSED [  7%]
tests/unit/test_analytics_logger.py::TestUtilityFunctions::test_quick_log_error PASSED [  8%]
tests/unit/test_analytics_logger.py::TestUtilityFunctions::test_quick_log_info PASSED [  8%]
tests/unit/test_analytics_logger.py::TestUtilityFunctions::test_quick_log_warning PASSED [  9%]
tests/unit/test_config.py::TestConfig::test_config_class_initialization PASSED [  9%]
tests/unit/test_config.py::TestConfig::test_config_directory_creation PASSED [ 10%]
tests/unit/test_config.py::TestConfig::test_config_paths_exist PASSED    [ 10%]
tests/unit/test_config.py::TestConfig::test_get_api_url_slash_handling PASSED [ 11%]
tests/unit/test_config.py::TestConfig::test_get_api_url_with_endpoint PASSED [ 11%]
tests/unit/test_config.py::TestConfig::test_get_api_url_with_invalid_platform PASSED [ 12%]
tests/unit/test_config.py::TestConfig::test_get_api_url_with_valid_platform PASSED [ 12%]
tests/unit/test_config.py::TestConfig::test_get_current_timestamp PASSED [ 13%]
tests/unit/test_config.py::TestConfig::test_global_api_base_urls PASSED  [ 13%]
tests/unit/test_config.py::TestConfig::test_global_config_instance PASSED [ 14%]
tests/unit/test_config.py::TestConfig::test_global_configuration_values PASSED [ 14%]
tests/unit/test_config.py::TestConfig::test_magic_numbers_exist PASSED   [ 15%]
tests/unit/test_credentials_manager.py::TestCredentialsManager::test_create_dummy_creds PASSED [ 15%]
tests/unit/test_credentials_manager.py::TestCredentialsManager::test_credentials_manager_initialization PASSED [ 16%]
tests/unit/test_credentials_manager.py::TestCredentialsManager::test_get_facebook_token PASSED [ 16%]
tests/unit/test_credentials_manager.py::TestCredentialsManager::test_get_google_creds PASSED [ 17%]
tests/unit/test_credentials_manager.py::TestCredentialsManager::test_get_twitter_keys PASSED [ 17%]
tests/unit/test_credentials_manager.py::TestCredentialsManager::test_global_creds_manager_instance PASSED [ 18%]
tests/unit/test_credentials_manager.py::TestCredentialsManager::test_hardcoded_file_paths PASSED [ 18%]
tests/unit/test_credentials_manager.py::TestCredentialsManager::test_load_credentials_file_not_found PASSED [ 19%]
tests/unit/test_credentials_manager.py::TestCredentialsManager::test_load_credentials_json_error PASSED [ 19%]
tests/unit/test_credentials_manager.py::TestCredentialsManager::test_load_credentials_success PASSED [ 20%]
tests/unit/test_credentials_manager.py::TestCredentialsManager::test_magic_number_in_refresh_logic PASSED [ 20%]
tests/unit/test_credentials_manager.py::TestCredentialsManager::test_nested_if_statements_coverage PASSED [ 21%]
tests/unit/test_credentials_manager.py::TestCredentialsManager::test_refresh_token_if_needed_facebook PASSED [ 21%]
tests/unit/test_credentials_manager.py::TestCredentialsManager::test_refresh_token_if_needed_google PASSED [ 22%]
tests/unit/test_credentials_manager.py::TestCredentialsManager::test_refresh_token_if_needed_invalid_platform PASSED [ 22%]
tests/unit/test_credentials_manager.py::TestCredentialsManager::test_save_credentials PASSED [ 23%]
tests/unit/test_credentials_manager.py::TestGlobalVariables::test_global_variables_exist PASSED [ 23%]
tests/unit/test_data_collector.py::TestMarketingDataCollector::test_add_facebook_accounts_no_duplicates PASSED [ 24%]
tests/unit/test_data_collector.py::TestMarketingDataCollector::test_add_facebook_accounts_string_input PASSED [ 24%]
tests/unit/test_data_collector.py::TestMarketingDataCollector::test_add_facebook_accounts_success PASSED [ 25%]
tests/unit/test_data_collector.py::TestMarketingDataCollector::test_add_facebook_accounts_validation_failure PASSED [ 25%]
tests/unit/test_data_collector.py::TestMarketingDataCollector::test_add_google_customers_success PASSED [ 26%]
tests/unit/test_data_collector.py::TestMarketingDataCollector::test_add_twitter_accounts_success PASSED [ 26%]
tests/unit/test_data_collector.py::TestMarketingDataCollector::test_collect_all_data_parallel PASSED [ 27%]
tests/unit/test_data_collector.py::TestMarketingDataCollector::test_collect_all_data_sequential PASSED [ 27%]
tests/unit/test_data_collector.py::TestMarketingDataCollector::test_collect_facebook_data_api_failure PASSED [ 28%]
tests/unit/test_data_collector.py::TestMarketingDataCollector::test_collect_facebook_data_exception PASSED [ 28%]
tests/unit/test_data_collector.py::TestMarketingDataCollector::test_collect_facebook_data_success PASSED [ 29%]
tests/unit/test_data_collector.py::TestMarketingDataCollector::test_collect_google_data_success PASSED [ 29%]
tests/unit/test_data_collector.py::TestMarketingDataCollector::test_collect_twitter_data_success PASSED [ 30%]
tests/unit/test_data_collector.py::TestMarketingDataCollector::test_get_collection_summary PASSED [ 30%]
tests/unit/test_data_collector.py::TestMarketingDataCollector::test_get_collection_summary_with_collected_data PASSED [ 31%]
tests/unit/test_data_collector.py::TestMarketingDataCollector::test_global_data_collector_instance PASSED [ 31%]
tests/unit/test_data_collector.py::TestMarketingDataCollector::test_marketing_data_collector_initialization PASSED [ 32%]
tests/unit/test_data_collector.py::TestMarketingDataCollector::test_save_aggregated_data PASSED [ 32%]
tests/unit/test_data_collector.py::TestMarketingDataCollector::test_setup_storage PASSED [ 33%]
tests/unit/test_data_collector.py::TestUtilityFunctions::test_collect_facebook_threaded PASSED [ 33%]
tests/unit/test_data_collector.py::TestUtilityFunctions::test_export_data_to_csv_error PASSED [ 33%]
tests/unit/test_data_collector.py::TestUtilityFunctions::test_export_data_to_csv_no_data PASSED [ 34%]
tests/unit/test_data_collector.py::TestUtilityFunctions::test_export_data_to_csv_success PASSED [ 34%]
tests/unit/test_data_collector.py::TestUtilityFunctions::test_global_state_variables PASSED [ 35%]
tests/unit/test_data_collector.py::TestUtilityFunctions::test_quick_collect_sample_data PASSED [ 35%]
tests/unit/test_data_collector.py::TestUtilityFunctions::test_schedule_data_collection PASSED [ 36%]
tests/unit/test_data_collector.py::TestUtilityFunctions::test_threading_wrapper_functions PASSED [ 36%]
tests/unit/test_facebook_api.py::TestFacebookAPI::test_batch_get_multiple_accounts_success PASSED [ 37%]
tests/unit/test_facebook_api.py::TestFacebookAPI::test_batch_get_multiple_accounts_with_errors PASSED [ 37%]
tests/unit/test_facebook_api.py::TestFacebookAPI::test_facebook_api_initialization PASSED [ 38%]
tests/unit/test_facebook_api.py::TestFacebookAPI::test_get_account_campaigns_with_insights PASSED [ 38%]
tests/unit/test_facebook_api.py::TestFacebookAPI::test_get_campaign_insights_empty_data PASSED [ 39%]
tests/unit/test_facebook_api.py::TestFacebookAPI::test_get_campaign_insights_no_token PASSED [ 39%]
tests/unit/test_facebook_api.py::TestFacebookAPI::test_get_campaign_insights_success PASSED [ 40%]
tests/unit/test_facebook_api.py::TestFacebookAPI::test_get_campaigns_api_error PASSED [ 40%]
tests/unit/test_facebook_api.py::TestFacebookAPI::test_get_campaigns_json_error PASSED [ 41%]
tests/unit/test_facebook_api.py::TestFacebookAPI::test_get_campaigns_no_token PASSED [ 41%]
tests/unit/test_facebook_api.py::TestFacebookAPI::test_get_campaigns_rate_limiting PASSED [ 42%]
tests/unit/test_facebook_api.py::TestFacebookAPI::test_get_campaigns_success PASSED [ 42%]
tests/unit/test_facebook_api.py::TestFacebookAPI::test_global_constants PASSED [ 43%]
tests/unit/test_facebook_api.py::TestFacebookAPI::test_global_facebook_api_instance PASSED [ 43%]
tests/unit/test_facebook_api.py::TestFacebookAPI::test_setup_authentication_with_token PASSED [ 44%]
tests/unit/test_facebook_api.py::TestFacebookAPI::test_setup_authentication_without_token PASSED [ 44%]
tests/unit/test_facebook_api.py::TestUtilityFunctions::test_get_facebook_summary_stats PASSED [ 45%]
tests/unit/test_facebook_api.py::TestUtilityFunctions::test_get_facebook_summary_stats_with_errors PASSED [ 45%]
tests/unit/test_facebook_api.py::TestUtilityFunctions::test_quick_facebook_campaign_check_no_campaigns PASSED [ 46%]
tests/unit/test_facebook_api.py::TestUtilityFunctions::test_quick_facebook_campaign_check_success PASSED [ 46%]
tests/unit/test_facebook_api.py::TestUtilityFunctions::test_type_conversion_errors_in_totals PASSED [ 47%]
tests/unit/test_google_ads.py::TestGoogleAdsAPI::test_batch_get_multiple_customers_success PASSED [ 47%]
tests/unit/test_google_ads.py::TestGoogleAdsAPI::test_get_access_token_failure PASSED [ 48%]
tests/unit/test_google_ads.py::TestGoogleAdsAPI::test_get_access_token_no_refresh_token PASSED [ 48%]
tests/unit/test_google_ads.py::TestGoogleAdsAPI::test_get_access_token_success PASSED [ 49%]
tests/unit/test_google_ads.py::TestGoogleAdsAPI::test_get_campaign_metrics_empty_results PASSED [ 49%]
tests/unit/test_google_ads.py::TestGoogleAdsAPI::test_get_campaign_metrics_no_token PASSED [ 50%]
tests/unit/test_google_ads.py::TestGoogleAdsAPI::test_get_campaign_metrics_success PASSED [ 50%]
tests/unit/test_google_ads.py::TestGoogleAdsAPI::test_get_campaigns_api_error PASSED [ 51%]
tests/unit/test_google_ads.py::TestGoogleAdsAPI::test_get_campaigns_no_token PASSED [ 51%]
tests/unit/test_google_ads.py::TestGoogleAdsAPI::test_get_campaigns_success PASSED [ 52%]
tests/unit/test_google_ads.py::TestGoogleAdsAPI::test_get_customer_campaigns_with_metrics PASSED [ 52%]
tests/unit/test_google_ads.py::TestGoogleAdsAPI::test_global_constants PASSED [ 53%]
tests/unit/test_google_ads.py::TestGoogleAdsAPI::test_global_google_ads_api_instance PASSED [ 53%]
tests/unit/test_google_ads.py::TestGoogleAdsAPI::test_google_ads_api_initialization PASSED [ 54%]
tests/unit/test_google_ads.py::TestGoogleAdsAPI::test_search_keywords_no_token PASSED [ 54%]
tests/unit/test_google_ads.py::TestGoogleAdsAPI::test_search_keywords_success PASSED [ 55%]
tests/unit/test_google_ads.py::TestGoogleAdsAPI::test_setup_auth_with_credentials PASSED [ 55%]
tests/unit/test_google_ads.py::TestGoogleAdsAPI::test_setup_auth_without_credentials PASSED [ 56%]
tests/unit/test_google_ads.py::TestUtilityFunctions::test_get_google_summary_stats PASSED [ 56%]
tests/unit/test_google_ads.py::TestUtilityFunctions::test_micros_conversion_in_metrics PASSED [ 57%]
tests/unit/test_google_ads.py::TestUtilityFunctions::test_quick_google_campaign_check_no_campaigns PASSED [ 57%]
tests/unit/test_google_ads.py::TestUtilityFunctions::test_quick_google_campaign_check_success PASSED [ 58%]
tests/unit/test_google_ads.py::TestUtilityFunctions::test_type_conversion_errors_in_totals PASSED [ 58%]
tests/unit/test_main.py::TestMainFunctions::test_collect_all_data_command_no_accounts PASSED [ 59%]
tests/unit/test_main.py::TestMainFunctions::test_collect_all_data_command_success PASSED [ 59%]
tests/unit/test_main.py::TestMainFunctions::test_collect_facebook_data_command_failure PASSED [ 60%]
tests/unit/test_main.py::TestMainFunctions::test_collect_facebook_data_command_success PASSED [ 60%]
tests/unit/test_main.py::TestMainFunctions::test_collect_google_data_command_success PASSED [ 61%]
tests/unit/test_main.py::TestMainFunctions::test_collect_twitter_data_command_success PASSED [ 61%]
tests/unit/test_main.py::TestMainFunctions::test_export_results_command_csv_success PASSED [ 62%]
tests/unit/test_main.py::TestMainFunctions::test_export_results_command_json_success PASSED [ 62%]
tests/unit/test_main.py::TestMainFunctions::test_export_results_command_no_data PASSED [ 63%]
tests/unit/test_main.py::TestMainFunctions::test_export_results_command_unsupported_format PASSED [ 63%]
tests/unit/test_main.py::TestMainFunctions::test_initialize_application_success PASSED [ 64%]
tests/unit/test_main.py::TestMainFunctions::test_initialize_application_with_errors PASSED [ 64%]
tests/unit/test_main.py::TestMainFunctions::test_run_sample_demo PASSED  [ 65%]
tests/unit/test_main.py::TestMainFunctions::test_show_status_command PASSED [ 65%]
tests/unit/test_main.py::TestCommandLineInterface::test_main_collect_all_command PASSED [ 66%]
tests/unit/test_main.py::TestCommandLineInterface::test_main_collect_fb_command PASSED [ 66%]
tests/unit/test_main.py::TestCommandLineInterface::test_main_collect_fb_no_accounts PASSED [ 66%]
tests/unit/test_main.py::TestCommandLineInterface::test_main_collect_google_command PASSED [ 67%]
tests/unit/test_main.py::TestCommandLineInterface::test_main_collect_twitter_command PASSED [ 67%]
tests/unit/test_main.py::TestCommandLineInterface::test_main_demo_command PASSED [ 68%]
tests/unit/test_main.py::TestCommandLineInterface::test_main_exception PASSED [ 68%]
tests/unit/test_main.py::TestCommandLineInterface::test_main_export_command PASSED [ 69%]
tests/unit/test_main.py::TestCommandLineInterface::test_main_export_command_csv PASSED [ 69%]
tests/unit/test_main.py::TestCommandLineInterface::test_main_export_no_output PASSED [ 70%]
tests/unit/test_main.py::TestCommandLineInterface::test_main_init_command PASSED [ 70%]
tests/unit/test_main.py::TestCommandLineInterface::test_main_keyboard_interrupt PASSED [ 71%]
tests/unit/test_main.py::TestCommandLineInterface::test_main_status_command PASSED [ 71%]
tests/unit/test_main.py::TestInteractiveMode::test_interactive_mode_collect_fb PASSED [ 72%]
tests/unit/test_main.py::TestInteractiveMode::test_interactive_mode_invalid_commands PASSED [ 72%]
tests/unit/test_main.py::TestInteractiveMode::test_interactive_mode_keyboard_interrupt PASSED [ 73%]
tests/unit/test_main.py::TestInteractiveMode::test_interactive_mode_quit PASSED [ 73%]
tests/unit/test_main.py::TestInteractiveMode::test_interactive_mode_status PASSED [ 74%]
tests/unit/test_main.py::TestGlobalVariables::test_global_variables_exist PASSED [ 74%]
tests/unit/test_network_utils.py::TestNetworkUtils::test_global_request_counting PASSED [ 75%]
tests/unit/test_network_utils.py::TestNetworkUtils::test_log_request_function PASSED [ 75%]
tests/unit/test_network_utils.py::TestNetworkUtils::test_make_api_request_adds_default_headers PASSED [ 76%]
tests/unit/test_network_utils.py::TestNetworkUtils::test_make_api_request_connection_error PASSED [ 76%]
tests/unit/test_network_utils.py::TestNetworkUtils::test_make_api_request_custom_method PASSED [ 77%]
tests/unit/test_network_utils.py::TestNetworkUtils::test_make_api_request_get_success PASSED [ 77%]
tests/unit/test_network_utils.py::TestNetworkUtils::test_make_api_request_post_with_json PASSED [ 78%]
tests/unit/test_network_utils.py::TestNetworkUtils::test_make_api_request_post_with_string_data PASSED [ 78%]
tests/unit/test_network_utils.py::TestNetworkUtils::test_make_api_request_put_request PASSED [ 79%]
tests/unit/test_network_utils.py::TestNetworkUtils::test_make_api_request_rate_limiting PASSED [ 79%]
tests/unit/test_network_utils.py::TestDataAggregator::test_add_data_source PASSED [ 80%]
tests/unit/test_network_utils.py::TestDataAggregator::test_aggregate_all_data PASSED [ 80%]
tests/unit/test_network_utils.py::TestDataAggregator::test_aggregate_all_data_with_errors PASSED [ 81%]
tests/unit/test_network_utils.py::TestDataAggregator::test_data_aggregator_initialization PASSED [ 81%]
tests/unit/test_network_utils.py::TestDataAggregator::test_process_facebook_data PASSED [ 82%]
tests/unit/test_network_utils.py::TestDataAggregator::test_process_facebook_data_empty_insights PASSED [ 82%]
tests/unit/test_network_utils.py::TestDataAggregator::test_process_google_data PASSED [ 83%]
tests/unit/test_network_utils.py::TestDataAggregator::test_process_twitter_data PASSED [ 83%]
tests/unit/test_network_utils.py::TestUtilityFunctions::test_build_query_string_empty_params PASSED [ 84%]
tests/unit/test_network_utils.py::TestUtilityFunctions::test_build_query_string_url_encoding PASSED [ 84%]
tests/unit/test_network_utils.py::TestUtilityFunctions::test_build_query_string_with_params PASSED [ 85%]
tests/unit/test_network_utils.py::TestUtilityFunctions::test_validate_url_invalid_scheme PASSED [ 85%]
tests/unit/test_network_utils.py::TestUtilityFunctions::test_validate_url_malformed PASSED [ 86%]
tests/unit/test_network_utils.py::TestUtilityFunctions::test_validate_url_no_scheme PASSED [ 86%]
tests/unit/test_network_utils.py::TestUtilityFunctions::test_validate_url_valid_http PASSED [ 87%]
tests/unit/test_network_utils.py::TestUtilityFunctions::test_validate_url_valid_https PASSED [ 87%]
tests/unit/test_twitter_api.py::TestTwitterAPI::test_batch_get_multiple_accounts_success PASSED [ 88%]
tests/unit/test_twitter_api.py::TestTwitterAPI::test_bearer_token_encoding PASSED [ 88%]
tests/unit/test_twitter_api.py::TestTwitterAPI::test_generate_bearer_token_failure PASSED [ 89%]
tests/unit/test_twitter_api.py::TestTwitterAPI::test_generate_bearer_token_no_keys PASSED [ 89%]
tests/unit/test_twitter_api.py::TestTwitterAPI::test_generate_bearer_token_success PASSED [ 90%]
tests/unit/test_twitter_api.py::TestTwitterAPI::test_get_account_campaigns_with_stats PASSED [ 90%]
tests/unit/test_twitter_api.py::TestTwitterAPI::test_get_campaign_stats_empty_data PASSED [ 91%]
tests/unit/test_twitter_api.py::TestTwitterAPI::test_get_campaign_stats_no_token PASSED [ 91%]
tests/unit/test_twitter_api.py::TestTwitterAPI::test_get_campaign_stats_success PASSED [ 92%]
tests/unit/test_twitter_api.py::TestTwitterAPI::test_get_campaigns_api_error PASSED [ 92%]
tests/unit/test_twitter_api.py::TestTwitterAPI::test_get_campaigns_no_token PASSED [ 93%]
tests/unit/test_twitter_api.py::TestTwitterAPI::test_get_campaigns_success PASSED [ 93%]
tests/unit/test_twitter_api.py::TestTwitterAPI::test_get_promoted_tweets_no_token PASSED [ 94%]
tests/unit/test_twitter_api.py::TestTwitterAPI::test_get_promoted_tweets_success PASSED [ 94%]
tests/unit/test_twitter_api.py::TestTwitterAPI::test_global_constants PASSED [ 95%]
tests/unit/test_twitter_api.py::TestTwitterAPI::test_global_twitter_api_instance PASSED [ 95%]
tests/unit/test_twitter_api.py::TestTwitterAPI::test_setup_twitter_auth_with_keys PASSED [ 96%]
tests/unit/test_twitter_api.py::TestTwitterAPI::test_setup_twitter_auth_without_keys PASSED [ 96%]
tests/unit/test_twitter_api.py::TestTwitterAPI::test_twitter_api_initialization PASSED [ 97%]
tests/unit/test_twitter_api.py::TestUtilityFunctions::test_get_all_twitter_engagement_metrics PASSED [ 97%]
tests/unit/test_twitter_api.py::TestUtilityFunctions::test_get_twitter_summary_stats PASSED [ 98%]
tests/unit/test_twitter_api.py::TestUtilityFunctions::test_micros_conversion_in_stats PASSED [ 98%]
tests/unit/test_twitter_api.py::TestUtilityFunctions::test_quick_twitter_campaign_check_no_campaigns PASSED [ 99%]
tests/unit/test_twitter_api.py::TestUtilityFunctions::test_quick_twitter_campaign_check_success PASSED [ 99%]
tests/unit/test_twitter_api.py::TestUtilityFunctions::test_type_conversion_errors_in_totals PASSED [100%]

============================= 203 passed in 16.78s =============================
