diff --git a/borgmatic/actions/browse/directory_list.py b/borgmatic/actions/browse/directory_list.py index 4b2a0cf3..70168c74 100644 --- a/borgmatic/actions/browse/directory_list.py +++ b/borgmatic/actions/browse/directory_list.py @@ -135,7 +135,7 @@ class Directory_list(textual.widgets.OptionList): ), ) else: - borgmatic.actions.browse.workers.load_archive_files( + borgmatic.actions.browse.workers.load_archive_paths( self.app, directory_list=self, config=self.config, diff --git a/borgmatic/actions/browse/workers.py b/borgmatic/actions/browse/workers.py index a464e9e9..bdbd100e 100644 --- a/borgmatic/actions/browse/workers.py +++ b/borgmatic/actions/browse/workers.py @@ -89,7 +89,7 @@ class Archive_path_loaded(textual.signal.Signal): @textual.work(thread=True) -def load_archive_files(browse_app, directory_list, config, repository, archive_name): +def load_archive_paths(browse_app, directory_list, config, repository, archive_name): for archive_path in borgmatic.actions.browse.archive.get_archive_paths( config, repository, archive_name ): diff --git a/tests/integration/actions/browse/test_app.py b/tests/integration/actions/browse/test_app.py index 02b79421..8e620eac 100644 --- a/tests/integration/actions/browse/test_app.py +++ b/tests/integration/actions/browse/test_app.py @@ -1,5 +1,7 @@ import borgmatic.actions.browse.app -import borgmatic.actions.browse.panels +import borgmatic.actions.browse.configuration_files_list +import borgmatic.actions.browse.logs +import borgmatic.actions.browse.repositories_list import pytest from flexmock import flexmock @@ -21,7 +23,8 @@ async def test_browse_app_with_multiple_configs_uses_configuration_files_list(): carousel = app.query_one(selector='Carousel') assert len(carousel.panels) == 1 assert isinstance( - carousel.panels[0], borgmatic.actions.browse.panels.Configuration_files_list + carousel.panels[0], + borgmatic.actions.browse.configuration_files_list.Configuration_files_list, ) assert carousel.panels[0].configs == app.configs @@ -43,7 +46,9 @@ async def test_browse_app_with_one_config_uses_repositories_list(): carousel = app.query_one(selector='Carousel') assert len(carousel.panels) == 1 - assert isinstance(carousel.panels[0], borgmatic.actions.browse.panels.Repositories_list) + assert isinstance( + carousel.panels[0], borgmatic.actions.browse.repositories_list.Repositories_list + ) assert carousel.panels[0].config == app.configs['test1.yaml'] app.query_one(selector='Logs') diff --git a/tests/integration/actions/browse/test_carousel.py b/tests/integration/actions/browse/test_carousel.py index 01e106a8..438eeccc 100644 --- a/tests/integration/actions/browse/test_carousel.py +++ b/tests/integration/actions/browse/test_carousel.py @@ -1,8 +1,8 @@ import borgmatic.actions.browse.app +import borgmatic.actions.browse.archive import borgmatic.actions.browse.carousel import borgmatic.actions.browse.loading import borgmatic.actions.browse.logs -import borgmatic.actions.browse.panels import borgmatic.actions.browse.workers import pytest @@ -17,11 +17,15 @@ def test_make_next_panel_with_configuration_files_list_returns_repositories_list configs = {'test.yaml': {'repositories': [{'path': 'test.borg'}]}} repositories_list = module.make_next_panel( - focused_panel=borgmatic.actions.browse.panels.Configuration_files_list(configs), + focused_panel=borgmatic.actions.browse.configuration_files_list.Configuration_files_list( + configs + ), option_id='test.yaml', ) - assert isinstance(repositories_list, borgmatic.actions.browse.panels.Repositories_list) + assert isinstance( + repositories_list, borgmatic.actions.browse.repositories_list.Repositories_list + ) assert repositories_list.config == configs['test.yaml'] @@ -29,16 +33,16 @@ def test_make_next_panel_with_repositories_list_returns_archives_list(): config = {'repositories': [{'path': 'test.borg'}]} flexmock(borgmatic.actions.browse.loading).should_receive('add_inline_loading_indicator') flexmock(borgmatic.actions.browse.workers).should_receive('add_repository_archives') - flexmock(borgmatic.actions.browse.panels.Archives_list).should_receive('app').and_return( + flexmock(borgmatic.actions.browse.archives_list.Archives_list).should_receive('app').and_return( flexmock() ) archives_list = module.make_next_panel( - focused_panel=borgmatic.actions.browse.panels.Repositories_list(config), + focused_panel=borgmatic.actions.browse.repositories_list.Repositories_list(config), option_id=0, ) - assert isinstance(archives_list, borgmatic.actions.browse.panels.Archives_list) + assert isinstance(archives_list, borgmatic.actions.browse.archives_list.Archives_list) assert archives_list.config == config assert archives_list.repository == config['repositories'][0] @@ -47,22 +51,22 @@ def test_make_next_panel_with_archives_list_returns_directory_list(): config = {'repositories': [{'path': 'test.borg'}]} flexmock(borgmatic.actions.browse.loading).should_receive('add_inline_loading_indicator') flexmock(borgmatic.actions.browse.workers).should_receive('add_repository_archives') - flexmock(borgmatic.actions.browse.workers).should_receive('add_archive_files') - flexmock(borgmatic.actions.browse.panels.Archives_list).should_receive('app').and_return( - flexmock() - ) - flexmock(borgmatic.actions.browse.panels.Directory_list).should_receive('app').and_return( + flexmock(borgmatic.actions.browse.workers).should_receive('load_archive_paths') + flexmock(borgmatic.actions.browse.archives_list.Archives_list).should_receive('app').and_return( flexmock() ) + flexmock(borgmatic.actions.browse.directory_list.Directory_list).should_receive( + 'app' + ).and_return(flexmock()) directory_list = module.make_next_panel( - focused_panel=borgmatic.actions.browse.panels.Archives_list( + focused_panel=borgmatic.actions.browse.archives_list.Archives_list( config, config['repositories'][0] ), option_id='archive', ) - assert isinstance(directory_list, borgmatic.actions.browse.panels.Directory_list) + assert isinstance(directory_list, borgmatic.actions.browse.directory_list.Directory_list) assert directory_list.config == config assert directory_list.repository == config['repositories'][0] @@ -70,18 +74,26 @@ def test_make_next_panel_with_archives_list_returns_directory_list(): def test_make_next_panel_with_root_directory_list_and_selected_directory_option_returns_new_directory_list(): config = {'repositories': [{'path': 'test.borg'}]} flexmock(borgmatic.actions.browse.loading).should_receive('add_inline_loading_indicator') - flexmock(borgmatic.actions.browse.workers).should_receive('add_archive_files') - flexmock(borgmatic.actions.browse.panels.Directory_list).should_receive('app').and_return( - flexmock() + flexmock(borgmatic.actions.browse.workers).should_receive('load_archive_paths') + flexmock(borgmatic.actions.browse.workers).should_receive('Archive_path_loaded').replace_with( + flexmock( + path_hierarchy={ + 'etc': {}, + }, + complete=False, + ), ) - focused_panel = borgmatic.actions.browse.panels.Directory_list( + flexmock(borgmatic.actions.browse.directory_list.Directory_list).should_receive( + 'app' + ).and_return(flexmock()) + focused_panel = borgmatic.actions.browse.directory_list.Directory_list( config, config['repositories'][0], 'archive' ) flexmock(focused_panel).should_receive('get_option').and_return(flexmock(prompt='📁 etc')) directory_list = module.make_next_panel(focused_panel=focused_panel, option_id='etc') - assert isinstance(directory_list, borgmatic.actions.browse.panels.Directory_list) + assert isinstance(directory_list, borgmatic.actions.browse.directory_list.Directory_list) assert directory_list.config == config assert directory_list.repository == config['repositories'][0] assert directory_list.archive_name == 'archive' @@ -91,11 +103,21 @@ def test_make_next_panel_with_root_directory_list_and_selected_directory_option_ def test_make_next_panel_with_non_root_directory_list_and_selected_directory_option_returns_new_directory_list(): config = {'repositories': [{'path': 'test.borg'}]} flexmock(borgmatic.actions.browse.loading).should_receive('add_inline_loading_indicator') - flexmock(borgmatic.actions.browse.workers).should_receive('add_archive_files') - flexmock(borgmatic.actions.browse.panels.Directory_list).should_receive('app').and_return( - flexmock() + flexmock(borgmatic.actions.browse.workers).should_receive('load_archive_paths') + flexmock(borgmatic.actions.browse.workers).should_receive('Archive_path_loaded').replace_with( + flexmock( + path_hierarchy={ + 'etc': { + 'borgmatic': {}, + }, + }, + complete=False, + ), ) - focused_panel = borgmatic.actions.browse.panels.Directory_list( + flexmock(borgmatic.actions.browse.directory_list.Directory_list).should_receive( + 'app' + ).and_return(flexmock()) + focused_panel = borgmatic.actions.browse.directory_list.Directory_list( config, config['repositories'][0], 'archive', @@ -105,7 +127,7 @@ def test_make_next_panel_with_non_root_directory_list_and_selected_directory_opt directory_list = module.make_next_panel(focused_panel=focused_panel, option_id='borgmatic') - assert isinstance(directory_list, borgmatic.actions.browse.panels.Directory_list) + assert isinstance(directory_list, borgmatic.actions.browse.directory_list.Directory_list) assert directory_list.config == config assert directory_list.repository == config['repositories'][0] assert directory_list.archive_name == 'archive' @@ -115,15 +137,15 @@ def test_make_next_panel_with_non_root_directory_list_and_selected_directory_opt def test_make_next_panel_with_root_directory_list_and_selected_file_option_returns_new_file_preview(): config = {'repositories': [{'path': 'test.borg'}]} flexmock(borgmatic.actions.browse.loading).should_receive('add_inline_loading_indicator') - flexmock(borgmatic.actions.browse.workers).should_receive('add_archive_files') + flexmock(borgmatic.actions.browse.workers).should_receive('load_archive_paths') flexmock(borgmatic.actions.browse.workers).should_receive('load_file_preview') - flexmock(borgmatic.actions.browse.panels.Directory_list).should_receive('app').and_return( + flexmock(borgmatic.actions.browse.directory_list.Directory_list).should_receive( + 'app' + ).and_return(flexmock()) + flexmock(borgmatic.actions.browse.file_preview.File_preview).should_receive('app').and_return( flexmock() ) - flexmock(borgmatic.actions.browse.panels.File_preview).should_receive('app').and_return( - flexmock() - ) - focused_panel = borgmatic.actions.browse.panels.Directory_list( + focused_panel = borgmatic.actions.browse.directory_list.Directory_list( config, config['repositories'][0], 'archive' ) flexmock(focused_panel).should_receive('get_option').and_return( @@ -132,7 +154,7 @@ def test_make_next_panel_with_root_directory_list_and_selected_file_option_retur directory_list = module.make_next_panel(focused_panel=focused_panel, option_id='config.yaml') - assert isinstance(directory_list, borgmatic.actions.browse.panels.File_preview) + assert isinstance(directory_list, borgmatic.actions.browse.file_preview.File_preview) assert directory_list.config == config assert directory_list.repository == config['repositories'][0] assert directory_list.archive_name == 'archive' @@ -142,15 +164,29 @@ def test_make_next_panel_with_root_directory_list_and_selected_file_option_retur def test_make_next_panel_with_non_root_directory_list_and_selected_file_option_returns_new_file_preview(): config = {'repositories': [{'path': 'test.borg'}]} flexmock(borgmatic.actions.browse.loading).should_receive('add_inline_loading_indicator') - flexmock(borgmatic.actions.browse.workers).should_receive('add_archive_files') + flexmock(borgmatic.actions.browse.workers).should_receive('load_archive_paths') flexmock(borgmatic.actions.browse.workers).should_receive('load_file_preview') - flexmock(borgmatic.actions.browse.panels.Directory_list).should_receive('app').and_return( + flexmock(borgmatic.actions.browse.workers).should_receive('Archive_path_loaded').replace_with( + flexmock( + path_hierarchy={ + 'etc': { + 'borgmatic': { + 'config.yaml': borgmatic.actions.browse.archive.Archive_path( + '-', 'config.yaml', '' + ), + }, + }, + }, + complete=False, + ), + ) + flexmock(borgmatic.actions.browse.directory_list.Directory_list).should_receive( + 'app' + ).and_return(flexmock()) + flexmock(borgmatic.actions.browse.file_preview.File_preview).should_receive('app').and_return( flexmock() ) - flexmock(borgmatic.actions.browse.panels.File_preview).should_receive('app').and_return( - flexmock() - ) - focused_panel = borgmatic.actions.browse.panels.Directory_list( + focused_panel = borgmatic.actions.browse.directory_list.Directory_list( config, config['repositories'][0], 'archive', @@ -162,7 +198,7 @@ def test_make_next_panel_with_non_root_directory_list_and_selected_file_option_r directory_list = module.make_next_panel(focused_panel=focused_panel, option_id='config.yaml') - assert isinstance(directory_list, borgmatic.actions.browse.panels.File_preview) + assert isinstance(directory_list, borgmatic.actions.browse.file_preview.File_preview) assert directory_list.config == config assert directory_list.repository == config['repositories'][0] assert directory_list.archive_name == 'archive' @@ -177,11 +213,11 @@ def test_make_next_panel_with_unsupported_focused_panel_returns_none(): def test_make_next_panel_with_directory_list_and_unsupported_selected_option_returns_none(icon): config = {'repositories': [{'path': 'test.borg'}]} flexmock(borgmatic.actions.browse.loading).should_receive('add_inline_loading_indicator') - flexmock(borgmatic.actions.browse.workers).should_receive('add_archive_files') - flexmock(borgmatic.actions.browse.panels.Directory_list).should_receive('app').and_return( - flexmock() - ) - focused_panel = borgmatic.actions.browse.panels.Directory_list( + flexmock(borgmatic.actions.browse.workers).should_receive('load_archive_paths') + flexmock(borgmatic.actions.browse.directory_list.Directory_list).should_receive( + 'app' + ).and_return(flexmock()) + focused_panel = borgmatic.actions.browse.directory_list.Directory_list( config, config['repositories'][0], 'archive' ) flexmock(focused_panel).should_receive('get_option').and_return( @@ -232,11 +268,14 @@ async def test_carousel_next_action_with_multiple_configs_advances_panel(): assert len(carousel.panels) == 2 assert isinstance( - carousel.panels[0], borgmatic.actions.browse.panels.Configuration_files_list + carousel.panels[0], + borgmatic.actions.browse.configuration_files_list.Configuration_files_list, ) assert carousel.panels[0].styles.display == 'none' - assert isinstance(carousel.panels[1], borgmatic.actions.browse.panels.Repositories_list) + assert isinstance( + carousel.panels[1], borgmatic.actions.browse.repositories_list.Repositories_list + ) assert carousel.panels[1].styles.display == 'block' assert carousel.panels[1].highlighted == 0 assert app.focused == carousel.panels[1] @@ -257,10 +296,12 @@ async def test_carousel_next_action_with_one_config_advances_panel(): carousel = app.query_one(selector='Carousel') assert len(carousel.panels) == 2 - assert isinstance(carousel.panels[0], borgmatic.actions.browse.panels.Repositories_list) + assert isinstance( + carousel.panels[0], borgmatic.actions.browse.repositories_list.Repositories_list + ) assert carousel.panels[0].styles.display == 'none' - assert isinstance(carousel.panels[1], borgmatic.actions.browse.panels.Archives_list) + assert isinstance(carousel.panels[1], borgmatic.actions.browse.archives_list.Archives_list) assert carousel.panels[1].styles.display == 'block' assert carousel.panels[1].highlighted == 0 assert app.focused == carousel.panels[1] @@ -282,7 +323,9 @@ async def test_carousel_next_action_with_no_next_panel_does_not_advance(): carousel = app.query_one(selector='Carousel') assert len(carousel.panels) == 1 - assert isinstance(carousel.panels[0], borgmatic.actions.browse.panels.Repositories_list) + assert isinstance( + carousel.panels[0], borgmatic.actions.browse.repositories_list.Repositories_list + ) assert carousel.panels[0].styles.display == 'block' assert app.focused == carousel.panels[0] @@ -304,12 +347,15 @@ async def test_carousel_next_action_and_previous_action_returns_to_original_pane assert len(carousel.panels) == 2 assert isinstance( - carousel.panels[0], borgmatic.actions.browse.panels.Configuration_files_list + carousel.panels[0], + borgmatic.actions.browse.configuration_files_list.Configuration_files_list, ) assert carousel.panels[0].styles.display == 'block' assert carousel.panels[0].highlighted == 0 - assert isinstance(carousel.panels[1], borgmatic.actions.browse.panels.Repositories_list) + assert isinstance( + carousel.panels[1], borgmatic.actions.browse.repositories_list.Repositories_list + ) assert carousel.panels[1].styles.display == 'none' assert app.focused == carousel.panels[0] @@ -333,11 +379,14 @@ async def test_carousel_next_action_and_previous_action_and_next_action_reuses_n assert len(carousel.panels) == 2 assert isinstance( - carousel.panels[0], borgmatic.actions.browse.panels.Configuration_files_list + carousel.panels[0], + borgmatic.actions.browse.configuration_files_list.Configuration_files_list, ) assert carousel.panels[0].styles.display == 'none' - assert isinstance(carousel.panels[1], borgmatic.actions.browse.panels.Repositories_list) + assert isinstance( + carousel.panels[1], borgmatic.actions.browse.repositories_list.Repositories_list + ) assert carousel.panels[1].styles.display == 'block' assert carousel.panels[1].highlighted == 0 assert app.focused == carousel.panels[1] @@ -360,7 +409,8 @@ async def test_carousel_next_action_with_no_next_panel_does_not_advance(): assert len(carousel.panels) == 1 assert isinstance( - carousel.panels[0], borgmatic.actions.browse.panels.Configuration_files_list + carousel.panels[0], + borgmatic.actions.browse.configuration_files_list.Configuration_files_list, ) assert carousel.panels[0].styles.display == 'block' assert carousel.panels[0].highlighted == 0 @@ -385,7 +435,8 @@ async def test_carousel_next_action_and_previous_action_and_down_truncates_next_ assert len(carousel.panels) == 1 assert isinstance( - carousel.panels[0], borgmatic.actions.browse.panels.Configuration_files_list + carousel.panels[0], + borgmatic.actions.browse.configuration_files_list.Configuration_files_list, ) assert carousel.panels[0].styles.display == 'block' assert carousel.panels[0].highlighted == 1 @@ -408,7 +459,8 @@ async def test_carousel_down_does_not_raise(): assert len(carousel.panels) == 1 assert isinstance( - carousel.panels[0], borgmatic.actions.browse.panels.Configuration_files_list + carousel.panels[0], + borgmatic.actions.browse.configuration_files_list.Configuration_files_list, ) assert carousel.panels[0].styles.display == 'block' assert carousel.panels[0].highlighted == 1 @@ -431,7 +483,8 @@ async def test_carousel_up_does_not_raise(): assert len(carousel.panels) == 1 assert isinstance( - carousel.panels[0], borgmatic.actions.browse.panels.Configuration_files_list + carousel.panels[0], + borgmatic.actions.browse.configuration_files_list.Configuration_files_list, ) assert carousel.panels[0].styles.display == 'block' assert carousel.panels[0].highlighted == 1 @@ -458,11 +511,14 @@ async def test_carousel_next_action_and_select_dot_dot_returns_to_original_panel assert len(carousel.panels) == 2 assert isinstance( - carousel.panels[0], borgmatic.actions.browse.panels.Configuration_files_list + carousel.panels[0], + borgmatic.actions.browse.configuration_files_list.Configuration_files_list, ) assert carousel.panels[0].styles.display == 'block' assert carousel.panels[0].highlighted == 0 - assert isinstance(carousel.panels[1], borgmatic.actions.browse.panels.Repositories_list) + assert isinstance( + carousel.panels[1], borgmatic.actions.browse.repositories_list.Repositories_list + ) assert carousel.panels[1].styles.display == 'none' assert app.focused == carousel.panels[0]