refactor: create separate BLoCs for each screen with comprehensive tests
- Created 8 separate BLoCs (Home, Library, BookDetails, AddBook, Scanner, Categories, Wishlist, Settings) - Each BLoC has its own event, state, and bloc files - Added 70 comprehensive tests covering all BLoC functionality - All tests passing (70/70) - Fixed linting issues and updated deprecated APIs - Improved code organization and maintainability
This commit is contained in:
105
bookshelf_flutter/test/bloc/settings/settings_bloc_test.dart
Normal file
105
bookshelf_flutter/test/bloc/settings/settings_bloc_test.dart
Normal file
@@ -0,0 +1,105 @@
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:bookshelf_flutter/bloc/settings/settings_bloc.dart';
|
||||
import 'package:bookshelf_flutter/bloc/settings/settings_event.dart';
|
||||
import 'package:bookshelf_flutter/bloc/settings/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<SettingsState>());
|
||||
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);
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user