test(devices): cover rename surviving a re-pair cycle end to end
Build & Deploy PluriWave / Análisis de código (push) Successful in 36s
Build & Deploy PluriWave / Build APK + AAB release (push) Successful in 1m42s

The rename-priority and reconnect-dedup behaviors were each tested in
isolation but never composed: connect, rename, disconnect, re-pair
with the same MAC. Adds that regression test asserting no duplicate
entry appears, the preset entry survives untouched, and the custom
name still wins after reconnection.
This commit is contained in:
2026-07-11 00:53:45 +02:00
parent 158203fee9
commit 8cca7c3daa
+58
View File
@@ -1319,6 +1319,64 @@ void main() {
eq.dispose();
},
);
test(
'3.10 rename persists after re-pair — composed regression '
'(closes bt-device-identity CRITICAL-1)',
() async {
final fakeDispositivo = FakeServicioDispositivoAudio();
const btDevice = DispositivoAudio(
id: 'bt_a2dp:AA:BB:CC:DD:EE:FF',
tipo: TipoDispositivo.bluetoothA2dp,
nombre: 'AirPods Pro',
);
const builtinSpeaker = DispositivoAudio(
id: 'builtin_speaker',
tipo: TipoDispositivo.altavozInterno,
nombre: 'Speaker',
);
final eq = EstadoEcualizador(
audio: FakeServicioAudio(),
servicio: FakeServicioEcualizador(eqMultiDeviceEnabled: true),
dispositivoAudio: fakeDispositivo,
emisoraActualUuid: () => stationUuid,
);
await eq.cargarPersistido();
// Connect: real-MAC id, first-seen bootstrap creates a preset entry.
fakeDispositivo.emitirDispositivo(btDevice);
await Future<void>.delayed(const Duration(milliseconds: 50));
final presetTrasConectar = eq.presetsDispositivo[btDevice.id];
expect(presetTrasConectar, isNotNull);
// Rename the device via the in-app edit dialog path.
await eq.renombrarDispositivo(btDevice.id, 'My Headphones');
expect(
eq.nombreVisible(btDevice.id, eq.nombrePlataforma(btDevice.id)),
equals('My Headphones'),
);
final cantidadTrasRenombrar = eq.presetsDispositivo.length;
// Disconnect: platform reports the transient builtin_speaker fallback.
fakeDispositivo.emitirDispositivo(builtinSpeaker);
await Future<void>.delayed(const Duration(milliseconds: 50));
// Re-pair: same physical device reconnects, reporting the SAME MAC.
fakeDispositivo.emitirDispositivo(btDevice);
await Future<void>.delayed(const Duration(milliseconds: 50));
// No duplicate entry: presetsDispositivo did not grow.
expect(eq.presetsDispositivo.length, equals(cantidadTrasRenombrar));
// The device's own preset entry survives untouched (not overwritten).
expect(eq.presetsDispositivo[btDevice.id], equals(presetTrasConectar));
// Custom rename still wins over the re-cached platform name.
expect(
eq.nombreVisible(btDevice.id, eq.nombrePlataforma(btDevice.id)),
equals('My Headphones'),
);
eq.dispose();
},
);
});
group('FakeServicioEcualizador — nombresDispositivos preservation (WARNING-3)', () {