diff --git a/lib/screens/metering/components/camera_container/bloc_container_camera.dart b/lib/screens/metering/components/camera_container/bloc_container_camera.dart index d96717c..2bb8ed1 100644 --- a/lib/screens/metering/components/camera_container/bloc_container_camera.dart +++ b/lib/screens/metering/components/camera_container/bloc_container_camera.dart @@ -208,8 +208,8 @@ class CameraContainerBloc extends EvSourceBlocBase(), + isA(), + isA() + .having((state) => state.zoomRange, 'zoomRange', const RangeValues(1.0, 7.0)) + .having((state) => state.currentZoom, 'currentZoom', 1.0) + .having( + (state) => state.exposureOffsetRange, + 'exposureOffsetRange', + const RangeValues(-4.0, 4.0), + ) + .having((state) => state.exposureOffsetStep, 'exposureOffsetStep', 0.1666666) + .having((state) => state.currentExposureOffset, 'currentExposureOffset', 0.0), + ]; + setUpAll(() { meteringInteractor = _MockMeteringInteractor(); communicationBloc = _MockMeteringCommunicationBloc(); + + when(() => meteringInteractor.cameraEvCalibration).thenReturn(0.0); }); setUp(() { @@ -216,7 +235,7 @@ void main() { isA().having((state) => state.error, "error", CameraErrorType.other), ], ); - + blocTest( 'appLifecycleStateObserver', setUp: () { @@ -227,8 +246,6 @@ void main() { tearDown: () { TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger .setMockMethodCallHandler(cameraMethodChannel, null); - TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger - .setMockMethodCallHandler(cameraIdMethodChannel, null); }, build: () => bloc, act: (bloc) async { @@ -243,34 +260,73 @@ void main() { verify(() => meteringInteractor.checkCameraPermission()).called(2); }, expect: () => [ - isA(), - isA(), - isA() - .having((state) => state.zoomRange, 'zoomRange', const RangeValues(1.0, 7.0)) - .having((state) => state.currentZoom, 'currentZoom', 1.0) - .having( - (state) => state.exposureOffsetRange, - 'exposureOffsetRange', - const RangeValues(-4.0, 4.0), - ) - .having((state) => state.exposureOffsetStep, 'exposureOffsetStep', 0.1666666) - .having((state) => state.currentExposureOffset, 'currentExposureOffset', 0.0), - isA(), - isA(), - isA() - .having((state) => state.zoomRange, 'zoomRange', const RangeValues(1.0, 7.0)) - .having((state) => state.currentZoom, 'currentZoom', 1.0) - .having( - (state) => state.exposureOffsetRange, - 'exposureOffsetRange', - const RangeValues(-4.0, 4.0), - ) - .having((state) => state.exposureOffsetStep, 'exposureOffsetStep', 0.1666666) - .having((state) => state.currentExposureOffset, 'currentExposureOffset', 0.0), + ...initializedStateSequence, + ...initializedStateSequence, ], ); }, ); + + group( + '`_takePicture()` tests', + () { + blocTest( + 'Returned ev100 == null', + setUp: () { + when(() => meteringInteractor.checkCameraPermission()).thenAnswer((_) async => true); + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(cameraMethodChannel, cameraMethodCallSuccessHandler); + }, + tearDown: () { + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(cameraMethodChannel, null); + }, + build: () => bloc, + act: (bloc) async { + bloc.add(const InitializeEvent()); + await Future.delayed(Duration.zero); + bloc.onCommunicationState(const communication_states.MeasureState()); + }, + verify: (_) { + verify(() => meteringInteractor.checkCameraPermission()).called(1); + verifyNever(() => meteringInteractor.cameraEvCalibration); + }, + expect: () => [ + ...initializedStateSequence, + ], + ); + + // TODO(vodemn): figure out how to mock `_file.readAsBytes()` + // blocTest( + // 'Returned non-null ev100', + // setUp: () { + // when(() => meteringInteractor.checkCameraPermission()).thenAnswer((_) async => true); + // TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + // .setMockMethodCallHandler(cameraMethodChannel, cameraMethodCallSuccessHandler); + // }, + // tearDown: () { + // TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + // .setMockMethodCallHandler(cameraMethodChannel, null); + // }, + // build: () => bloc, + // act: (bloc) async { + // bloc.add(const InitializeEvent()); + // await Future.delayed(Duration.zero); + // bloc.onCommunicationState(const communication_states.MeasureState()); + // }, + // verify: (_) { + // verify(() => meteringInteractor.checkCameraPermission()).called(1); + // verifyNever(() => meteringInteractor.cameraEvCalibration); + // verify(() { + // communicationBloc.add(const communication_events.MeteringEndedEvent(null)); + // }).called(2); + // }, + // expect: () => [ + // ...initializedStateSequence, + // ], + // ); + }, + ); } extension _MethodChannelMock on MethodChannel {