import pytest from slz_spotify_charts_scraper.entities import FilePath from tests.entities import FilePathTuple @pytest.mark.parametrize( 'test_path, expected_result', [ ( 's3://test_bucket/path_level_0/path_level_1/test_filename.txt', FilePathTuple('test_bucket', 'path_level_0/path_level_1', 'test_filename.txt') ), ( 's3://test_bucket/path_level_0/test_filename.txt', FilePathTuple('test_bucket', 'path_level_0', 'test_filename.txt') ), ( 's3://test_bucket/path_level_0/test_filename', FilePathTuple('test_bucket', 'path_level_0', 'test_filename') ), ( 's3://test_bucket/test_filename.txt', FilePathTuple('test_bucket', '', 'test_filename.txt') ), ('s3://test_bucket/test_filename', FilePathTuple('test_bucket', '', 'test_filename')), ( 's3://test_bucket/path_level_0/path_level_1/test_filename.txt?check=a#dummy', FilePathTuple('test_bucket', 'path_level_0/path_level_1', 'test_filename.txt') ), ] ) def test_file_path_from_str_success(test_path: str, expected_result: FilePathTuple): filepath = FilePath.from_str(test_path) assert filepath.bucket == expected_result.bucket assert filepath.path == expected_result.path assert filepath.filename == expected_result.filename @pytest.mark.parametrize( 'test_path', [ 's3://test_bucket/path_level_0/path_level_1/test_filename.txt/', 's3://test_bucket/path_level_0/path_level_1/test_filename/', 's3://test_bucket/path_level_0/test_filename.txt/', 's3://test_bucket/path_level_0/test_filename/', 's3://test_bucket/test_filename.txt/', 's3://test_filename.txt/', 's3://bucket/', 's3://bucket', ] ) def test_file_path_from_str_fail(test_path): with pytest.raises(ValueError): FilePath.from_str(test_path) @pytest.mark.parametrize( 'test_path', [ 's3://test_bucket/path_level_0/path_level_1/test_filename.txt', 's3://test_bucket/path_level_0/test_filename.txt', 's3://test_bucket/path_level_0/test_filename', 's3://test_bucket/test_filename.txt', 's3://test_bucket/test_filename', ] ) def test_file_path_to_str(test_path: str): file_path = FilePath.from_str(test_path) assert file_path.to_str() == test_path @pytest.mark.parametrize( 'initial_path, bucket_name, expected_result', [ ( 's3://test_bucket/path_level_0/path_level_1/test_filename', 'another_bucket', 's3://another_bucket/path_level_0/path_level_1/test_filename' ), ( 's3://test_bucket/path_level_0/test_filename', 'another_bucket', 's3://another_bucket/path_level_0/test_filename' ), ( 's3://test_bucket/path_level_0/test_filename.txt', 'another_bucket', 's3://another_bucket/path_level_0/test_filename.txt' ), ( 's3://test_bucket/test_filename.txt', 'another_bucket', 's3://another_bucket/test_filename.txt' ), ] ) def test_file_path_move_to_bucket(initial_path: str, bucket_name: str, expected_result: str): file_path = FilePath.from_str(initial_path) new_file_path = file_path.move_to_bucket(bucket_name) assert new_file_path.to_str() == expected_result @pytest.mark.parametrize( 'initial_path, bucket_name, expected_exception', [ ('s3://test_bucket/path_level_0/path_level_1/test_filename', '', ValueError), ('s3://test_bucket/path_level_0/test_filename', 123, TypeError), ('s3://test_bucket/path_level_0/test_filename.txt', None, TypeError), ('s3://test_bucket/test_filename.txt', '/another_bucket/', ValueError), ] ) def test_file_path_move_to_bucket_fail( initial_path: str, bucket_name: str, expected_exception: Exception ): file_path = FilePath.from_str(initial_path) with pytest.raises(expected_exception): file_path.move_to_bucket(bucket_name) @pytest.mark.parametrize( 'test_path, expected_result', [ ( 's3://test_bucket/path_level_0/path_level_1/test_filename', 's3://test_bucket/path_level_0/path_level_1/' ), ('s3://test_bucket/path_level_0/test_filename', 's3://test_bucket/path_level_0/'), ('s3://test_bucket/path_level_0/test_filename.txt', 's3://test_bucket/path_level_0/'), ('s3://test_bucket/test_filename.txt', 's3://test_bucket/'), ] ) def test_file_path_get_prefix(test_path: str, expected_result: str): file_path = FilePath.from_str(test_path) assert file_path.get_prefix() == expected_result