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:

// 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:

Feature Service Tests 50+ files

Each of the 100+ features has service-level tests covering CRUD operations, business rules, and edge cases:

State Tests 3 files

Verify reactive state management behavior:

View Tests 7 files

Widget-level integration tests for key screens:

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

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)); }); }); }