mirror of
https://github.com/vodemn/m3_lightmeter.git
synced 2025-08-17 18:46:47 +00:00
Compare commits
5 commits
82669bc5e5
...
b3989219a2
Author | SHA1 | Date | |
---|---|---|---|
![]() |
b3989219a2 | ||
![]() |
3be2b9b715 | ||
![]() |
ba3c08bb16 | ||
![]() |
109cb9db8d | ||
![]() |
2369b1a3d7 |
4 changed files with 10 additions and 43 deletions
5
.github/workflows/build_ipa.yml
vendored
5
.github/workflows/build_ipa.yml
vendored
|
@ -60,9 +60,8 @@ jobs:
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
|
|
||||||
- uses: maxim-lobanov/setup-xcode@v1
|
- name: Select Xcode version
|
||||||
with:
|
run: sudo xcode-select -s '/Applications/Xcode_16.2.app/Contents/Developer'
|
||||||
xcode-version: '16.2'
|
|
||||||
|
|
||||||
- name: Connect private iap package
|
- name: Connect private iap package
|
||||||
uses: webfactory/ssh-agent@v0.8.0
|
uses: webfactory/ssh-agent@v0.8.0
|
||||||
|
|
5
.github/workflows/run_integration_tests.yml
vendored
5
.github/workflows/run_integration_tests.yml
vendored
|
@ -13,8 +13,11 @@ jobs:
|
||||||
run-integration-tests:
|
run-integration-tests:
|
||||||
name: Run integration tests
|
name: Run integration tests
|
||||||
timeout-minutes: 90
|
timeout-minutes: 90
|
||||||
runs-on: macos-13
|
runs-on: macos-14
|
||||||
steps:
|
steps:
|
||||||
|
- name: Select Xcode version
|
||||||
|
run: sudo xcode-select -s '/Applications/Xcode_16.2.app/Contents/Developer'
|
||||||
|
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
|
|
|
@ -5,15 +5,12 @@ import 'package:flutter_test/flutter_test.dart';
|
||||||
import 'package:lightmeter/data/models/ev_source_type.dart';
|
import 'package:lightmeter/data/models/ev_source_type.dart';
|
||||||
import 'package:lightmeter/data/models/metering_screen_layout_config.dart';
|
import 'package:lightmeter/data/models/metering_screen_layout_config.dart';
|
||||||
import 'package:lightmeter/data/shared_prefs_service.dart';
|
import 'package:lightmeter/data/shared_prefs_service.dart';
|
||||||
import 'package:lightmeter/generated/l10n.dart';
|
|
||||||
import 'package:lightmeter/screens/metering/components/shared/readings_container/components/equipment_profile_picker/widget_picker_equipment_profiles.dart';
|
import 'package:lightmeter/screens/metering/components/shared/readings_container/components/equipment_profile_picker/widget_picker_equipment_profiles.dart';
|
||||||
import 'package:lightmeter/screens/metering/components/shared/readings_container/components/extreme_exposure_pairs_container/widget_container_extreme_exposure_pairs.dart';
|
import 'package:lightmeter/screens/metering/components/shared/readings_container/components/extreme_exposure_pairs_container/widget_container_extreme_exposure_pairs.dart';
|
||||||
import 'package:lightmeter/screens/metering/components/shared/readings_container/components/film_picker/widget_picker_film.dart';
|
import 'package:lightmeter/screens/metering/components/shared/readings_container/components/film_picker/widget_picker_film.dart';
|
||||||
import 'package:lightmeter/screens/metering/components/shared/readings_container/components/iso_picker/widget_picker_iso.dart';
|
import 'package:lightmeter/screens/metering/components/shared/readings_container/components/iso_picker/widget_picker_iso.dart';
|
||||||
import 'package:lightmeter/screens/metering/components/shared/readings_container/components/lightmeter_pro_badge/widget_badge_lightmeter_pro.dart';
|
import 'package:lightmeter/screens/metering/components/shared/readings_container/components/lightmeter_pro_badge/widget_badge_lightmeter_pro.dart';
|
||||||
import 'package:lightmeter/screens/metering/components/shared/readings_container/components/nd_picker/widget_picker_nd.dart';
|
import 'package:lightmeter/screens/metering/components/shared/readings_container/components/nd_picker/widget_picker_nd.dart';
|
||||||
import 'package:lightmeter/screens/settings/components/shared/disable/widget_disable.dart';
|
|
||||||
import 'package:lightmeter/screens/settings/screen_settings.dart';
|
|
||||||
import 'package:lightmeter/utils/platform_utils.dart';
|
import 'package:lightmeter/utils/platform_utils.dart';
|
||||||
import 'package:meta/meta.dart';
|
import 'package:meta/meta.dart';
|
||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
|
@ -47,19 +44,10 @@ void testPurchases(String description) {
|
||||||
/// Expect the bare minimum free functionallity
|
/// Expect the bare minimum free functionallity
|
||||||
_expectProMeteringScreen(enabled: false);
|
_expectProMeteringScreen(enabled: false);
|
||||||
|
|
||||||
/// Check, that premium settings are disabled
|
|
||||||
await tester.openSettings();
|
|
||||||
await _expectProSettingsScreen(tester, enabled: false);
|
|
||||||
|
|
||||||
/// Make purchase
|
/// Make purchase
|
||||||
(tester.state(find.byType(MockIAPProductsProvider)) as MockIAPProductsProviderState).buy();
|
(tester.state(find.byType(MockIAPProductsProvider)) as MockIAPProductsProviderState).buy();
|
||||||
await tester.pumpAndSettle();
|
await tester.pumpAndSettle();
|
||||||
|
|
||||||
/// Check, that premium settings are enabled
|
|
||||||
await _expectProSettingsScreen(tester, enabled: true);
|
|
||||||
|
|
||||||
/// Expect, that all the premium controls are now available to user
|
|
||||||
await tester.navigatorPop();
|
|
||||||
_expectProMeteringScreen(enabled: true);
|
_expectProMeteringScreen(enabled: true);
|
||||||
|
|
||||||
/// Refund
|
/// Refund
|
||||||
|
@ -68,19 +56,15 @@ void testPurchases(String description) {
|
||||||
|
|
||||||
/// Expect the bare minimum free functionallity
|
/// Expect the bare minimum free functionallity
|
||||||
_expectProMeteringScreen(enabled: false);
|
_expectProMeteringScreen(enabled: false);
|
||||||
|
|
||||||
/// Check, that premium settings are disabled
|
|
||||||
await tester.openSettings();
|
|
||||||
await _expectProSettingsScreen(tester, enabled: false);
|
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _expectProMeteringScreen({required bool enabled}) {
|
void _expectProMeteringScreen({required bool enabled}) {
|
||||||
expect(find.byType(LightmeterProBadge), !enabled ? findsOneWidget : findsNothing);
|
expect(find.byType(LightmeterProBadge), !enabled ? findsOneWidget : findsNothing);
|
||||||
expect(find.byType(EquipmentProfilePicker), enabled ? findsOneWidget : findsNothing);
|
expect(find.byType(EquipmentProfilePicker), findsOneWidget);
|
||||||
expect(find.byType(ExtremeExposurePairsContainer), findsOneWidget);
|
expect(find.byType(ExtremeExposurePairsContainer), findsOneWidget);
|
||||||
expect(find.byType(FilmPicker), enabled ? findsOneWidget : findsNothing);
|
expect(find.byType(FilmPicker), findsOneWidget);
|
||||||
expect(find.byType(IsoValuePicker), findsOneWidget);
|
expect(find.byType(IsoValuePicker), findsOneWidget);
|
||||||
expect(find.byType(NdValuePicker), findsOneWidget);
|
expect(find.byType(NdValuePicker), findsOneWidget);
|
||||||
expect(
|
expect(
|
||||||
|
@ -88,25 +72,6 @@ void _expectProMeteringScreen({required bool enabled}) {
|
||||||
of: find.measureButton(),
|
of: find.measureButton(),
|
||||||
matching: find.byWidgetPredicate((widget) => widget is Text && widget.data!.contains('\u2081\u2080\u2080')),
|
matching: find.byWidgetPredicate((widget) => widget is Text && widget.data!.contains('\u2081\u2080\u2080')),
|
||||||
),
|
),
|
||||||
enabled ? findsOneWidget : findsNothing,
|
findsOneWidget,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _expectProSettingsScreen(WidgetTester tester, {required bool enabled}) async {
|
|
||||||
void expectDisabled(String title, bool disabled) {
|
|
||||||
find.ancestor(
|
|
||||||
of: find.text(title),
|
|
||||||
matching: find.byWidgetPredicate((widget) => widget is Disable && widget.disable == disabled),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
expectDisabled(S.current.showEv100, !enabled);
|
|
||||||
expectDisabled(S.current.equipmentProfiles, !enabled);
|
|
||||||
expectDisabled(S.current.filmsInUse, !enabled);
|
|
||||||
expectDisabled(S.current.cameraFeatures, !enabled);
|
|
||||||
await tester.tapDescendantTextOf<SettingsScreen>(S.current.meteringScreenLayout);
|
|
||||||
expectDisabled(S.current.meteringScreenLayoutHintEquipmentProfiles, !enabled);
|
|
||||||
expectDisabled(S.current.meteringScreenFeatureExtremeExposurePairs, false); // must be always enabled
|
|
||||||
expectDisabled(S.current.meteringScreenFeatureFilmPicker, !enabled);
|
|
||||||
await tester.tapCancelButton();
|
|
||||||
}
|
|
||||||
|
|
|
@ -37,7 +37,7 @@ class _LogbookPhotosScreenState extends State<LogbookPhotosScreen> with SingleTi
|
||||||
guardProTap(
|
guardProTap(
|
||||||
context,
|
context,
|
||||||
() {
|
() {
|
||||||
Navigator.of(context).pushNamed(NavigationRoutes.proFeaturesScreen.name);
|
LogbookPhotosProvider.of(context).saveLogbookPhotos(value);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in a new issue