import os from feed_ingestion.flows.apple_podcasts_subscription_snapshot import exec # noqa:A004,E501 from tests.testing_utils import (raises_optionally, parametrize_by_dicts) def test_flow_name(): assert exec.FlowExec().flow_name == 'apple_podcasts_subscription_snapshot' def test_prepare_parser_args(): parser = exec.FlowExec().prepare_parser() expected_args = { 'vendor_name', '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 @parametrize_by_dicts( 'argv, env, expected, raises', [ dict( case='vendor_name by cli', argv=['--vendor-name=SME'], env={}, expected={ 'vendor_name': 'SME', } ), dict( case='vendor_name by ENV', argv=[], env=dict(VENDOR_NAME='SME'), expected={ 'vendor_name': 'SME', } ), dict( case='missing vendor_name', argv=['--date', '2024-11-11'], env=dict(), 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