ffn
This commit is contained in:
@@ -14,10 +14,12 @@ if str(SRC_ROOT) not in sys.path:
|
||||
|
||||
|
||||
from ffx.audio_layout import AudioLayout # noqa: E402
|
||||
from ffx.helper import DIFF_ADDED_KEY # noqa: E402
|
||||
from ffx.iso_language import IsoLanguage # noqa: E402
|
||||
from ffx.logging_utils import get_ffx_logger # noqa: E402
|
||||
from ffx.inspect_details_screen import InspectDetailsScreen # noqa: E402
|
||||
from ffx.i18n import set_current_language # noqa: E402
|
||||
from ffx.media_descriptor import MediaDescriptor # noqa: E402
|
||||
from ffx.media_edit_screen import MediaEditScreen # noqa: E402
|
||||
from ffx.pattern_details_screen import PatternDetailsScreen # noqa: E402
|
||||
from ffx.show_descriptor import ShowDescriptor # noqa: E402
|
||||
@@ -89,12 +91,16 @@ class FakeTagTable:
|
||||
|
||||
|
||||
class FakeMediaDescriptor:
|
||||
def __init__(self, track_descriptors):
|
||||
def __init__(self, track_descriptors, tags=None):
|
||||
self._track_descriptors = list(track_descriptors)
|
||||
self._tags = dict(tags or {})
|
||||
|
||||
def getTrackDescriptors(self):
|
||||
return list(self._track_descriptors)
|
||||
|
||||
def getTags(self):
|
||||
return dict(self._tags)
|
||||
|
||||
|
||||
class FakeValueWidget:
|
||||
def __init__(self, value):
|
||||
@@ -459,6 +465,99 @@ class TagTableScreenStateTests(unittest.TestCase):
|
||||
calls,
|
||||
)
|
||||
|
||||
def test_media_edit_screen_handle_edit_track_updates_draft_descriptor(self):
|
||||
original_track = TrackDescriptor(
|
||||
index=1,
|
||||
source_index=1,
|
||||
sub_index=0,
|
||||
track_type=TrackType.SUBTITLE,
|
||||
codec_name=TrackCodec.UNKNOWN,
|
||||
tags={"language": "ger"},
|
||||
)
|
||||
context = {"logger": get_ffx_logger()}
|
||||
updated_track = original_track.clone(context=context)
|
||||
updated_track.getTags()["language"] = "eng"
|
||||
|
||||
screen = object.__new__(MediaEditScreen)
|
||||
screen.context = context
|
||||
screen._sourceMediaDescriptor = MediaDescriptor(
|
||||
context=context,
|
||||
track_descriptors=[original_track],
|
||||
)
|
||||
|
||||
calls = []
|
||||
screen.setMessage = lambda _message: calls.append("setMessage")
|
||||
screen.refreshAfterDraftChange = lambda: calls.append("refreshAfterDraftChange")
|
||||
|
||||
screen.handle_edit_track(updated_track)
|
||||
|
||||
self.assertEqual(
|
||||
"eng",
|
||||
screen._sourceMediaDescriptor.getTrackDescriptors()[0].getTags()["language"],
|
||||
)
|
||||
self.assertEqual(
|
||||
["setMessage", "refreshAfterDraftChange"],
|
||||
calls,
|
||||
)
|
||||
|
||||
def test_media_edit_screen_screen_resume_refreshes_draft_tables(self):
|
||||
screen = object.__new__(MediaEditScreen)
|
||||
screen.tracksTable = FakeTagTable()
|
||||
|
||||
calls = []
|
||||
screen.refreshAfterDraftChange = lambda: calls.append("refreshAfterDraftChange")
|
||||
screen.updateToggleButtons = lambda: calls.append("updateToggleButtons")
|
||||
|
||||
screen.on_screen_resume(None)
|
||||
|
||||
self.assertEqual(
|
||||
["refreshAfterDraftChange", "updateToggleButtons"],
|
||||
calls,
|
||||
)
|
||||
|
||||
def test_pattern_details_screen_screen_resume_refreshes_tables(self):
|
||||
screen = object.__new__(PatternDetailsScreen)
|
||||
screen.tracksTable = FakeTagTable()
|
||||
screen.tagsTable = FakeTagTable()
|
||||
screen.shiftedSeasonsTable = FakeTagTable()
|
||||
screen._PatternDetailsScreen__pattern = object()
|
||||
|
||||
calls = []
|
||||
screen.updateTags = lambda: calls.append("updateTags")
|
||||
screen.updateTracks = lambda: calls.append("updateTracks")
|
||||
screen.updateShiftedSeasons = lambda: calls.append("updateShiftedSeasons")
|
||||
|
||||
screen.on_screen_resume(None)
|
||||
|
||||
self.assertEqual(
|
||||
["updateTags", "updateTracks", "updateShiftedSeasons"],
|
||||
calls,
|
||||
)
|
||||
|
||||
def test_inspect_details_screen_handle_edit_pattern_refreshes_even_without_result(self):
|
||||
screen = object.__new__(InspectDetailsScreen)
|
||||
|
||||
calls = []
|
||||
screen.reloadProperties = lambda reset_draft=True: calls.append(
|
||||
("reloadProperties", reset_draft)
|
||||
)
|
||||
screen._currentPattern = None
|
||||
screen.updateMediaTags = lambda: calls.append("updateMediaTags")
|
||||
screen.updateTracks = lambda: calls.append("updateTracks")
|
||||
screen.updateDifferences = lambda: calls.append("updateDifferences")
|
||||
|
||||
screen.handle_edit_pattern(None)
|
||||
|
||||
self.assertEqual(
|
||||
[
|
||||
("reloadProperties", True),
|
||||
"updateMediaTags",
|
||||
"updateTracks",
|
||||
"updateDifferences",
|
||||
],
|
||||
calls,
|
||||
)
|
||||
|
||||
def test_pattern_details_screen_reads_selected_shifted_season_from_row_mapping(self):
|
||||
screen = object.__new__(PatternDetailsScreen)
|
||||
screen.shiftedSeasonsTable = FakeTagTable()
|
||||
@@ -565,6 +664,127 @@ class TagTableScreenStateTests(unittest.TestCase):
|
||||
self.assertNotIn(placeholder_key, screen._showRowData)
|
||||
self.assertEqual(0, screen.getRowIndexFromShowId(8))
|
||||
|
||||
def test_inspect_details_screen_update_tracks_shows_target_pattern_tracks(self):
|
||||
source_track = TrackDescriptor(
|
||||
index=1,
|
||||
source_index=1,
|
||||
sub_index=0,
|
||||
track_type=TrackType.SUBTITLE,
|
||||
codec_name=TrackCodec.UNKNOWN,
|
||||
tags={"language": "ger", "title": "German Full"},
|
||||
)
|
||||
target_track = TrackDescriptor(
|
||||
index=1,
|
||||
source_index=1,
|
||||
sub_index=0,
|
||||
track_type=TrackType.SUBTITLE,
|
||||
codec_name=TrackCodec.UNKNOWN,
|
||||
tags={"language": "eng", "title": "English Full"},
|
||||
)
|
||||
|
||||
screen = object.__new__(InspectDetailsScreen)
|
||||
screen.tracksTable = FakeTagTable()
|
||||
screen._sourceMediaDescriptor = FakeMediaDescriptor([source_track])
|
||||
screen._targetMediaDescriptor = FakeMediaDescriptor([target_track])
|
||||
screen._currentPattern = object()
|
||||
screen._trackRowData = {}
|
||||
screen._applyNormalization = False
|
||||
|
||||
screen.updateTracks()
|
||||
|
||||
self.assertIn("English Full", screen.tracksTable.rows["row-0"])
|
||||
self.assertIs(target_track, screen.getSelectedTrackDescriptor())
|
||||
|
||||
def test_inspect_details_screen_maps_target_selection_back_to_source_track(self):
|
||||
source_track = TrackDescriptor(
|
||||
index=3,
|
||||
source_index=7,
|
||||
sub_index=1,
|
||||
track_type=TrackType.SUBTITLE,
|
||||
codec_name=TrackCodec.UNKNOWN,
|
||||
tags={"language": "ger"},
|
||||
)
|
||||
target_track = TrackDescriptor(
|
||||
index=1,
|
||||
source_index=7,
|
||||
sub_index=0,
|
||||
track_type=TrackType.SUBTITLE,
|
||||
codec_name=TrackCodec.UNKNOWN,
|
||||
tags={"language": "eng"},
|
||||
)
|
||||
|
||||
screen = object.__new__(InspectDetailsScreen)
|
||||
screen.tracksTable = FakeTagTable()
|
||||
screen._sourceMediaDescriptor = FakeMediaDescriptor([source_track])
|
||||
screen._targetMediaDescriptor = FakeMediaDescriptor([target_track])
|
||||
screen._currentPattern = object()
|
||||
screen._trackRowData = {}
|
||||
screen._applyNormalization = False
|
||||
|
||||
screen.updateTracks()
|
||||
|
||||
self.assertIs(source_track, screen.getTrackEditSourceDescriptor())
|
||||
|
||||
def test_inspect_details_screen_action_update_pattern_uses_existing_change_set_before_reload(self):
|
||||
class _FakePattern:
|
||||
def getPattern(self):
|
||||
return r"demo_(s[0-9]+e[0-9]+)\.mkv"
|
||||
|
||||
def getId(self):
|
||||
return 9
|
||||
|
||||
class _FakeTagController:
|
||||
def __init__(self, calls):
|
||||
self._calls = calls
|
||||
|
||||
def deleteMediaTagByKey(self, pattern_id, key):
|
||||
self._calls.append(("deleteMediaTagByKey", pattern_id, key))
|
||||
|
||||
calls = []
|
||||
|
||||
screen = object.__new__(InspectDetailsScreen)
|
||||
screen._currentPattern = _FakePattern()
|
||||
screen._mediaChangeSetObj = {
|
||||
"tags": {
|
||||
DIFF_ADDED_KEY: {"TITLE": "Demo"},
|
||||
}
|
||||
}
|
||||
screen._tac = _FakeTagController(calls)
|
||||
screen._tc = type(
|
||||
"_FakeTrackController",
|
||||
(),
|
||||
{
|
||||
"addTrack": staticmethod(lambda *_args, **_kwargs: None),
|
||||
"deleteTrack": staticmethod(lambda *_args, **_kwargs: None),
|
||||
"setDispositionState": staticmethod(lambda *_args, **_kwargs: None),
|
||||
},
|
||||
)()
|
||||
screen._sourceMediaDescriptor = FakeMediaDescriptor([], tags={})
|
||||
screen._targetMediaDescriptor = FakeMediaDescriptor([])
|
||||
screen.getPatternObjFromInput = lambda: {
|
||||
"show_id": 1,
|
||||
"pattern": r"demo_(s[0-9]+e[0-9]+)\.mkv",
|
||||
}
|
||||
screen.reloadProperties = lambda reset_draft=True: calls.append(
|
||||
("reloadProperties", reset_draft)
|
||||
)
|
||||
screen.updateMediaTags = lambda: calls.append("updateMediaTags")
|
||||
screen.updateTracks = lambda: calls.append("updateTracks")
|
||||
screen.updateDifferences = lambda: calls.append("updateDifferences")
|
||||
|
||||
screen.action_update_pattern()
|
||||
|
||||
self.assertEqual(
|
||||
[
|
||||
("deleteMediaTagByKey", 9, "TITLE"),
|
||||
("reloadProperties", True),
|
||||
"updateMediaTags",
|
||||
"updateTracks",
|
||||
"updateDifferences",
|
||||
],
|
||||
calls,
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user