import os from feed_ingestion.flows.apple_podcasts_subscription_snapshot_monthly import exec # noqa:A004,E501 from tests.testing_utils import (parametrize_by_dicts, raises_optionally) def test_flow_name(): assert (exec.FlowExec().flow_name == 'apple_podcasts_subscription_snapshot_monthly') def test_prepare_parser_args(): parser = exec.FlowExec().prepare_parser() expected_args = { 'vendor_name', 'source', 'context_date', 'days', 'skip', 'context', 'reload', 'check_status', } args = {action.dest: action for action in parser._actions} assert expected_args.issubset(args), expected_args.difference(args) assert set(args['vendor_name'].choices) == {'SME', 'POD_SUB_LLC'} assert args['vendor_name'].required is True assert set(args['source'].choices) == {'Monthly', 'Weekly', 'Daily'} assert args['source'].required is True @parametrize_by_dicts( 'argv, env, expected, raises', [ dict( case='vendor_name and source by CLI', argv=['--vendor-name=SME', '--source=Monthly'], env={}, expected={ 'source': 'Monthly', 'vendor_name': 'SME', } ), dict( case='vendor_name and source by ENV', argv=[], env={'VENDOR_NAME': 'SME', 'SOURCE': 'Daily'}, expected={ 'source': 'Daily', 'vendor_name': 'SME', } ), dict( case='source by CLI, missing vendor_name', argv=['--source=Monthly'], env={}, raises=SystemExit ), dict( case='vendor_name by ENV, missing source', argv=[], env={'VENDOR_NAME': 'SME'}, raises=SystemExit ), ] ) def test_cli( argv, env, expected, raises, monkeypatch): monkeypatch.setattr(os, 'environ', env) flow_exec = exec.FlowExec() parser = flow_exec.prepare_parser() with raises_optionally(raises): args = parser.parse_args(argv) assert args._context == expected