from datetime import datetime import pytest import pytz from slz_api_service.errors import RangeError from slz_api_service.v1.utils import DateUtils, QueryUtils, StringUtils class TestDateUtils: @pytest.mark.parametrize('start,end,expected', [ ('2019-01-01', '2019-01-01', ['2019-01-01']), ('2019-01-01', '2019-01-05', [ '2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04', '2019-01-05']), ]) def test_date_range(self, start, end, expected): assert DateUtils.date_range(start, end) == expected def test_date_range_invalid_range(self): with pytest.raises(RangeError) as e: DateUtils.date_range('2019-01-05', '2019-01-01') def test_today(self): result = DateUtils.today() assert result.tzinfo == pytz.utc @pytest.mark.parametrize('date,fmt,expected', [ (datetime(2019, 1, 2, tzinfo=pytz.utc), '%Y-%m-%d', '2019-01-02'), (datetime(2019, 1, 2, tzinfo=pytz.utc), '%m/%d/%Y', '01/02/2019'), ]) def test_as_str(self, date, fmt, expected): assert DateUtils.as_str(date, fmt) == expected @pytest.mark.parametrize('date,fmt,expected', [ ('2019-01-02', '%Y-%m-%d', datetime(2019, 1, 2, tzinfo=pytz.utc)), ('01/02/2019', '%m/%d/%Y', datetime(2019, 1, 2, tzinfo=pytz.utc)), ]) def test_from_str(self, date, fmt, expected): assert DateUtils.from_str(date, fmt) == expected @pytest.mark.parametrize('date1,date2,expected', [ (datetime(2019, 1, 2, tzinfo=pytz.utc), datetime(2019, 1, 3, tzinfo=pytz.utc), True), (datetime(2019, 1, 2, tzinfo=None), datetime(2019, 1, 3, tzinfo=pytz.utc), True), (datetime(2019, 1, 3, tzinfo=pytz.utc), datetime(2019, 1, 2, tzinfo=pytz.utc), False), (datetime(2019, 1, 3, tzinfo=None), datetime(2019, 1, 2, tzinfo=pytz.utc), False), ]) def test_before(self, date1, date2, expected): assert DateUtils.before(date1, date2) == expected class TestQueryUtils: def test_get_uow_id(self): kwargs = { 'dsp': 'apple', 'report_type': 'amEvent', 'version': 'v1_2', 'report_date': '2019-08-11', 'report_licensor': 'sme', } expected = 'apple-20190811-sme-amEvent-v1_2' assert QueryUtils.get_uow_id(**kwargs) == expected def test_get_uow_id_apple_map(self): kwargs = { 'dsp': 'apple', 'report_type': 'event', 'version': 'v1_2', 'report_date': '2019-08-11', 'report_licensor': 'sme', } expected = 'apple-20190811-sme-amEvent-v1_2' assert QueryUtils.get_uow_id(**kwargs) == expected class TestStringUtils: @pytest.mark.parametrize('name,expected', [ ('ListenersGenderFemaleAge25_34', 'listeners_gender_female_age_25_34'), ('ListenersGenderFemaleAge_25_34', 'listeners_gender_female_age_25_34'), ('ListenersGenderFemale', 'listeners_gender_female'), ]) def test_camel_to_snake_case(self, name, expected): assert StringUtils.camel_to_snake_case(name) == expected