feat: initial commit - Habo habit tracking app
- Complete MVP with Repository Pattern, SQLite storage - Provider + ChangeNotifier state management - Navigation 2.0 with deep link support - Habit CRUD with twoDayRule, notifications, categories - Backup/Restore via JSON - Statistics with streak tracking - Material You theme support - Biometric lock support - Desktop widget support - 27 languages i18n structure - Comprehensive test suite (87/89 passing)
This commit is contained in:
85
test/app_test.dart
Normal file
85
test/app_test.dart
Normal file
@@ -0,0 +1,85 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:habo/services/service_locator.dart';
|
||||
import 'package:habo/model/habo_model.dart';
|
||||
import 'package:habo/settings/settings_manager.dart';
|
||||
|
||||
void main() {
|
||||
// Initialize Flutter binding for tests
|
||||
TestWidgetsFlutterBinding.ensureInitialized();
|
||||
|
||||
// Set up mock shared preferences for testing
|
||||
setUp(() {
|
||||
TestWidgetsFlutterBinding.instance.defaultBinaryMessenger
|
||||
.setMockMethodCallHandler(
|
||||
const MethodChannel('plugins.flutter.io/shared_preferences'),
|
||||
(MethodCall methodCall) async {
|
||||
if (methodCall.method == 'getAll') {
|
||||
return <String, dynamic>{}; // Return empty preferences
|
||||
}
|
||||
return null;
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
group('App Integration Tests', () {
|
||||
test('service locator initializes correctly', () async {
|
||||
// Reset service locator to ensure clean state
|
||||
ServiceLocator.instance.reset();
|
||||
|
||||
// Create test dependencies
|
||||
final scaffoldKey = GlobalKey<ScaffoldMessengerState>();
|
||||
final haboModel = HaboModel();
|
||||
final settingsManager = SettingsManager();
|
||||
|
||||
// Initialize service locator
|
||||
ServiceLocator.instance
|
||||
.initialize(scaffoldKey, haboModel, settingsManager);
|
||||
|
||||
// Verify services are accessible
|
||||
expect(ServiceLocator.instance.backupService, isNotNull);
|
||||
expect(ServiceLocator.instance.notificationService, isNotNull);
|
||||
expect(ServiceLocator.instance.uiFeedbackService, isNotNull);
|
||||
expect(ServiceLocator.instance.repositoryFactory, isNotNull);
|
||||
});
|
||||
|
||||
test('habo model can be instantiated', () async {
|
||||
// Verify HaboModel can be created without exceptions
|
||||
expect(() => HaboModel(), returnsNormally);
|
||||
});
|
||||
|
||||
test('service locator provides repository factory', () async {
|
||||
// Reset service locator to ensure clean state
|
||||
ServiceLocator.instance.reset();
|
||||
|
||||
final scaffoldKey = GlobalKey<ScaffoldMessengerState>();
|
||||
final haboModel = HaboModel();
|
||||
final settingsManager = SettingsManager();
|
||||
|
||||
ServiceLocator.instance
|
||||
.initialize(scaffoldKey, haboModel, settingsManager);
|
||||
|
||||
// Verify repository factory provides repositories
|
||||
expect(
|
||||
ServiceLocator.instance.repositoryFactory.habitRepository, isNotNull);
|
||||
expect(
|
||||
ServiceLocator.instance.repositoryFactory.eventRepository, isNotNull);
|
||||
});
|
||||
|
||||
test('service locator can be reinitialized', () async {
|
||||
// Reset service locator to ensure clean state
|
||||
ServiceLocator.instance.reset();
|
||||
|
||||
// Verify service locator can handle reinitialization
|
||||
final scaffoldKey = GlobalKey<ScaffoldMessengerState>();
|
||||
final haboModel = HaboModel();
|
||||
final settingsManager = SettingsManager();
|
||||
|
||||
expect(
|
||||
() => ServiceLocator.instance
|
||||
.initialize(scaffoldKey, haboModel, settingsManager),
|
||||
returnsNormally);
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user