import 'package:bloc_test/bloc_test.dart'; import 'package:lightmeter/screens/metering/communication/bloc_communication_metering.dart'; import 'package:lightmeter/screens/metering/communication/event_communication_metering.dart'; import 'package:lightmeter/screens/metering/communication/state_communication_metering.dart'; import 'package:test/test.dart'; void main() { late MeteringCommunicationBloc bloc; setUp(() { bloc = MeteringCommunicationBloc(); }); tearDown(() { bloc.close(); }); group( '`MeasureEvent`', () { blocTest( 'Multiple consequtive measure events', build: () => bloc, act: (bloc) async { bloc.add(const MeasureEvent()); bloc.add(const MeasureEvent()); bloc.add(const MeasureEvent()); bloc.add(const MeasureEvent()); }, expect: () => [ isA(), isA(), isA(), isA(), ], ); blocTest( 'Continuous metering simulation', build: () => bloc, act: (bloc) async { bloc.add(const MeasureEvent()); bloc.add(const MeteringInProgressEvent(1)); bloc.add(const MeteringInProgressEvent(null)); bloc.add(const MeteringInProgressEvent(null)); bloc.add(const MeteringInProgressEvent(2)); bloc.add(const MeasureEvent()); bloc.add(const MeteringEndedEvent(2)); bloc.add(const MeteringEndedEvent(2)); }, expect: () => [ isA(), isA().having((state) => state.ev100, 'ev100', 1), isA().having((state) => state.ev100, 'ev100', null), isA().having((state) => state.ev100, 'ev100', 2), isA(), isA().having((state) => state.ev100, 'ev100', 2), ], ); }, ); group( '`MeteringInProgressEvent`', () { blocTest( 'Multiple consequtive in progress events', build: () => bloc, act: (bloc) async { bloc.add(const MeteringInProgressEvent(1)); bloc.add(const MeteringInProgressEvent(1)); bloc.add(const MeteringInProgressEvent(1)); bloc.add(const MeteringInProgressEvent(null)); bloc.add(const MeteringInProgressEvent(null)); bloc.add(const MeteringInProgressEvent(2)); }, expect: () => [ isA().having((state) => state.ev100, 'ev100', 1), isA().having((state) => state.ev100, 'ev100', null), isA().having((state) => state.ev100, 'ev100', 2), ], ); }, ); group( '`MeteringEndedEvent`', () { blocTest( 'Multiple consequtive ended events', build: () => bloc, act: (bloc) async { bloc.add(const MeteringEndedEvent(1)); }, expect: () => [ isA().having((state) => state.ev100, 'ev100', 1), ], ); }, ); group( '`SettingsOpenedEvent`/`SettingsClosedEvent`', () { blocTest( 'Multiple consequtive settings events', build: () => bloc, act: (bloc) async { bloc.add(const SettingsOpenedEvent()); bloc.add(const SettingsOpenedEvent()); bloc.add(const SettingsOpenedEvent()); bloc.add(const SettingsClosedEvent()); bloc.add(const SettingsClosedEvent()); bloc.add(const SettingsClosedEvent()); bloc.add(const SettingsOpenedEvent()); bloc.add(const SettingsClosedEvent()); }, expect: () => [ isA(), isA(), isA(), isA(), ], ); }, ); }