Skip to content

Commit 66b7e28

Browse files
author
astrutz
committed
#39 - Write tests
1 parent 8d74c8c commit 66b7e28

File tree

4 files changed

+91
-14
lines changed

4 files changed

+91
-14
lines changed

lib/main.dart

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,15 @@
11
import 'package:flutter/material.dart';
2-
import 'package:google_fonts/google_fonts.dart';
2+
import 'themes/theme.dart';
33
import 'screens/mainMenu.dart';
44

55
void main() => runApp(_App());
66

77
class _App extends StatelessWidget {
88
@override
99
Widget build(BuildContext context) {
10-
final textTheme = Theme.of(context).textTheme;
1110
return MaterialApp(
1211
home: MainMenuScreen(),
13-
theme: ThemeData(
14-
primaryColor: Colors.green[800],
15-
colorScheme: Theme.of(context).colorScheme.copyWith(
16-
primary: Color(0xFF2E7D32),
17-
onPrimary: Color(0xFFFFFFFF),
18-
primaryVariant: Color(0xFF005005),
19-
),
20-
textTheme: GoogleFonts.rubikTextTheme(textTheme),
21-
),
12+
theme: appTheme(context),
2213
);
2314
}
2415
}

lib/themes/theme.dart

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:google_fonts/google_fonts.dart';
3+
4+
ThemeData appTheme(context) {
5+
final textTheme = Theme.of(context).textTheme;
6+
return ThemeData(
7+
primaryColor: Colors.green[800],
8+
colorScheme: Theme.of(context).colorScheme.copyWith(
9+
primary: Colors.green[800],
10+
onPrimary: Color(0xFFFFFFFF),
11+
primaryVariant: Colors.green[900],
12+
),
13+
textTheme: GoogleFonts.rubikTextTheme(textTheme),
14+
);
15+
}

test/components/menuButton_test.dart

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,38 @@
1-
void main() {}
1+
import 'package:dartsdrill/components/menuButton.dart';
2+
import 'package:flutter/material.dart';
3+
import 'package:flutter_test/flutter_test.dart';
4+
5+
void main() {
6+
group('Widget', () {
7+
testWidgets('MenuButton without onpressed should be disabled', (WidgetTester tester) async {
8+
Widget testWidget = new MediaQuery(
9+
data: new MediaQueryData(),
10+
child: new MaterialApp(
11+
home: new MenuButton(
12+
buttonText: 'title',
13+
icon: Icons.calendar_today_rounded,
14+
),
15+
),
16+
);
17+
await tester.pumpWidget(testWidget);
18+
final elevatedButtonFinder = find.byWidgetPredicate((widget) => widget is ElevatedButton && widget.enabled == false);
19+
expect(elevatedButtonFinder, findsOneWidget);
20+
});
21+
22+
testWidgets('MenuButton with onpressed should be enabled', (WidgetTester tester) async {
23+
Widget testWidget = new MediaQuery(
24+
data: new MediaQueryData(),
25+
child: new MaterialApp(
26+
home: new MenuButton(
27+
buttonText: 'title',
28+
onPressed: () => {},
29+
icon: Icons.calendar_today_rounded,
30+
),
31+
),
32+
);
33+
await tester.pumpWidget(testWidget);
34+
final elevatedButtonFinder = find.byWidgetPredicate((widget) => widget is ElevatedButton && widget.enabled == true);
35+
expect(elevatedButtonFinder, findsOneWidget);
36+
});
37+
});
38+
}

test/screens/mainMenu_test.dart

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,41 @@
1+
import 'package:dartsdrill/components/menuButton.dart';
2+
import 'package:dartsdrill/screens/mainMenu.dart';
3+
import 'package:flutter/material.dart';
14
import 'package:flutter_test/flutter_test.dart';
25

36
void main() {
4-
test('One should be one', () {
5-
expect(1, 1);
7+
group('Unit', () {
8+
final mainMenu = MainMenuScreen();
9+
final screens = mainMenu.getScreens();
10+
test('MainMenu should have screens to show', () {
11+
expect(mainMenu.getScreens().length, greaterThanOrEqualTo(1));
12+
});
13+
14+
test('MainMenu should have screens with titles', () {
15+
final hasTitles = screens.every((screen) => screen.containsKey('title'));
16+
expect(hasTitles, true);
17+
});
18+
19+
test('MainMenu should have screens with icons', () {
20+
final hasIcons = screens.every((screen) => screen.containsKey('icon'));
21+
expect(hasIcons, true);
22+
});
23+
});
24+
25+
group('Widget', () {
26+
testWidgets('MainMenu should have MenuButtons', (WidgetTester tester) async {
27+
Widget testWidget = new MediaQuery(data: new MediaQueryData(), child: new MaterialApp(home: new MainMenuScreen()));
28+
await tester.pumpWidget(testWidget);
29+
final menuButtonFinder = find.byWidgetPredicate((widget) => widget is MenuButton);
30+
expect(menuButtonFinder, findsWidgets);
31+
});
32+
33+
testWidgets('MainMenu should have as much buttons as screens', (WidgetTester tester) async {
34+
Widget testWidget = new MediaQuery(data: new MediaQueryData(), child: new MaterialApp(home: new MainMenuScreen()));
35+
await tester.pumpWidget(testWidget);
36+
final mainMenu = MainMenuScreen();
37+
final menuButtonFinder = find.byWidgetPredicate((widget) => widget is MenuButton);
38+
expect(menuButtonFinder, findsNWidgets(mainMenu.getScreens().length));
39+
});
640
});
741
}

0 commit comments

Comments
 (0)