EstadoAlarmas, EstadoGrabacion and EstadoRadio defaulted `esPremium` to `() => true`, so any construction site that forgot to wire entitlement compiled fine and silently ran ungated — failing OPEN to premium and disabling the paywall with no test able to catch it. The parameter is now required with no default. Production wiring in app.dart was already correct and is unchanged; the 184 pre-existing test call sites now pass `() => true` explicitly, which is exactly the old implicit default, so every assertion is untouched. EstadoRadio has no gate of its own but constructs EstadoGrabacion, so it inherits the same contract. The one test that existed to pin the old default is renamed to describe what it still covers (the premium path through iniciar() with no duracion); its assertions are unchanged.
92 lines
2.7 KiB
Dart
92 lines
2.7 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:pluriwave/estado/estado_radio.dart';
|
|
import 'package:pluriwave/l10n/gen/app_localizations.dart';
|
|
import 'package:pluriwave/tema/pluriwave_tokens.dart';
|
|
import 'package:pluriwave/widgets/pluri_glass_surface.dart';
|
|
import 'package:pluriwave/widgets/tarjeta_emisora.dart';
|
|
import 'package:provider/provider.dart';
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
|
|
import '../helpers/fakes.dart';
|
|
|
|
/// S4 (Tier 1 visual fidelity): the prototype's dominant ROW radius is 14
|
|
/// (t4 lines 175, 227, 302 — Favoritos/Buscar/results rows, all rendered by
|
|
/// `TarjetaEmisora(esCompacta: true)`), its dominant CARD radius is 18
|
|
/// (lines 155-160 — "Cerca de ti", rendered by the non-compact grid card).
|
|
void main() {
|
|
setUp(() {
|
|
SharedPreferences.setMockInitialValues({});
|
|
});
|
|
|
|
Widget host(Widget child) {
|
|
final estado = EstadoRadio(
|
|
esPremium: () => true,
|
|
audio: FakeServicioAudio(),
|
|
favoritos: FakeServicioFavoritos(),
|
|
radio: FakeServicioRadio(),
|
|
servicioEcualizador: FakeServicioEcualizador(),
|
|
iniciarAutomaticamente: false,
|
|
);
|
|
addTearDown(estado.dispose);
|
|
return ChangeNotifierProvider<EstadoRadio>.value(
|
|
value: estado,
|
|
child: MaterialApp(
|
|
locale: const Locale('en'),
|
|
localizationsDelegates: AppLocalizations.localizationsDelegates,
|
|
supportedLocales: AppLocalizations.supportedLocales,
|
|
home: Scaffold(body: Center(child: child)),
|
|
),
|
|
);
|
|
}
|
|
|
|
BorderRadius radiusOf(WidgetTester tester) {
|
|
final surface = tester.widget<PluriGlassSurface>(
|
|
find.byType(PluriGlassSurface),
|
|
);
|
|
return surface.borderRadius as BorderRadius;
|
|
}
|
|
|
|
testWidgets('esCompacta:true (row) uses radiusSm — 14', (tester) async {
|
|
await tester.pumpWidget(
|
|
host(
|
|
SizedBox(
|
|
width: 320,
|
|
child: TarjetaEmisora(
|
|
emisora: emisoraDemo(uuid: 'row', nombre: 'Row FM'),
|
|
esCompacta: true,
|
|
),
|
|
),
|
|
),
|
|
);
|
|
await tester.pump();
|
|
|
|
expect(
|
|
radiusOf(tester),
|
|
BorderRadius.circular(PluriWaveTokens.dark.radiusSm),
|
|
);
|
|
expect(PluriWaveTokens.dark.radiusSm, 14);
|
|
});
|
|
|
|
testWidgets('esCompacta:false (card) uses radiusMd — 18', (tester) async {
|
|
await tester.pumpWidget(
|
|
host(
|
|
SizedBox(
|
|
width: 220,
|
|
height: 320,
|
|
child: TarjetaEmisora(
|
|
emisora: emisoraDemo(uuid: 'card', nombre: 'Card FM'),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
await tester.pump();
|
|
|
|
expect(
|
|
radiusOf(tester),
|
|
BorderRadius.circular(PluriWaveTokens.dark.radiusMd),
|
|
);
|
|
expect(PluriWaveTokens.dark.radiusMd, 18);
|
|
});
|
|
}
|