"""Tests for flows.theatrical.download_to_db_utils.py module.""" from datetime import date import pytest from flows.theatrical import download_to_db_utils as dtd_utils def test_gross_columns_for_period(): """Test of gross_columns_for_period function.""" start = date(2016, 11, 14) end = date(2016, 11, 17) result = dtd_utils.gross_columns_for_period(start, end) assert 'mon_gross' in result assert 'tue_gross' in result assert 'wed_gross' in result assert 'thu_gross' in result assert 'fri_gross' not in result assert 'sat_gross' not in result assert 'sun_gross' not in result def test_gross_columns_for_weekly_period(): """Test of gross_columns_for_period function. For weekly period. """ start = date(2016, 11, 15) end = date(2016, 11, 21) result = dtd_utils.gross_columns_for_period(start, end) assert 'mon_gross' in result assert 'tue_gross' in result assert 'wed_gross' in result assert 'thu_gross' in result assert 'fri_gross' in result assert 'sat_gross' in result assert 'sun_gross' in result def test_gross_columns_for_one_day_period(): """Test of gross_columns_for_period function.""" start = date(2016, 11, 14) end = date(2016, 11, 14) result = dtd_utils.gross_columns_for_period(start, end) assert 'mon_gross' in result assert 'tue_gross' not in result assert 'wed_gross' not in result assert 'thu_gross' not in result assert 'fri_gross' not in result assert 'sat_gross' not in result assert 'sun_gross' not in result @pytest.mark.parametrize('start,end', [ (date(2016, 11, 14), date(2016, 11, 24)), (date(2016, 11, 14), date(2016, 11, 4)), # start > end (date(2016, 11, 14), date(2016, 11, 21)), # edge case (8 days) ]) def test_columns_for_incorrect_period(start, end): """Test of gross_columns_for_period function. With incorrect input data. """ result = dtd_utils.gross_columns_for_period(start, end) assert result == {} SOURCE_CSV_STRUCTURE = [ 'company_name', 'film_id', 'upc', 'film_name', 'division_id', 'division_name', 'branch_id', 'branch_name', 'circuit_id', 'theater_id', 'theater_name', 'city_state', 'booking_type', 'booking_no', 'week_no', 'play_date', 'gross_type', 'fri_gross', 'fri_pcode', 'sat_gross', 'sat_pcode', 'sun_gross', 'sun_pcode', 'mon_gross', 'mon_pcode', 'tue_gross', 'tue_pcode', 'wed_gross', 'wed_pcode', 'thu_gross', 'thu_pcode', 'is_fri_est', 'is_sat_est', 'is_sun_est', 'is_mon_est', 'is_tue_est', 'is_wed_est', 'is_thu_est', 'curr_3day', 'curr_7day', 'prev_3day', 'prev_7day', 'mkt_name', 'dma_id', 'dma_name', 'ranking'] def _gen_row(structure, **columns): """Generate row with given structure. Args: structure (list): header of CSV file. **columns (dict): keyword parameters (where key - column, val - value). Returns: list: Row. """ row = list(structure) for column, value in columns.items(): row[row.index(column)] = value return row def test_filter_and_transform(): """Test of filter_and_transform function.""" header = SOURCE_CSV_STRUCTURE rows = [ _gen_row( SOURCE_CSV_STRUCTURE, upc='1', company_name=' foo ', fri_gross='1,111.1 ', sat_gross='22.2', sun_gross='33.3'), _gen_row( SOURCE_CSV_STRUCTURE, upc='2', company_name='bar', fri_gross='44.4', sat_gross='55.5', sun_gross='66.6'), _gen_row( SOURCE_CSV_STRUCTURE, upc='3', company_name='baz ', fri_gross='77.7', sat_gross='88.8', sun_gross=' 99.9 ')] date_start = date(2016, 11, 18) date_end = date(2016, 11, 20) new_header, new_rows, new_upcs = dtd_utils.filter_and_transform( header, rows, date_start, date_end) assert new_header == dtd_utils.CSV_STRUCTURE assert len(new_rows) == 9 assert '1' in new_upcs assert '2' in new_upcs assert '3' in new_upcs assert _gen_row( dtd_utils.CSV_STRUCTURE, upc='1', company_name='foo', gross='1111.1', date='2016-11-18') in new_rows assert _gen_row( dtd_utils.CSV_STRUCTURE, upc='1', company_name='foo', gross='22.2', date='2016-11-19') in new_rows assert _gen_row( dtd_utils.CSV_STRUCTURE, upc='1', company_name='foo', gross='33.3', date='2016-11-20') in new_rows assert _gen_row( dtd_utils.CSV_STRUCTURE, upc='2', company_name='bar', gross='44.4', date='2016-11-18') in new_rows assert _gen_row( dtd_utils.CSV_STRUCTURE, upc='2', company_name='bar', gross='55.5', date='2016-11-19') in new_rows assert _gen_row( dtd_utils.CSV_STRUCTURE, upc='2', company_name='bar', gross='66.6', date='2016-11-20') in new_rows assert _gen_row( dtd_utils.CSV_STRUCTURE, upc='3', company_name='baz', gross='77.7', date='2016-11-18') in new_rows assert _gen_row( dtd_utils.CSV_STRUCTURE, upc='3', company_name='baz', gross='88.8', date='2016-11-19') in new_rows assert _gen_row( dtd_utils.CSV_STRUCTURE, upc='3', company_name='baz', gross='99.9', date='2016-11-20') in new_rows