CCExtractor / CCExtractor/taskwarrior-flutter
Add Unit Tests for v3 Layer and All GetX Controllers
Personne n'a encore pris cette issue.
- Langage dominant
- Dart
- Étoiles
- 244
- Forks
- 179
- Merge moyen
- 12 h 42 min
- PR mergées (30 j)
- 2
Description
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_runnerto regenerate mocks
Phase 2 — V3 Unit Tests (12 files)
Models (test/v3/models/)
-
test/v3/models/task_test.dart—TaskfromJson/toJson, null fields, edge cases -
test/v3/models/annotation_test.dart—Annotationserialization -
test/v3/models/task_for_replica_test.dart—TaskForReplicamodel
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 testfull suite passes without regression - Each controller test covers:
onInitstate, at least 2 state-mutating methods, and error/edge cases
Implementation Notes
- No new pub dependencies needed —
mockitoandsqflite_ffiare already inpubspec.yaml - Reference existing patterns in
test/api_service_test.dart(mock setup) andtest/models/json/task_test.dart(model tests) - All 14 controllers extend
GetxController— useGet.testMode = trueper test group - v3 net tests should mock
http.Clientvia@GenerateMocks([http.Client])
Labels
testing good first issue help wanted v3 controllers
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par pubspec.yaml et les patterns existants dans test/api_service_test.dart et test/models/json/task_test.dart. Ajoutez les helpers et les tests indiqués sous test/v3/ et test/modules/controllers/, puis exécutez build_runner et les deux commandes flutter test ciblées avant la suite complète. La tâche est terminée lorsque les 12 tests v3 et les 14 tests de controllers passent tous, avec la couverture spécifiée des états, des mutations et des cas limites.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- dart, flutter
- Domaine
- mobile-dev, testing
- Type d'issue
- Fonctionnalité
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100