1
0
mirror of https://github.com/immich-app/immich.git synced 2024-12-24 10:37:28 +02:00
immich/mobile/test/modules/map/map_theme_override_test.dart
shenlong e6c0f0e3aa
refactor(mobile): maplibre (#6087)
* 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>
2024-01-15 09:26:13 -06:00

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");
});
});
}