@@ -1106,5 +1106,60 @@ def test_ensure_meta_tracks_omits_trailing_extra_track_from_editor(self) -> None
11061106 self .assertEqual (app ._possible_extra_tracks (meta ), [13 ])
11071107
11081108
1109+ class YearForInputTests (unittest .TestCase ):
1110+ def _app (self , * , prefer_first : bool ) -> DiscvaultApp :
1111+ cfg = Config ()
1112+ cfg .prefer_first_release_year = prefer_first
1113+ args = Namespace (
1114+ tracks = None , metadata_file = None , metadata_url = None ,
1115+ mp3_bitrate = 320 , mp3_quality = 2 , flac_compression = 8 ,
1116+ no_image = False , no_flac = False , no_mp3 = False , ogg = False ,
1117+ opus = False , alac = False , aac = False , wav = False , iso = False ,
1118+ artist = None , album = None , year = None ,
1119+ )
1120+ return DiscvaultApp (args , cfg )
1121+
1122+ def _meta (self , * , year : str = "" , first : str = "" ) -> Metadata :
1123+ return Metadata (
1124+ source = "X" ,
1125+ album_artist = "Artist" ,
1126+ album = "Album" ,
1127+ year = year ,
1128+ first_release_year = first ,
1129+ )
1130+
1131+ def test_prefer_first_with_both_years_returns_first (self ) -> None :
1132+ app = self ._app (prefer_first = True )
1133+ self .assertEqual (app ._year_for_input (self ._meta (year = "2006" , first = "1969" )), "1969" )
1134+
1135+ def test_prefer_first_with_only_pressing_year_returns_pressing (self ) -> None :
1136+ app = self ._app (prefer_first = True )
1137+ self .assertEqual (app ._year_for_input (self ._meta (year = "2006" )), "2006" )
1138+
1139+ def test_prefer_first_with_only_first_year_returns_first (self ) -> None :
1140+ app = self ._app (prefer_first = True )
1141+ self .assertEqual (app ._year_for_input (self ._meta (first = "1969" )), "1969" )
1142+
1143+ def test_prefer_off_returns_pressing_year_even_when_first_is_set (self ) -> None :
1144+ app = self ._app (prefer_first = False )
1145+ self .assertEqual (app ._year_for_input (self ._meta (year = "2006" , first = "1969" )), "2006" )
1146+
1147+ def test_prefer_off_with_no_pressing_year_returns_empty_string (self ) -> None :
1148+ app = self ._app (prefer_first = False )
1149+ self .assertEqual (app ._year_for_input (self ._meta (first = "1969" )), "" )
1150+
1151+
1152+ class CandidateTableColumnsTests (unittest .TestCase ):
1153+ def test_table_includes_first_release_column (self ) -> None :
1154+ # Source-level invariant: the candidate table headers list `First release`
1155+ # between `Album` and `Year`. Verifying the source is enough; rendering
1156+ # requires an active Textual App and is exercised manually.
1157+ source = inspect .getsource (DiscvaultApp ._enter_ready )
1158+ self .assertIn (
1159+ '"#", "Source", "Artist", "Album", "First release", "Year", "Tracks"' ,
1160+ source ,
1161+ )
1162+
1163+
11091164if __name__ == "__main__" :
11101165 unittest .main ()
0 commit comments