Skip to content

Commit c1f4a67

Browse files
committed
feat(example): Add tests for example
1 parent 8d3a424 commit c1f4a67

3 files changed

Lines changed: 62 additions & 3 deletions

File tree

example/lib/app/pages/home_page.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ class HomePage extends StatelessWidget {
5757
itemCount: shoes.length,
5858
itemBuilder: (context, index) {
5959
final shoe = shoes[index];
60-
return _ShoeCard(shoe: shoe);
60+
return ShoeCard(shoe: shoe);
6161
},
6262
),
6363
),
@@ -69,10 +69,10 @@ class HomePage extends StatelessWidget {
6969
}
7070
}
7171

72-
class _ShoeCard extends StatelessWidget {
72+
class ShoeCard extends StatelessWidget {
7373
final Data<Shoe> shoe;
7474

75-
const _ShoeCard({required this.shoe});
75+
const ShoeCard({super.key, required this.shoe});
7676

7777
@override
7878
Widget build(BuildContext context) {

example/test/home_page_test.dart

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import 'package:example/app/api/shoe_api.dart';
2+
import 'package:example/app/pages/home_page.dart';
3+
import 'package:example/app/stores/home_store.dart';
4+
import 'package:flutter/material.dart';
5+
import 'package:flutter_test/flutter_test.dart';
6+
import 'package:flutter_weaver/flutter_weaver.dart';
7+
8+
import 'test_widget_wrapper.dart';
9+
10+
Future<void> main() async {
11+
setUp(() {
12+
weaver.register(ShoeApi());
13+
weaver.register(HomeStore(weaver.get()));
14+
});
15+
16+
tearDown(() {
17+
weaver.reset();
18+
});
19+
20+
testWidgets(
21+
'Should load page without any errors',
22+
(tester) async {
23+
await tester.pumpWidget(TestWidgetWrapper(HomePage()));
24+
await tester.pumpAndSettle();
25+
26+
expect(find.byType(ShoeCard), findsAtLeast(1));
27+
},
28+
);
29+
30+
testWidgets(
31+
'Should show profile button',
32+
(tester) async {
33+
await tester.pumpWidget(TestWidgetWrapper(HomePage()));
34+
await tester.pumpAndSettle();
35+
36+
expect(find.byIcon(Icons.person), findsOneWidget);
37+
},
38+
);
39+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:shadcn_ui/shadcn_ui.dart';
3+
4+
class TestWidgetWrapper extends StatelessWidget {
5+
const TestWidgetWrapper(this.widget, {super.key});
6+
7+
final Widget widget;
8+
9+
@override
10+
Widget build(BuildContext context) {
11+
return ShadApp.custom(
12+
appBuilder: (context) => MaterialApp(
13+
theme: ThemeData.light(useMaterial3: true),
14+
debugShowCheckedModeBanner: false,
15+
builder: (context, child) => ShadAppBuilder(child: child),
16+
home: widget,
17+
),
18+
);
19+
}
20+
}

0 commit comments

Comments
 (0)