CCExtractor / CCExtractor/taskwarrior-flutter

Add Unit Tests for v3 Layer and All GetX Controllers

Ouverte
#619 3 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

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_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

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. 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

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.