mirror of
https://github.com/foss42/apidash.git
synced 2025-12-05 20:40:02 +08:00
129 lines
4.2 KiB
Dart
129 lines
4.2 KiB
Dart
import 'package:apidash/dashbot/core/common/pages/dashbot_default_page.dart';
|
|
import 'package:apidash/dashbot/core/constants/constants.dart';
|
|
import 'package:apidash/dashbot/core/routes/dashbot_routes.dart';
|
|
import 'package:apidash/dashbot/features/home/view/widgets/home_screen_task_button.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
|
|
import 'test_utils.dart';
|
|
|
|
Finder _taskButton(String snippet) => find.byWidgetPredicate(
|
|
(widget) =>
|
|
widget is HomeScreenTaskButton && widget.label.contains(snippet),
|
|
);
|
|
|
|
void main() {
|
|
testWidgets('DashbotDefaultPage renders greeting and actions',
|
|
(tester) async {
|
|
await tester.pumpWidget(const MaterialApp(home: DashbotDefaultPage()));
|
|
|
|
expect(find.textContaining('Hello there'), findsOneWidget);
|
|
expect(find.textContaining('make one'), findsOneWidget);
|
|
expect(find.textContaining('Open Chat'), findsOneWidget);
|
|
expect(find.textContaining('Import cURL'), findsOneWidget);
|
|
expect(find.textContaining('Import OpenAPI'), findsOneWidget);
|
|
});
|
|
|
|
testWidgets('Open Chat button pushes chat route without arguments',
|
|
(tester) async {
|
|
final observer = RecordingNavigatorObserver();
|
|
Object? capturedArgs;
|
|
|
|
await tester.pumpWidget(
|
|
MaterialApp(
|
|
navigatorObservers: [observer],
|
|
onGenerateRoute: (settings) {
|
|
if (settings.name == DashbotRoutes.dashbotChat) {
|
|
capturedArgs = settings.arguments;
|
|
}
|
|
return MaterialPageRoute(
|
|
settings: settings,
|
|
builder: (_) => const SizedBox.shrink(),
|
|
);
|
|
},
|
|
home: const DashbotDefaultPage(),
|
|
),
|
|
);
|
|
await tester.pump();
|
|
|
|
final openChatButton = _taskButton('Open Chat');
|
|
expect(openChatButton, findsOneWidget);
|
|
await tester.tap(find.descendant(
|
|
of: openChatButton,
|
|
matching: find.byType(TextButton),
|
|
));
|
|
await tester.pumpAndSettle();
|
|
|
|
expect(observer.lastRoute?.settings.name, DashbotRoutes.dashbotChat);
|
|
expect(capturedArgs, isNull);
|
|
});
|
|
|
|
group('Import buttons push chat route with correct arguments', () {
|
|
testWidgets('Import cURL button', (tester) async {
|
|
final observer = RecordingNavigatorObserver();
|
|
Object? capturedArgs;
|
|
|
|
await tester.pumpWidget(
|
|
MaterialApp(
|
|
navigatorObservers: [observer],
|
|
onGenerateRoute: (settings) {
|
|
if (settings.name == DashbotRoutes.dashbotChat) {
|
|
capturedArgs = settings.arguments;
|
|
}
|
|
return MaterialPageRoute(
|
|
settings: settings,
|
|
builder: (_) => const SizedBox.shrink(),
|
|
);
|
|
},
|
|
home: const DashbotDefaultPage(),
|
|
),
|
|
);
|
|
await tester.pump();
|
|
|
|
final importCurlButton = _taskButton('Import cURL');
|
|
expect(importCurlButton, findsOneWidget);
|
|
await tester.tap(find.descendant(
|
|
of: importCurlButton,
|
|
matching: find.byType(TextButton),
|
|
));
|
|
await tester.pumpAndSettle();
|
|
|
|
expect(observer.lastRoute?.settings.name, DashbotRoutes.dashbotChat);
|
|
expect(capturedArgs, ChatMessageType.importCurl);
|
|
});
|
|
|
|
testWidgets('Import OpenAPI button', (tester) async {
|
|
final observer = RecordingNavigatorObserver();
|
|
Object? capturedArgs;
|
|
|
|
await tester.pumpWidget(
|
|
MaterialApp(
|
|
navigatorObservers: [observer],
|
|
onGenerateRoute: (settings) {
|
|
if (settings.name == DashbotRoutes.dashbotChat) {
|
|
capturedArgs = settings.arguments;
|
|
}
|
|
return MaterialPageRoute(
|
|
settings: settings,
|
|
builder: (_) => const SizedBox.shrink(),
|
|
);
|
|
},
|
|
home: const DashbotDefaultPage(),
|
|
),
|
|
);
|
|
await tester.pump();
|
|
|
|
final importOpenApiButton = _taskButton('Import OpenAPI');
|
|
expect(importOpenApiButton, findsOneWidget);
|
|
await tester.tap(find.descendant(
|
|
of: importOpenApiButton,
|
|
matching: find.byType(TextButton),
|
|
));
|
|
await tester.pumpAndSettle();
|
|
|
|
expect(observer.lastRoute?.settings.name, DashbotRoutes.dashbotChat);
|
|
expect(capturedArgs, ChatMessageType.importOpenApi);
|
|
});
|
|
});
|
|
}
|