Skip to content

Add Unit Tests for v3 Layer and All GetX Controllers #619

@inderjeet20

Description

@inderjeet20

Summary

The project has 91+ existing tests covering utilities, JSON models, routes, and tour UI — but the v3 data layer (12 files) and all 14 GetX controllers have zero unit test coverage. These are the most critical parts of the codebase: v3 contains the task database, network sync, and core models, while controllers hold all business logic and state management.

Motivation

  • Controllers are the sole owners of business logic per the GetX architecture contract — regressions here break the entire UI silently
  • The v3 layer handles live task data sync; bugs here cause data loss
  • No test infrastructure exists yet for either layer, making refactors risky

Scope

Phase 1 — Test Infrastructure

  • Add test/v3/helpers.dart — shared setup for sqflite FFI, SharedPreferences mock, binding init
  • Add test/modules/controllers/helpers.dart — GetX test mode setup (Get.testMode = true, Get.reset())
  • Run build_runner to regenerate mocks

Phase 2 — V3 Unit Tests (12 files)

Models (test/v3/models/)

  • test/v3/models/task_test.dartTask fromJson/toJson, null fields, edge cases
  • test/v3/models/annotation_test.dartAnnotation serialization
  • test/v3/models/task_for_replica_test.dartTaskForReplica model

Database (test/v3/db/)

  • test/v3/db/task_database_test.dart — open, CRUD operations (sqflite FFI)
  • test/v3/db/update_test.dart — migration/update logic

Network (test/v3/net/)

  • test/v3/net/add_task_test.dart
  • test/v3/net/complete_test.dart
  • test/v3/net/delete_test.dart
  • test/v3/net/fetch_test.dart
  • test/v3/net/modify_test.dart
  • test/v3/net/origin_test.dart

Champion (test/v3/champion/)

  • test/v3/champion/replica_test.dart — sync logic with mocked DB and origin

Phase 3 — Controller Unit Tests (14 files in test/modules/controllers/)

  • home_controller_test.dart — filterTasks, updateTags, reactive state, search
  • splash_controller_test.dart — init flow, navigation state
  • taskc_details_controller_test.dart — task init from args, field mutation, save
  • settings_controller_test.dart — language change, directory pick, theme
  • widget_controller_test.dart
  • logs_controller_test.dart
  • about_controller_test.dart
  • detail_route_controller_test.dart
  • manage_task_server_controller_test.dart — server add/remove, connection test
  • reports_controller_test.dart
  • profile_controller_test.dart
  • permission_controller_test.dart
  • onboarding_controller_test.dart
  • manage_task_champion_creds_controller_test.dart

Acceptance Criteria

  • flutter test test/v3/ passes with all 12 v3 tests green
  • flutter test test/modules/controllers/ passes with all 14 controller tests green
  • flutter test full suite passes without regression
  • Each controller test covers: onInit state, at least 2 state-mutating methods, and error/edge cases

Implementation Notes

  • No new pub dependencies needed — mockito and sqflite_ffi are already in pubspec.yaml
  • Reference existing patterns in test/api_service_test.dart (mock setup) and test/models/json/task_test.dart (model tests)
  • All 14 controllers extend GetxController — use Get.testMode = true per test group
  • v3 net tests should mock http.Client via @GenerateMocks([http.Client])

Labels

testing good first issue help wanted v3 controllers

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions