"""Test Apple Music generators module.""" import pytest from feed_ingestion.flows.apple_music_streams import config from feed_ingestion.flows.apple_music_streams import generators class TestGenerators: """Test generators.""" maxDiff = None @pytest.fixture def context_theorchard(self, mock_reports_status_names): """Return necessary context.""" context = { 'bootstrap.date': '2016-01-01', 'bootstrap.processed_datetime': '2016-01-01T00:00:00', 'bootstrap.s3_archive_bucket': 's3://dev-cucumbers/AppleMusicStreams/archives/2016-01-01/', 'bootstrap.s3_bucket': 'dev-cucumbers', 'bootstrap.feed_name_for_fact_analytics': 'apple_music_amStreams', 'bootstrap.reports_status_names': mock_reports_status_names['theorchard'], 'check_available_reports.available_reports': mock_reports_status_names['theorchard'], 'bootstrap.snowflake_error_limit': config.snowflake_error_limit, 'licensor': 'theorchard' } return context @pytest.fixture def context_sme(self, mock_reports_status_names): """Return necessary context.""" context = { 'bootstrap.date': '2016-01-01', 'bootstrap.processed_datetime': '2016-01-01T00:00:00', 'bootstrap.s3_archive_bucket': 's3://dev-cucumbers/AppleMusicStreams/archives/2016-01-01/', 'bootstrap.s3_bucket': 'dev-cucumbers', 'bootstrap.feed_name_for_fact_analytics': 'apple_music_amStreams', 'bootstrap.reports_status_names': mock_reports_status_names['sme'], 'check_available_reports.available_reports': mock_reports_status_names['sme'], 'bootstrap.snowflake_error_limit': config.snowflake_error_limit, 'licensor': 'sme' } return context def test_itunes_reports_generator_theorchard( self, context_theorchard, mock_reports_status_names): """Test itunes_reports_generator.""" generator = list(generators.itunes_reports_generator( context_theorchard)) count = sum([ len(description['vendors']) for report, description in mock_reports_status_names[ 'theorchard'].items()]) assert len(generator) == count def test_itunes_reports_generator_sme( self, context_sme, mock_reports_status_names): """Test itunes_reports_generator.""" generator = list(generators.itunes_reports_generator( context_sme)) count = sum([ len(description['vendors']) for report, description in mock_reports_status_names[ 'sme'].items()]) assert len(generator) == count def test_temp_staging_raw_generator_theorchard( self, context_theorchard, mock_reports_status_names): """Test temp_staging_raw_generator.""" generator = list( generators.temp_staging_raw_generator(context_theorchard)) count = sum([ len(description['vendors']) for report, description in mock_reports_status_names[ 'theorchard'].items()]) assert len(generator) == count def test_temp_staging_raw_generator_sme( self, context_sme, mock_reports_status_names): """Test temp_staging_raw_generator.""" generator = list(generators.temp_staging_raw_generator(context_sme)) count = sum([ len(description['vendors']) for report, description in mock_reports_status_names[ 'sme'].items()]) assert len(generator) == count def test_populate_staging_raw_generator_theorchard( self, context_theorchard, mock_reports_status_names): """Test populate_staging_raw_generator.""" generator = list(generators.populate_staging_raw_generator( context_theorchard)) gen_count = len(set([report['report_name'] for report in generator])) count = len([ report for report in mock_reports_status_names['theorchard'] if 'staging_raw_table' in config.reports[report]]) assert gen_count == count for report in config.common_reports: assert report not in generator def test_populate_staging_raw_generator_sme( self, context_sme, mock_reports_status_names): """Test populate_staging_raw_generator.""" generator = list(generators.populate_staging_raw_generator( context_sme)) gen_count = len(set([report['report_name'] for report in generator])) count = len([ report for report in mock_reports_status_names['sme'] if 'staging_raw_table' in config.reports[report]]) assert gen_count == count for report in config.common_reports: assert report not in generator def test_update_feed_file_status_generator_theorchard( self, context_theorchard): """Test update_feed_file_status_generator.""" generator = list(generators.update_feed_file_status_generator( context_theorchard)) # amNonRoyaltyStreams report only for theorchard assert len(generator) == 11 def test_update_feed_file_status_generator_sme( self, context_sme): """Test update_feed_file_status_generator.""" generator = list(generators.update_feed_file_status_generator( context_sme)) assert len(generator) == 11 def test_update_staging_raw_library_reports_generator( self, context_theorchard): """Test update_staging_raw_library_reports_generator.""" generator = list( generators.update_staging_raw_library_reports_generator( context_theorchard)) assert len(generator) == len(config.reports_to_update)