- Fixed test file import paths to point to correct Bloc file locations - Fixed Bloc file import paths for models (../../../models/models.dart) - Added explicit type annotations to resolve null safety warnings - Fixed null safety issues in wishlist_bloc_test.dart - All 70 tests now passing
105 lines
3.3 KiB
Dart
105 lines
3.3 KiB
Dart
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<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);
|
|
});
|
|
});
|
|
});
|
|
} |