Skip to content

Commit 8d2a234

Browse files
committed
Added required unit and widget testing for the newly added features.
1 parent d27f220 commit 8d2a234

11 files changed

+141
-35
lines changed

test/unit_test/color_bloc_unit_test.dart

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import 'package:bloc_test/bloc_test.dart';
22
import 'package:flood_mobile/Blocs/onboarding_main_page_bloc/on_boarding_page_color_bloc.dart';
3-
import 'package:flood_mobile/Pages/onboarding_main_screen/data/onboard_page_data.dart';
43
import 'package:flutter/material.dart';
54
import 'package:flutter_test/flutter_test.dart';
65

@@ -12,18 +11,20 @@ void main() {
1211
colorBloc = OnBoardingPageColorBloc();
1312
});
1413

15-
test(
16-
'Initial color should match the first accent color from the onboard data',
17-
() {
18-
expect(colorBloc.color, equals(onboardData[0].accentColor));
14+
tearDown(() {
15+
colorBloc.close();
16+
});
17+
18+
test('initial state should be OnBoardingPageColorState.initial()', () {
19+
expect(colorBloc.state, OnBoardingPageColorState.initial());
1920
});
2021

2122
blocTest<OnBoardingPageColorBloc, OnBoardingPageColorState>(
2223
'Setting a new color should update the color state',
2324
build: () => colorBloc,
24-
act: (bloc) => bloc..add(SetColorEvent(color: Colors.blue)),
25+
act: (bloc) => bloc.add(SetColorEvent(color: Colors.blue)),
2526
expect: () => [
26-
ColorUpdated(color: Colors.blue),
27+
OnBoardingPageColorState(color: Colors.blue),
2728
],
2829
);
2930
});
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import 'package:bloc_test/bloc_test.dart';
2+
import 'package:flood_mobile/Blocs/language_bloc/language_bloc.dart';
3+
import 'package:flutter/material.dart';
4+
import 'package:flutter_test/flutter_test.dart';
5+
6+
void main() {
7+
group('LanguageBloc', () {
8+
late LanguageBloc languageBloc;
9+
10+
setUp(() {
11+
languageBloc = LanguageBloc();
12+
});
13+
14+
tearDown(() {
15+
languageBloc.close();
16+
});
17+
18+
test('initial state should be LanguageState.initial()', () {
19+
expect(languageBloc.state, LanguageState.initial());
20+
});
21+
22+
blocTest<LanguageBloc, LanguageState>(
23+
'emits LanguageState with the updated locale when ChangeLanguageEvent is added',
24+
build: () => languageBloc,
25+
act: (bloc) => bloc.add(ChangeLanguageEvent(Locale('en'))),
26+
expect: () => [LanguageState(Locale('en'))],
27+
);
28+
});
29+
}

test/widget_test/about_screen_widget_test.dart

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import 'dart:io';
2+
import 'package:flood_mobile/Blocs/bloc_provider_list.dart';
23
import 'package:flood_mobile/Pages/about_screen/about_screen.dart';
4+
import 'package:flood_mobile/l10n/l10n.dart';
5+
import 'package:flutter_bloc/flutter_bloc.dart';
36
import 'package:flutter_test/flutter_test.dart';
47
import 'package:flutter/material.dart';
58

