fix(test): corregge i fallimenti emersi alla prima esecuzione
- update_service_test: il fake HttpClientResponse tipizza lo stream come Stream<List<int>> (utf8.encode ritorna Uint8List) - guide/info_bottom_sheet test: i titoli delle _DocCard sono resi con toUpperCase(), i finder ora cercano il testo maiuscolo - converter_page_test e app_test: loadDb()/load() dei provider spostati nel setUp — chiamarli nel body di testWidgets (zona FakeAsync) bloccava la suite fino al timeout di 10 minuti Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
+18
-4
@@ -8,15 +8,19 @@ import 'package:biteplan/features/converter/providers/converter_provider.dart';
|
|||||||
import 'package:biteplan/features/meal_planner/providers/meal_planner_provider.dart';
|
import 'package:biteplan/features/meal_planner/providers/meal_planner_provider.dart';
|
||||||
import 'package:biteplan/features/shopping_list/providers/shopping_list_provider.dart';
|
import 'package:biteplan/features/shopping_list/providers/shopping_list_provider.dart';
|
||||||
|
|
||||||
|
late MealPlannerProvider _meals;
|
||||||
|
late ConverterProvider _converter;
|
||||||
|
late ShoppingListProvider _shopping;
|
||||||
|
|
||||||
Future<void> _pumpApp(WidgetTester tester) async {
|
Future<void> _pumpApp(WidgetTester tester) async {
|
||||||
await tester.binding.setSurfaceSize(const Size(800, 1600));
|
await tester.binding.setSurfaceSize(const Size(800, 1600));
|
||||||
addTearDown(() => tester.binding.setSurfaceSize(null));
|
addTearDown(() => tester.binding.setSurfaceSize(null));
|
||||||
await tester.pumpWidget(
|
await tester.pumpWidget(
|
||||||
MultiProvider(
|
MultiProvider(
|
||||||
providers: [
|
providers: [
|
||||||
ChangeNotifierProvider(create: (_) => MealPlannerProvider()..load()),
|
ChangeNotifierProvider.value(value: _meals),
|
||||||
ChangeNotifierProvider(create: (_) => ConverterProvider()..loadDb()),
|
ChangeNotifierProvider.value(value: _converter),
|
||||||
ChangeNotifierProvider(create: (_) => ShoppingListProvider()..load()),
|
ChangeNotifierProvider.value(value: _shopping),
|
||||||
],
|
],
|
||||||
child: const BitePlanApp(),
|
child: const BitePlanApp(),
|
||||||
),
|
),
|
||||||
@@ -28,8 +32,18 @@ Finder _appBarTitle(String text) => find.descendant(
|
|||||||
of: find.byType(AppBar), matching: find.text(text));
|
of: find.byType(AppBar), matching: find.text(text));
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
setUp(() {
|
TestWidgetsFlutterBinding.ensureInitialized();
|
||||||
|
|
||||||
|
// I provider sono creati e caricati nel setUp (fuori dalla zona FakeAsync
|
||||||
|
// di testWidgets): il caricamento async dentro il body può bloccare la suite.
|
||||||
|
setUp(() async {
|
||||||
SharedPreferences.setMockInitialValues({});
|
SharedPreferences.setMockInitialValues({});
|
||||||
|
_meals = MealPlannerProvider();
|
||||||
|
_converter = ConverterProvider();
|
||||||
|
_shopping = ShoppingListProvider();
|
||||||
|
await _meals.load();
|
||||||
|
await _converter.loadDb();
|
||||||
|
await _shopping.load();
|
||||||
});
|
});
|
||||||
|
|
||||||
group('BitePlanApp', () {
|
group('BitePlanApp', () {
|
||||||
|
|||||||
@@ -15,10 +15,14 @@ const _riso =
|
|||||||
ConversionEntry(food: 'riso', method: 'bollitura', yieldFactor: 3.0);
|
ConversionEntry(food: 'riso', method: 'bollitura', yieldFactor: 3.0);
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
|
TestWidgetsFlutterBinding.ensureInitialized();
|
||||||
late ConverterProvider provider;
|
late ConverterProvider provider;
|
||||||
|
|
||||||
setUp(() {
|
// loadDb nel setUp (fuori dalla zona FakeAsync di testWidgets):
|
||||||
|
// caricarlo dentro il body del test può bloccare la suite.
|
||||||
|
setUp(() async {
|
||||||
provider = ConverterProvider();
|
provider = ConverterProvider();
|
||||||
|
await provider.loadDb();
|
||||||
});
|
});
|
||||||
|
|
||||||
group('ConverterPage — ricerca', () {
|
group('ConverterPage — ricerca', () {
|
||||||
@@ -28,7 +32,6 @@ void main() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
testWidgets('la ricerca mostra risultati dal database', (tester) async {
|
testWidgets('la ricerca mostra risultati dal database', (tester) async {
|
||||||
await provider.loadDb();
|
|
||||||
await tester.pumpApp(_page(provider));
|
await tester.pumpApp(_page(provider));
|
||||||
await tester.enterText(find.byType(TextField), 'riso');
|
await tester.enterText(find.byType(TextField), 'riso');
|
||||||
await tester.pump();
|
await tester.pump();
|
||||||
@@ -37,7 +40,6 @@ void main() {
|
|||||||
|
|
||||||
testWidgets('ricerca senza corrispondenze mostra "Nessun risultato"',
|
testWidgets('ricerca senza corrispondenze mostra "Nessun risultato"',
|
||||||
(tester) async {
|
(tester) async {
|
||||||
await provider.loadDb();
|
|
||||||
await tester.pumpApp(_page(provider));
|
await tester.pumpApp(_page(provider));
|
||||||
await tester.enterText(find.byType(TextField), 'xyzabc');
|
await tester.enterText(find.byType(TextField), 'xyzabc');
|
||||||
await tester.pump();
|
await tester.pump();
|
||||||
@@ -46,7 +48,6 @@ void main() {
|
|||||||
|
|
||||||
testWidgets('tap su un risultato apre la card di conversione',
|
testWidgets('tap su un risultato apre la card di conversione',
|
||||||
(tester) async {
|
(tester) async {
|
||||||
await provider.loadDb();
|
|
||||||
await tester.pumpApp(_page(provider));
|
await tester.pumpApp(_page(provider));
|
||||||
await tester.enterText(find.byType(TextField), 'riso');
|
await tester.enterText(find.byType(TextField), 'riso');
|
||||||
await tester.pump();
|
await tester.pump();
|
||||||
|
|||||||
@@ -12,25 +12,26 @@ void main() {
|
|||||||
expect(find.text('Spesa'), findsOneWidget);
|
expect(find.text('Spesa'), findsOneWidget);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// _DocCard rende i titoli con toUpperCase()
|
||||||
testWidgets('la tab iniziale è Pasti', (tester) async {
|
testWidgets('la tab iniziale è Pasti', (tester) async {
|
||||||
await tester.pumpApp(const GuidePage());
|
await tester.pumpApp(const GuidePage());
|
||||||
expect(find.text('Aggiungere un alimento'), findsOneWidget);
|
expect(find.text('AGGIUNGERE UN ALIMENTO'), findsOneWidget);
|
||||||
});
|
});
|
||||||
|
|
||||||
testWidgets('la tab Converti mostra i suoi contenuti', (tester) async {
|
testWidgets('la tab Converti mostra i suoi contenuti', (tester) async {
|
||||||
await tester.pumpApp(const GuidePage());
|
await tester.pumpApp(const GuidePage());
|
||||||
await tester.tap(find.text('Converti'));
|
await tester.tap(find.text('Converti'));
|
||||||
await tester.pumpAndSettle();
|
await tester.pumpAndSettle();
|
||||||
expect(find.text('Come usarlo'), findsOneWidget);
|
expect(find.text('COME USARLO'), findsOneWidget);
|
||||||
expect(find.text('Alimenti disponibili'), findsOneWidget);
|
expect(find.text('ALIMENTI DISPONIBILI'), findsOneWidget);
|
||||||
});
|
});
|
||||||
|
|
||||||
testWidgets('la tab Spesa mostra i suoi contenuti', (tester) async {
|
testWidgets('la tab Spesa mostra i suoi contenuti', (tester) async {
|
||||||
await tester.pumpApp(const GuidePage());
|
await tester.pumpApp(const GuidePage());
|
||||||
await tester.tap(find.text('Spesa'));
|
await tester.tap(find.text('Spesa'));
|
||||||
await tester.pumpAndSettle();
|
await tester.pumpAndSettle();
|
||||||
expect(find.text('Aggiungere un elemento'), findsOneWidget);
|
expect(find.text('AGGIUNGERE UN ELEMENTO'), findsOneWidget);
|
||||||
expect(find.text('Spuntare un elemento'), findsOneWidget);
|
expect(find.text('SPUNTARE UN ELEMENTO'), findsOneWidget);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ void main() {
|
|||||||
await _openSheet(tester);
|
await _openSheet(tester);
|
||||||
await tester.tap(find.text('Apri'));
|
await tester.tap(find.text('Apri'));
|
||||||
await tester.pumpAndSettle();
|
await tester.pumpAndSettle();
|
||||||
expect(find.text('Aggiungere un alimento'), findsOneWidget);
|
expect(find.text('AGGIUNGERE UN ALIMENTO'), findsOneWidget);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -175,5 +175,5 @@ class _FakeHttpClientResponse extends Fake implements HttpClientResponse {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Stream<S> transform<S>(StreamTransformer<List<int>, S> streamTransformer) =>
|
Stream<S> transform<S>(StreamTransformer<List<int>, S> streamTransformer) =>
|
||||||
Stream.value(utf8.encode(body)).transform(streamTransformer);
|
Stream<List<int>>.value(utf8.encode(body)).transform(streamTransformer);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user