mirror of
https://github.com/beetbox/beets.git
synced 2026-05-16 14:51:03 -04:00
76 lines
2.6 KiB
Python
76 lines
2.6 KiB
Python
import pytest
|
|
|
|
from beets.test.helper import PluginTestCase
|
|
from beets.ui import UserError
|
|
from beetsplug.rewrite import RewritePlugin
|
|
|
|
|
|
class RewritePluginTest(PluginTestCase):
|
|
plugin = "rewrite"
|
|
preload_plugin = False
|
|
|
|
def test_artist_rewrite_applies_to_artist_albumartist_and_album_fields(
|
|
self,
|
|
):
|
|
with self.configure_plugin({"artist .*jimi hendrix.*": "Jimi Hendrix"}):
|
|
item = self.add_item(
|
|
artist="The Jimi Hendrix Experience",
|
|
albumartist="The Jimi Hendrix Experience",
|
|
)
|
|
album = self.lib.add_album([item])
|
|
|
|
assert item.artist == "Jimi Hendrix"
|
|
assert item.albumartist == "Jimi Hendrix"
|
|
assert album.evaluate_template("$albumartist") == "Jimi Hendrix"
|
|
|
|
def test_rewrite_all_matching_rules(self):
|
|
with self.configure_plugin(
|
|
{
|
|
"artist .*hendrix.*": "hendrix catalog",
|
|
"artist .*catalog.*": "Experience catalog",
|
|
}
|
|
):
|
|
item = self.add_item(
|
|
artist="The Jimi Hendrix Experience",
|
|
albumartist="The Jimi Hendrix Experience",
|
|
)
|
|
|
|
assert item.artist == "Experience catalog"
|
|
|
|
def test_rewrite_is_case_insensitive_and_leaves_non_matches_unchanged(
|
|
self,
|
|
):
|
|
with self.configure_plugin(
|
|
{"artist odd eye circle": "LOONA / ODD EYE CIRCLE"}
|
|
):
|
|
matching_item = self.add_item(
|
|
artist="ODD EYE CIRCLE",
|
|
albumartist="ODD EYE CIRCLE",
|
|
)
|
|
other_item = self.add_item(artist="ARTMS", albumartist="ARTMS")
|
|
|
|
assert matching_item.artist == "LOONA / ODD EYE CIRCLE"
|
|
assert other_item.artist == "ARTMS"
|
|
|
|
def test_rewrite_applied_to_all_list_values(self):
|
|
with self.configure_plugin(
|
|
{"genres rock": "Classic Rock", "genres pop": "Pop"}
|
|
):
|
|
item = self.add_item(genres=["rock", "pop", "techno"])
|
|
|
|
assert item.genres == ["Classic Rock", "Pop", "techno"]
|
|
|
|
def test_invalid_rewrite_spec_raises_user_error(self):
|
|
self.config[self.plugin].set({"artist": "Jimi Hendrix"})
|
|
|
|
with pytest.raises(UserError, match="invalid rewrite specification"):
|
|
RewritePlugin()
|
|
|
|
def test_invalid_field_name_raises_user_error(self):
|
|
self.config[self.plugin].set({"not_a_field rock": "Classic Rock"})
|
|
|
|
with pytest.raises(
|
|
UserError, match="invalid field name \\(not_a_field\\) in rewriter"
|
|
):
|
|
RewritePlugin()
|