test: colma i buchi negli unit test esistenti
- UpdateService.checkUpdate() coperto via HttpOverrides con fake HttpClient: versione più recente/uguale/più vecchia, status != 200, body malformato, errore di rete - ConverterProvider.loadDb() con l'asset reale + validazione che ogni voce di conversions.json abbia yield positivo - MealPlannerProvider.removeItem() sui rami colazione e cena (prima era coperto solo pranzo) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,8 +1,12 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:biteplan/features/converter/providers/converter_provider.dart';
|
||||
import 'package:biteplan/features/converter/models/conversion_entry.dart';
|
||||
|
||||
void main() {
|
||||
TestWidgetsFlutterBinding.ensureInitialized();
|
||||
group('ConverterProvider', () {
|
||||
late ConverterProvider provider;
|
||||
|
||||
@@ -187,5 +191,45 @@ void main() {
|
||||
expect(notified, true);
|
||||
});
|
||||
});
|
||||
|
||||
group('loadDb()', () {
|
||||
test('carica il database e la ricerca trova alimenti noti', () async {
|
||||
await provider.loadDb();
|
||||
provider.search('riso');
|
||||
expect(provider.results, isNotEmpty);
|
||||
provider.search('pollo');
|
||||
expect(provider.results, isNotEmpty);
|
||||
});
|
||||
|
||||
test('la ricerca è case-insensitive', () async {
|
||||
await provider.loadDb();
|
||||
provider.search('RISO');
|
||||
expect(provider.results, isNotEmpty);
|
||||
});
|
||||
|
||||
test('notifica i listener', () async {
|
||||
var notified = false;
|
||||
provider.addListener(() => notified = true);
|
||||
await provider.loadDb();
|
||||
expect(notified, true);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
group('conversions.json', () {
|
||||
test('ogni metodo di ogni alimento ha uno yield positivo', () async {
|
||||
final raw =
|
||||
await rootBundle.loadString('assets/data/conversions.json');
|
||||
final json = jsonDecode(raw) as Map<String, dynamic>;
|
||||
expect(json, isNotEmpty);
|
||||
json.forEach((food, methods) {
|
||||
(methods as Map).forEach((method, data) {
|
||||
final yield_ = (data as Map)['yield'];
|
||||
expect(yield_, isA<num>(), reason: '$food/$method');
|
||||
expect((yield_ as num).toDouble(), greaterThan(0),
|
||||
reason: '$food/$method');
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@@ -60,6 +60,24 @@ void main() {
|
||||
expect(provider.plan.days['lunedi']!.pranzo, ['pasta', 'frutta']);
|
||||
});
|
||||
|
||||
test('removeItem rimuove dallo slot colazione', () async {
|
||||
final provider = MealPlannerProvider();
|
||||
await provider.load();
|
||||
provider.addItem('lunedi', 'colazione', 'latte');
|
||||
provider.addItem('lunedi', 'colazione', 'caffè');
|
||||
provider.removeItem('lunedi', 'colazione', 0);
|
||||
expect(provider.plan.days['lunedi']!.colazione, ['caffè']);
|
||||
});
|
||||
|
||||
test('removeItem rimuove dallo slot cena', () async {
|
||||
final provider = MealPlannerProvider();
|
||||
await provider.load();
|
||||
provider.addItem('lunedi', 'cena', 'pollo');
|
||||
provider.addItem('lunedi', 'cena', 'verdure');
|
||||
provider.removeItem('lunedi', 'cena', 1);
|
||||
expect(provider.plan.days['lunedi']!.cena, ['pollo']);
|
||||
});
|
||||
|
||||
test('clearAll svuota tutti i giorni', () async {
|
||||
final provider = MealPlannerProvider();
|
||||
await provider.load();
|
||||
|
||||
Reference in New Issue
Block a user