From aa8e5c3d034b264f665955754c1c43795c959269 Mon Sep 17 00:00:00 2001 From: Rio Jos <62337699+riojosdev@users.noreply.github.com> Date: Thu, 24 Apr 2025 13:05:00 +0530 Subject: [PATCH 1/7] http method options --- doc/dev_guide/api_endpoints_for_testing.md | 5 ++++- lib/utils/ui_utils.dart | 1 + packages/apidash_core/lib/consts.dart | 3 ++- packages/apidash_core/lib/services/http_service.dart | 11 +++++++++++ packages/apidash_design_system/lib/tokens/colors.dart | 1 + 5 files changed, 19 insertions(+), 2 deletions(-) diff --git a/doc/dev_guide/api_endpoints_for_testing.md b/doc/dev_guide/api_endpoints_for_testing.md index 7f2e9556..f1082884 100644 --- a/doc/dev_guide/api_endpoints_for_testing.md +++ b/doc/dev_guide/api_endpoints_for_testing.md @@ -11,7 +11,10 @@ A List of API endpoints that can be used for testing API Dash #### For Testing HTTP PUT, PATCH, DELETE - https://reqres.in/ - + +#### For Testing HTTP OPTIONS, TRACE +- Use localhost servers, as TRACE and OPTIONS HTTP methods are not publicly available (used for diagnostic purposes) + #### For Testing sites with Bad Certificate - https://badssl.com/ - https://www.ssl.com/sample-valid-revoked-and-expired-ssl-tls-certificates/ diff --git a/lib/utils/ui_utils.dart b/lib/utils/ui_utils.dart index 4f72a1a3..68eaa82c 100644 --- a/lib/utils/ui_utils.dart +++ b/lib/utils/ui_utils.dart @@ -51,6 +51,7 @@ Color getHTTPMethodColor(HTTPVerb? method) { HTTPVerb.put => kColorHttpMethodPut, HTTPVerb.patch => kColorHttpMethodPatch, HTTPVerb.delete => kColorHttpMethodDelete, + HTTPVerb.options => kColorHttpMethodOptions, _ => kColorHttpMethodGet, }; return col; diff --git a/packages/apidash_core/lib/consts.dart b/packages/apidash_core/lib/consts.dart index 1d7044c7..c1d45ad4 100644 --- a/packages/apidash_core/lib/consts.dart +++ b/packages/apidash_core/lib/consts.dart @@ -17,7 +17,8 @@ enum HTTPVerb { post("POST"), put("PUT"), patch("PAT"), - delete("DEL"); + delete("DEL"), + options("OPT"); const HTTPVerb(this.abbr); final String abbr; diff --git a/packages/apidash_core/lib/services/http_service.dart b/packages/apidash_core/lib/services/http_service.dart index dbd93086..642ce89d 100644 --- a/packages/apidash_core/lib/services/http_service.dart +++ b/packages/apidash_core/lib/services/http_service.dart @@ -104,6 +104,17 @@ Future<(HttpResponse?, Duration?, String?)> sendHttpRequest( final streamed = await client.send(request); response = await http.Response.fromStream(streamed); break; + case HTTPVerb.options: + final request = prepareHttpRequest( + url: requestUrl, + method: requestModel.method.name.toUpperCase(), + headers: headers, + body: body, + overrideContentType: overrideContentType, + ); + final streamed = await client.send(request); + response = await http.Response.fromStream(streamed); + break; } } if (apiType == APIType.graphql) { diff --git a/packages/apidash_design_system/lib/tokens/colors.dart b/packages/apidash_design_system/lib/tokens/colors.dart index 11943bd3..22b6780c 100644 --- a/packages/apidash_design_system/lib/tokens/colors.dart +++ b/packages/apidash_design_system/lib/tokens/colors.dart @@ -23,6 +23,7 @@ final kColorHttpMethodPost = Colors.blue.shade800; final kColorHttpMethodPut = Colors.amber.shade900; final kColorHttpMethodPatch = kColorHttpMethodPut; final kColorHttpMethodDelete = Colors.red.shade800; +final kColorHttpMethodOptions = Colors.yellow.shade800; final kColorGQL = Colors.pink.shade600; From a19c9ba0938e2aefa979e54ff8b75ce2719e85cd Mon Sep 17 00:00:00 2001 From: Rio Jos <62337699+riojosdev@users.noreply.github.com> Date: Thu, 24 Apr 2025 14:12:59 +0530 Subject: [PATCH 2/7] http options method on history provider --- doc/dev_guide/api_endpoints_for_testing.md | 4 ++-- lib/models/history_meta_model.g.dart | 1 + packages/apidash_core/lib/models/http_request_model.g.dart | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/doc/dev_guide/api_endpoints_for_testing.md b/doc/dev_guide/api_endpoints_for_testing.md index f1082884..5e0c1378 100644 --- a/doc/dev_guide/api_endpoints_for_testing.md +++ b/doc/dev_guide/api_endpoints_for_testing.md @@ -12,8 +12,8 @@ A List of API endpoints that can be used for testing API Dash #### For Testing HTTP PUT, PATCH, DELETE - https://reqres.in/ -#### For Testing HTTP OPTIONS, TRACE -- Use localhost servers, as TRACE and OPTIONS HTTP methods are not publicly available (used for diagnostic purposes) +#### For Testing HTTP OPTIONS +- https://reqbin.com/echo/options #### For Testing sites with Bad Certificate - https://badssl.com/ diff --git a/lib/models/history_meta_model.g.dart b/lib/models/history_meta_model.g.dart index a2b2b7b1..da184793 100644 --- a/lib/models/history_meta_model.g.dart +++ b/lib/models/history_meta_model.g.dart @@ -44,4 +44,5 @@ const _$HTTPVerbEnumMap = { HTTPVerb.put: 'put', HTTPVerb.patch: 'patch', HTTPVerb.delete: 'delete', + HTTPVerb.options: 'options', }; diff --git a/packages/apidash_core/lib/models/http_request_model.g.dart b/packages/apidash_core/lib/models/http_request_model.g.dart index 29005786..13795ded 100644 --- a/packages/apidash_core/lib/models/http_request_model.g.dart +++ b/packages/apidash_core/lib/models/http_request_model.g.dart @@ -58,6 +58,7 @@ const _$HTTPVerbEnumMap = { HTTPVerb.put: 'put', HTTPVerb.patch: 'patch', HTTPVerb.delete: 'delete', + HTTPVerb.options: 'options', }; const _$ContentTypeEnumMap = { From 8177cbeeabec5294b699890e4cd1a17a82b42c12 Mon Sep 17 00:00:00 2001 From: Rio Jos <62337699+riojosdev@users.noreply.github.com> Date: Thu, 24 Apr 2025 15:28:55 +0530 Subject: [PATCH 3/7] tests for http options --- test/models/history_models.dart | 18 ++++++++++++++++++ test/models/history_models_test.dart | 8 ++++++++ test/models/http_request_models.dart | 6 ++++++ test/models/request_models.dart | 6 ++++++ test/models/response_model_test.dart | 17 +++++++++++++++++ 5 files changed, 55 insertions(+) diff --git a/test/models/history_models.dart b/test/models/history_models.dart index e33c2f99..68b2b45f 100644 --- a/test/models/history_models.dart +++ b/test/models/history_models.dart @@ -77,3 +77,21 @@ final Map historyRequestModelJson2 = { "httpRequestModel": httpRequestModelPost10Json, "httpResponseModel": responseModelJson, }; + +/// Basic History Meta model 1 +final historyMetaModel3 = HistoryMetaModel( + historyId: 'historyId3', + requestId: 'requestId3', + apiType: APIType.rest, + url: 'https://reqbin.com/echo/options', + method: HTTPVerb.options, + timeStamp: DateTime(2024, 1, 1), + responseStatus: 200, +); + +final historyRequestModel3 = HistoryRequestModel( + historyId: 'historyId3', + metaData: historyMetaModel3, + httpRequestModel: httpRequestModelOptions1, + httpResponseModel: responseModel, +); diff --git a/test/models/history_models_test.dart b/test/models/history_models_test.dart index 91a085e9..af13a055 100644 --- a/test/models/history_models_test.dart +++ b/test/models/history_models_test.dart @@ -75,5 +75,13 @@ void main() { expect(historyRequestModel.httpRequestModel, httpRequestModelGet4); expect(historyRequestModel.httpResponseModel, responseModel); }); + + test("Testing HistoryRequestModel getters", () { + var historyRequestModel = historyRequestModel3; + expect(historyRequestModel.historyId, 'historyId3'); + expect(historyRequestModel.metaData, historyMetaModel3); + expect(historyRequestModel.httpRequestModel, httpRequestModelOptions1); + expect(historyRequestModel.httpResponseModel, responseModel); + }); }); } diff --git a/test/models/http_request_models.dart b/test/models/http_request_models.dart index 30260983..10b84eda 100644 --- a/test/models/http_request_models.dart +++ b/test/models/http_request_models.dart @@ -466,3 +466,9 @@ const httpRequestModelPost13 = HttpRequestModel( "text": "I LOVE Flutter" }""", ); + +/// Basic OPTIONS request model +const httpRequestModelOptions1 = HttpRequestModel( + method: HTTPVerb.options, + url: 'https://reqbin.com/echo/options', +); diff --git a/test/models/request_models.dart b/test/models/request_models.dart index 9a6a91c7..74d11376 100644 --- a/test/models/request_models.dart +++ b/test/models/request_models.dart @@ -253,3 +253,9 @@ const requestModelPost13 = RequestModel( apiType: APIType.rest, httpRequestModel: httpRequestModelPost13, ); + +const requestModelOptions1 = RequestModel( + id: 'options1', + apiType: APIType.rest, + httpRequestModel: httpRequestModelOptions1, +); diff --git a/test/models/response_model_test.dart b/test/models/response_model_test.dart index 0060b13b..74872cdb 100644 --- a/test/models/response_model_test.dart +++ b/test/models/response_model_test.dart @@ -119,4 +119,21 @@ void main() { test('Testing hashcode', () { expect(responseModel.hashCode, greaterThan(0)); }); + + test('Testing fromResponse for OPTIONS method', () async { + var responseRec = await sendHttpRequest( + requestModelOptions1.id, + requestModelOptions1.apiType, + requestModelOptions1.httpRequestModel!, + defaultUriScheme: kDefaultUriScheme, + noSSL: false, + ); + + final responseData = responseModel.fromResponse(response: responseRec.$1!); + expect(responseData.statusCode, 200); + expect(responseData.headers?['access-control-allow-methods'], 'GET,POST,PUT,PATCH,DELETE,HEAD,OPTIONS'); + expect(responseData.headers?['access-control-allow-methods']?.contains("OPTIONS"), true); + expect(responseData.headers?['allow'], 'GET,POST,PUT,PATCH,DELETE,HEAD,OPTIONS'); + expect(responseData.headers?['allow']?.contains("OPTIONS"), true); + }); } From 7728d02b30faeedb9a206ccd4f6188a1f20f2301 Mon Sep 17 00:00:00 2001 From: Ankit Mahato Date: Sun, 27 Apr 2025 05:06:31 +0530 Subject: [PATCH 4/7] Update colors.dart --- packages/apidash_design_system/lib/tokens/colors.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/apidash_design_system/lib/tokens/colors.dart b/packages/apidash_design_system/lib/tokens/colors.dart index 22b6780c..7b203212 100644 --- a/packages/apidash_design_system/lib/tokens/colors.dart +++ b/packages/apidash_design_system/lib/tokens/colors.dart @@ -23,7 +23,7 @@ final kColorHttpMethodPost = Colors.blue.shade800; final kColorHttpMethodPut = Colors.amber.shade900; final kColorHttpMethodPatch = kColorHttpMethodPut; final kColorHttpMethodDelete = Colors.red.shade800; -final kColorHttpMethodOptions = Colors.yellow.shade800; +final kColorHttpMethodOptions = Colors.deepPurple.shade800; final kColorGQL = Colors.pink.shade600; From 897436bc70c5e198cfba07bc46e49be8f231f4f7 Mon Sep 17 00:00:00 2001 From: Ankit Mahato Date: Sun, 27 Apr 2025 05:08:39 +0530 Subject: [PATCH 5/7] Update http_service.dart --- packages/apidash_core/lib/services/http_service.dart | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/packages/apidash_core/lib/services/http_service.dart b/packages/apidash_core/lib/services/http_service.dart index 642ce89d..1b05976a 100644 --- a/packages/apidash_core/lib/services/http_service.dart +++ b/packages/apidash_core/lib/services/http_service.dart @@ -94,16 +94,6 @@ Future<(HttpResponse?, Duration?, String?)> sendHttpRequest( case HTTPVerb.put: case HTTPVerb.patch: case HTTPVerb.delete: - final request = prepareHttpRequest( - url: requestUrl, - method: requestModel.method.name.toUpperCase(), - headers: headers, - body: body, - overrideContentType: overrideContentType, - ); - final streamed = await client.send(request); - response = await http.Response.fromStream(streamed); - break; case HTTPVerb.options: final request = prepareHttpRequest( url: requestUrl, From f437b77973e01a3f58aa8129cd77e9d61a8728cc Mon Sep 17 00:00:00 2001 From: Ankit Mahato Date: Sun, 27 Apr 2025 05:13:42 +0530 Subject: [PATCH 6/7] Update history_models.dart --- test/models/history_models.dart | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/test/models/history_models.dart b/test/models/history_models.dart index 68b2b45f..e33c2f99 100644 --- a/test/models/history_models.dart +++ b/test/models/history_models.dart @@ -77,21 +77,3 @@ final Map historyRequestModelJson2 = { "httpRequestModel": httpRequestModelPost10Json, "httpResponseModel": responseModelJson, }; - -/// Basic History Meta model 1 -final historyMetaModel3 = HistoryMetaModel( - historyId: 'historyId3', - requestId: 'requestId3', - apiType: APIType.rest, - url: 'https://reqbin.com/echo/options', - method: HTTPVerb.options, - timeStamp: DateTime(2024, 1, 1), - responseStatus: 200, -); - -final historyRequestModel3 = HistoryRequestModel( - historyId: 'historyId3', - metaData: historyMetaModel3, - httpRequestModel: httpRequestModelOptions1, - httpResponseModel: responseModel, -); From 169d97b16674a9fd282d17d944b48c8b4e8bf6ed Mon Sep 17 00:00:00 2001 From: Ankit Mahato Date: Sun, 27 Apr 2025 05:13:48 +0530 Subject: [PATCH 7/7] Update history_models_test.dart --- test/models/history_models_test.dart | 8 -------- 1 file changed, 8 deletions(-) diff --git a/test/models/history_models_test.dart b/test/models/history_models_test.dart index af13a055..91a085e9 100644 --- a/test/models/history_models_test.dart +++ b/test/models/history_models_test.dart @@ -75,13 +75,5 @@ void main() { expect(historyRequestModel.httpRequestModel, httpRequestModelGet4); expect(historyRequestModel.httpResponseModel, responseModel); }); - - test("Testing HistoryRequestModel getters", () { - var historyRequestModel = historyRequestModel3; - expect(historyRequestModel.historyId, 'historyId3'); - expect(historyRequestModel.metaData, historyMetaModel3); - expect(historyRequestModel.httpRequestModel, httpRequestModelOptions1); - expect(historyRequestModel.httpResponseModel, responseModel); - }); }); }