theme_controller_test.dart 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import 'package:cardash_launcher/core/theme/theme_controller.dart';
  2. import 'package:cardash_launcher/core/theme/theme_preference.dart';
  3. import 'package:cardash_launcher/data/repositories/settings_repository.dart';
  4. import 'package:flutter_test/flutter_test.dart';
  5. import 'package:shared_preferences/shared_preferences.dart';
  6. void main() {
  7. TestWidgetsFlutterBinding.ensureInitialized();
  8. setUp(() {
  9. SharedPreferences.setMockInitialValues({});
  10. });
  11. test('defaults are automatic with a 19:00-07:00 night window', () async {
  12. final prefs = await SharedPreferences.getInstance();
  13. final repository = SettingsRepository(prefs);
  14. expect(repository.themePreference, ThemePreference.automatic);
  15. expect(repository.nightStartMinutes, 19 * 60);
  16. expect(repository.nightEndMinutes, 7 * 60);
  17. });
  18. test('explicit light and dark choices resolve immediately', () async {
  19. final prefs = await SharedPreferences.getInstance();
  20. final controller = ThemeController(SettingsRepository(prefs));
  21. addTearDown(controller.dispose);
  22. await controller.setPreference(ThemePreference.dark);
  23. expect(controller.isDark, isTrue);
  24. await controller.setPreference(ThemePreference.light);
  25. expect(controller.isDark, isFalse);
  26. await controller.setPreference(ThemePreference.automatic);
  27. expect(controller.isDark, isIn(<bool>[true, false]));
  28. });
  29. test('theme choices survive a new repository instance', () async {
  30. final prefs = await SharedPreferences.getInstance();
  31. final controller = ThemeController(SettingsRepository(prefs));
  32. await controller.setPreference(ThemePreference.dark);
  33. controller.dispose();
  34. final reloaded = ThemeController(SettingsRepository(prefs));
  35. addTearDown(reloaded.dispose);
  36. expect(reloaded.preference, ThemePreference.dark);
  37. expect(reloaded.isDark, isTrue);
  38. });
  39. }