from feed_ingestion.flows.amazon_music import exec # noqa:A004 from tests.testing_utils import (parametrize_by_dicts, raises_optionally) def test_prepare_parser_args(): parser = exec.FlowExec().prepare_parser() expected_args = { 'licensor', 'report', 'countries', 'context_date', 'days', 'skip', 'reload', 'check_status', } args = {action.dest for action in parser._actions} assert expected_args.issubset(args), expected_args.difference(args) @parametrize_by_dicts( 'cli, env, expected, raises', [ dict( case='licensor and report by command line, no countries', cli='--licensor sme --report prime', expected=dict( licensor='sme', report='prime', countries=None, source='sftp', _context={ 'report_name': 'prime', 'licensor': 'sme', 'source': 'sftp', } ) ), dict( case='report-name works the same as report', cli='--licensor sme --report-name prime', expected=dict( licensor='sme', report='prime', countries=None, source='sftp', _context={ 'report_name': 'prime', 'licensor': 'sme', 'source': 'sftp', } ) ), dict( case='licensor, countries and report by command line', cli='--licensor sme --countries=us,ca --report adsupported', expected=dict( licensor='sme', report='adsupported', countries='us,ca', source='sftp', _context={ 'report_name': 'adsupported', 'licensor': 'sme', 'countries': 'us,ca', 'source': 'sftp', } ) ), dict( case='source=datapulse by command line', cli='--licensor sme --report prime --source datapulse', expected=dict( licensor='sme', report='prime', source='datapulse', _context={ 'report_name': 'prime', 'licensor': 'sme', 'source': 'datapulse', } ) ), dict( case='licensor and report by env', env={ 'LICENSOR': 'sme', 'REPORT': 'prime', }, expected=dict( licensor='sme', report='prime', countries=None, source='sftp', _context={ 'report_name': 'prime', 'licensor': 'sme', 'source': 'sftp', } ) ), dict( case='CLI overrides ENV', cli='--licensor sme --report-name unlimited', env={ 'LICENSOR': 'sme', 'REPORT': 'prime', }, expected=dict( licensor='sme', report='unlimited', countries=None, source='sftp', _context={ 'report_name': 'unlimited', 'licensor': 'sme', 'source': 'sftp'} ) ), dict( case='licensor, countries and report by env', env={ 'LICENSOR': 'theorchard', 'REPORT': 'unlimited', 'COUNTRIES': 'it,fr', }, expected=dict( licensor='theorchard', report='unlimited', countries='it,fr', source='sftp', _context={ 'report_name': 'unlimited', 'licensor': 'theorchard', 'countries': 'it,fr', 'source': 'sftp'} ) ), dict( case='wrong source value', cli='--licensor sme --report prime --source bogus', raises=SystemExit ), dict( case='no licensor CLI', cli='--report prime', raises=SystemExit ), dict( case='no licensor ENV', env={'REPORT_NAME': 'prime'}, raises=SystemExit ), dict( case='no report CLI', cli='--licensor sme', raises=SystemExit ), dict( case='no report ENV', env={'LICENSOR': 'sme'}, raises=SystemExit ), dict( case='wrong licensor CLI', cli='--licensor not_sme --report prime', raises=SystemExit ), dict( case='wrong licensor ENV', cli='--report prime', env={'LICENSOR': 'not_sme'}, raises=SystemExit ), dict( case='wrong report CLI', cli='--licensor sme --report not_prime', raises=SystemExit ), dict( case='wrong report ENV', cli='--report not_prime', env={'LICENSOR': 'sme'}, raises=SystemExit ), ] ) def test_arguments( cli, env, expected, raises, monkeypatch): if env: monkeypatch.setattr('os.environ', env) cli = cli or '' assert not (expected and raises), 'Cannot have both expected and raises' argv = cli.split() flow_exec = exec.FlowExec() with raises_optionally(raises): parser = flow_exec.prepare_parser() args = parser.parse_args(argv) for key, value in expected.items(): assert getattr(args, key) == value