Files
beets/test/ui/test_ui_init.py

100 lines
2.9 KiB
Python

"""Test module for file ui/__init__.py"""
import unittest
from copy import deepcopy
from pathlib import Path
from random import random
import pytest
from beets import config, ui
from beets.exceptions import UserError
from beets.test.helper import BeetsTestCase, IOMixin
class InputMethodsTest(IOMixin, unittest.TestCase):
def _print_helper(self, s):
print(s)
def _print_helper2(self, s, prefix):
print(prefix, s)
def test_input_select_objects(self):
full_items = ["1", "2", "3", "4", "5"]
# Test no
self.io.addinput("n")
items = ui.input_select_objects(
"Prompt", full_items, self._print_helper
)
assert items == []
# Test yes
self.io.addinput("y")
items = ui.input_select_objects(
"Prompt", full_items, self._print_helper
)
assert items == full_items
# Test selective 1
self.io.addinput("s")
self.io.addinput("n")
self.io.addinput("y")
self.io.addinput("n")
self.io.addinput("y")
self.io.addinput("n")
items = ui.input_select_objects(
"Prompt", full_items, self._print_helper
)
assert items == ["2", "4"]
# Test selective 2
self.io.addinput("s")
self.io.addinput("y")
self.io.addinput("y")
self.io.addinput("n")
self.io.addinput("y")
self.io.addinput("n")
items = ui.input_select_objects(
"Prompt", full_items, lambda s: self._print_helper2(s, "Prefix")
)
assert items == ["1", "2", "4"]
# Test selective 3
self.io.addinput("s")
self.io.addinput("y")
self.io.addinput("n")
self.io.addinput("y")
self.io.addinput("q")
items = ui.input_select_objects(
"Prompt", full_items, self._print_helper
)
assert items == ["1", "3"]
class ParentalDirCreation(IOMixin, BeetsTestCase):
def test_memory_path_skips_creation_prompt(self):
ui._ensure_db_directory_exists(Path(":memory:"))
assert not self.io.getoutput()
def test_create_yes(self):
non_exist_path = self.temp_path / "nonexist" / str(random())
# Deepcopy instead of recovering because exceptions might
# occur; wish I can use a golang defer here.
test_config = deepcopy(config)
test_config["library"] = str(non_exist_path)
self.io.addinput("y")
lib = ui._open_library(test_config)
lib._close()
def test_create_no(self):
non_exist_path_parent = self.temp_path / "nonexist"
non_exist_path = non_exist_path_parent / str(random())
test_config = deepcopy(config)
test_config["library"] = str(non_exist_path)
self.io.addinput("n")
with pytest.raises(UserError):
ui._open_library(test_config)
assert not non_exist_path_parent.exists()