import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:nuvolari/l10n/app_localizations.dart'; import 'package:nuvolari/main.dart'; void main() { testWidgets('starts up and shows the Italian UI', (tester) async { await tester.pumpWidget(const ProviderScope(child: NuvolariApp())); await tester.pump(); expect(find.text('Nuvolari'), findsWidgets); }); group('AppLocalizations', () { test('supports Italian', () { expect( AppLocalizations.supportedLocales.map((locale) => locale.languageCode), contains('it'), ); }); test('resolves Italian strings', () async { final l10n = await AppLocalizations.delegate.load(const Locale('it')); expect(l10n.appTitle, 'Nuvolari'); expect(l10n.navRadar, 'Radar'); expect(l10n.navForecast, 'Previsioni'); expect(l10n.navAlerts, 'Allerte'); }); // The disclaimer is a compliance requirement, not copy: it must state both // that the app is independent and that official channels take precedence. test( 'the disclaimer states independence and defers to official channels', () async { final l10n = await AppLocalizations.delegate.load(const Locale('it')); expect(l10n.sourcesDisclaimerBody, contains('indipendente')); expect(l10n.sourcesDisclaimerBody, contains('Arpa Piemonte')); expect(l10n.sourcesDisclaimerBody, contains('Protezione Civile')); expect(l10n.sourcesDisclaimerBody, contains('ufficiali')); }, ); test('pluralises the data age message', () async { final l10n = await AppLocalizations.delegate.load(const Locale('it')); expect(l10n.dataAgeMinutes(0), 'Aggiornato ora'); expect(l10n.dataAgeMinutes(1), 'Aggiornato 1 minuto fa'); expect(l10n.dataAgeMinutes(12), 'Aggiornato 12 minuti fa'); }); }); }