diff --git a/doc/dev_guide/api_endpoints_for_testing.md b/doc/dev_guide/api_endpoints_for_testing.md index 7f2e9556..5e0c1378 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 +- https://reqbin.com/echo/options + #### 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/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/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/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 = { diff --git a/packages/apidash_core/lib/services/http_service.dart b/packages/apidash_core/lib/services/http_service.dart index dbd93086..1b05976a 100644 --- a/packages/apidash_core/lib/services/http_service.dart +++ b/packages/apidash_core/lib/services/http_service.dart @@ -94,6 +94,7 @@ Future<(HttpResponse?, Duration?, String?)> sendHttpRequest( case HTTPVerb.put: case HTTPVerb.patch: case HTTPVerb.delete: + case HTTPVerb.options: final request = prepareHttpRequest( url: requestUrl, method: requestModel.method.name.toUpperCase(), diff --git a/packages/apidash_design_system/lib/tokens/colors.dart b/packages/apidash_design_system/lib/tokens/colors.dart index 11943bd3..7b203212 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.deepPurple.shade800; final kColorGQL = Colors.pink.shade600; 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); + }); }