@@ -676,4 +676,106 @@ def test_atexit_handler_registered(self):
676676 def test_signal_handlers_exist (self ):
677677 """Test that signal handler method exists."""
678678 assert hasattr (experiment_module .Experiment , "_signal_handler" )
679- assert callable (experiment_module .Experiment ._signal_handler )
679+
680+
681+ class TestExperimentLogMedia :
682+ """Test log_media method."""
683+
684+ def test_log_media_basic (self ):
685+ """Test basic media upload with explicit type."""
686+ exp = MagicMock ()
687+ exp .name = "test_exp"
688+ exp ._manager = MagicMock ()
689+ exp ._media_api = MagicMock ()
690+ exp ._printer = MagicMock ()
691+ exp ._stats = MagicMock ()
692+ exp ._stats .media_logged = 0
693+
694+ # Import MediaType from types
695+ from unittest .mock import patch
696+
697+ from lightning_sdk .lightning_cloud .openapi import V1MediaType
698+ from litlogger .experiment import Experiment
699+ from litlogger .types import MediaType
700+
701+ with patch ("os.path.exists" , return_value = True ):
702+ Experiment .log_media (exp , "image" , "/path/to/image.png" , kind = MediaType .IMAGE )
703+
704+ # Verify upload_media called with correct args
705+ exp ._media_api .upload_media .assert_called_once ()
706+ _ , kwargs = exp ._media_api .upload_media .call_args
707+ assert kwargs ["file_path" ] == "/path/to/image.png"
708+ assert kwargs ["media_type" ] == V1MediaType .IMAGE
709+ assert exp ._stats .media_logged == 1
710+
711+ def test_log_media_guess_type_image (self ):
712+ """Test media upload with guessed image type."""
713+ exp = MagicMock ()
714+ exp ._media_api = MagicMock ()
715+ exp ._printer = MagicMock ()
716+ exp ._stats = MagicMock ()
717+ exp ._stats .media_logged = 0
718+
719+ from unittest .mock import patch
720+
721+ from lightning_sdk .lightning_cloud .openapi import V1MediaType
722+ from litlogger .experiment import Experiment
723+
724+ with patch ("os.path.exists" , return_value = True ):
725+ Experiment .log_media (exp , "image" , "/path/to/image.jpg" )
726+
727+ _ , kwargs = exp ._media_api .upload_media .call_args
728+ assert kwargs ["media_type" ] == V1MediaType .IMAGE
729+ assert exp ._stats .media_logged == 1
730+
731+ def test_log_media_guess_type_text (self ):
732+ """Test media upload with guessed text type."""
733+ exp = MagicMock ()
734+ exp ._media_api = MagicMock ()
735+ exp ._printer = MagicMock ()
736+ exp ._stats = MagicMock ()
737+ exp ._stats .media_logged = 0
738+
739+ from unittest .mock import patch
740+
741+ from lightning_sdk .lightning_cloud .openapi import V1MediaType
742+ from litlogger .experiment import Experiment
743+
744+ with patch ("os.path.exists" , return_value = True ):
745+ Experiment .log_media (exp , "file" , "/path/to/file.txt" )
746+
747+ _ , kwargs = exp ._media_api .upload_media .call_args
748+ assert kwargs ["media_type" ] == V1MediaType .TEXT
749+ assert exp ._stats .media_logged == 1
750+
751+ def test_log_media_unsupported_type (self ):
752+ """Test log_media raises ValueError for guessed unsupported media type."""
753+ exp = MagicMock ()
754+ exp ._media_api = MagicMock ()
755+ exp ._printer = MagicMock ()
756+ exp ._stats = MagicMock ()
757+ exp ._stats .media_logged = 0
758+
759+ from unittest .mock import patch
760+
761+ import pytest
762+ from litlogger .experiment import Experiment
763+
764+ with (
765+ patch ("os.path.exists" , return_value = True ),
766+ patch ("mimetypes.guess_type" , return_value = ("application/zip" , None )),
767+ pytest .raises (ValueError , match = "Unsupported media type for file: /path/to/file.txt" ),
768+ ):
769+ Experiment .log_media (exp , "file" , "/path/to/file.txt" )
770+
771+ def test_log_media_raises_file_not_found (self ):
772+ """Test log_media raises FileNotFoundError."""
773+ exp = MagicMock ()
774+
775+ from unittest .mock import patch
776+
777+ import pytest
778+ from litlogger .experiment import Experiment
779+
780+ with patch ("os.path.exists" , return_value = False ), pytest .raises (FileNotFoundError ):
781+ Experiment .log_media (exp , "file" , "/non/existent/file.png" )
0 commit comments