import 'package:flutter/material.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_quill/flutter_quill.dart'; import 'package:notas/models/note.dart'; import 'package:notas/screens/note_editor_screen.dart'; void main() { testWidgets('autosaves a note when only the category changes', ( WidgetTester tester, ) async { Note? savedNote; final Note initialNote = Note( title: 'Sin título', body: '', createdAt: DateTime(2026, 5, 21), updatedAt: DateTime(2026, 5, 21), position: 0, ); await tester.pumpWidget( MaterialApp( localizationsDelegates: const >[ GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate, FlutterQuillLocalizations.delegate, ], home: Scaffold( body: NoteEditorScreen( repository: null, note: initialNote, saveNote: (Note note) async => note, onSaved: (Note result) { savedNote = result; }, ), ), ), ); expect(find.text('Sin categoría'), findsWidgets); await tester.tap(find.byKey(const ValueKey('category_selector'))); await tester.pumpAndSettle(); await tester.tap(find.text('Trabajo').last); await tester.pump(); await tester.pump(const Duration(seconds: 2)); expect(savedNote, isNotNull); expect(savedNote!.categoryId, 'work'); expect(savedNote!.title, 'Sin título'); }); testWidgets('debounces multiple edits into a single save', ( WidgetTester tester, ) async { int saveCount = 0; final Note initialNote = Note( title: 'Sin título', body: '', createdAt: DateTime(2026, 5, 21), updatedAt: DateTime(2026, 5, 21), position: 0, ); await tester.pumpWidget( MaterialApp( localizationsDelegates: const >[ GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate, FlutterQuillLocalizations.delegate, ], home: Scaffold( body: NoteEditorScreen( repository: null, note: initialNote, saveNote: (Note note) async { saveCount += 1; return note; }, ), ), ), ); await tester.enterText(find.byType(TextField).first, 'Primera versión'); await tester.pump(const Duration(milliseconds: 300)); await tester.enterText(find.byType(TextField).first, 'Segunda versión'); await tester.pump(const Duration(seconds: 2)); expect(saveCount, 1); }); }