from typing import Any, Dict import pytest from slz_dbx_job_runner.entities import ( # yapf=disable AmazonClass, AmazonConfig, ApolloClass, ApolloConfig, ConfigBase, DBXJobParams ) @pytest.mark.parametrize( 'config,expected', [ ( ApolloConfig( id='1', command_class=ApolloClass(apple='cls1', spotify='cls2'), command_opts='-opt1 1 -opt2 2', command_jar='s3://app.jar', url='dbx_url', token='XCV', ), dict( id='1', command_class=dict(apple='cls1', spotify='cls2'), command_opts='-opt1 1 -opt2 2', command_jar='s3://app.jar', url='dbx_url', token='XCV', ) ), ( AmazonConfig( id='2', command_class=AmazonClass(chartmetric_amazon_playlist_meta='cls3'), command_opts='-opt1 1 -opt2 2', command_jar='s3://path/app1.jar', url='dbx_url_A', token='XCVW', ), dict( id='2', command_class=dict(chartmetric_amazon_playlist_meta='cls3'), command_opts='-opt1 1 -opt2 2', command_jar='s3://path/app1.jar', url='dbx_url_A', token='XCVW', ) ) ] ) def test_config_as_dict(config: ConfigBase, expected: Dict[str, Any]) -> None: assert config.as_dict() == expected @pytest.mark.parametrize( 'command_class,context,expected', [ ( AmazonClass(chartmetric_amazon_playlist_meta='cls1'), 'amazon', 'cls1', ), ( ApolloClass(apple='cls2', spotify='cls3'), 'apple', 'cls2', ), ( ApolloClass(apple='cls2', spotify='cls3'), 'spotify', 'cls3', ), ] ) def test_command_class_get_name(command_class, context, expected): assert command_class.get_name(context) == expected @pytest.mark.parametrize( 's3_path,expected', [ ( 'apollo/apple_playlist_track_position/v1/report_date=2020-06-18/report_licensor=sme/apple_playlist_track_position_20200618_v1.ndjson', DBXJobParams( dsp='apollo', report_date='2020-06-18', context='apple', ), ), ( 'apollo/spotify_playlist_track_position/v1/report_date=2020-04-21/report_licensor=sme/spotify_playlist_track_position_20200421_v1.ndjson', DBXJobParams( dsp='apollo', report_date='2020-04-21', context='spotify', ), ), ( 'chartmetric/amazon_playlist_track_position/v1/report_date=2020-04-21/report_licensor=sme/amazon_playlist_track_position.parquet', DBXJobParams( dsp='chartmetric', report_date='2020-04-21', context='amazon', ), ) ] ) def test_dbx_job_params(s3_path, expected): assert DBXJobParams.from_s3_path(s3_path) == expected