Skip to content

Commit 79201eb

Browse files
committed
wip: interation test helper
1 parent cb5a045 commit 79201eb

File tree

10 files changed

+219
-82
lines changed

10 files changed

+219
-82
lines changed
+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import 'package:apidash/widgets/menu_item_card.dart';
2+
import 'package:flutter/material.dart';
3+
import 'package:flutter_test/flutter_test.dart';
4+
import 'package:spot/spot.dart';
5+
import 'package:apidash/app.dart';
6+
import 'package:apidash/consts.dart';
7+
8+
import 'package:apidash/screens/envvar/environments_pane.dart';
9+
import '../test/extensions/widget_tester_extensions.dart';
10+
import 'test_helper.dart';
11+
12+
void main() async {
13+
await ApidashTestHelper.initialize();
14+
apidashWidgetTest("Testing Environment Manager end-to-end",
15+
(WidgetTester tester, helper) async {
16+
await tester.pumpUntilFound(find.byType(DashApp));
17+
await Future.delayed(const Duration(seconds: 2));
18+
19+
/// Navigate to Environment Manager
20+
Finder envNavbutton = find.byIcon(Icons.laptop_windows_outlined);
21+
expect(envNavbutton, findsOneWidget);
22+
await tester.tap(envNavbutton);
23+
await tester.pumpAndSettle();
24+
await Future.delayed(const Duration(seconds: 1));
25+
26+
/// Create New Environment
27+
final newEnvButton =
28+
spot<EnvironmentsPane>().spot<ElevatedButton>().spotText(kLabelPlusNew);
29+
newEnvButton.existsOnce();
30+
await act.tap(newEnvButton);
31+
await tester.pumpAndSettle();
32+
await Future.delayed(const Duration(seconds: 1));
33+
34+
/// Open ItemCardMenu of the new environment
35+
spot<EnvironmentsPane>()
36+
.spot<EnvironmentsList>()
37+
.spot<EnvironmentItem>()
38+
.existsAtLeastNTimes(2);
39+
Finder envItems = find.byType(EnvironmentItem);
40+
Finder newEnvItem = envItems.at(1);
41+
expect(find.descendant(of: newEnvItem, matching: find.text('untitled')),
42+
findsOneWidget);
43+
Finder itemCardMenu =
44+
find.descendant(of: newEnvItem, matching: find.byType(ItemCardMenu));
45+
await tester.tap(itemCardMenu);
46+
await tester.pumpAndSettle();
47+
48+
/// Rename the new environment
49+
await tester.tap(find.text('Rename').last);
50+
await tester.pump();
51+
await tester.enterText(newEnvItem, "New Environment");
52+
await tester.testTextInput.receiveAction(TextInputAction.done);
53+
await tester.pump();
54+
55+
await Future.delayed(const Duration(seconds: 2));
56+
});
57+
}

integration_test/test_helper.dart

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import 'dart:ui';
2+
3+
import 'package:apidash/app.dart';
4+
import 'package:flutter_riverpod/flutter_riverpod.dart';
5+
import 'package:flutter_test/flutter_test.dart';
6+
import 'package:freezed_annotation/freezed_annotation.dart';
7+
import 'package:integration_test/integration_test.dart';
8+
import 'package:apidash/main.dart' as app;
9+
10+
class ApidashTestHelper {
11+
final WidgetTester tester;
12+
13+
ApidashTestHelper(this.tester);
14+
15+
static Future<IntegrationTestWidgetsFlutterBinding> initialize(
16+
{Size? size}) async {
17+
final binding = IntegrationTestWidgetsFlutterBinding.ensureInitialized();
18+
binding.framePolicy = LiveTestWidgetsFlutterBindingFramePolicy.fullyLive;
19+
20+
await app.initApp();
21+
await app.initWindow(sz: size);
22+
23+
return binding;
24+
}
25+
26+
static Future<void> loadApp(WidgetTester tester) async {
27+
await app.initApp();
28+
await tester.pumpWidget(
29+
const ProviderScope(
30+
child: DashApp(),
31+
),
32+
);
33+
}
34+
}
35+
36+
@isTest
37+
void apidashWidgetTest(
38+
String description,
39+
Future<void> Function(WidgetTester, ApidashTestHelper) test,
40+
) {
41+
testWidgets(
42+
description,
43+
(widgetTester) async {
44+
await ApidashTestHelper.loadApp(widgetTester);
45+
await test(widgetTester, ApidashTestHelper(widgetTester));
46+
},
47+
semanticsEnabled: false,
48+
);
49+
}

lib/main.dart

+17-7
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,29 @@ import 'app.dart';
77

88
void main() async {
99
WidgetsFlutterBinding.ensureInitialized();
10+
11+
await initApp();
12+
await initWindow();
13+
14+
runApp(
15+
const ProviderScope(
16+
child: DashApp(),
17+
),
18+
);
19+
}
20+
21+
Future<void> initApp() async {
1022
GoogleFonts.config.allowRuntimeFetching = false;
1123
await openBoxes();
1224
await autoClearHistory();
25+
}
26+
27+
Future<void> initWindow({Size? sz}) async {
1328
if (kIsLinux) {
14-
await setupInitialWindow();
29+
await setupInitialWindow(sz: sz);
1530
}
1631
if (kIsMacOS || kIsWindows) {
17-
var win = getInitialSize();
32+
var win = sz == null ? (sz, null) : getInitialSize();
1833
await setupWindow(sz: win.$1, off: win.$2);
1934
}
20-
runApp(
21-
const ProviderScope(
22-
child: DashApp(),
23-
),
24-
);
2535
}

lib/screens/dashboard.dart

+2-2
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ class Dashboard extends ConsumerWidget {
4646
onPressed: () {
4747
ref.read(navRailIndexStateProvider.notifier).state = 1;
4848
},
49-
icon: const Icon(Icons.computer_outlined),
50-
selectedIcon: const Icon(Icons.computer_rounded),
49+
icon: const Icon(Icons.laptop_windows_outlined),
50+
selectedIcon: const Icon(Icons.laptop_windows),
5151
),
5252
Text(
5353
'Variables',

0 commit comments

Comments
 (0)