beets/test/plugins/test_zero.py
Michael Krieger df8cd23ae7 Add back tests as they were.
Add back tests as they were.
2025-10-14 03:17:34 +01:00

320 lines
8.8 KiB
Python

"""Tests for the 'zero' plugin"""
from mediafile import MediaFile
from beets.library import Item
from beets.test.helper import PluginTestCase, control_stdin
from beets.util import syspath
from beetsplug.zero import ZeroPlugin
class ZeroPluginTest(PluginTestCase):
plugin = "zero"
preload_plugin = False
def test_no_patterns(self):
item = self.add_item_fixture(
comments="test comment",
title="Title",
month=1,
year=2000,
)
item.write()
with self.configure_plugin({"fields": ["comments", "month"]}):
item.write()
mf = MediaFile(syspath(item.path))
assert mf.comments is None
assert mf.month is None
assert mf.title == "Title"
assert mf.year == 2000
def test_pattern_match(self):
item = self.add_item_fixture(comments="encoded by encoder")
item.write()
with self.configure_plugin(
{"fields": ["comments"], "comments": ["encoded by"]}
):
item.write()
mf = MediaFile(syspath(item.path))
assert mf.comments is None
def test_pattern_nomatch(self):
item = self.add_item_fixture(comments="recorded at place")
item.write()
with self.configure_plugin(
{"fields": ["comments"], "comments": ["encoded_by"]}
):
item.write()
mf = MediaFile(syspath(item.path))
assert mf.comments == "recorded at place"
def test_do_not_change_database(self):
item = self.add_item_fixture(year=2000)
item.write()
with self.configure_plugin({"fields": ["year"]}):
item.write()
assert item["year"] == 2000
def test_change_database(self):
item = self.add_item_fixture(year=2000)
item.write()
with self.configure_plugin(
{"fields": ["year"], "update_database": True}
):
item.write()
assert item["year"] == 0
def test_album_art(self):
path = self.create_mediafile_fixture(images=["jpg"])
item = Item.from_path(path)
with self.configure_plugin({"fields": ["images"]}):
item.write()
mf = MediaFile(syspath(path))
assert not mf.images
def test_auto_false(self):
item = self.add_item_fixture(year=2000)
item.write()
with self.configure_plugin(
{"fields": ["year"], "update_database": True, "auto": False}
):
item.write()
assert item["year"] == 2000
def test_subcommand_update_database_true(self):
item = self.add_item_fixture(
year=2016, day=13, month=3, comments="test comment"
)
item.write()
item_id = item.id
with (
self.configure_plugin(
{"fields": ["comments"], "update_database": True, "auto": False}
),
control_stdin("y"),
):
self.run_command("zero")
mf = MediaFile(syspath(item.path))
item = self.lib.get_item(item_id)
assert item["year"] == 2016
assert mf.year == 2016
assert mf.comments is None
assert item["comments"] == ""
def test_subcommand_update_database_false(self):
item = self.add_item_fixture(
year=2016, day=13, month=3, comments="test comment"
)
item.write()
item_id = item.id
with (
self.configure_plugin(
{
"fields": ["comments"],
"update_database": False,
"auto": False,
}
),
control_stdin("y"),
):
self.run_command("zero")
mf = MediaFile(syspath(item.path))
item = self.lib.get_item(item_id)
assert item["year"] == 2016
assert mf.year == 2016
assert item["comments"] == "test comment"
assert mf.comments is None
def test_subcommand_query_include(self):
item = self.add_item_fixture(
year=2016, day=13, month=3, comments="test comment"
)
item.write()
with self.configure_plugin(
{"fields": ["comments"], "update_database": False, "auto": False}
):
self.run_command("zero", "year: 2016")
mf = MediaFile(syspath(item.path))
assert mf.year == 2016
assert mf.comments is None
def test_subcommand_query_exclude(self):
item = self.add_item_fixture(
year=2016, day=13, month=3, comments="test comment"
)
item.write()
with self.configure_plugin(
{"fields": ["comments"], "update_database": False, "auto": False}
):
self.run_command("zero", "year: 0000")
mf = MediaFile(syspath(item.path))
assert mf.year == 2016
assert mf.comments == "test comment"
def test_no_fields(self):
item = self.add_item_fixture(year=2016)
item.write()
mediafile = MediaFile(syspath(item.path))
assert mediafile.year == 2016
item_id = item.id
with self.configure_plugin({"fields": []}), control_stdin("y"):
self.run_command("zero")
item = self.lib.get_item(item_id)
assert item["year"] == 2016
assert mediafile.year == 2016
def test_whitelist_and_blacklist(self):
item = self.add_item_fixture(year=2016)
item.write()
mf = MediaFile(syspath(item.path))
assert mf.year == 2016
item_id = item.id
with (
self.configure_plugin(
{"fields": ["year"], "keep_fields": ["comments"]}
),
control_stdin("y"),
):
self.run_command("zero")
item = self.lib.get_item(item_id)
assert item["year"] == 2016
assert mf.year == 2016
def test_keep_fields(self):
item = self.add_item_fixture(year=2016, comments="test comment")
tags = {
"comments": "test comment",
"year": 2016,
}
with self.configure_plugin(
{"fields": None, "keep_fields": ["year"], "update_database": True}
):
z = ZeroPlugin()
z.write_event(item, item.path, tags)
assert tags["comments"] is None
assert tags["year"] == 2016
def test_keep_fields_removes_preserved_tags(self):
self.config["zero"]["keep_fields"] = ["year"]
self.config["zero"]["fields"] = None
self.config["zero"]["update_database"] = True
z = ZeroPlugin()
assert "id" not in z.fields_to_progs
def test_fields_removes_preserved_tags(self):
self.config["zero"]["fields"] = ["year id"]
self.config["zero"]["update_database"] = True
z = ZeroPlugin()
assert "id" not in z.fields_to_progs
def test_omit_single_disc_with_tags_single(self):
item = self.add_item_fixture(
disctotal=1, disc=1, comments="test comment"
)
item.write()
with self.configure_plugin(
{"omit_single_disc": True, "fields": ["comments"]}
):
item.write()
mf = MediaFile(syspath(item.path))
assert mf.comments is None
assert mf.disc == 0
def test_omit_single_disc_with_tags_multi(self):
item = self.add_item_fixture(
disctotal=4, disc=1, comments="test comment"
)
item.write()
with self.configure_plugin(
{"omit_single_disc": True, "fields": ["comments"]}
):
item.write()
mf = MediaFile(syspath(item.path))
assert mf.comments is None
assert mf.disc == 1
def test_omit_single_disc_only_change_single(self):
item = self.add_item_fixture(disctotal=1, disc=1)
item.write()
with self.configure_plugin({"omit_single_disc": True}):
item.write()
mf = MediaFile(syspath(item.path))
assert mf.disc == 0
def test_omit_single_disc_only_change_multi(self):
item = self.add_item_fixture(disctotal=4, disc=1)
item.write()
with self.configure_plugin({"omit_single_disc": True}):
item.write()
mf = MediaFile(syspath(item.path))
assert mf.disc == 1
def test_empty_query_n_response_no_changes(self):
item = self.add_item_fixture(
year=2016, day=13, month=3, comments="test comment"
)
item.write()
item_id = item.id
with (
self.configure_plugin(
{"fields": ["comments"], "update_database": True, "auto": False}
),
control_stdin("n"),
):
self.run_command("zero")
mf = MediaFile(syspath(item.path))
item = self.lib.get_item(item_id)
assert item["year"] == 2016
assert mf.year == 2016
assert mf.comments == "test comment"
assert item["comments"] == "test comment"