@@ -1163,6 +1163,56 @@ def test_finalize_tolerates_missing_sidecar(self, temp_dir):
11631163 # No sidecar to begin with — should not raise
11641164 finalize_monitor (tracker , {"variables" : []}, "historical" , db_path )
11651165
1166+ @pytest .mark .unit
1167+ def test_finalize_creates_ilamb_symlinks_when_enabled (self , temp_dir ):
1168+ """ilamb_input_format=True builds <output>/ilamb_input/<var>.nc symlinks."""
1169+ db_path = temp_dir / "test.db"
1170+ # Flat-DRS CMORised output living alongside the db in output_folder.
1171+ tas = temp_dir / "tas_Amon_ACCESS_historical.nc"
1172+ pr = temp_dir / "pr_Amon_ACCESS_historical.nc"
1173+ tas .write_text ("x" )
1174+ pr .write_text ("x" )
1175+
1176+ with TaskTracker (db_path ) as tracker :
1177+ config = {"variables" : ["Amon.tas" ], "ilamb_input_format" : True }
1178+ finalize_monitor (tracker , config , "historical" , db_path )
1179+
1180+ ilamb_dir = temp_dir / "ilamb_input"
1181+ assert (ilamb_dir / "tas.nc" ).is_symlink ()
1182+ assert (ilamb_dir / "pr.nc" ).is_symlink ()
1183+ assert (ilamb_dir / "tas.nc" ).resolve () == tas .resolve ()
1184+ assert (ilamb_dir / "pr.nc" ).resolve () == pr .resolve ()
1185+
1186+ @pytest .mark .unit
1187+ def test_finalize_skips_ilamb_symlinks_when_disabled (self , temp_dir ):
1188+ """No ilamb_input directory is created when the flag is unset."""
1189+ db_path = temp_dir / "test.db"
1190+ (temp_dir / "tas_Amon_ACCESS_historical.nc" ).write_text ("x" )
1191+
1192+ with TaskTracker (db_path ) as tracker :
1193+ finalize_monitor (tracker , {"variables" : []}, "historical" , db_path )
1194+
1195+ assert not (temp_dir / "ilamb_input" ).exists ()
1196+
1197+ @pytest .mark .unit
1198+ def test_finalize_survives_ilamb_symlink_failure (self , temp_dir ):
1199+ """A symlink-build error is swallowed so finalize still completes."""
1200+ db_path = temp_dir / "test.db"
1201+ sidecar = temp_dir / SIDECAR_FILENAME
1202+ sidecar .write_text ("12345.gadi-pbs\n 2026-05-15T00:00:00\n " )
1203+
1204+ with TaskTracker (db_path ) as tracker :
1205+ config = {"variables" : [], "ilamb_input_format" : True }
1206+ with patch (
1207+ "access_moppy.utilities.create_ilamb_model_symlinks" ,
1208+ side_effect = ValueError ("multiple files for variable" ),
1209+ ):
1210+ # Must not raise despite the symlink builder blowing up.
1211+ finalize_monitor (tracker , config , "historical" , db_path )
1212+
1213+ # Finalize still ran to completion (sidecar cleanup happened).
1214+ assert not sidecar .exists ()
1215+
11661216
11671217class TestMonitorMain :
11681218 """Unit tests for monitor_main entry point: env validation and submit flow."""
0 commit comments