diff --git a/test/helper.py b/test/helper.py index 495b8c7f4..cdf794095 100644 --- a/test/helper.py +++ b/test/helper.py @@ -50,6 +50,7 @@ import beets.plugins from beets import autotag, config, importer, logging, util from beets.autotag.hooks import AlbumInfo, TrackInfo from beets.library import Album, Item, Library +from beets.ui.commands import TerminalImportSession from beets.util import MoveOperation, bytestring_path, syspath @@ -670,6 +671,86 @@ class ImportSessionFixture(importer.ImportSession): task.should_merge_duplicates = True +class TerminalImportSessionFixture(TerminalImportSession): + def __init__(self, *args, **kwargs): + self.io = kwargs.pop("io") + super().__init__(*args, **kwargs) + self._choices = [] + + default_choice = importer.action.APPLY + + def add_choice(self, choice): + self._choices.append(choice) + + def clear_choices(self): + self._choices = [] + + def choose_match(self, task): + self._add_choice_input() + return super().choose_match(task) + + def choose_item(self, task): + self._add_choice_input() + return super().choose_item(task) + + def _add_choice_input(self): + try: + choice = self._choices.pop(0) + except IndexError: + choice = self.default_choice + + if choice == importer.action.APPLY: + self.io.addinput("A") + elif choice == importer.action.ASIS: + self.io.addinput("U") + elif choice == importer.action.ALBUMS: + self.io.addinput("G") + elif choice == importer.action.TRACKS: + self.io.addinput("T") + elif choice == importer.action.SKIP: + self.io.addinput("S") + elif isinstance(choice, int): + self.io.addinput("M") + self.io.addinput(str(choice)) + self._add_choice_input() + else: + raise Exception("Unknown choice %s" % choice) + + +class TerminalImportSessionSetup: + """Overwrites ImportHelper._setup_import_session to provide a terminal importer""" + + def _setup_import_session( + self, + import_dir=None, + delete=False, + threaded=False, + copy=True, + singletons=False, + move=False, + autotag=True, + ): + config["import"]["copy"] = copy + config["import"]["delete"] = delete + config["import"]["timid"] = True + config["threaded"] = False + config["import"]["singletons"] = singletons + config["import"]["move"] = move + config["import"]["autotag"] = autotag + config["import"]["resume"] = False + + if not hasattr(self, "io"): + self.io = _common.DummyIO() + self.io.install() + self.importer = TerminalImportSessionFixture( + self.lib, + loghandler=None, + query=None, + io=self.io, + paths=[import_dir or self.import_dir], + ) + + def generate_album_info(album_id, track_values): """Return `AlbumInfo` populated with mock data. diff --git a/test/plugins/test_edit.py b/test/plugins/test_edit.py index cf9aadf7f..c5eb59507 100644 --- a/test/plugins/test_edit.py +++ b/test/plugins/test_edit.py @@ -15,8 +15,13 @@ import codecs import unittest from test import _common -from test.helper import AutotagStub, ImportHelper, TestHelper, control_stdin -from test.test_ui_importer import TerminalImportSessionSetup +from test.helper import ( + AutotagStub, + ImportHelper, + TerminalImportSessionSetup, + TestHelper, + control_stdin, +) from unittest.mock import patch from beets.dbcore.query import TrueQuery diff --git a/test/plugins/test_mbsubmit.py b/test/plugins/test_mbsubmit.py index fc0c65eb8..b8dbdb5ea 100644 --- a/test/plugins/test_mbsubmit.py +++ b/test/plugins/test_mbsubmit.py @@ -17,11 +17,11 @@ import unittest from test.helper import ( AutotagStub, ImportHelper, + TerminalImportSessionSetup, TestHelper, capture_stdout, control_stdin, ) -from test.test_ui_importer import TerminalImportSessionSetup class MBSubmitPluginTest( diff --git a/test/test_plugins.py b/test/test_plugins.py index 6a63caf49..5fb954894 100644 --- a/test/test_plugins.py +++ b/test/test_plugins.py @@ -19,8 +19,7 @@ import shutil import unittest from test import helper from test._common import RSRC -from test.helper import AutotagStub, ImportHelper -from test.test_ui_importer import TerminalImportSessionSetup +from test.helper import AutotagStub, ImportHelper, TerminalImportSessionSetup from unittest.mock import ANY, Mock, patch from mediafile import MediaFile diff --git a/test/test_ui_importer.py b/test/test_ui_importer.py index 4bff6b16d..67dfef221 100644 --- a/test/test_ui_importer.py +++ b/test/test_ui_importer.py @@ -20,90 +20,7 @@ test_importer module. But here the test importer inherits from import unittest from test import test_importer -from test._common import DummyIO - -from beets import config, importer -from beets.ui.commands import TerminalImportSession - - -class TerminalImportSessionFixture(TerminalImportSession): - def __init__(self, *args, **kwargs): - self.io = kwargs.pop("io") - super().__init__(*args, **kwargs) - self._choices = [] - - default_choice = importer.action.APPLY - - def add_choice(self, choice): - self._choices.append(choice) - - def clear_choices(self): - self._choices = [] - - def choose_match(self, task): - self._add_choice_input() - return super().choose_match(task) - - def choose_item(self, task): - self._add_choice_input() - return super().choose_item(task) - - def _add_choice_input(self): - try: - choice = self._choices.pop(0) - except IndexError: - choice = self.default_choice - - if choice == importer.action.APPLY: - self.io.addinput("A") - elif choice == importer.action.ASIS: - self.io.addinput("U") - elif choice == importer.action.ALBUMS: - self.io.addinput("G") - elif choice == importer.action.TRACKS: - self.io.addinput("T") - elif choice == importer.action.SKIP: - self.io.addinput("S") - elif isinstance(choice, int): - self.io.addinput("M") - self.io.addinput(str(choice)) - self._add_choice_input() - else: - raise Exception("Unknown choice %s" % choice) - - -class TerminalImportSessionSetup: - """Overwrites ImportHelper._setup_import_session to provide a terminal importer""" - - def _setup_import_session( - self, - import_dir=None, - delete=False, - threaded=False, - copy=True, - singletons=False, - move=False, - autotag=True, - ): - config["import"]["copy"] = copy - config["import"]["delete"] = delete - config["import"]["timid"] = True - config["threaded"] = False - config["import"]["singletons"] = singletons - config["import"]["move"] = move - config["import"]["autotag"] = autotag - config["import"]["resume"] = False - - if not hasattr(self, "io"): - self.io = DummyIO() - self.io.install() - self.importer = TerminalImportSessionFixture( - self.lib, - loghandler=None, - query=None, - io=self.io, - paths=[import_dir or self.import_dir], - ) +from test.helper import TerminalImportSessionSetup class NonAutotaggedImportTest(