Testing Guide
Comprehensive unit and state tests for models, services, and state management.
Running Tests
# Run all tests
flutter test
# Run with verbose output
flutter test --reporter expanded
# Run specific test file
flutter test test/models/event_model_test.dart
# Run with coverage
flutter test --coverage
lcov -r coverage/lcov.info 'lib/views/*' -o coverage/filtered.info
genhtml coverage/filtered.info -o coverage/html
Test Structure
The test suite contains 110+ test files organized into five categories, covering services, models, state management, views, and utilities.
test/
โโโ core/ # Core service tests (35 files)
โ โโโ services/ # Nested service tests
โ โ โโโ event_sharing_service_test.dart
โ โ โโโ free_slot_finder_test.dart
โ โ โโโ meal_tracker_service_test.dart
โ โโโ achievement_service_test.dart
โ โโโ agenda_digest_service_test.dart
โ โโโ conflict_detector_test.dart
โ โโโ correlation_analyzer_service_test.dart
โ โโโ daily_review_service_test.dart
โ โโโ daily_timeline_service_test.dart
โ โโโ date_utils_test.dart
โ โโโ decision_journal_service_test.dart
โ โโโ dependency_tracker_test.dart
โ โโโ eisenhower_matrix_service_test.dart
โ โโโ energy_tracker_service_test.dart
โ โโโ event_deduplication_service_test.dart
โ โโโ event_pattern_service_test.dart
โ โโโ event_search_service_test.dart
โ โโโ event_service_test.dart
โ โโโ focus_time_service_test.dart
โ โโโ free_slot_finder_test.dart
โ โโโ gratitude_journal_service_test.dart
โ โโโ heatmap_service_test.dart
โ โโโ ics_export_service_test.dart
โ โโโ meditation_tracker_service_test.dart
โ โโโ productivity_score_service_test.dart
โ โโโ reading_list_service_test.dart
โ โโโ routine_builder_service_test.dart
โ โโโ screen_time_tracker_service_test.dart
โ โโโ snooze_service_test.dart
โ โโโ streak_tracker_test.dart
โ โโโ template_service_test.dart
โ โโโ time_audit_service_test.dart
โ โโโ time_budget_service_test.dart
โ โโโ travel_time_estimator_test.dart
โ โโโ water_tracker_service_test.dart
โ โโโ weekly_planner_service_test.dart
โ โโโ weekly_report_service_test.dart
โ โโโ workout_tracker_service_test.dart
โโโ models/ # Model tests (16 files)
โ โโโ datetime_corruption_test.dart
โ โโโ event_attachment_test.dart
โ โโโ event_checklist_test.dart
โ โโโ event_location_test.dart
โ โโโ event_model_recurrence_test.dart
โ โโโ event_model_tags_test.dart
โ โโโ event_model_test.dart
โ โโโ event_tag_test.dart
โ โโโ event_template_test.dart
โ โโโ goal_test.dart
โ โโโ mood_entry_test.dart
โ โโโ recurrence_rule_test.dart
โ โโโ reminder_settings_test.dart
โ โโโ sleep_entry_test.dart
โ โโโ sleep_tracker_test.dart
โ โโโ user_model_test.dart
โโโ state/ # State management tests (3 files)
โ โโโ event_bloc_test.dart
โ โโโ event_provider_test.dart
โ โโโ user_provider_test.dart
โโโ views/ # Widget tests (7 files)
โ โโโ home/
โ โ โโโ parking_spot_screen_test.dart
โ โ โโโ weekly_planner_screen_test.dart
โ โโโ calendar_screen_test.dart
โ โโโ countdown_screen_test.dart
โ โโโ focus_time_screen_test.dart
โ โโโ routine_builder_screen_test.dart
โ โโโ screen_time_tracker_screen_test.dart
โโโ *.dart # Feature service tests (50+ files)
โโโ blood_sugar_test.dart
โโโ budget_planner_test.dart
โโโ habit_tracker_test.dart
โโโ kanban_board_service_test.dart
โโโ medication_tracker_test.dart
โโโ pomodoro_service_test.dart
โโโ ... (and 44 more)
Test Categories
Model Tests 16 files
Verify serialization round-trips, value equality, and domain logic:
- EventModel โ
fromJson/toJsonround-trip,copyWith(includingclearRecurrence),==andhashCode, default values - EventTag โ Case-insensitive equality, color palette bounds clamping, preset validation
- RecurrenceRule โ Occurrence generation for all frequencies, month clamping (Jan 31 + 1mo = Feb 28), end date cutoff,
summaryformatting, JSON string round-trip - EventAttachment / EventChecklist / EventLocation โ Serialization and equality for event sub-models
- EventTemplate โ Template creation, preset defaults
- ReminderSettings โ Notification scheduling logic
- SleepEntry / MoodEntry / Goal โ Domain model serialization and validation
- DatetimeCorruption โ Edge cases: timezone transitions, DST boundaries, epoch edge values
// Example: RecurrenceRule month clamping test
test('monthly recurrence clamps day to valid range', () {
final rule = RecurrenceRule(
frequency: RecurrenceFrequency.monthly,
);
final start = DateTime(2026, 1, 31); // Jan 31
final dates = rule.generateOccurrences(start, maxOccurrences: 3);
expect(dates[1].day, 28); // Feb 28 (not 31!)
expect(dates[2].day, 31); // Mar 31
});
Core Service Tests 35 files
Verify coordination between state and persistence across the core service layer:
- EventService โ add/update/delete coordination, load-once guard (doesn't overwrite non-empty provider), persistence error handling (logged, not thrown)
- Calendar & Scheduling โ ConflictDetector, FreeSlotFinder, DailyTimeline, SnoozeService, TravelTimeEstimator, WeeklyPlanner
- Analytics & Insights โ CorrelationAnalyzer, EventPattern, EventSearch, EventDeduplication, HeatmapService, ProductivityScore, StreakTracker
- Wellness โ MeditationTracker, WaterTracker, WorkoutTracker, EnergyTracker, ScreenTimeTracker
- Journaling & Review โ DailyReview, DecisionJournal, GratitudeJournal, WeeklyReport, TimeAudit, TimeBudget
- Import/Export โ IcsExport, EventSharing, TemplateService
- Utilities โ DateUtils (month arithmetic, week boundaries), AchievementService, DependencyTracker
Feature Service Tests 50+ files
Each of the 100+ features has service-level tests covering CRUD operations, business rules, and edge cases:
- Finance โ BudgetPlanner, DebtPayoff, ExpenseTracker, SavingsGoal, NetWorthTracker, SubscriptionTracker
- Health โ BloodSugar, MedicationTracker, SleepTracker, MoodEntry, EnergyTracker
- Productivity โ PomodoroService, KanbanBoard, HabitTracker, GoalTracker, TimeTracker, SkillTracker
- Lifestyle โ RecipeBook, GroceryList, PlantCare, PetCareTracker, HomeInventory, VehicleMaintenance
- Misc โ CommandPalette, RandomDecision, QuickCapture, LoyaltyTracker, WarrantyTracker, Watchlist
State Tests 3 files
Verify reactive state management behavior:
- EventProvider โ O(1)
getEventById,removeEventindex rebuild,UnmodifiableListViewenforcement,notifyListenerscalls - EventBloc โ State machine transitions (
EventInitialโEventLoaded), no-op behavior in wrong state, list immutability between emissions - UserProvider โ User session lifecycle, authentication state management
View Tests 7 files
Widget-level integration tests for key screens:
- CalendarScreen โ Month navigation, event display, interaction
- FocusTimeScreen โ Timer UI, session start/stop
- WeeklyPlannerScreen โ Week layout, drag-and-drop
- RoutineBuilderScreen โ Step creation, reordering
- CountdownScreen, ParkingSpotScreen, ScreenTimeTrackerScreen
Coverage
Coverage is tracked via Codecov and runs automatically in CI.
Coverage Strategy
The project focuses coverage on models, services, and state โ the testable business logic. View tests (widget tests) are encouraged but not mandated, as they require more infrastructure and are harder to maintain.
Writing New Tests
Conventions
- One test file per source file, mirroring the
lib/structure - Use descriptive
group()blocks for related tests - Test edge cases: empty inputs, null fields, malformed JSON, boundary values
- Mock external dependencies (repositories, Firebase) โ don't hit real services
Example Pattern
import 'package:flutter_test/flutter_test.dart';
import 'package:everything/models/event_model.dart';
void main() {
group('EventModel', () {
test('round-trips through JSON', () {
final original = EventModel(
id: '1',
title: 'Test',
date: DateTime(2026, 1, 15),
);
final json = original.toJson();
final restored = EventModel.fromJson(json);
expect(restored, equals(original));
});
});
}