@@ -9,9 +12,14 @@ void main() {
912
});
1013
setUpAll(() => HttpOverrides.global = null);
1114
Widget createWidgetUnderTest() {
12-
return MaterialApp(
13-
home: Material(
14-
child: AboutScreen(themeIndex: 2),
15+
return MultiBlocProvider(
16+
providers: BlocProviders.multiBlocProviders,
17+
child: MaterialApp(
18+
localizationsDelegates: AppLocalizations.localizationsDelegates,
19+
supportedLocales: AppLocalizations.supportedLocales,
20+
home: Material(
21+
child: AboutScreen(themeIndex: 2),
22+
),
1523
),
1624
);
1725
}

test/widget_test/base_app_bar_widget_test.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'package:flood_mobile/Blocs/bloc_provider_list.dart';
22
import 'package:flood_mobile/Pages/widgets/base_app_bar.dart';
3+
import 'package:flood_mobile/l10n/l10n.dart';
34
import 'package:flutter/material.dart';
45
import 'package:flutter_bloc/flutter_bloc.dart';
56
import 'package:flutter_test/flutter_test.dart';
@@ -10,6 +11,8 @@ void main() {
1011
return MultiBlocProvider(
1112
providers: BlocProviders.multiBlocProviders,
1213
child: MaterialApp(
14+
localizationsDelegates: AppLocalizations.localizationsDelegates,
15+
supportedLocales: AppLocalizations.supportedLocales,
1316
home: Material(
1417
child: BaseAppBar(appBar: AppBar(), themeIndex: 2),
1518
),

test/widget_test/home_screen_widget_test.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import "dart:io";
22
import "package:bloc_test/bloc_test.dart";
3+
import "package:flood_mobile/Blocs/language_bloc/language_bloc.dart";
34
import "package:flood_mobile/Blocs/sse_bloc/sse_bloc.dart";
45
import "package:flood_mobile/Model/notification_model.dart";
56
import "package:flood_mobile/Model/single_feed_and_response_model.dart";
@@ -14,6 +15,7 @@ import "package:flood_mobile/Blocs/home_screen_bloc/home_screen_bloc.dart";
1415
import "package:flood_mobile/Blocs/multiple_select_torrent_bloc/multiple_select_torrent_bloc.dart";
1516
import "package:flood_mobile/Blocs/theme_bloc/theme_bloc.dart";
1617
import "package:flood_mobile/Blocs/user_detail_bloc/user_detail_bloc.dart";
18+
import "package:flood_mobile/l10n/l10n.dart";
1719
import "package:flutter/material.dart";
1820
import "package:flutter_bloc/flutter_bloc.dart";
1921
import "package:flutter_test/flutter_test.dart";
@@ -144,9 +146,9 @@ void main() {
144146
downSpeed: '20 Kb/s'));
145147
});
146148
Widget createWidgetUnderTest() {
147-
// print(mockHomeScreenBloc.state);
148149
return MultiBlocProvider(
149150
providers: [
151+
BlocProvider<LanguageBloc>.value(value: LanguageBloc()),
150152
BlocProvider<UserDetailBloc>.value(value: UserDetailBloc()),
151153
BlocProvider<HomeScreenBloc>.value(value: mockHomeScreenBloc),
152154
BlocProvider<ClientSettingsBloc>.value(value: mockClientSettingsBloc),
@@ -161,6 +163,9 @@ void main() {
161163
child: BlocBuilder<ThemeBloc, ThemeState>(
162164
builder: (context, state) {
163165
return MaterialApp(
166+
locale: Locale('en'),
167+
localizationsDelegates: AppLocalizations.localizationsDelegates,
168+
supportedLocales: AppLocalizations.supportedLocales,
164169
home: Material(
165170
child: HomeScreen(themeIndex: 2),
166171
),

test/widget_test/login_screen_widget_test.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import 'dart:io';
22
import 'package:flood_mobile/Blocs/bloc_provider_list.dart';
33
import 'package:flood_mobile/Pages/login_screen/login_screen.dart';
44
import 'package:flood_mobile/Pages/login_screen/widgets/login_screen_textfield.dart';
5+
import 'package:flood_mobile/l10n/l10n.dart';
56
import 'package:flutter/material.dart';
67
import 'package:flutter_bloc/flutter_bloc.dart';
78
import 'package:flutter_test/flutter_test.dart';
@@ -13,6 +14,9 @@ void main() {
1314
return MultiBlocProvider(
1415
providers: BlocProviders.multiBlocProviders,
1516
child: MaterialApp(
17+
locale: Locale('en'),
18+
localizationsDelegates: AppLocalizations.localizationsDelegates,
19+
supportedLocales: AppLocalizations.supportedLocales,
1620
home: Material(
1721
child: LoginScreen(),
1822
),

test/widget_test/logout_alert_widget_test.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'package:flood_mobile/Blocs/bloc_provider_list.dart';
22
import 'package:flood_mobile/Pages/home_screen/widgets/logout_alert.dart';
3+
import 'package:flood_mobile/l10n/l10n.dart';
34
import 'package:flutter/material.dart';
45
import 'package:flutter_bloc/flutter_bloc.dart';
56
import 'package:flutter_test/flutter_test.dart';
@@ -10,6 +11,9 @@ void main() {
1011
return MultiBlocProvider(
1112
providers: BlocProviders.multiBlocProviders,
1213
child: MaterialApp(
14+
locale: Locale('en'),
15+
localizationsDelegates: AppLocalizations.localizationsDelegates,
16+
supportedLocales: AppLocalizations.supportedLocales,
1317
home: Material(
1418
child: LogOutAlert(
1519
logoutOnClick: () {},

test/widget_test/on_board_widget_test.dart

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import 'package:flood_mobile/Blocs/onboarding_main_page_bloc/on_boarding_page_color_bloc.dart';
22
import 'package:flood_mobile/Pages/login_screen/login_screen.dart';
3-
import 'package:flood_mobile/Pages/onboarding_main_screen/data/onboard_page_data.dart';
43
import 'package:flood_mobile/Route/route_generator.dart';
4+
import 'package:flood_mobile/l10n/l10n.dart';
55
import 'package:flutter/material.dart';
66
import 'package:flutter_bloc/flutter_bloc.dart';
77
import 'package:flutter_test/flutter_test.dart';
@@ -25,6 +25,9 @@ void main() {
2525
BlocProvider<OnBoardingPageColorBloc>.value(
2626
value: colorBloc,
2727
child: MaterialApp(
28+
locale: Locale('en'),
29+
localizationsDelegates: AppLocalizations.localizationsDelegates,
30+
supportedLocales: AppLocalizations.supportedLocales,
2831
home: OnboardingMainPage(),
2932
onGenerateRoute: RouteGenerator.generateRoute,
3033
),
@@ -35,19 +38,19 @@ void main() {
3538
expect(find.byType(SmoothPageIndicator), findsOneWidget);
3639

3740
// Check initial color
38-
expect(colorBloc.state, equals(OnBoardingPageColorInitial()));
41+
expect(colorBloc.state, equals(OnBoardingPageColorState.initial()));
3942

4043
// Tap next button and check color change
4144
await tester.tap(find.byIcon(Icons.arrow_back));
4245
await tester.pumpAndSettle();
4346
expect(colorBloc.state,
44-
equals(ColorUpdated(color: onboardData[0].nextAccentColor)));
47+
equals(OnBoardingPageColorState(color: Color(0xFFFFE074))));
4548

4649
// Tap next button and check color change
4750
await tester.tap(find.byIcon(Icons.arrow_back));
4851
await tester.pumpAndSettle();
4952
expect(colorBloc.state,
50-
equals(ColorUpdated(color: onboardData[1].nextAccentColor)));
53+
equals(OnBoardingPageColorState(color: Color(0xFFE6E6E6))));
5154

5255
// Tap skip button and check navigation to login screen
5356
await tester.tap(find.byKey(ValueKey('skipButton')));

test/widget_test/rss_feed_homepage_widget_test.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'dart:io';
22
import 'package:bloc_test/bloc_test.dart';
3+
import 'package:flood_mobile/Blocs/language_bloc/language_bloc.dart';
34
import 'package:flood_mobile/Blocs/sse_bloc/sse_bloc.dart';
45
import 'package:flood_mobile/Model/notification_model.dart';
56
import 'package:flood_mobile/Model/single_feed_and_response_model.dart';
@@ -10,6 +11,7 @@ import 'package:flood_mobile/Blocs/client_settings_bloc/client_settings_bloc.dar
1011
import 'package:flood_mobile/Blocs/home_screen_bloc/home_screen_bloc.dart';
1112
import 'package:flood_mobile/Blocs/theme_bloc/theme_bloc.dart';
1213
import 'package:flood_mobile/Blocs/user_detail_bloc/user_detail_bloc.dart';
14+
import 'package:flood_mobile/l10n/l10n.dart';
1315
import 'package:flutter/material.dart';
1416
import 'package:flutter_bloc/flutter_bloc.dart';
1517
import 'package:flutter_test/flutter_test.dart';
@@ -90,8 +92,12 @@ void main() {
9092
BlocProvider<ApiBloc>(
9193
create: (context) => ApiBloc(),
9294
),
95+
BlocProvider<LanguageBloc>.value(value: LanguageBloc()),
9396
],
9497
child: MaterialApp(
98+
locale: Locale('en'),
99+
localizationsDelegates: AppLocalizations.localizationsDelegates,
100+
supportedLocales: AppLocalizations.supportedLocales,
95101
home: Scaffold(
96102
body: RSSFeedHomePage(themeIndex: 2),
97103
),

test/widget_test/settings_screen_widget_test.dart

Lines changed: 57 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import 'package:bloc_test/bloc_test.dart';
2+
import 'package:flood_mobile/Blocs/language_bloc/language_bloc.dart';
23
import 'package:flood_mobile/Blocs/sse_bloc/sse_bloc.dart';
34
import 'package:flood_mobile/Model/client_settings_model.dart';
45
import 'package:flood_mobile/Model/current_user_detail_model.dart';
56
import 'package:flood_mobile/Pages/settings_screen/settings_screen.dart';
67
import 'package:flood_mobile/Blocs/theme_bloc/theme_bloc.dart';
78
import 'package:flood_mobile/Pages/settings_screen/widgets/settings_text_field.dart';
9+
import 'package:flood_mobile/l10n/l10n.dart';
810
import 'package:flutter/material.dart';
911
import 'package:flutter_bloc/flutter_bloc.dart';
1012
import 'package:flutter_test/flutter_test.dart';
@@ -79,27 +81,35 @@ void main() {
7981

8082
Widget createWidgetUnderTest() {
8183
return MultiBlocProvider(
82-
providers: [
83-
BlocProvider<UserDetailBloc>.value(
84-
value: mockUserDetailBloc,
85-
),
86-
BlocProvider<HomeScreenBloc>.value(
87-
value: HomeScreenBloc(),
88-
),
89-
BlocProvider<SSEBloc>.value(
90-
value: SSEBloc(),
91-
),
92-
BlocProvider<ClientSettingsBloc>.value(
93-
value: mockClientSettingsBloc,
94-
),
95-
BlocProvider<ThemeBloc>.value(
96-
value: ThemeBloc(),
97-
),
98-
],
99-
child: MaterialApp(
100-
home: Material(
84+
providers: [
85+
BlocProvider<UserDetailBloc>.value(
86+
value: mockUserDetailBloc,
87+
),
88+
BlocProvider<HomeScreenBloc>.value(
89+
value: HomeScreenBloc(),
90+
),
91+
BlocProvider<SSEBloc>.value(
92+
value: SSEBloc(),
93+
),
94+
BlocProvider<ClientSettingsBloc>.value(
95+
value: mockClientSettingsBloc,
96+
),
97+
BlocProvider<ThemeBloc>.value(
98+
value: ThemeBloc(),
99+
),
100+
BlocProvider<LanguageBloc>.value(
101+
value: LanguageBloc(),
102+
),
103+
],
104+
child: MaterialApp(
105+
locale: Locale('en'),
106+
localizationsDelegates: AppLocalizations.localizationsDelegates,
107+
supportedLocales: AppLocalizations.supportedLocales,
108+
home: Material(
101109
child: SettingsScreen(themeIndex: 2),
102-
)));
110+
),
111+
),
112+
);
103113
}
104114

105115
testWidgets("Check if initial options displayed",
@@ -333,4 +343,31 @@ void main() {
333343

334344
expect(find.widgetWithText(ElevatedButton, 'Add'), findsOneWidget);
335345
});
346+
347+
testWidgets('Check User Interface Section', (WidgetTester tester) async {
348+
await tester.pumpWidget(createWidgetUnderTest());
349+
expect(find.text('Bandwidth'), findsOneWidget);
350+
await tester.tap(find.text('Bandwidth'));
351+
await tester.pumpAndSettle();
352+
await tester.ensureVisible(find.text('User Interface'));
353+
await tester.tap(find.text('User Interface'));
354+
await tester.pumpAndSettle();
355+
expect(find.byKey(Key('User Interface Expansion Card')), findsOneWidget);
356+
expect(find.byKey(Key('User Interface options display column')),
357+
findsOneWidget);
358+
expect(find.byKey(Key('Select Language Dropdown')), findsOneWidget);
359+
expect(find.text('Language'), findsOneWidget);
360+
expect(find.text('English'), findsOneWidget);
361+
await tester.tap(find.text('English'));
362+
await tester.pumpAndSettle();
363+
expect(find.text('English'), findsNWidgets(2));
364+
expect(find.text('हिन्दी'), findsNWidgets(2));
365+
await tester.tap(find.text('हिन्दी').last);
366+
await tester.pumpAndSettle();
367+
expect(find.text('हिन्दी'), findsOneWidget);
368+
expect(find.widgetWithText(ElevatedButton, 'Set'), findsOneWidget);
369+
await tester.tap(find.widgetWithText(ElevatedButton, 'Set'));
370+
await tester.pumpAndSettle();
371+
expect(find.text('Language Set Successfully'), findsOneWidget);
372+
});
336373
}

0 commit comments

Comments
 (0)