@@ -223,6 +223,87 @@ func TestHandlePostLocation_Validation(t *testing.T) {
223223 }
224224}
225225
226+ func TestHandleAdminStatus_Empty (t * testing.T ) {
227+ tracker := NewTracker (5 * time .Minute )
228+ defer tracker .Stop ()
229+
230+ handler := handleAdminStatus (tracker , time .Now ())
231+ req := httptest .NewRequest ("GET" , "/api/v1/admin/status" , nil )
232+ w := httptest .NewRecorder ()
233+ handler (w , req )
234+
235+ assert .Equal (t , http .StatusOK , w .Code )
236+ assert .Equal (t , "application/json" , w .Header ().Get ("Content-Type" ))
237+
238+ var resp adminStatusResponse
239+ err := json .NewDecoder (w .Body ).Decode (& resp )
240+ require .NoError (t , err )
241+
242+ assert .Equal (t , "ok" , resp .Status )
243+ assert .Equal (t , 0 , resp .ActiveVehicles )
244+ assert .Equal (t , 0 , resp .TotalVehiclesTracked )
245+ assert .Nil (t , resp .LastUpdate )
246+ }
247+
248+ func TestHandleAdminStatus_WithVehicles (t * testing.T ) {
249+ tracker := NewTracker (5 * time .Minute )
250+ defer tracker .Stop ()
251+
252+ tracker .Update (& LocationReport {VehicleID : "bus-1" , Latitude : 1 , Longitude : 2 , Timestamp : 100 })
253+ tracker .Update (& LocationReport {VehicleID : "bus-2" , Latitude : 3 , Longitude : 4 , Timestamp : 200 })
254+
255+ handler := handleAdminStatus (tracker , time .Now ())
256+ req := httptest .NewRequest ("GET" , "/api/v1/admin/status" , nil )
257+ w := httptest .NewRecorder ()
258+ handler (w , req )
259+
260+ assert .Equal (t , http .StatusOK , w .Code )
261+
262+ var resp adminStatusResponse
263+ err := json .NewDecoder (w .Body ).Decode (& resp )
264+ require .NoError (t , err )
265+
266+ assert .Equal (t , "ok" , resp .Status )
267+ assert .Equal (t , 2 , resp .ActiveVehicles )
268+ assert .Equal (t , 2 , resp .TotalVehiclesTracked )
269+ require .NotNil (t , resp .LastUpdate )
270+ assert .False (t , resp .LastUpdate .IsZero ())
271+ }
272+
273+ func TestHandleAdminStatus_Uptime (t * testing.T ) {
274+ tracker := NewTracker (5 * time .Minute )
275+ defer tracker .Stop ()
276+
277+ startTime := time .Now ().Add (- 10 * time .Second )
278+ handler := handleAdminStatus (tracker , startTime )
279+ req := httptest .NewRequest ("GET" , "/api/v1/admin/status" , nil )
280+ w := httptest .NewRecorder ()
281+ handler (w , req )
282+
283+ var resp adminStatusResponse
284+ err := json .NewDecoder (w .Body ).Decode (& resp )
285+ require .NoError (t , err )
286+
287+ assert .GreaterOrEqual (t , resp .UptimeSeconds , int64 (10 ))
288+ }
289+
290+ func TestHandleAdminStatus_ZeroVehiclesNotNull (t * testing.T ) {
291+ tracker := NewTracker (5 * time .Minute )
292+ defer tracker .Stop ()
293+
294+ handler := handleAdminStatus (tracker , time .Now ())
295+ req := httptest .NewRequest ("GET" , "/api/v1/admin/status" , nil )
296+ w := httptest .NewRecorder ()
297+ handler (w , req )
298+
299+ var raw map [string ]any
300+ err := json .NewDecoder (w .Body ).Decode (& raw )
301+ require .NoError (t , err )
302+
303+ assert .Equal (t , float64 (0 ), raw ["active_vehicles" ])
304+ assert .Equal (t , float64 (0 ), raw ["total_vehicles_tracked" ])
305+ }
306+
226307type mockStore struct {
227308 err error
228309 saved bool
0 commit comments