diff --git a/integration_test/desktop/his_request_test.dart b/integration_test/desktop/his_request_test.dart new file mode 100644 index 00000000..ef62eef3 --- /dev/null +++ b/integration_test/desktop/his_request_test.dart @@ -0,0 +1,63 @@ +import 'dart:ui'; + +import 'package:apidash/screens/history/history_pane.dart'; +import 'package:apidash/screens/history/history_requests.dart'; +import 'package:apidash/widgets/widgets.dart'; +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 '../../test/extensions/widget_tester_extensions.dart'; +import '../test_helper.dart'; + +void main() async { + await ApidashTestHelper.initialize( + size: Size(kExpandedWindowWidth, kMinWindowSize.height)); + 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)); + + /// Create New Request + await helper.reqHelper.addRequest( + "https://api.apidash.dev/humanize/social", + name: "Social", + params: [("num", "870000")], + ); + await Future.delayed(const Duration(milliseconds: 200)); + await helper.reqHelper.sendRequest(); + + /// Navigate to History + await helper.navigateToHistory(); + var sidebarCards = spot().spot().finder; + final initSidebarCardCount = + tester.widgetList(sidebarCards).length; + var historyCards = + spot().spot().finder; + final initHistoryCardCount = + tester.widgetList(historyCards).length; + + /// Send another request with same name + await helper.navigateToRequestEditor(); + await Future.delayed(const Duration(milliseconds: 200)); + await helper.reqHelper.addRequest( + "https://api.apidash.dev/convert/leet", + name: "Social", + params: [("text", "870000")], + ); + await Future.delayed(const Duration(milliseconds: 200)); + await helper.reqHelper.sendRequest(); + + /// Check history Card counts + await helper.navigateToHistory(); + sidebarCards = spot().spot().finder; + final newSidebarCardCount = + tester.widgetList(sidebarCards).length; + historyCards = spot().spot().finder; + final newHistoryCardCount = + tester.widgetList(historyCards).length; + expect(newSidebarCardCount, initSidebarCardCount); + expect(newHistoryCardCount, initHistoryCardCount + 1); + }); +} diff --git a/integration_test/env_helper.dart b/integration_test/env_helper.dart index a2acfb23..c26775a7 100644 --- a/integration_test/env_helper.dart +++ b/integration_test/env_helper.dart @@ -42,12 +42,15 @@ class ApidashTestEnvHelper { Future addEnvironmentVariables( List<(String, String)> keyValuePairs) async { - final envCells = find.descendant( + var envCells = find.descendant( of: find.byType(EditEnvironmentVariables), matching: find.byType(CellField)); for (var i = 0; i < keyValuePairs.length; i++) { - await tester.enterText(envCells.at(i), keyValuePairs[i].$1); - await tester.enterText(envCells.at(i + 1), keyValuePairs[i].$2); + await tester.enterText(envCells.at(i * 2), keyValuePairs[i].$1); + await tester.enterText(envCells.at(i * 2 + 1), keyValuePairs[i].$2); + envCells = find.descendant( + of: find.byType(EditEnvironmentVariables), + matching: find.byType(CellField)); } } diff --git a/integration_test/req_helper.dart b/integration_test/req_helper.dart index c72f0af5..af0b7f3e 100644 --- a/integration_test/req_helper.dart +++ b/integration_test/req_helper.dart @@ -1,10 +1,13 @@ -import 'package:apidash/consts.dart'; -import 'package:apidash/screens/home_page/collection_pane.dart'; -import 'package:apidash/screens/home_page/editor_pane/url_card.dart'; -import 'package:apidash/widgets/menu_item_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:spot/spot.dart'; +import 'package:apidash/consts.dart'; +import 'package:apidash/widgets/widgets.dart'; +import 'package:apidash/screens/common_widgets/common_widgets.dart'; +import 'package:apidash/screens/home_page/collection_pane.dart'; +import 'package:apidash/screens/home_page/editor_pane/url_card.dart'; +import 'package:apidash/screens/home_page/editor_pane/details_card/request_pane/request_params.dart'; +import 'package:apidash/screens/home_page/editor_pane/details_card/request_pane/request_headers.dart'; class ApidashTestRequestHelper { final WidgetTester tester; @@ -42,4 +45,88 @@ class ApidashTestRequestHelper { await act.tap(spot()); tester.testTextInput.enterText(url); } + + Future setRequestMethod(HTTPVerb method) async { + final methodDropdown = spot(); + await act.tap(methodDropdown); + await tester.pumpAndSettle(); + await tester.tap(find.text(method.name.toUpperCase()).last); + await tester.pumpAndSettle(); + } + + Future addRequestParams(List<(String, String)> keyValuePairs) async { + final paramTabButton = + spot().spot().spotText(kLabelURLParams); + await act.tap(paramTabButton); + await tester.pumpAndSettle(); + + var paramCells = find.descendant( + of: find.byType(EditRequestURLParams), + matching: find.byType(EnvCellField)); + for (var i = 0; i < keyValuePairs.length; i++) { + await tester.tap(paramCells.at(i)); + tester.testTextInput.enterText(keyValuePairs[i].$1); + await tester.tap(paramCells.at(i + 1)); + tester.testTextInput.enterText(keyValuePairs[i].$2); + paramCells = find.descendant( + of: find.byType(EditRequestURLParams), + matching: find.byType(EnvCellField)); + } + } + + Future addRequestHeaders(List<(String, String)> keyValuePairs) async { + final headerTabButton = + spot().spot().spotText(kLabelHeaders); + await act.tap(headerTabButton); + await tester.pumpAndSettle(); + + var headerCells = find.descendant( + of: find.byType(EditRequestHeaders), + matching: find.byType(HeaderField)); + var valueCells = find.descendant( + of: find.byType(EditRequestHeaders), + matching: find.byType(EnvCellField)); + for (var i = 0; i < keyValuePairs.length; i++) { + await tester.tap(headerCells.at(i)); + tester.testTextInput.enterText(keyValuePairs[i].$1); + await tester.tap(valueCells.at(i)); + tester.testTextInput.enterText(keyValuePairs[i].$2); + headerCells = find.descendant( + of: find.byType(EditRequestHeaders), + matching: find.byType(HeaderField)); + valueCells = find.descendant( + of: find.byType(EditRequestHeaders), + matching: find.byType(EnvCellField)); + } + } + + Future addRequest( + String url, { + String? name, + HTTPVerb method = HTTPVerb.get, + List<(String, String)> params = const [], + List<(String, String)> headers = const [], + bool isMobile = false, + }) async { + await addNewRequest(isMobile: isMobile); + if (name != null) { + await renameNewRequest(name); + } + if (isMobile) { + kHomeScaffoldKey.currentState!.closeDrawer(); + await tester.pumpAndSettle(); + } + if (method != HTTPVerb.get) { + await setRequestMethod(method); + } + await addRequestURL(url); + await addRequestParams(params); + await addRequestHeaders(headers); + } + + Future sendRequest( + {Duration stallTime = const Duration(seconds: 3)}) async { + await act.tap(spot()); + await tester.pumpAndSettle(stallTime); + } } diff --git a/integration_test/test_helper.dart b/integration_test/test_helper.dart index 24453d91..a1ce860d 100644 --- a/integration_test/test_helper.dart +++ b/integration_test/test_helper.dart @@ -1,12 +1,12 @@ -import 'package:apidash/app.dart'; -import 'package:apidash/consts.dart'; -import 'package:apidash/widgets/widgets.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; import 'package:integration_test/integration_test.dart'; import 'package:apidash/main.dart' as app; +import 'package:apidash/app.dart'; +import 'package:apidash/consts.dart'; +import 'package:apidash/widgets/widgets.dart'; import 'env_helper.dart'; import 'req_helper.dart'; diff --git a/lib/consts.dart b/lib/consts.dart index 7be964e9..9d72e0e3 100644 --- a/lib/consts.dart +++ b/lib/consts.dart @@ -761,6 +761,7 @@ const kHintAddName = "Add Name"; const kHintAddFieldName = "Add Field Name"; const kLabelAddParam = "Add Param"; const kLabelAddHeader = "Add Header"; +const kLabelAddVariable = "Add Variable"; const kLabelSelectFile = "Select File"; const kLabelAddFormField = "Add Form Field"; // Response Pane diff --git a/lib/screens/envvar/editor_pane/variables_pane.dart b/lib/screens/envvar/editor_pane/variables_pane.dart index 1d6eedb7..8af4ba6e 100644 --- a/lib/screens/envvar/editor_pane/variables_pane.dart +++ b/lib/screens/envvar/editor_pane/variables_pane.dart @@ -217,7 +217,7 @@ class EditEnvironmentVariablesState }, icon: const Icon(Icons.add), label: const Text( - "Add Variable", + kLabelAddVariable, style: kTextStyleButton, ), ),