fix capture group

This commit is contained in:
Javanaut
2026-07-08 10:46:08 +02:00
parent 6f09c80aaf
commit 12e5438d22
6 changed files with 152 additions and 30 deletions

View File

@@ -21,6 +21,7 @@ from ffx.file_properties import FileProperties # noqa: E402
from ffx.model.pattern import Pattern # noqa: E402
from ffx.pattern_controller import ( # noqa: E402
DuplicatePatternMatchError,
InvalidPatternCaptureGroupError,
InvalidPatternSchemaError,
PatternController,
)
@@ -144,7 +145,7 @@ class PatternManagementTests(unittest.TestCase):
def test_match_filename_raises_for_duplicate_matches_in_same_show(self):
self.save_pattern(1, r"^same_(s[0-9]+e[0-9]+)\.mkv$")
self.save_pattern(1, r"^same_.*$")
self.save_pattern(1, r"^same_(.*)$")
with self.assertRaises(DuplicatePatternMatchError) as caught:
self.pattern_controller.matchFilename("same_s01e01.mkv")
@@ -154,7 +155,7 @@ class PatternManagementTests(unittest.TestCase):
def test_match_filename_raises_for_duplicate_matches_across_shows(self):
self.save_pattern(1, r"^cross_(s[0-9]+e[0-9]+)\.mkv$")
self.save_pattern(2, r"^cross_.*$")
self.save_pattern(2, r"^cross_(.*)$")
with self.assertRaises(DuplicatePatternMatchError) as caught:
self.pattern_controller.matchFilename("cross_s01e01.mkv")
@@ -181,6 +182,48 @@ class PatternManagementTests(unittest.TestCase):
match = self.pattern_controller.matchFilename("after_s01e01.mkv")
self.assertEqual(pattern_id, match["pattern"].getId())
def test_save_pattern_schema_rejects_pattern_without_capture_group(self):
self.add_show(1, "No Capture Pattern Show")
with self.assertRaises(InvalidPatternCaptureGroupError) as caught:
self.pattern_controller.savePatternSchema(
{
"show_id": 1,
"pattern": r"^nocapture_s[0-9]+e[0-9]+\.mkv$",
},
trackDescriptors=[make_track_descriptor(0)],
)
self.assertIn("capture group", str(caught.exception))
def test_update_pattern_rejects_pattern_without_capture_group(self):
pattern_id = self.save_pattern(1, r"^valid_(s[0-9]+e[0-9]+)\.mkv$")
with self.assertRaises(InvalidPatternCaptureGroupError):
self.pattern_controller.updatePattern(
pattern_id,
{
"show_id": 1,
"pattern": r"^invalid_s[0-9]+e[0-9]+\.mkv$",
"quality": 0,
"notes": "",
},
)
match = self.pattern_controller.matchFilename("valid_s01e01.mkv")
self.assertEqual(pattern_id, match["pattern"].getId())
def test_match_filename_raises_specific_error_for_legacy_pattern_without_capture_group(self):
pattern_id = self.insert_trackless_pattern_row(
1,
r"^legacy_s[0-9]+e[0-9]+\.mkv$",
)
with self.assertRaises(InvalidPatternCaptureGroupError) as caught:
self.pattern_controller.matchFilename("legacy_s01e01.mkv")
self.assertEqual(pattern_id, caught.exception.pattern_id)
def test_save_pattern_schema_rejects_zero_track_patterns(self):
self.add_show(1, "Empty Pattern Show")
@@ -276,7 +319,7 @@ class PatternManagementTests(unittest.TestCase):
def test_file_properties_skips_pattern_matching_when_disabled(self):
self.save_pattern(1, r"^nopattern_(s[0-9]+e[0-9]+)\.mkv$")
self.save_pattern(2, r"^nopattern_.*$")
self.save_pattern(2, r"^nopattern_(.*)$")
no_pattern_context = dict(self.context)
no_pattern_context["use_pattern"] = False