diff --git a/integration_test/env_manager_test.dart b/integration_test/desktop/env_manager_test.dart similarity index 50% rename from integration_test/env_manager_test.dart rename to integration_test/desktop/env_manager_test.dart index 5aa4bef8..0610580c 100644 --- a/integration_test/env_manager_test.dart +++ b/integration_test/desktop/env_manager_test.dart @@ -1,29 +1,38 @@ +import 'dart:ui'; + import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:spot/spot.dart'; import 'package:apidash/app.dart'; import 'package:apidash/consts.dart'; +import 'package:apidash/widgets/widgets.dart'; import 'package:apidash/screens/screens.dart'; -import 'package:apidash/widgets/field_cell.dart'; -import 'package:apidash/widgets/menu_item_card.dart'; -import 'package:apidash/widgets/popup_menu_env.dart'; import 'package:apidash/screens/common_widgets/env_trigger_options.dart'; import 'package:apidash/screens/envvar/editor_pane/variables_pane.dart'; import 'package:apidash/screens/home_page/editor_pane/editor_request.dart'; import 'package:apidash/screens/home_page/editor_pane/url_card.dart'; import 'package:apidash/screens/envvar/environments_pane.dart'; -import '../test/extensions/widget_tester_extensions.dart'; -import 'test_helper.dart'; +import '../../test/extensions/widget_tester_extensions.dart'; +import '../test_helper.dart'; void main() async { + const environmentName = "test-env-name"; + const envVarName = "test-env-var"; + const envVarValue = "8700000"; + const testEndpoint = "api.apidash.dev/humanize/social?num="; + const unknown = "unknown"; + const untitled = "untitled"; + const expectedCurlCode = + "curl --url 'https://api.apidash.dev/humanize/social?num=8700000'"; + await ApidashTestHelper.initialize(); - apidashWidgetTest("Testing Environment Manager end-to-end", + apidashWidgetTest("Testing Environment Manager in desktop end-to-end", (WidgetTester tester, helper) async { await tester.pumpUntilFound(find.byType(DashApp)); await Future.delayed(const Duration(seconds: 1)); /// Navigate to Environment Manager - await navigateByIcon(Icons.laptop_windows_outlined, tester); + await navigateByIcon(tester, Icons.laptop_windows_outlined); await Future.delayed(const Duration(milliseconds: 500)); /// Create New Environment @@ -37,7 +46,7 @@ void main() async { /// Open ItemCardMenu of the new environment Finder envItems = find.byType(EnvironmentItem); Finder newEnvItem = envItems.at(1); - expect(find.descendant(of: newEnvItem, matching: find.text('untitled')), + expect(find.descendant(of: newEnvItem, matching: find.text(untitled)), findsOneWidget); Finder itemCardMenu = find.descendant(of: newEnvItem, matching: find.byType(ItemCardMenu)); @@ -45,9 +54,9 @@ void main() async { await tester.pumpAndSettle(); /// Rename the new environment - await tester.tap(find.text('Rename').last); + await tester.tap(find.text(ItemMenuOption.edit.label).last); await tester.pump(); - await tester.enterText(newEnvItem, "New Environment"); + await tester.enterText(newEnvItem, environmentName); await tester.testTextInput.receiveAction(TextInputAction.done); await tester.pump(); await Future.delayed(const Duration(milliseconds: 500)); @@ -56,13 +65,13 @@ void main() async { final envCells = find.descendant( of: find.byType(EditEnvironmentVariables), matching: find.byType(CellField)); - await tester.enterText(envCells.at(0), "test-key"); - await tester.enterText(envCells.at(1), "test-value"); + await tester.enterText(envCells.at(0), envVarName); + await tester.enterText(envCells.at(1), envVarValue); await Future.delayed(const Duration(milliseconds: 500)); /// Navigate to Request Editor - await navigateByIcon(Icons.auto_awesome_mosaic_outlined, tester); - await Future.delayed(const Duration(milliseconds: 500)); + await navigateByIcon(tester, Icons.auto_awesome_mosaic_outlined); + await Future.delayed(const Duration(milliseconds: 200)); /// Create a new request await act.tap( @@ -75,43 +84,75 @@ void main() async { matching: find.byIcon(Icons.unfold_more))); await tester.pumpAndSettle(); - await tester.tap(find.text('New Environment').last); + await tester.tap(find.text(environmentName).last); await tester.pumpAndSettle(); /// Check if environment suggestions are working await act.tap(spot().spot()); - tester.testTextInput.enterText("{{test-k"); + tester.testTextInput.enterText("$testEndpoint{{$envVarName"); await tester.pumpAndSettle( const Duration(milliseconds: 500)); // wait for suggestions - spot() + await act.tap(spot() .spot() - .spotText('test-key') - .existsOnce(); + .spotText(envVarValue)); + await tester.pumpAndSettle(); + + final gesture = await tester.createGesture(kind: PointerDeviceKind.mouse); + await gesture.addPointer(location: Offset.zero); + addTearDown(gesture.removePointer); + await tester.pump(); + + /// Check if environment variable is shown on hover + await gesture.moveTo(tester.getCenter(find.descendant( + of: find.byType(URLTextField), + matching: find.text('{{$envVarName}}')))); + await tester.pumpAndSettle(); + expect(find.text(envVarValue), findsOneWidget); + await Future.delayed(const Duration(milliseconds: 500)); + + /// Change codegen language to curl + await navigateByIcon(tester, Icons.settings_outlined); + await tester.tap(find.descendant( + of: find.byType(CodegenPopupMenu), + matching: find.byIcon(Icons.unfold_more))); + await tester.pumpAndSettle(); + + await tester.tap(find.text(CodegenLanguage.curl.label).last); + await tester.pumpAndSettle(); + await navigateByIcon(tester, Icons.auto_awesome_mosaic_outlined); + await Future.delayed(const Duration(milliseconds: 200)); + + /// Check variable substitution in request + await act.tap(spot().spotText(kLabelViewCode)); + await tester.pumpAndSettle(); + expect( + find.descendant( + of: find.byType(CodeGenPreviewer), + matching: find.text(expectedCurlCode)), + findsOneWidget); /// Navigate to Environment Manager - await navigateByIcon(Icons.laptop_windows_outlined, tester); - await Future.delayed(const Duration(milliseconds: 500)); + await navigateByIcon(tester, Icons.laptop_windows_outlined); + await Future.delayed(const Duration(milliseconds: 200)); /// Delete the environment variable final delButtons = find.descendant( of: find.byType(EditEnvironmentVariables), matching: find.byIcon(Icons.remove_circle)); await tester.tap(delButtons.at(0)); - - /// Navigate back to Request Editor - await navigateByIcon(Icons.auto_awesome_mosaic_outlined, tester); await Future.delayed(const Duration(milliseconds: 500)); - /// Check if environment suggestions are shown - await act.tap(spot().spot()); - tester.testTextInput.enterText("{{test-k"); - await tester.pumpAndSettle( - const Duration(milliseconds: 500)); // wait for suggestions - spot() - .spot() - .spotText('test-key') - .doesNotExist(); + /// Navigate back to Request Editor + await navigateByIcon(tester, Icons.auto_awesome_mosaic_outlined); + await Future.delayed(const Duration(milliseconds: 200)); - await Future.delayed(const Duration(seconds: 2)); + /// Check if environment variable is now shown on hover + await gesture.moveTo(tester.getCenter(find.descendant( + of: find.byType(URLTextField), + matching: find.text('{{$envVarName}}')))); + await tester.pumpAndSettle(); + expect(find.text(unknown), findsNWidgets(2)); + + await Future.delayed(const Duration(milliseconds: 500)); }); } diff --git a/integration_test/test_helper.dart b/integration_test/test_helper.dart index 6300d99f..f92a106c 100644 --- a/integration_test/test_helper.dart +++ b/integration_test/test_helper.dart @@ -47,7 +47,7 @@ void apidashWidgetTest( ); } -Future navigateByIcon(IconData icon, WidgetTester tester) async { +Future navigateByIcon(WidgetTester tester, IconData icon) async { await tester.tap(find.byIcon(icon)); await tester.pumpAndSettle(); }