diff --git a/routes/api.php b/routes/api.php index dae2e11..f884059 100644 --- a/routes/api.php +++ b/routes/api.php @@ -187,6 +187,21 @@ Route::get('/user', function (Request $request) { return $request->user(); })->middleware('auth:sanctum'); +Route::get('/devices', function (Request $request) { + $devices = $request->user()->devices()->get([ + 'id', + 'name', + 'friendly_id', + 'mac_address', + 'last_battery_voltage as battery_voltage', + 'last_rssi_level as rssi' + ]); + + return response()->json([ + 'data' => $devices + ]); +})->middleware('auth:sanctum'); + Route::post('/display/update', function (Request $request) { $request->validate([ 'device_id' => 'required|exists:devices,id', diff --git a/tests/Feature/Api/DeviceEndpointsTest.php b/tests/Feature/Api/DeviceEndpointsTest.php index 395151c..54d0514 100644 --- a/tests/Feature/Api/DeviceEndpointsTest.php +++ b/tests/Feature/Api/DeviceEndpointsTest.php @@ -422,3 +422,45 @@ test('current_screen endpoint requires valid device credentials', function () { $response->assertNotFound() ->assertJson(['message' => 'Device not found or invalid access token']); }); + +test('authenticated user can fetch their devices', function () { + $user = User::factory()->create(); + $devices = Device::factory()->count(2)->create([ + 'user_id' => $user->id, + 'last_battery_voltage' => 3.72, + 'last_rssi_level' => -63, + ]); + + Sanctum::actingAs($user); + + $response = $this->getJson('/api/devices'); + + $response->assertOk() + ->assertJsonStructure([ + 'data' => [ + '*' => [ + 'id', + 'name', + 'friendly_id', + 'mac_address', + 'battery_voltage', + 'rssi' + ] + ] + ]) + ->assertJsonCount(2, 'data'); + + // Verify the first device's data + $response->assertJson([ + 'data' => [ + [ + 'id' => $devices[0]->id, + 'name' => $devices[0]->name, + 'friendly_id' => $devices[0]->friendly_id, + 'mac_address' => $devices[0]->mac_address, + 'battery_voltage' => 3.72, + 'rssi' => -63 + ] + ] + ]); +});