From 2a7463184bc2e8c2d2eaa8ff1201c8848e826753 Mon Sep 17 00:00:00 2001 From: Vadim Date: Thu, 15 Jun 2023 15:58:48 +0200 Subject: [PATCH] `EquipmentProfileChangedEvent` tests --- lib/screens/metering/bloc_metering.dart | 4 +- test/screens/metering/bloc_metering_test.dart | 129 +++++++++++++++++- 2 files changed, 124 insertions(+), 9 deletions(-) diff --git a/lib/screens/metering/bloc_metering.dart b/lib/screens/metering/bloc_metering.dart index 1f041a5..042991a 100644 --- a/lib/screens/metering/bloc_metering.dart +++ b/lib/screens/metering/bloc_metering.dart @@ -90,7 +90,7 @@ class MeteringBloc extends Bloc { iso = event.equipmentProfileData.isoValues.first; _meteringInteractor.film = Film.values.first; film = Film.values.first; - willUpdateMeasurements &= true; + willUpdateMeasurements = true; } /// The same for ND filter @@ -98,7 +98,7 @@ class MeteringBloc extends Bloc { if (!event.equipmentProfileData.ndValues.any((v) => state.nd.value == v.value)) { _meteringInteractor.ndFilter = event.equipmentProfileData.ndValues.first; nd = event.equipmentProfileData.ndValues.first; - willUpdateMeasurements &= true; + willUpdateMeasurements = true; } if (willUpdateMeasurements) { diff --git a/test/screens/metering/bloc_metering_test.dart b/test/screens/metering/bloc_metering_test.dart index 6d093b3..8c3d6db 100644 --- a/test/screens/metering/bloc_metering_test.dart +++ b/test/screens/metering/bloc_metering_test.dart @@ -485,11 +485,126 @@ void main() { }, ); - // TODO(vodemn): when this feautre is enabled - // group( - // '`EquipmentProfileChangedEvent`', - // () { - // - // }, - // ); + group( + '`EquipmentProfileChangedEvent`', + () { + final reducedProfile = EquipmentProfileData( + id: '0', + name: 'Reduced', + apertureValues: ApertureValue.values, + ndValues: NdValue.values.getRange(0, 3).toList(), + shutterSpeedValues: ShutterSpeedValue.values, + isoValues: IsoValue.values.getRange(4, 23).toList(), + ); + + blocTest( + 'New profile has current ISO & ND', + build: () => bloc, + seed: () => MeteringDataState( + ev100: 1.0, + film: Film.values[1], + iso: const IsoValue(100, StopType.full), + nd: NdValue.values.first, + isMetering: false, + ), + act: (bloc) async { + bloc.add(EquipmentProfileChangedEvent(reducedProfile)); + }, + verify: (_) { + verifyNever(() => meteringInteractor.film = const Film.other()); + verifyNever(() => meteringInteractor.iso = reducedProfile.isoValues.first); + verifyNever(() => meteringInteractor.ndFilter = reducedProfile.ndValues.first); + verifyNever(() => meteringInteractor.responseVibration()); + }, + expect: () => [], + ); + + blocTest( + 'New profile has new ISO & current ND', + build: () => bloc, + seed: () => MeteringDataState( + ev100: 1.0, + film: Film.values[1], + iso: IsoValue.values[2], + nd: NdValue.values.first, + isMetering: false, + ), + act: (bloc) async { + bloc.add(EquipmentProfileChangedEvent(reducedProfile)); + }, + verify: (_) { + verify(() => meteringInteractor.film = const Film.other()).called(1); + verify(() => meteringInteractor.iso = reducedProfile.isoValues.first).called(1); + verifyNever(() => meteringInteractor.ndFilter = reducedProfile.ndValues.first); + verify(() => meteringInteractor.responseVibration()).called(1); + }, + expect: () => [ + isA() + .having((state) => state.ev100, 'ev100', 1.0) + .having((state) => state.film, 'film', const Film.other()) + .having((state) => state.iso, 'iso', reducedProfile.isoValues.first) + .having((state) => state.nd, 'nd', NdValue.values.first) + .having((state) => state.isMetering, 'isMetering', false), + ], + ); + + blocTest( + 'New profile has current ISO & new ND', + build: () => bloc, + seed: () => MeteringDataState( + ev100: 1.0, + film: Film.values[1], + iso: const IsoValue(100, StopType.full), + nd: NdValue.values[4], + isMetering: false, + ), + act: (bloc) async { + bloc.add(EquipmentProfileChangedEvent(reducedProfile)); + }, + verify: (_) { + verifyNever(() => meteringInteractor.film = const Film.other()); + verifyNever(() => meteringInteractor.iso = reducedProfile.isoValues.first); + verify(() => meteringInteractor.ndFilter = reducedProfile.ndValues.first).called(1); + verify(() => meteringInteractor.responseVibration()).called(1); + }, + expect: () => [ + isA() + .having((state) => state.ev100, 'ev100', 1.0) + .having((state) => state.film, 'film', Film.values[1]) + .having((state) => state.iso, 'iso', const IsoValue(100, StopType.full)) + .having((state) => state.nd, 'nd', reducedProfile.ndValues.first) + .having((state) => state.isMetering, 'isMetering', false), + ], + ); + + blocTest( + 'New profile has new ISO & new ND', + build: () => bloc, + seed: () => MeteringDataState( + ev100: 1.0, + film: Film.values[1], + iso: IsoValue.values[2], + nd: NdValue.values[4], + isMetering: false, + ), + act: (bloc) async { + bloc.add(EquipmentProfileChangedEvent(reducedProfile)); + }, + verify: (_) { + verify(() => meteringInteractor.film = const Film.other()).called(1); + verify(() => meteringInteractor.iso = reducedProfile.isoValues.first).called(1); + verify(() => meteringInteractor.ndFilter = reducedProfile.ndValues.first).called(1); + verify(() => meteringInteractor.responseVibration()).called(1); + }, + expect: () => [ + isA() + .having((state) => state.ev100, 'ev100', 1.0) + .having((state) => state.film, 'film', const Film.other()) + .having((state) => state.iso, 'iso', reducedProfile.isoValues.first) + .having((state) => state.nd, 'nd', reducedProfile.ndValues.first) + .having((state) => state.isMetering, 'isMetering', false), + ], + ); + }, + ); }