import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:pluriwave/l10n/gen/app_localizations.dart'; import 'package:pluriwave/modelos/preset_ecualizador.dart'; import 'package:pluriwave/widgets/ecualizador_widget.dart'; /// WU13 task 13.1 — first-class regression guard (design ADR-5, spec /// `eq-custom-presets` "Five-Band Equalizer"): the equalizer widget must /// always render exactly 5 vertical sliders. Band count is device-reported /// via `just_audio`'s `AndroidEqualizer` (spike, Engram id 2498), not /// app-chosen — any future change rendering 7 sliders is rejected on sight. /// /// **Correction found at apply time**: `tasks.md`'s WU13 Verify command /// names this file as if it already existed ("Modified tests: /// ecualizador_widget_test.dart"). No such file existed before this commit /// (`ecualizador_widget.dart` had zero test coverage) — created new instead. void main() { Widget buildWidget({ PresetEcualizador? preset, bool habilitado = true, void Function(PresetEcualizador)? onCambio, }) { return MaterialApp( locale: const Locale('en'), localizationsDelegates: AppLocalizations.localizationsDelegates, supportedLocales: AppLocalizations.supportedLocales, home: Scaffold( body: EcualizadorWidget( preset: preset ?? PresetEcualizador.flat, habilitado: habilitado, onCambio: onCambio ?? (_) {}, ), ), ); } testWidgets('renders exactly 5 vertical sliders, one per band', ( tester, ) async { await tester.pumpWidget(buildWidget()); expect(find.byType(Slider), findsNWidgets(5)); }); testWidgets('renders exactly 5 sliders regardless of the preset selected', ( tester, ) async { // Regression guard restated: a future change proposing 7 sliders (the // rejected mockup band count) must fail this test regardless of which // fixed preset is active. await tester.pumpWidget(buildWidget(preset: PresetEcualizador.jazz)); expect(find.byType(Slider), findsNWidgets(5)); }); testWidgets('dragging a slider reports the updated band back via onCambio', ( tester, ) async { PresetEcualizador? reportado; await tester.pumpWidget(buildWidget(onCambio: (p) => reportado = p)); final slider = tester.widget(find.byType(Slider).first); slider.onChanged?.call(6.0); await tester.pump(); expect(reportado, isNotNull); expect(reportado!.bandas.length, 5); expect(reportado!.bandas.first, 6.0); }); testWidgets( 'habilitado: false disables every slider (greyed, non-interactive)', (tester) async { await tester.pumpWidget(buildWidget(habilitado: false)); final sliders = tester.widgetList(find.byType(Slider)); expect(sliders, hasLength(5)); for (final slider in sliders) { expect(slider.onChanged, isNull); } }, ); testWidgets('habilitado: true (default) keeps every slider interactive', ( tester, ) async { await tester.pumpWidget(buildWidget()); final sliders = tester.widgetList(find.byType(Slider)); expect(sliders, hasLength(5)); for (final slider in sliders) { expect(slider.onChanged, isNotNull); } }); }