| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- import 'package:cardash_launcher/core/theme/accent_choice.dart';
- import 'package:cardash_launcher/core/theme/app_colors.dart';
- import 'package:cardash_launcher/core/theme/app_theme.dart';
- import 'package:cardash_launcher/core/theme/theme_controller.dart';
- import 'package:cardash_launcher/core/theme/theme_preference.dart';
- import 'package:cardash_launcher/data/repositories/settings_repository.dart';
- import 'package:flutter_test/flutter_test.dart';
- import 'package:shared_preferences/shared_preferences.dart';
- void main() {
- TestWidgetsFlutterBinding.ensureInitialized();
- setUp(() {
- SharedPreferences.setMockInitialValues({});
- });
- test('defaults are automatic with a 19:00-07:00 night window', () async {
- final prefs = await SharedPreferences.getInstance();
- final repository = SettingsRepository(prefs);
- expect(repository.themePreference, ThemePreference.automatic);
- expect(repository.nightStartMinutes, 19 * 60);
- expect(repository.nightEndMinutes, 7 * 60);
- expect(repository.accent, AccentChoice.green);
- expect(repository.showBattery, isTrue);
- });
- test('explicit light and dark choices resolve immediately', () async {
- final prefs = await SharedPreferences.getInstance();
- final controller = ThemeController(SettingsRepository(prefs));
- addTearDown(controller.dispose);
- await controller.setPreference(ThemePreference.dark);
- expect(controller.isDark, isTrue);
- await controller.setPreference(ThemePreference.light);
- expect(controller.isDark, isFalse);
- await controller.setPreference(ThemePreference.automatic);
- expect(controller.isDark, isIn(<bool>[true, false]));
- });
- test('dark surfaces are tinted by the chosen accent', () {
- final green = AppColors.darkFor(AccentChoice.green);
- final blue = AppColors.darkFor(AccentChoice.blue);
- expect(blue.canvas, isNot(green.canvas));
- expect(blue.canvas.b, greaterThan(blue.canvas.g));
- });
- test('a chosen accent becomes the theme primary', () {
- final theme = AppTheme.light(accent: AccentChoice.blue);
- expect(theme.colorScheme.primary, AccentChoice.blue.lightAccent);
- expect(theme.extension<AppColors>()!.accent, AccentChoice.blue.lightAccent);
- });
- test('accent and battery visibility survive a new controller', () async {
- final prefs = await SharedPreferences.getInstance();
- final first = ThemeController(SettingsRepository(prefs));
- expect(first.accent, AccentChoice.green);
- expect(first.showBattery, isTrue);
- await first.setAccent(AccentChoice.blue);
- await first.setShowBattery(false);
- first.dispose();
- final reloaded = ThemeController(SettingsRepository(prefs));
- addTearDown(reloaded.dispose);
- expect(reloaded.accent, AccentChoice.blue);
- expect(reloaded.showBattery, isFalse);
- });
- test('theme choices survive a new repository instance', () async {
- final prefs = await SharedPreferences.getInstance();
- final controller = ThemeController(SettingsRepository(prefs));
- await controller.setPreference(ThemePreference.dark);
- controller.dispose();
- final reloaded = ThemeController(SettingsRepository(prefs));
- addTearDown(reloaded.dispose);
- expect(reloaded.preference, ThemePreference.dark);
- expect(reloaded.isDark, isTrue);
- });
- }
|