import argparse import pytest from feed_ingestion.flows.spotify_track_metrics import exec # noqa:A004 from tests.test_exec_flow import FlowExecTestBase from tests.testing_utils import parametrize_by_dicts, raises_optionally class TestFlowExec(FlowExecTestBase): @pytest.fixture(autouse=True) def setup(self): self.flow_exec = exec.FlowExec() PARSER_ARGS = FlowExecTestBase.PARSER_ARGS | { 'report', 'days', 'skip', } ARGS_REQUIRED = FlowExecTestBase.ARGS_REQUIRED | { 'report'} AGRS_CHOICES = FlowExecTestBase.AGRS_CHOICES | { 'report': ['ALL', 'playlist_atc', 'track_passion', 'track_conversion'], } """ARGS_DEFAULTS = FlowExecTestBase.ARGS_DEFAULTS | { 'skip': 1, 'days': 1, }""" @parametrize_by_dicts( 'args, expected, raises', [ dict( case='one report', args=argparse.Namespace( report='playlist_atc' ), expected=[ {'report': 'playlist_atc'}, ] ), dict( case='ALL reports', args=argparse.Namespace( report='ALL' ), expected=[ {'report': 'playlist_atc'}, {'report': 'track_passion'}, {'report': 'track_conversion'}, ] ), dict( case='None report', args=argparse.Namespace( report=None ), expected=[{}] ), dict( case='empty report', args=argparse.Namespace( report='' ), expected=[{}] ), ] ) def test_generate_contexts(self, args, expected, raises): self.flow_exec.args = args with raises_optionally(raises): contexts = self.flow_exec.generate_contexts() assert list(contexts) == expected