def test_list_directory_strips_compression_extensions(blockchain_path, compression):
    storage = PathOptimizedFileSystemStorage(blockchain_path)

    mkdir_and_touch(blockchain_path / f'a/a.txt.{compression}')

    listed = list(storage.list_directory())
    assert listed == ['a.txt']
def test_list_directory_filename_is_not_duplicated_on_name_conflict(blockchain_path):
    storage = PathOptimizedFileSystemStorage(blockchain_path)

    mkdir_and_touch(blockchain_path / 'f/i/l/e/file.txt')
    mkdir_and_touch(blockchain_path / 'f/i/l/e/file.txt.gz')

    listed = list(storage.list_directory())
    assert listed == ['file.txt']
def test_non_optimized_paths_are_not_listed(blockchain_path):
    storage = PathOptimizedFileSystemStorage(blockchain_path)
    non_optimized_file_path = 'file.txt'

    mkdir_and_touch(blockchain_path / non_optimized_file_path)

    listed = list(storage.list_directory())
    assert listed == []
def test_list_subdirectory(blockchain_path):
    storage = PathOptimizedFileSystemStorage(blockchain_path)

    mkdir_and_touch(blockchain_path / 'path_1/a/a.txt')
    mkdir_and_touch(blockchain_path / 'path_1/b/b.txt')

    mkdir_and_touch(blockchain_path / 'path_2/c/c.txt')
    mkdir_and_touch(blockchain_path / 'path_2/d/d.txt')

    listed = set(storage.list_directory(prefix='path_1'))
    assert listed == {'path_1/a.txt', 'path_1/b.txt'}
def test_can_list_directory_with_sorting(blockchain_path, sort_direction, expected):
    storage = PathOptimizedFileSystemStorage(blockchain_path)

    mkdir_and_touch(blockchain_path / '1/1.txt')
    mkdir_and_touch(blockchain_path / '1/0/10.txt')
    mkdir_and_touch(blockchain_path / '2/2.txt')

    listed = list(storage.list_directory(sort_direction=sort_direction))
    assert listed == expected
def test_can_list_directory_without_sorting(blockchain_path):
    storage = PathOptimizedFileSystemStorage(blockchain_path)

    mkdir_and_touch(blockchain_path / '1/1.txt')
    mkdir_and_touch(blockchain_path / '1/0/10.txt')
    mkdir_and_touch(blockchain_path / '2/2.txt')

    listed = storage.list_directory(sort_direction=None)
    assert {
        '1.txt',
        '10.txt',
        '2.txt',
    } == set(listed)