mirror of
https://github.com/immich-app/immich.git
synced 2024-12-24 10:37:28 +02:00
e6c0f0e3aa
* 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");
|
|
});
|
|
});
|
|
}
|