feat(ecualizador): include equalizer on/off toggle in export/import
The backup envelope carried favorites, EQ presets, alarms and the multi-device toggle but not EstadoEcualizador's own on/off flag, so restoring a backup on another device silently kept that device's existing toggle state instead of the source device's. Bumps the backup schema to v4 (additive over v3): the flag is only written when explicitly provided, so old exports stay at v2/v3. Importing an old backup without the field leaves the current toggle untouched rather than defaulting it. Applying the imported value reuses EstadoEcualizador.cambiarActivo so it persists and pushes to the live audio engine exactly like a manual toggle.
This commit is contained in:
@@ -232,4 +232,107 @@ void main() {
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
group('ServicioExportImport v4 — equalizer on/off toggle', () {
|
||||
test('v4 export includes ecualizadorActivo=true and schemaVersion 4', () {
|
||||
final config = servicio.construirExportacion(
|
||||
gruposFavoritos: gruposFavoritosFixture,
|
||||
favoritos: favoritosFixture,
|
||||
emisorasCustom: emisorasCustomFixture,
|
||||
presetPrincipal: PresetEcualizador.flat,
|
||||
presetsPorEmisora: {},
|
||||
alarmas: null,
|
||||
emisoraPreferidaUuid: null,
|
||||
ordenListas: 'calidad',
|
||||
timerSuenoPresetsSegundos: const [300],
|
||||
eqMultiDeviceEnabled: false,
|
||||
ecualizadorActivo: true,
|
||||
);
|
||||
|
||||
expect(config['version'], 4);
|
||||
expect(config['ecualizadorActivo'], isTrue);
|
||||
});
|
||||
|
||||
test('v4 export includes ecualizadorActivo=false and schemaVersion 4', () {
|
||||
final config = servicio.construirExportacion(
|
||||
gruposFavoritos: gruposFavoritosFixture,
|
||||
favoritos: favoritosFixture,
|
||||
emisorasCustom: emisorasCustomFixture,
|
||||
presetPrincipal: PresetEcualizador.flat,
|
||||
presetsPorEmisora: {},
|
||||
alarmas: null,
|
||||
emisoraPreferidaUuid: null,
|
||||
ordenListas: 'calidad',
|
||||
timerSuenoPresetsSegundos: const [300],
|
||||
eqMultiDeviceEnabled: false,
|
||||
ecualizadorActivo: false,
|
||||
);
|
||||
|
||||
expect(config['version'], 4);
|
||||
expect(config['ecualizadorActivo'], isFalse);
|
||||
});
|
||||
|
||||
test('v4 round-trip preserves the equalizer toggle exactly', () {
|
||||
final config = servicio.construirExportacion(
|
||||
gruposFavoritos: gruposFavoritosFixture,
|
||||
favoritos: favoritosFixture,
|
||||
emisorasCustom: emisorasCustomFixture,
|
||||
presetPrincipal: PresetEcualizador.jazz,
|
||||
presetsPorEmisora: {'fav-1': PresetEcualizador.rock},
|
||||
alarmas: alarmasFixture,
|
||||
emisoraPreferidaUuid: 'fav-1',
|
||||
ordenListas: 'calidad',
|
||||
timerSuenoPresetsSegundos: const [300, 1800],
|
||||
eqMultiDeviceEnabled: true,
|
||||
ecualizadorActivo: false,
|
||||
);
|
||||
|
||||
final json = servicio.exportar(config);
|
||||
final importado = servicio.importar(json);
|
||||
|
||||
expect(importado, isNotNull);
|
||||
expect(importado!['version'], 4);
|
||||
expect(importado['ecualizadorActivo'], isFalse);
|
||||
});
|
||||
|
||||
test('omitting ecualizadorActivo keeps the export at v3 (backward compat) '
|
||||
'and no key is written', () {
|
||||
final config = servicio.construirExportacion(
|
||||
gruposFavoritos: gruposFavoritosFixture,
|
||||
favoritos: favoritosFixture,
|
||||
emisorasCustom: emisorasCustomFixture,
|
||||
presetPrincipal: PresetEcualizador.flat,
|
||||
presetsPorEmisora: {},
|
||||
alarmas: null,
|
||||
emisoraPreferidaUuid: null,
|
||||
ordenListas: 'calidad',
|
||||
timerSuenoPresetsSegundos: const [300],
|
||||
eqMultiDeviceEnabled: true,
|
||||
// ecualizadorActivo omitted — emulates a v3 export.
|
||||
);
|
||||
|
||||
expect(config['version'], 3);
|
||||
expect(config.containsKey('ecualizadorActivo'), isFalse);
|
||||
});
|
||||
|
||||
test('omitting every v3/v4 extension keeps the export at v2 (backward '
|
||||
'compat)', () {
|
||||
final config = servicio.construirExportacion(
|
||||
gruposFavoritos: gruposFavoritosFixture,
|
||||
favoritos: favoritosFixture,
|
||||
emisorasCustom: emisorasCustomFixture,
|
||||
presetPrincipal: PresetEcualizador.flat,
|
||||
presetsPorEmisora: {},
|
||||
alarmas: null,
|
||||
emisoraPreferidaUuid: null,
|
||||
ordenListas: 'calidad',
|
||||
timerSuenoPresetsSegundos: const [300],
|
||||
// No v3/v4 extensions at all.
|
||||
);
|
||||
|
||||
expect(config['version'], 2);
|
||||
expect(config.containsKey('ecualizadorActivo'), isFalse);
|
||||
expect(config.containsKey('eqMultiDeviceEnabled'), isFalse);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user