mirror of
				https://github.com/immich-app/immich.git
				synced 2025-10-31 10:37:11 -04:00 
			
		
		
		
	* refactor(mobile): migrate store * refactor(mobile): expand abbreviations * chore(mobile): fix lint --------- Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com> Co-authored-by: Alex <alex.tran1502@gmail.com>
		
			
				
	
	
		
			177 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			177 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| @Tags(['widget'])
 | |
| library;
 | |
| 
 | |
| import 'package:flutter/material.dart';
 | |
| import 'package:flutter_test/flutter_test.dart';
 | |
| import 'package:hooks_riverpod/hooks_riverpod.dart';
 | |
| import 'package:immich_mobile/domain/services/store.service.dart';
 | |
| import 'package:immich_mobile/infrastructure/repositories/store.repository.dart';
 | |
| import 'package:immich_mobile/models/map/map_state.model.dart';
 | |
| import 'package:immich_mobile/providers/locale_provider.dart';
 | |
| import 'package:immich_mobile/providers/map/map_state.provider.dart';
 | |
| import 'package:immich_mobile/widgets/map/map_theme_override.dart';
 | |
| import 'package:isar/isar.dart';
 | |
| 
 | |
| import '../../test_utils.dart';
 | |
| import '../../widget_tester_extensions.dart';
 | |
| import 'map_mocks.dart';
 | |
| 
 | |
