diff --git a/lib/models/http_request_model.dart b/lib/models/http_request_model.dart new file mode 100644 index 00000000..3e4d6b42 --- /dev/null +++ b/lib/models/http_request_model.dart @@ -0,0 +1,68 @@ +import 'dart:io'; +import 'dart:convert'; +import 'package:freezed_annotation/freezed_annotation.dart'; +import '../utils/utils.dart' + show rowsToFormDataMapList, rowsToMap, getEnabledRows; +import '../consts.dart'; +import 'models.dart'; + +part 'http_request_model.freezed.dart'; + +part 'http_request_model.g.dart'; + +@freezed +class HttpRequestModel with _$HttpRequestModel { + const HttpRequestModel._(); + + @JsonSerializable(explicitToJson: true) + const factory HttpRequestModel({ + @Default(HTTPVerb.get) HTTPVerb method, + @Default("") String url, + List? headers, + List? params, + List? isHeaderEnabledList, + List? isParamEnabledList, + @Default(ContentType.json) ContentType bodyContentType, + String? body, + List? formData, + }) = _HttpRequestModel; + + factory HttpRequestModel.fromJson(Map json) => + _$HttpRequestModelFromJson(json); + + Map get headersMap => rowsToMap(headers) ?? {}; + Map get paramsMap => rowsToMap(params) ?? {}; + List? get enabledHeaders => + getEnabledRows(headers, isHeaderEnabledList); + List? get enabledParams => + getEnabledRows(params, isParamEnabledList); + + Map get enabledHeadersMap => rowsToMap(enabledHeaders) ?? {}; + Map get enabledParamsMap => rowsToMap(enabledParams) ?? {}; + + bool get hasContentTypeHeader => enabledHeadersMap.keys + .any((k) => k.toLowerCase() == HttpHeaders.contentTypeHeader); + bool get hasFormDataContentType => bodyContentType == ContentType.formdata; + bool get hasJsonContentType => bodyContentType == ContentType.json; + bool get hasTextContentType => bodyContentType == ContentType.text; + int get contentLength => utf8.encode(body ?? "").length; + bool get hasBody => hasJsonData || hasTextData || hasFormData; + bool get hasJsonData => + kMethodsWithBody.contains(method) && + hasJsonContentType && + contentLength > 0; + bool get hasTextData => + kMethodsWithBody.contains(method) && + hasTextContentType && + contentLength > 0; + bool get hasFormData => + kMethodsWithBody.contains(method) && + hasFormDataContentType && + formDataMapList.isNotEmpty; + List get formDataList => formData ?? []; + List> get formDataMapList => + rowsToFormDataMapList(formDataList) ?? []; + bool get hasFileInFormData => formDataList + .map((e) => e.type == FormDataType.file) + .any((element) => element); +} diff --git a/lib/models/http_request_model.freezed.dart b/lib/models/http_request_model.freezed.dart new file mode 100644 index 00000000..843b6286 --- /dev/null +++ b/lib/models/http_request_model.freezed.dart @@ -0,0 +1,381 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark + +part of 'http_request_model.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +T _$identity(T value) => value; + +final _privateConstructorUsedError = UnsupportedError( + 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models'); + +HttpRequestModel _$HttpRequestModelFromJson(Map json) { + return _HttpRequestModel.fromJson(json); +} + +/// @nodoc +mixin _$HttpRequestModel { + HTTPVerb get method => throw _privateConstructorUsedError; + String get url => throw _privateConstructorUsedError; + List? get headers => throw _privateConstructorUsedError; + List? get params => throw _privateConstructorUsedError; + List? get isHeaderEnabledList => throw _privateConstructorUsedError; + List? get isParamEnabledList => throw _privateConstructorUsedError; + ContentType get bodyContentType => throw _privateConstructorUsedError; + String? get body => throw _privateConstructorUsedError; + List? get formData => throw _privateConstructorUsedError; + + Map toJson() => throw _privateConstructorUsedError; + @JsonKey(ignore: true) + $HttpRequestModelCopyWith get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $HttpRequestModelCopyWith<$Res> { + factory $HttpRequestModelCopyWith( + HttpRequestModel value, $Res Function(HttpRequestModel) then) = + _$HttpRequestModelCopyWithImpl<$Res, HttpRequestModel>; + @useResult + $Res call( + {HTTPVerb method, + String url, + List? headers, + List? params, + List? isHeaderEnabledList, + List? isParamEnabledList, + ContentType bodyContentType, + String? body, + List? formData}); +} + +/// @nodoc +class _$HttpRequestModelCopyWithImpl<$Res, $Val extends HttpRequestModel> + implements $HttpRequestModelCopyWith<$Res> { + _$HttpRequestModelCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? method = null, + Object? url = null, + Object? headers = freezed, + Object? params = freezed, + Object? isHeaderEnabledList = freezed, + Object? isParamEnabledList = freezed, + Object? bodyContentType = null, + Object? body = freezed, + Object? formData = freezed, + }) { + return _then(_value.copyWith( + method: null == method + ? _value.method + : method // ignore: cast_nullable_to_non_nullable + as HTTPVerb, + url: null == url + ? _value.url + : url // ignore: cast_nullable_to_non_nullable + as String, + headers: freezed == headers + ? _value.headers + : headers // ignore: cast_nullable_to_non_nullable + as List?, + params: freezed == params + ? _value.params + : params // ignore: cast_nullable_to_non_nullable + as List?, + isHeaderEnabledList: freezed == isHeaderEnabledList + ? _value.isHeaderEnabledList + : isHeaderEnabledList // ignore: cast_nullable_to_non_nullable + as List?, + isParamEnabledList: freezed == isParamEnabledList + ? _value.isParamEnabledList + : isParamEnabledList // ignore: cast_nullable_to_non_nullable + as List?, + bodyContentType: null == bodyContentType + ? _value.bodyContentType + : bodyContentType // ignore: cast_nullable_to_non_nullable + as ContentType, + body: freezed == body + ? _value.body + : body // ignore: cast_nullable_to_non_nullable + as String?, + formData: freezed == formData + ? _value.formData + : formData // ignore: cast_nullable_to_non_nullable + as List?, + ) as $Val); + } +} + +/// @nodoc +abstract class _$$HttpRequestModelImplCopyWith<$Res> + implements $HttpRequestModelCopyWith<$Res> { + factory _$$HttpRequestModelImplCopyWith(_$HttpRequestModelImpl value, + $Res Function(_$HttpRequestModelImpl) then) = + __$$HttpRequestModelImplCopyWithImpl<$Res>; + @override + @useResult + $Res call( + {HTTPVerb method, + String url, + List? headers, + List? params, + List? isHeaderEnabledList, + List? isParamEnabledList, + ContentType bodyContentType, + String? body, + List? formData}); +} + +/// @nodoc +class __$$HttpRequestModelImplCopyWithImpl<$Res> + extends _$HttpRequestModelCopyWithImpl<$Res, _$HttpRequestModelImpl> + implements _$$HttpRequestModelImplCopyWith<$Res> { + __$$HttpRequestModelImplCopyWithImpl(_$HttpRequestModelImpl _value, + $Res Function(_$HttpRequestModelImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? method = null, + Object? url = null, + Object? headers = freezed, + Object? params = freezed, + Object? isHeaderEnabledList = freezed, + Object? isParamEnabledList = freezed, + Object? bodyContentType = null, + Object? body = freezed, + Object? formData = freezed, + }) { + return _then(_$HttpRequestModelImpl( + method: null == method + ? _value.method + : method // ignore: cast_nullable_to_non_nullable + as HTTPVerb, + url: null == url + ? _value.url + : url // ignore: cast_nullable_to_non_nullable + as String, + headers: freezed == headers + ? _value._headers + : headers // ignore: cast_nullable_to_non_nullable + as List?, + params: freezed == params + ? _value._params + : params // ignore: cast_nullable_to_non_nullable + as List?, + isHeaderEnabledList: freezed == isHeaderEnabledList + ? _value._isHeaderEnabledList + : isHeaderEnabledList // ignore: cast_nullable_to_non_nullable + as List?, + isParamEnabledList: freezed == isParamEnabledList + ? _value._isParamEnabledList + : isParamEnabledList // ignore: cast_nullable_to_non_nullable + as List?, + bodyContentType: null == bodyContentType + ? _value.bodyContentType + : bodyContentType // ignore: cast_nullable_to_non_nullable + as ContentType, + body: freezed == body + ? _value.body + : body // ignore: cast_nullable_to_non_nullable + as String?, + formData: freezed == formData + ? _value._formData + : formData // ignore: cast_nullable_to_non_nullable + as List?, + )); + } +} + +/// @nodoc + +@JsonSerializable(explicitToJson: true) +class _$HttpRequestModelImpl extends _HttpRequestModel { + const _$HttpRequestModelImpl( + {this.method = HTTPVerb.get, + this.url = "", + final List? headers, + final List? params, + final List? isHeaderEnabledList, + final List? isParamEnabledList, + this.bodyContentType = ContentType.json, + this.body, + final List? formData}) + : _headers = headers, + _params = params, + _isHeaderEnabledList = isHeaderEnabledList, + _isParamEnabledList = isParamEnabledList, + _formData = formData, + super._(); + + factory _$HttpRequestModelImpl.fromJson(Map json) => + _$$HttpRequestModelImplFromJson(json); + + @override + @JsonKey() + final HTTPVerb method; + @override + @JsonKey() + final String url; + final List? _headers; + @override + List? get headers { + final value = _headers; + if (value == null) return null; + if (_headers is EqualUnmodifiableListView) return _headers; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(value); + } + + final List? _params; + @override + List? get params { + final value = _params; + if (value == null) return null; + if (_params is EqualUnmodifiableListView) return _params; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(value); + } + + final List? _isHeaderEnabledList; + @override + List? get isHeaderEnabledList { + final value = _isHeaderEnabledList; + if (value == null) return null; + if (_isHeaderEnabledList is EqualUnmodifiableListView) + return _isHeaderEnabledList; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(value); + } + + final List? _isParamEnabledList; + @override + List? get isParamEnabledList { + final value = _isParamEnabledList; + if (value == null) return null; + if (_isParamEnabledList is EqualUnmodifiableListView) + return _isParamEnabledList; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(value); + } + + @override + @JsonKey() + final ContentType bodyContentType; + @override + final String? body; + final List? _formData; + @override + List? get formData { + final value = _formData; + if (value == null) return null; + if (_formData is EqualUnmodifiableListView) return _formData; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(value); + } + + @override + String toString() { + return 'HttpRequestModel(method: $method, url: $url, headers: $headers, params: $params, isHeaderEnabledList: $isHeaderEnabledList, isParamEnabledList: $isParamEnabledList, bodyContentType: $bodyContentType, body: $body, formData: $formData)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$HttpRequestModelImpl && + (identical(other.method, method) || other.method == method) && + (identical(other.url, url) || other.url == url) && + const DeepCollectionEquality().equals(other._headers, _headers) && + const DeepCollectionEquality().equals(other._params, _params) && + const DeepCollectionEquality() + .equals(other._isHeaderEnabledList, _isHeaderEnabledList) && + const DeepCollectionEquality() + .equals(other._isParamEnabledList, _isParamEnabledList) && + (identical(other.bodyContentType, bodyContentType) || + other.bodyContentType == bodyContentType) && + (identical(other.body, body) || other.body == body) && + const DeepCollectionEquality().equals(other._formData, _formData)); + } + + @JsonKey(ignore: true) + @override + int get hashCode => Object.hash( + runtimeType, + method, + url, + const DeepCollectionEquality().hash(_headers), + const DeepCollectionEquality().hash(_params), + const DeepCollectionEquality().hash(_isHeaderEnabledList), + const DeepCollectionEquality().hash(_isParamEnabledList), + bodyContentType, + body, + const DeepCollectionEquality().hash(_formData)); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$HttpRequestModelImplCopyWith<_$HttpRequestModelImpl> get copyWith => + __$$HttpRequestModelImplCopyWithImpl<_$HttpRequestModelImpl>( + this, _$identity); + + @override + Map toJson() { + return _$$HttpRequestModelImplToJson( + this, + ); + } +} + +abstract class _HttpRequestModel extends HttpRequestModel { + const factory _HttpRequestModel( + {final HTTPVerb method, + final String url, + final List? headers, + final List? params, + final List? isHeaderEnabledList, + final List? isParamEnabledList, + final ContentType bodyContentType, + final String? body, + final List? formData}) = _$HttpRequestModelImpl; + const _HttpRequestModel._() : super._(); + + factory _HttpRequestModel.fromJson(Map json) = + _$HttpRequestModelImpl.fromJson; + + @override + HTTPVerb get method; + @override + String get url; + @override + List? get headers; + @override + List? get params; + @override + List? get isHeaderEnabledList; + @override + List? get isParamEnabledList; + @override + ContentType get bodyContentType; + @override + String? get body; + @override + List? get formData; + @override + @JsonKey(ignore: true) + _$$HttpRequestModelImplCopyWith<_$HttpRequestModelImpl> get copyWith => + throw _privateConstructorUsedError; +} diff --git a/lib/models/http_request_model.g.dart b/lib/models/http_request_model.g.dart new file mode 100644 index 00000000..a3898ef8 --- /dev/null +++ b/lib/models/http_request_model.g.dart @@ -0,0 +1,63 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'http_request_model.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +_$HttpRequestModelImpl _$$HttpRequestModelImplFromJson( + Map json) => + _$HttpRequestModelImpl( + method: $enumDecodeNullable(_$HTTPVerbEnumMap, json['method']) ?? + HTTPVerb.get, + url: json['url'] as String? ?? "", + headers: (json['headers'] as List?) + ?.map((e) => NameValueModel.fromJson(e as Map)) + .toList(), + params: (json['params'] as List?) + ?.map((e) => NameValueModel.fromJson(e as Map)) + .toList(), + isHeaderEnabledList: (json['isHeaderEnabledList'] as List?) + ?.map((e) => e as bool) + .toList(), + isParamEnabledList: (json['isParamEnabledList'] as List?) + ?.map((e) => e as bool) + .toList(), + bodyContentType: + $enumDecodeNullable(_$ContentTypeEnumMap, json['bodyContentType']) ?? + ContentType.json, + body: json['body'] as String?, + formData: (json['formData'] as List?) + ?.map((e) => FormDataModel.fromJson(e as Map)) + .toList(), + ); + +Map _$$HttpRequestModelImplToJson( + _$HttpRequestModelImpl instance) => + { + 'method': _$HTTPVerbEnumMap[instance.method]!, + 'url': instance.url, + 'headers': instance.headers?.map((e) => e.toJson()).toList(), + 'params': instance.params?.map((e) => e.toJson()).toList(), + 'isHeaderEnabledList': instance.isHeaderEnabledList, + 'isParamEnabledList': instance.isParamEnabledList, + 'bodyContentType': _$ContentTypeEnumMap[instance.bodyContentType]!, + 'body': instance.body, + 'formData': instance.formData?.map((e) => e.toJson()).toList(), + }; + +const _$HTTPVerbEnumMap = { + HTTPVerb.get: 'get', + HTTPVerb.head: 'head', + HTTPVerb.post: 'post', + HTTPVerb.put: 'put', + HTTPVerb.patch: 'patch', + HTTPVerb.delete: 'delete', +}; + +const _$ContentTypeEnumMap = { + ContentType.json: 'json', + ContentType.text: 'text', + ContentType.formdata: 'formdata', +}; diff --git a/lib/models/models.dart b/lib/models/models.dart index 66d6f6ce..ab6caf76 100644 --- a/lib/models/models.dart +++ b/lib/models/models.dart @@ -1,5 +1,6 @@ +export 'form_data_model.dart'; +export 'http_request_model.dart'; export 'name_value_model.dart'; export 'request_model.dart'; export 'response_model.dart'; export 'settings_model.dart'; -export 'form_data_model.dart'; diff --git a/test/models/http_request_model_test.dart b/test/models/http_request_model_test.dart new file mode 100644 index 00000000..491f4803 --- /dev/null +++ b/test/models/http_request_model_test.dart @@ -0,0 +1,99 @@ +import 'package:test/test.dart'; +import 'package:apidash/models/models.dart'; +import 'package:apidash/consts.dart'; +import 'http_request_models.dart'; + +void main() { + Map requestModelAsJson = { + "method": 'post', + "url": 'https://api.apidash.dev/case/lower', + "headers": [ + {'name': 'User-Agent', 'value': 'Test Agent'}, + {'name': 'Content-Type', 'value': 'application/json; charset=utf-8'} + ], + 'params': [ + {'name': 'size', 'value': '2'}, + {'name': 'len', 'value': '3'} + ], + 'isHeaderEnabledList': [false, true], + 'isParamEnabledList': null, + "bodyContentType": 'json', + "body": '''{ +"text": "I LOVE Flutter" +}''', + 'formData': [ + {'name': 'token', 'value': 'xyz', 'type': 'text'}, + {'name': 'imfile', 'value': '/Documents/up/1.png', 'type': 'file'} + ], + }; + + test('Testing copyWith', () { + var httpRequestModel = requestModelPost10; + final httpRequestModelcopyWith = + httpRequestModel.copyWith(url: 'https://apidash.dev'); + expect(httpRequestModelcopyWith.url, 'https://apidash.dev'); + // original model unchanged + expect(httpRequestModel.url, 'https://api.apidash.dev/case/lower'); + }); + + test('Testing toJson', () { + var httpRequestModel = requestModelPost10; + expect(httpRequestModel.toJson(), requestModelAsJson); + }); + + test('Testing fromJson', () { + var httpRequestModel = requestModelPost10; + final modelFromJson = HttpRequestModel.fromJson(requestModelAsJson); + expect(modelFromJson, httpRequestModel); + expect(modelFromJson.params, const [ + NameValueModel(name: 'size', value: '2'), + NameValueModel(name: 'len', value: '3'), + ]); + }); + + test('Testing getters', () { + var httpRequestModel = requestModelPost10; + expect(httpRequestModel.headersMap, { + 'User-Agent': 'Test Agent', + 'Content-Type': 'application/json; charset=utf-8' + }); + expect(httpRequestModel.paramsMap, {'size': '2', 'len': '3'}); + expect(httpRequestModel.enabledHeaders, const [ + NameValueModel( + name: 'Content-Type', value: 'application/json; charset=utf-8') + ]); + expect(httpRequestModel.enabledParams, const [ + NameValueModel(name: 'size', value: '2'), + NameValueModel(name: 'len', value: '3'), + ]); + expect(httpRequestModel.enabledHeadersMap, + {'Content-Type': 'application/json; charset=utf-8'}); + expect(httpRequestModel.enabledParamsMap, {'size': '2', 'len': '3'}); + expect(httpRequestModel.hasContentTypeHeader, true); + + expect(httpRequestModel.hasFormDataContentType, false); + expect(httpRequestModel.hasJsonContentType, true); + expect(httpRequestModel.hasTextContentType, false); + expect(httpRequestModel.hasFormData, false); + + expect(httpRequestModel.hasJsonData, true); + expect(httpRequestModel.hasTextData, false); + expect(httpRequestModel.hasFormData, false); + + httpRequestModel = + httpRequestModel.copyWith(bodyContentType: ContentType.formdata); + expect(httpRequestModel.hasFormData, true); + expect(httpRequestModel.formDataList, const [ + FormDataModel(name: "token", value: "xyz", type: FormDataType.text), + FormDataModel( + name: "imfile", + value: "/Documents/up/1.png", + type: FormDataType.file), + ]); + expect(httpRequestModel.formDataMapList, [ + {'name': 'token', 'value': 'xyz', 'type': 'text'}, + {'name': 'imfile', 'value': '/Documents/up/1.png', 'type': 'file'} + ]); + expect(httpRequestModel.hasFileInFormData, true); + }); +} diff --git a/test/models/http_request_models.dart b/test/models/http_request_models.dart new file mode 100644 index 00000000..71fefd2d --- /dev/null +++ b/test/models/http_request_models.dart @@ -0,0 +1,374 @@ +import 'package:apidash/models/models.dart' + show FormDataModel, NameValueModel, HttpRequestModel; +import 'package:apidash/consts.dart'; + +/// Basic GET request model +const requestModelGet1 = HttpRequestModel( + method: HTTPVerb.get, + url: 'https://api.apidash.dev', +); + +/// GET request model with query params +const requestModelGet2 = HttpRequestModel( + method: HTTPVerb.get, + url: 'https://api.apidash.dev/country/data', + params: [ + NameValueModel(name: 'code', value: 'US'), + ], +); + +/// GET request model with override query params +const requestModelGet3 = HttpRequestModel( + url: 'https://api.apidash.dev/country/data?code=US', + method: HTTPVerb.get, + params: [ + NameValueModel(name: 'code', value: 'IND'), + ], +); + +/// GET request model with different types of query params +const requestModelGet4 = HttpRequestModel( + method: HTTPVerb.get, + url: 'https://api.apidash.dev/humanize/social', + params: [ + NameValueModel(name: 'num', value: '8700000'), + NameValueModel(name: 'digits', value: '3'), + NameValueModel(name: 'system', value: 'SS'), + NameValueModel(name: 'add_space', value: 'true'), + NameValueModel(name: 'trailing_zeros', value: 'true'), + ], +); + +/// GET request model with headers +const requestModelGet5 = HttpRequestModel( + method: HTTPVerb.get, + url: 'https://api.github.com/repos/foss42/apidash', + headers: [ + NameValueModel(name: 'User-Agent', value: 'Test Agent'), + ], +); + +/// GET request model with headers & query params +const requestModelGet6 = HttpRequestModel( + method: HTTPVerb.get, + url: 'https://api.github.com/repos/foss42/apidash', + headers: [ + NameValueModel(name: 'User-Agent', value: 'Test Agent'), + ], + params: [ + NameValueModel(name: 'raw', value: 'true'), + ], +); + +/// GET request model with body +const requestModelGet7 = HttpRequestModel( + method: HTTPVerb.get, + url: 'https://api.apidash.dev', + bodyContentType: ContentType.text, + body: 'This is a random text which should not be attached with a GET request', +); + +/// GET request model with empty header & query param name +const requestModelGet8 = HttpRequestModel( + method: HTTPVerb.get, + url: 'https://api.github.com/repos/foss42/apidash', + headers: [ + NameValueModel(name: 'User-Agent', value: 'Test Agent'), + NameValueModel(name: '', value: 'Bearer XYZ'), + ], + params: [ + NameValueModel(name: 'raw', value: 'true'), + NameValueModel(name: '', value: 'true'), + ], +); + +/// GET request model with some params enabled +const requestModelGet9 = HttpRequestModel( + method: HTTPVerb.get, + url: 'https://api.apidash.dev/humanize/social', + params: [ + NameValueModel(name: 'num', value: '8700000'), + NameValueModel(name: 'digits', value: '3'), + NameValueModel(name: 'system', value: 'SS'), + NameValueModel(name: 'add_space', value: 'true'), + ], + isParamEnabledList: [ + true, + false, + false, + true, + ], +); + +/// GET Request model with some headers enabled +const requestModelGet10 = HttpRequestModel( + method: HTTPVerb.get, + url: 'https://api.apidash.dev/humanize/social', + headers: [ + NameValueModel(name: 'User-Agent', value: 'Test Agent'), + NameValueModel(name: 'Content-Type', value: 'application/json'), + ], + isHeaderEnabledList: [ + true, + false, + ], +); + +/// GET Request model with some headers & URL parameters enabled +const requestModelGet11 = HttpRequestModel( + method: HTTPVerb.get, + url: 'https://api.apidash.dev/humanize/social', + params: [ + NameValueModel(name: 'num', value: '8700000'), + NameValueModel(name: 'digits', value: '3'), + NameValueModel(name: 'system', value: 'SS'), + NameValueModel(name: 'add_space', value: 'true'), + ], + headers: [ + NameValueModel(name: 'User-Agent', value: 'Test Agent'), + NameValueModel(name: 'Content-Type', value: 'application/json'), + ], + isParamEnabledList: [ + true, + true, + false, + false, + ], + isHeaderEnabledList: [ + true, + false, + ], +); + +/// Request model with all headers & URL parameters disabled +const requestModelGet12 = HttpRequestModel( + method: HTTPVerb.get, + url: 'https://api.apidash.dev/humanize/social', + params: [ + NameValueModel(name: 'num', value: '8700000'), + NameValueModel(name: 'digits', value: '3'), + NameValueModel(name: 'system', value: 'SS'), + NameValueModel(name: 'add_space', value: 'true'), + ], + headers: [ + NameValueModel(name: 'User-Agent', value: 'Test Agent'), + NameValueModel(name: 'Content-Type', value: 'application/json'), + ], + isParamEnabledList: [ + false, + false, + false, + false, + ], + isHeaderEnabledList: [ + false, + false, + ], +); + +/// Basic HEAD request model +const requestModelHead1 = HttpRequestModel( + method: HTTPVerb.head, + url: 'https://api.apidash.dev', +); + +/// Without URI Scheme (pass default as http) +const requestModelHead2 = HttpRequestModel( + method: HTTPVerb.head, + url: 'api.apidash.dev', +); + +/// Basic POST request model (txt body) +const requestModelPost1 = HttpRequestModel( + method: HTTPVerb.post, + url: 'https://api.apidash.dev/case/lower', + body: r"""{ +"text": "I LOVE Flutter" +}""", + bodyContentType: ContentType.text, +); + +/// POST request model with JSON body +const requestModelPost2 = HttpRequestModel( + method: HTTPVerb.post, + url: 'https://api.apidash.dev/case/lower', + body: r"""{ +"text": "I LOVE Flutter", +"flag": null, +"male": true, +"female": false, +"no": 1.2, +"arr": ["null", "true", "false", null] +}""", +); + +/// POST request model with headers +const requestModelPost3 = HttpRequestModel( + method: HTTPVerb.post, + url: 'https://api.apidash.dev/case/lower', + body: r"""{ +"text": "I LOVE Flutter" +}""", + bodyContentType: ContentType.json, + headers: [ + NameValueModel(name: 'User-Agent', value: 'Test Agent'), + ], +); + +/// POST request model with multipart body(text) +const requestModelPost4 = HttpRequestModel( + method: HTTPVerb.post, + url: 'https://api.apidash.dev/io/form', + bodyContentType: ContentType.formdata, + formData: [ + FormDataModel(name: "text", value: "API", type: FormDataType.text), + FormDataModel(name: "sep", value: "|", type: FormDataType.text), + FormDataModel(name: "times", value: "3", type: FormDataType.text), + ], +); + +/// POST request model with multipart body and headers +const requestModelPost5 = HttpRequestModel( + method: HTTPVerb.post, + url: 'https://api.apidash.dev/io/form', + headers: [ + NameValueModel(name: 'User-Agent', value: 'Test Agent'), + ], + bodyContentType: ContentType.formdata, + formData: [ + FormDataModel(name: "text", value: "API", type: FormDataType.text), + FormDataModel(name: "sep", value: "|", type: FormDataType.text), + FormDataModel(name: "times", value: "3", type: FormDataType.text), + ], +); + +/// POST request model with multipart body(text, file) +const requestModelPost6 = HttpRequestModel( + method: HTTPVerb.post, + url: 'https://api.apidash.dev/io/img', + bodyContentType: ContentType.formdata, + formData: [ + FormDataModel(name: "token", value: "xyz", type: FormDataType.text), + FormDataModel( + name: "imfile", value: "/Documents/up/1.png", type: FormDataType.file), + ], +); + +/// POST request model with multipart body and requestBody (the requestBody shouldn't be in codegen) +const requestModelPost7 = HttpRequestModel( + method: HTTPVerb.post, + url: 'https://api.apidash.dev/io/img', + bodyContentType: ContentType.formdata, + body: r"""{ +"text": "I LOVE Flutter" +}""", + formData: [ + FormDataModel(name: "token", value: "xyz", type: FormDataType.text), + FormDataModel( + name: "imfile", value: "/Documents/up/1.png", type: FormDataType.file), + ], +); + +/// POST request model with multipart body and requestParams +const requestModelPost8 = HttpRequestModel( + method: HTTPVerb.post, + url: 'https://api.apidash.dev/io/form', + params: [ + NameValueModel(name: 'size', value: '2'), + NameValueModel(name: 'len', value: '3'), + ], + bodyContentType: ContentType.formdata, + formData: [ + FormDataModel(name: "text", value: "API", type: FormDataType.text), + FormDataModel(name: "sep", value: "|", type: FormDataType.text), + FormDataModel(name: "times", value: "3", type: FormDataType.text), + ], +); + +/// POST request model with multipart body(file and text), requestParams, requestHeaders and requestBody +const requestModelPost9 = HttpRequestModel( + method: HTTPVerb.post, + url: 'https://api.apidash.dev/io/img', + headers: [ + NameValueModel(name: 'User-Agent', value: 'Test Agent'), + NameValueModel(name: 'Keep-Alive', value: 'true'), + ], + params: [ + NameValueModel(name: 'size', value: '2'), + NameValueModel(name: 'len', value: '3'), + ], + bodyContentType: ContentType.formdata, + body: r"""{ +"text": "I LOVE Flutter" +}""", + formData: [ + FormDataModel(name: "token", value: "xyz", type: FormDataType.text), + FormDataModel( + name: "imfile", value: "/Documents/up/1.png", type: FormDataType.file), + ], +); + +/// POST request model with content type override and all other params +const requestModelPost10 = HttpRequestModel( + method: HTTPVerb.post, + url: 'https://api.apidash.dev/case/lower', + headers: [ + NameValueModel(name: 'User-Agent', value: 'Test Agent'), + NameValueModel( + name: 'Content-Type', value: 'application/json; charset=utf-8'), + ], + params: [ + NameValueModel(name: 'size', value: '2'), + NameValueModel(name: 'len', value: '3'), + ], + isHeaderEnabledList: [false, true], + isParamEnabledList: null, + bodyContentType: ContentType.json, + body: r"""{ +"text": "I LOVE Flutter" +}""", + formData: [ + FormDataModel(name: "token", value: "xyz", type: FormDataType.text), + FormDataModel( + name: "imfile", value: "/Documents/up/1.png", type: FormDataType.file), + ], +); + +/// PUT request model +const requestModelPut1 = HttpRequestModel( + method: HTTPVerb.put, + url: 'https://reqres.in/api/users/2', + bodyContentType: ContentType.json, + body: r"""{ +"name": "morpheus", +"job": "zion resident" +}""", +); + +/// PATCH request model +const requestModelPatch1 = HttpRequestModel( + method: HTTPVerb.patch, + url: 'https://reqres.in/api/users/2', + bodyContentType: ContentType.json, + body: r"""{ +"name": "marfeus", +"job": "accountant" +}""", +); + +/// Basic DELETE request model +const requestModelDelete1 = HttpRequestModel( + method: HTTPVerb.delete, + url: 'https://reqres.in/api/users/2', +); + +/// Basic DELETE with body +const requestModelDelete2 = HttpRequestModel( + method: HTTPVerb.delete, + url: 'https://reqres.in/api/users/2', + bodyContentType: ContentType.json, + body: r"""{ +"name": "marfeus", +"job": "accountant" +}""", +);