import 'package:flutter_test/flutter_test.dart'; import 'package:pluriwave/servicios/servicio_consentimiento.dart'; /// Fake [PuertoConsentimiento]: never touches the UMP plugin, lets each /// test drive the outcome of the consent flow directly. class _PuertoConsentimientoFalso implements PuertoConsentimiento { _PuertoConsentimientoFalso({this.resultado = true, this.lanzarError = false}); final bool resultado; final bool lanzarError; int llamadas = 0; @override Future resolver() async { llamadas++; if (lanzarError) throw Exception('fallo simulado de UMP'); return resultado; } } /// FIX 4 (code review): no GDPR/UMP consent flow existed at all before /// this. [resolverConsentimientoAnuncios] is the pure/injectable /// orchestration seam -- testable with zero AdMob/UMP platform channels, /// mirroring `ServicioAnuncios`'s own testing strategy. void main() { group('resolverConsentimientoAnuncios', () { test('usuario premium: nunca toca el puerto de consentimiento (cero ' 'formularios para premium) y resuelve false', () async { final puerto = _PuertoConsentimientoFalso(resultado: true); final permiso = await resolverConsentimientoAnuncios( esPremium: true, consentimiento: puerto, ); expect(permiso, isFalse); expect(puerto.llamadas, 0); }); test('usuario free: delega al puerto de consentimiento y devuelve su ' 'resultado (canRequestAds)', () async { final puerto = _PuertoConsentimientoFalso(resultado: true); final permiso = await resolverConsentimientoAnuncios( esPremium: false, consentimiento: puerto, ); expect(permiso, isTrue); expect(puerto.llamadas, 1); }); test('usuario free, consentimiento no otorgado: nunca se piden anuncios ' '(false)', () async { final puerto = _PuertoConsentimientoFalso(resultado: false); final permiso = await resolverConsentimientoAnuncios( esPremium: false, consentimiento: puerto, ); expect(permiso, isFalse); }); test('un fallo del puerto de consentimiento degrada silenciosamente a ' 'false -- nunca se propaga ni bloquea al llamador', () async { final puerto = _PuertoConsentimientoFalso(lanzarError: true); final permiso = await resolverConsentimientoAnuncios( esPremium: false, consentimiento: puerto, ); expect(permiso, isFalse); }); }); }