mirror of
				https://github.com/immich-app/immich.git
				synced 2025-11-03 19:17:11 -05:00 
			
		
		
		
	* chore: maplibre gl pubspec * refactor(wip): maplibre for maps * refactor(wip): dual pane + location button * chore: remove flutter_map and deps * refactor(wip): map zoom to location * refactor: location picker * open gallery_viewer on marker tap * remove detectScaleGesture param * test: debounce and throttle * chore: rename get location method * feat(mobile): Adds gps locator to map prompt for easy geolocation (#6282) * Refactored get gps coords * Use var for linter's sake, should handle errors better * Cleanup * Fix linter issues * chore(dep): update maplibre to official lib --------- Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com> Co-authored-by: Joshua Herrera <joshua.herrera227@gmail.com>
		
			
				
	
	
		
			166 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			166 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
@Tags(['widget'])
 | 
						|
 | 
						|
import 'package:flutter/material.dart';
 | 
						|
import 'package:flutter_test/flutter_test.dart';
 | 
						|
import 'package:hooks_riverpod/hooks_riverpod.dart';
 | 
						|
import 'package:immich_mobile/modules/map/models/map_state.model.dart';
 | 
						|
import 'package:immich_mobile/modules/map/providers/map_state.provider.dart';
 | 
						|
import 'package:immich_mobile/modules/map/widgets/map_theme_override.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;
 | 
						|
 | 
						|
  setUpAll(() async {
 | 
						|
    TestUtils.init();
 | 
						|
  });
 | 
						|
 | 
						|
  setUp(() {
 | 
						|
    mapState = MapState(themeMode: ThemeMode.dark);
 | 
						|
    mapStateNotifier = MockMapStateNotifier(mapState);
 | 
						|
    overrides = [mapStateNotifierProvider.overrideWith(() => mapStateNotifier)];
 | 
						|
  });
 | 
						|
 | 
						|
  testWidgets("Return dark theme style when theme mode is dark",
 | 
						|
      (tester) async {
 | 
						|
    AsyncValue<String>? mapStyle;
 | 
						|
    await tester.pumpConsumerWidget(
 | 
						|
      MapThemeOveride(
 | 
						|
        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(
 | 
						|
      MapThemeOveride(
 | 
						|
        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(
 | 
						|
      MapThemeOveride(
 | 
						|
        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(
 | 
						|
        MapThemeOveride(
 | 
						|
          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(
 | 
						|
        MapThemeOveride(
 | 
						|
          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(
 | 
						|
        MapThemeOveride(
 | 
						|
          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");
 | 
						|
    });
 | 
						|
  });
 | 
						|
}
 |