@@ -40,6 +40,40 @@ func TestNewCMD(t *testing.T) {
4040 assert .Contains (t , outputWithoutArgs , "is not a valid command" , "TEST Failed.\n %s" , "Stderr output mismatch" )
4141}
4242
43+ func TestNewCMD_FileLoggerClosedAfterRun (t * testing.T ) {
44+ tempFile , err := os .CreateTemp (t .TempDir (), "gofr_cmd_test_log_*.log" )
45+ require .NoError (t , err )
46+
47+ tempFile .Close () // Close it since NewFileLogger will open it.
48+ t .Setenv ("CMD_LOGS_FILE" , tempFile .Name ())
49+
50+ originalArgs := os .Args
51+ os .Args = []string {"" , "test-log" }
52+
53+ t .Cleanup (func () { os .Args = originalArgs })
54+
55+ a := NewCMD ()
56+
57+ a .SubCommand ("test-log" , func (c * Context ) (any , error ) {
58+ c .Logger .Info ("test log message in cmd" )
59+ return "handler called" , nil
60+ })
61+
62+ a .Run ()
63+
64+ logBytes , err := os .ReadFile (tempFile .Name ())
65+ require .NoError (t , err )
66+
67+ assert .Contains (t , string (logBytes ), "test log message in cmd" )
68+
69+ // Verify the logger is closed by checking if another Close() call returns an error.
70+ closer , ok := a .container .Logger .(io.Closer )
71+ require .True (t , ok , "logger should implement io.Closer" )
72+
73+ err = closer .Close ()
74+ assert .ErrorIs (t , err , os .ErrClosed )
75+ }
76+
4377func TestGofr_readConfig (t * testing.T ) {
4478 app := App {}
4579
0 commit comments