"""Unit tests for Amazon DataPulse config.""" import pytest from feed_ingestion.flows.amazon_datapulse import config @pytest.mark.parametrize( 'report_name,partition,expected', [ ( 'fraud_report', None, 'amazon_datapulse_fraud_report', ), ( 'fraud_report', { 'cadence': 'daily', 'region': 'US', 'report_date': '2024-01-15', 'entity_name': 'foo', 'service': 'music', 'music_territory': 'global', }, 'amazon_datapulse_fraud_report_daily' '_us_2024_01_15_foo_music_global', ), ( 'fraud_report', { 'cadence': 'bi-weekly', 'region': 'US', 'report_date': '2024-01-15', 'entity_name': 'foo', 'service': 'music', 'music_territory': 'global', }, 'amazon_datapulse_fraud_report_bi_weekly' '_us_2024_01_15_foo_music_global', ), ( 'daily_play_events', None, 'amazon_datapulse_daily_play_events', ), ( 'daily_play_events', { 'Service': 'UNLIMITED', 'Region': 'NA', 'Marketplace': 'ATVPDKIKX0DER', 'Territory': 'US', 'Year': '2024', 'Month': '01', 'Day': '15', }, 'amazon_datapulse_daily_play_events_unlimited' '_na_atvpdkikx0der_us_2024_01_15', ), ( 'daily_customer_metadata', { 'Region': 'NA', 'Marketplace': 'ATVPDKIKX0DER', 'Territory': 'US', 'Year': '2024', 'Month': '01', 'Day': '15', }, 'amazon_datapulse_daily_customer_metadata' '_na_atvpdkikx0der_us_2024_01_15', ), ( 'daily_playlist_metadata', { 'Region': 'NA', 'Marketplace': 'ATVPDKIKX0DER', 'Territory': 'US', 'Year': '2024', 'Month': '01', 'Day': '15', }, 'amazon_datapulse_daily_playlist_metadata' '_na_atvpdkikx0der_us_2024_01_15', ), ], ) def test_get_contextified_feed_name(report_name, partition, expected): assert ( config.get_contextified_feed_name(report_name, partition) == expected ) def test_get_contextified_feed_name_invalid_report_raises(): with pytest.raises(AssertionError): config.get_contextified_feed_name('nonexistent_report') @pytest.mark.parametrize( 'partition,expected', [ ({'report_date': '2024-01-15'}, '2024-01-15'), ( {'year': '2024', 'month': '01', 'day': '15'}, '2024-01-15', ), ( {'year': '2024', 'month': '1', 'day': '5'}, '2024-01-05', ), ({'region': 'US'}, None), ({}, None), ], ) def test_get_partition_date(partition, expected): assert config.get_partition_date(partition) == expected @pytest.mark.parametrize( 'env,report,expected', [ # fraud_report ( 'dev', 'fraud_report', ('dev_db', 'dev_schema', 'staging_raw_amazon_fraud_report'), ), ( 'qa', 'fraud_report', ('qa_fraud_reporting', 'amazon', 'staging_raw_amazon_fraud_report'), ), ( 'prod', 'fraud_report', ('fraud_reporting', 'amazon', 'staging_raw_amazon_fraud_report'), ), # daily_play_events ( 'dev', 'daily_play_events', ('dev_db', 'dev_schema', 'staging_raw_amazon_daily_play_events'), ), ( 'qa', 'daily_play_events', ('qa_consumer_reporting', 'amazon', 'staging_raw_amazon_daily_play_events'), ), ( 'prod', 'daily_play_events', ('consumer_reporting', 'amazon', 'staging_raw_amazon_daily_play_events'), ), # daily_customer_metadata ( 'dev', 'daily_customer_metadata', ('dev_db', 'dev_schema', 'staging_raw_amazon_daily_customer_metadata'), ), ( 'qa', 'daily_customer_metadata', ('qa_consumer_reporting', 'amazon', 'staging_raw_amazon_daily_customer_metadata'), ), ( 'prod', 'daily_customer_metadata', ('consumer_reporting', 'amazon', 'staging_raw_amazon_daily_customer_metadata'), ), # daily_playlist_metadata ( 'dev', 'daily_playlist_metadata', ('dev_db', 'dev_schema', 'staging_raw_amazon_daily_playlist_metadata'), ), ( 'qa', 'daily_playlist_metadata', ('qa_consumer_reporting', 'amazon', 'staging_raw_amazon_daily_playlist_metadata'), ), ( 'prod', 'daily_playlist_metadata', ('consumer_reporting', 'amazon', 'staging_raw_amazon_daily_playlist_metadata'), ), ], ) def test_get_staging_raw_database_schema_prod_qa( monkeypatch, env, report, expected ): monkeypatch.setattr(config, 'ENV', env) monkeypatch.setattr(config, 'SF_PARAMS', {'db': 'dev_db', 'schema': 'dev_schema'}) assert config.get_staging_raw_database_schema(report) == expected def test_get_staging_raw_database_schema_dev_uses_sf_params(monkeypatch): monkeypatch.setattr(config, 'ENV', 'dev') monkeypatch.setattr( config, 'SF_PARAMS', {'db': 'DEV_DB', 'schema': 'DEV_SCHEMA'} ) assert config.get_staging_raw_database_schema('fraud_report') == ( 'DEV_DB', 'DEV_SCHEMA', 'staging_raw_amazon_fraud_report', ) def test_get_staging_raw_database_schema_invalid_report_raises(): with pytest.raises(KeyError): config.get_staging_raw_database_schema('nonexistent_report')