@@ -83,7 +83,9 @@ func TestPrintListAsJSONValidOutput(t *testing.T) {
8383 }
8484
8585 var buf bytes.Buffer
86- printListAsJSON (& buf , crontabs )
86+ if err := printListAsJSON (& buf , crontabs ); err != nil {
87+ t .Fatalf ("printListAsJSON returned error: %v" , err )
88+ }
8789
8890 if buf .Len () == 0 {
8991 t .Fatal ("printListAsJSON produced no output" )
@@ -102,7 +104,9 @@ func TestPrintListAsJSONStructure(t *testing.T) {
102104 }
103105
104106 var buf bytes.Buffer
105- printListAsJSON (& buf , crontabs )
107+ if err := printListAsJSON (& buf , crontabs ); err != nil {
108+ t .Fatalf ("printListAsJSON returned error: %v" , err )
109+ }
106110
107111 var parsed []json.RawMessage
108112 if err := json .Unmarshal (buf .Bytes (), & parsed ); err != nil {
@@ -137,7 +141,9 @@ func TestPrintListAsJSONStructure(t *testing.T) {
137141
138142func TestPrintListAsJSONEmptyCrontabs (t * testing.T ) {
139143 var buf bytes.Buffer
140- printListAsJSON (& buf , []* lib.Crontab {})
144+ if err := printListAsJSON (& buf , []* lib.Crontab {}); err != nil {
145+ t .Fatalf ("printListAsJSON returned error: %v" , err )
146+ }
141147
142148 var parsed []json.RawMessage
143149 if err := json .Unmarshal (buf .Bytes (), & parsed ); err != nil {
@@ -150,7 +156,9 @@ func TestPrintListAsJSONEmptyCrontabs(t *testing.T) {
150156
151157func TestPrintListAsJSONNilCrontabs (t * testing.T ) {
152158 var buf bytes.Buffer
153- printListAsJSON (& buf , nil )
159+ if err := printListAsJSON (& buf , nil ); err != nil {
160+ t .Fatalf ("printListAsJSON returned error: %v" , err )
161+ }
154162
155163 var parsed []json.RawMessage
156164 if err := json .Unmarshal (buf .Bytes (), & parsed ); err != nil {
@@ -175,7 +183,9 @@ func TestPrintListAsJSONSkipsEmptyCrontabs(t *testing.T) {
175183 }
176184
177185 var buf bytes.Buffer
178- printListAsJSON (& buf , crontabs )
186+ if err := printListAsJSON (& buf , crontabs ); err != nil {
187+ t .Fatalf ("printListAsJSON returned error: %v" , err )
188+ }
179189
180190 var parsed []json.RawMessage
181191 if err := json .Unmarshal (buf .Bytes (), & parsed ); err != nil {
@@ -186,6 +196,38 @@ func TestPrintListAsJSONSkipsEmptyCrontabs(t *testing.T) {
186196 }
187197}
188198
199+ func TestPrintListAsJSONExcludesNonJobLines (t * testing.T ) {
200+ crontabs := []* lib.Crontab {
201+ makeCrontab ("/etc/crontab" , false , []* lib.Line {
202+ makeLine ("0 * * * *" , "/usr/bin/backup" ),
203+ // Comment line (no command)
204+ {IsComment : true , FullLine : "# this is a comment" , LineNumber : 2 },
205+ // Env var line (no command)
206+ {FullLine : "SHELL=/bin/bash" , LineNumber : 3 },
207+ makeLine ("30 2 * * *" , "/usr/bin/cleanup" ),
208+ }),
209+ }
210+
211+ var buf bytes.Buffer
212+ if err := printListAsJSON (& buf , crontabs ); err != nil {
213+ t .Fatalf ("printListAsJSON returned error: %v" , err )
214+ }
215+
216+ var parsed []struct {
217+ Lines []json.RawMessage `json:"lines"`
218+ }
219+ if err := json .Unmarshal (buf .Bytes (), & parsed ); err != nil {
220+ t .Fatalf ("failed to parse JSON: %v" , err )
221+ }
222+
223+ if len (parsed ) != 1 {
224+ t .Fatalf ("expected 1 crontab, got %d" , len (parsed ))
225+ }
226+ if len (parsed [0 ].Lines ) != 2 {
227+ t .Errorf ("expected 2 job lines (excluding comment and env var), got %d" , len (parsed [0 ].Lines ))
228+ }
229+ }
230+
189231func TestPrintListAsJSONContainsCommandText (t * testing.T ) {
190232 crontabs := []* lib.Crontab {
191233 makeCrontab ("/etc/crontab" , false , []* lib.Line {
@@ -194,7 +236,9 @@ func TestPrintListAsJSONContainsCommandText(t *testing.T) {
194236 }
195237
196238 var buf bytes.Buffer
197- printListAsJSON (& buf , crontabs )
239+ if err := printListAsJSON (& buf , crontabs ); err != nil {
240+ t .Fatalf ("printListAsJSON returned error: %v" , err )
241+ }
198242
199243 if ! bytes .Contains (buf .Bytes (), []byte ("/usr/bin/test arg1 arg2" )) {
200244 t .Errorf ("expected command in JSON output, got: %s" , buf .String ())
0 commit comments