import 'package:flutter_test/flutter_test.dart'; import 'package:bookshelf_flutter/features/settings/bloc/settings_bloc.dart'; import 'package:bookshelf_flutter/features/settings/bloc/settings_event.dart'; import 'package:bookshelf_flutter/features/settings/bloc/settings_state.dart'; void main() { group('SettingsBloc', () { late SettingsBloc settingsBloc; setUp(() { settingsBloc = SettingsBloc(); }); tearDown(() { settingsBloc.close(); }); test('initial state is SettingsState.initial()', () { expect(settingsBloc.state, isA()); expect(settingsBloc.state.isLoading, true); }); group('LoadSettings', () { test('loads default settings into state', () async { settingsBloc.add(const LoadSettings()); await Future.delayed(Duration.zero); expect(settingsBloc.state.isDarkMode, false); expect(settingsBloc.state.language, 'English'); expect(settingsBloc.state.notificationsEnabled, true); expect(settingsBloc.state.isLoading, false); }); }); group('UpdateTheme', () { test('updates isDarkMode to true', () async { settingsBloc.add(const UpdateTheme(true)); await Future.delayed(Duration.zero); expect(settingsBloc.state.isDarkMode, true); }); test('updates isDarkMode to false', () async { settingsBloc.add(const UpdateTheme(true)); await Future.delayed(Duration.zero); settingsBloc.add(const UpdateTheme(false)); await Future.delayed(Duration.zero); expect(settingsBloc.state.isDarkMode, false); }); }); group('UpdateLanguage', () { test('updates language setting', () async { settingsBloc.add(const UpdateLanguage('Russian')); await Future.delayed(Duration.zero); expect(settingsBloc.state.language, 'Russian'); }); test('updates language to English', () async { settingsBloc.add(const UpdateLanguage('English')); await Future.delayed(Duration.zero); expect(settingsBloc.state.language, 'English'); }); }); group('ToggleNotifications', () { test('toggles notifications from true to false', () async { settingsBloc.add(const LoadSettings()); await Future.delayed(Duration.zero); expect(settingsBloc.state.notificationsEnabled, true); settingsBloc.add(const ToggleNotifications()); await Future.delayed(Duration.zero); expect(settingsBloc.state.notificationsEnabled, false); }); test('toggles notifications from false to true', () async { settingsBloc.add(const UpdateTheme(false)); await Future.delayed(Duration.zero); settingsBloc.add(const ToggleNotifications()); await Future.delayed(Duration.zero); expect(settingsBloc.state.notificationsEnabled, false); settingsBloc.add(const ToggleNotifications()); await Future.delayed(Duration.zero); expect(settingsBloc.state.notificationsEnabled, true); }); }); group('ClearData', () { test('sets dataCleared to true', () async { settingsBloc.add(const ClearData()); await Future.delayed(Duration.zero); expect(settingsBloc.state.dataCleared, true); }); }); }); }