| void main() {
 | |
|   late MockMapStateNotifier mapStateNotifier;
 | |
|   late List<Override> overrides;
 | |
|   late MapState mapState;
 | |
|   late Isar db;
 | |
| 
 | |
|   setUpAll(() async {
 | |
|     TestUtils.init();
 | |
|     db = await TestUtils.initIsar();
 | |
|   });
 | |
| 
 | |
|   setUp(() async {
 | |
|     mapState = MapState(themeMode: ThemeMode.dark);
 | |
|     mapStateNotifier = MockMapStateNotifier(mapState);
 | |
|     await StoreService.init(storeRepository: IsarStoreRepository(db));
 | |
|     overrides = [
 | |
|       mapStateNotifierProvider.overrideWith(() => mapStateNotifier),
 | |
|       localeProvider.overrideWithValue(const Locale("en")),
 | |
|     ];
 | |
|   });
 | |
| 
 | |
|   testWidgets("Return dark theme style when theme mode is dark",
 | |
|       (tester) async {
 | |
|     AsyncValue<String>? mapStyle;
 | |
|     await tester.pumpConsumerWidget(
 | |
|       MapThemeOverride(
 | |
|         mapBuilder: (AsyncValue<String> style) {
 | |
|           mapStyle = style;
 | |
|           return const Text("Mock");
 | |
|         },
 | |
|       ),
 | |
|       overrides: overrides,
 | |
|     );
 | |
| 
 | |
|     mapStateNotifier.state =
 | |
|         mapState.copyWith(darkStyleFetched: const AsyncData("dark"));
 | |
|     await tester.pumpAndSettle();
 | |
|     expect(mapStyle?.valueOrNull, "dark");
 | |
|   });
 | |
| 
 | |
|   testWidgets("Return error when style is not fetched", (tester) async {
 | |
|     AsyncValue<String>? mapStyle;
 | |
|     await tester.pumpConsumerWidget(
 | |
|       MapThemeOverride(
 | |
|         mapBuilder: (AsyncValue<String> style) {
 | |
|           mapStyle = style;
 | |
|           return const Text("Mock");
 | |
|         },
 | |
|       ),
 | |
|       overrides: overrides,
 | |
|     );
 | |
| 
 | |
|     mapStateNotifier.state = mapState.copyWith(
 | |
|       darkStyleFetched: const AsyncError("Error", StackTrace.empty),
 | |
|     );
 | |
|     await tester.pumpAndSettle();
 | |
|     expect(mapStyle?.hasError, isTrue);
 | |
|   });
 | |
| 
 | |
|   testWidgets("Return light theme style when theme mode is light",
 | |
|       (tester) async {
 | |
|     AsyncValue<String>? mapStyle;
 | |
|     await tester.pumpConsumerWidget(
 | |
|       MapThemeOverride(
 | |
|         mapBuilder: (AsyncValue<String> style) {
 | |
|           mapStyle = style;
 | |
|           return const Text("Mock");
 | |
|         },
 | |
|       ),
 | |
|       overrides: overrides,
 | |
|     );
 | |
| 
 | |
|     mapStateNotifier.state = mapState.copyWith(
 | |
|       themeMode: ThemeMode.light,
 | |
|       lightStyleFetched: const AsyncData("light"),
 | |
|     );
 | |
|     await tester.pumpAndSettle();
 | |
|     expect(mapStyle?.valueOrNull, "light");
 | |
|   });
 | |
| 
 | |
|   group("System mode", () {
 | |
|     testWidgets("Return dark theme style when system is dark", (tester) async {
 | |
|       AsyncValue<String>? mapStyle;
 | |
|       await tester.pumpConsumerWidget(
 | |
|         MapThemeOverride(
 | |
|           mapBuilder: (AsyncValue<String> style) {
 | |
|             mapStyle = style;
 | |
|             return const Text("Mock");
 | |
|           },
 | |
|         ),
 | |
|         overrides: overrides,
 | |
|       );
 | |
| 
 | |
|       tester.binding.platformDispatcher.platformBrightnessTestValue =
 | |
|           Brightness.dark;
 | |
|       mapStateNotifier.state = mapState.copyWith(
 | |
|         themeMode: ThemeMode.system,
 | |
|         darkStyleFetched: const AsyncData("dark"),
 | |
|       );
 | |
|       await tester.pumpAndSettle();
 | |
| 
 | |
|       expect(mapStyle?.valueOrNull, "dark");
 | |
|     });
 | |
| 
 | |
|     testWidgets("Return light theme style when system is light",
 | |
|         (tester) async {
 | |
|       AsyncValue<String>? mapStyle;
 | |
|       await tester.pumpConsumerWidget(
 | |
|         MapThemeOverride(
 | |
|           mapBuilder: (AsyncValue<String> style) {
 | |
|             mapStyle = style;
 | |
|             return const Text("Mock");
 | |
|           },
 | |
|         ),
 | |
|         overrides: overrides,
 | |
|       );
 | |
| 
 | |
|       tester.binding.platformDispatcher.platformBrightnessTestValue =
 | |
|           Brightness.light;
 | |
|       mapStateNotifier.state = mapState.copyWith(
 | |
|         themeMode: ThemeMode.system,
 | |
|         lightStyleFetched: const AsyncData("light"),
 | |
|       );
 | |
|       await tester.pumpAndSettle();
 | |
| 
 | |
|       expect(mapStyle?.valueOrNull, "light");
 | |
|     });
 | |
| 
 | |
|     testWidgets("Switches style when system brightness changes",
 | |
|         (tester) async {
 | |
|       AsyncValue<String>? mapStyle;
 | |
|       await tester.pumpConsumerWidget(
 | |
|         MapThemeOverride(
 | |
|           mapBuilder: (AsyncValue<String> style) {
 | |
|             mapStyle = style;
 | |
|             return const Text("Mock");
 | |
|           },
 | |
|         ),
 | |
|         overrides: overrides,
 | |
|       );
 | |
| 
 | |
|       tester.binding.platformDispatcher.platformBrightnessTestValue =
 | |
|           Brightness.light;
 | |
|       mapStateNotifier.state = mapState.copyWith(
 | |
|         themeMode: ThemeMode.system,
 | |
|         lightStyleFetched: const AsyncData("light"),
 | |
|         darkStyleFetched: const AsyncData("dark"),
 | |
|       );
 | |
|       await tester.pumpAndSettle();
 | |
|       expect(mapStyle?.valueOrNull, "light");
 | |
| 
 | |
|       tester.binding.platformDispatcher.platformBrightnessTestValue =
 | |
|           Brightness.dark;
 | |
|       await tester.pumpAndSettle();
 | |
|       expect(mapStyle?.valueOrNull, "dark");
 | |
|     });
 | |
|   });
 | |
| }
 |