Files
habo/test/app_test.dart
dazhuang aa69f2a91e 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)
2026-04-13 15:02:30 +00:00

86 lines
2.9 KiB
Dart

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