Подсказка external_id из уже увиденных устройств при добавлении
Поле External ID при создании/изменении устройства теперь input+datalist: можно вписать значение вручную (как раньше) или выбрать из подсказок — идентификаторы устройств, от которых device-control-service уже получал MQTT-телеметрию/ack (Redis-множество devices:known), но которые ещё не зарегистрированы в Postgres. Уже зарегистрированные id из списка подсказок исключаются. DeviceShadow::knownExternalIds() — новый read-метод (SMEMBERS devices:known), зеркалит то же множество, что Go-сервисы уже читают/ пишут для health-check/online-детекции.
This commit is contained in:
@@ -130,4 +130,23 @@ class DeviceControllerTest extends TestCase
|
||||
->where('telemetry.0.value', 24.5)
|
||||
);
|
||||
}
|
||||
|
||||
public function test_create_form_suggests_unregistered_external_ids(): void
|
||||
{
|
||||
$owner = User::factory()->create(['role' => UserRole::Owner]);
|
||||
// Already registered — must be excluded even though device-control-service still knows it.
|
||||
$this->makeDevice($owner, ['turn_on']);
|
||||
|
||||
$this->mock(DeviceShadow::class, function ($mock) {
|
||||
$mock->shouldReceive('knownExternalIds')->once()->andReturn(['fan-1', 'sensor-2']);
|
||||
});
|
||||
|
||||
$response = $this->actingAs($owner)->get(route('devices.create'));
|
||||
|
||||
$response->assertOk();
|
||||
$response->assertInertia(fn (Assert $page) => $page
|
||||
->component('Devices/Create')
|
||||
->where('unregisteredExternalIds', ['sensor-2'])
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user