import 'package:flutter_test/flutter_test.dart'; import 'package:pluriwave/modelos/pais_radio.dart'; /// WU7 / `station-discovery-browse` spec, scenario "`stationcount` arrives /// as a JSON string (edge case, critical)": the Radio Browser `/json/countries` /// endpoint returns `stationcount` as a STRING, not a number. An `as int` /// cast throws at runtime — this model MUST go through `int.tryParse` /// (Engram `reference/radio-browser-countries-endpoint`, id 2500). void main() { group('PaisRadio.fromApi', () { test('parsea stationcount desde un string JSON sin lanzar', () { final pais = PaisRadio.fromApi(const { 'name': 'Spain', 'iso_3166_1': 'es', 'stationcount': '482', }); expect(pais.nombre, 'Spain'); expect(pais.codigoIso, 'ES'); expect(pais.numeroEmisoras, 482); }); test('normaliza iso_3166_1 a mayúsculas', () { final pais = PaisRadio.fromApi(const { 'name': 'France', 'iso_3166_1': 'fr', 'stationcount': '10', }); expect(pais.codigoIso, 'FR'); }); test('stationcount ausente cae a 0 sin lanzar', () { final pais = PaisRadio.fromApi(const { 'name': 'Nowhere', 'iso_3166_1': 'xx', }); expect(pais.numeroEmisoras, 0); }); test('stationcount no numérico cae a 0 sin lanzar', () { final pais = PaisRadio.fromApi(const { 'name': 'Nowhere', 'iso_3166_1': 'xx', 'stationcount': 'not-a-number', }); expect(pais.numeroEmisoras, 0); }); test('name/iso_3166_1 ausentes caen a string vacío sin lanzar', () { final pais = PaisRadio.fromApi(const {'stationcount': '5'}); expect(pais.nombre, ''); expect(pais.codigoIso, ''); expect(pais.numeroEmisoras, 5); }); }); }