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