- 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
105 lines
3.2 KiB
Dart
105 lines
3.2 KiB
Dart
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);
|
|
});
|
|
});
|
|
});
|
|
} |