fix: testcases and dart dio codegen

This commit is contained in:
Nishant Kumar
2024-03-12 23:57:42 +05:30
parent faed5cd624
commit f495d7b233
2 changed files with 339 additions and 5 deletions

View File

@ -55,12 +55,12 @@ class DartDioCodeGen {
final List<Map<String,String>> formDataList = ${json.encode(formData)};
for (var formField in formDataList) {
if (formField['type'] == 'file') {
formData.files.add(MapEntry(
data.files.add(MapEntry(
formField['name'],
await MultipartFile.fromFile(formField['value'], filename: formField['value']),
));
} else {
formData.fields.add(MapEntry(formField['name'], formField['value']));
data.fields.add(MapEntry(formField['name'], formField['value']));
}
}
''');
@ -79,11 +79,11 @@ class DartDioCodeGen {
dataExp = declareFinal('data').assign(strContent);
// when add new type of [ContentType], need update [dataExp].
case ContentType.formdata:
dataExp = declareFinal('data').assign(refer('FormData()'));
dataExp = declareFinal('data').assign(refer('dio.FormData()'));
}
}
final responseExp = declareFinal('response').assign(InvokeExpression.newOf(
refer('dio.Dio'),
refer('dio.Dio()'),
[literalString(url)],
{
if (queryParamExp != null) 'queryParameters': refer('queryParams'),

View File

@ -486,8 +486,342 @@ void main() async {
codeGen.getCode(CodegenLanguage.dartDio, requestModelPost3, "https"),
expectedCode);
});
test('POST 4', () {
const expectedCode = r"""import 'package:dio/dio.dart' as dio;
void main() async {
try {
final queryParams = {
'size': '2',
'len': '3',
};
final data = dio.FormData();
final List<Map<String, String>> formDataList = [
{"name": "token", "value": "xyz", "type": "text"},
{"name": "sep", "value": "|", "type": "text"},
{"name": "times", "value": "3", "type": "text"}
];
for (var formField in formDataList) {
if (formField['type'] == 'file') {
data.files.add(MapEntry(
formField['name'],
await MultipartFile.fromFile(formField['value'],
filename: formField['value']),
));
} else {
data.fields
.add(MapEntry(formField['name'], formField['value']));
}
}
final response = await dio.Dio().post(
'https://api.apidash.dev/io/form',
queryParameters: queryParams,
options: Options(headers: headers),
data: data,
);
print(response.statusCode);
print(response.data);
} on DioException catch (e, s) {
print(e.response?.statusCode);
print(e.response?.data);
print(s);
} catch (e, s) {
print(e);
print(s);
}
}
""";
expect(
codeGen.getCode(
CodegenLanguage.pythonRequests, requestModelPost4, "https"),
expectedCode);
});
test('POST 5', () {
const expectedCode = r"""import 'package:dio/dio.dart' as dio;
void main() async {
try {
final queryParams = {
'size': '2',
'len': '3',
};
final headers = {
'User-Agent': 'Test Agent',
'Keep-Alive': 'true',
};
final data = dio.FormData();
final List<Map<String, String>> formDataList = [
{"name": "token", "value": "xyz", "type": "text"},
{"name": "sep", "value": "|", "type": "text"},
{"name": "times", "value": "3", "type": "text"}
];
for (var formField in formDataList) {
if (formField['type'] == 'file') {
data.files.add(MapEntry(
formField['name'],
await MultipartFile.fromFile(formField['value'],
filename: formField['value']),
));
} else {
data.fields
.add(MapEntry(formField['name'], formField['value']));
}
}
final response = await dio.Dio().post(
'https://api.apidash.dev/io/form',
queryParameters: queryParams,
options: Options(headers: headers),
data: data,
);
print(response.statusCode);
print(response.data);
} on DioException catch (e, s) {
print(e.response?.statusCode);
print(e.response?.data);
print(s);
} catch (e, s) {
print(e);
print(s);
}
}
""";
expect(
codeGen.getCode(
CodegenLanguage.pythonRequests, requestModelPost5, "https"),
expectedCode);
});
test('POST 6', () {
const expectedCode = r"""iimport 'package:dio/dio.dart' as dio;
void main() async {
try {
final queryParams = {
'size': '2',
'len': '3',
};
final data = dio.FormData();
final List<Map<String, String>> formDataList = [
{"name": "token", "value": "xyz", "type": "text"},
{
"name": "imfile",
"value":
"/Desktop/mp.jpg",
"type": "file"
}
];
for (var formField in formDataList) {
if (formField['type'] == 'file') {
data.files.add(MapEntry(
formField['name'],
await MultipartFile.fromFile(formField['value'],
filename: formField['value']),
));
} else {
data.fields
.add(MapEntry(formField['name'], formField['value']));
}
}
final response = await dio.Dio().post(
'https://api.apidash.dev/io/img',
queryParameters: queryParams,
options: Options(headers: headers),
data: data,
);
print(response.statusCode);
print(response.data);
} on DioException catch (e, s) {
print(e.response?.statusCode);
print(e.response?.data);
print(s);
} catch (e, s) {
print(e);
print(s);
}
}
""";
expect(
codeGen.getCode(
CodegenLanguage.pythonRequests, requestModelPost6, "https"),
expectedCode);
});
test('POST 7', () {
const expectedCode = r"""import 'package:dio/dio.dart' as dio;
void main() async {
try {
final queryParams = {
'size': '2',
'len': '3',
};
final data = dio.FormData();
final List<Map<String, String>> formDataList = [
{"name": "token", "value": "xyz", "type": "text"},
{
"name": "imfile",
"value":
"/Desktop/mp.jpg",
"type": "file"
}
];
for (var formField in formDataList) {
if (formField['type'] == 'file') {
data.files.add(MapEntry(
formField['name'],
await MultipartFile.fromFile(formField['value'],
filename: formField['value']),
));
} else {
data.fields
.add(MapEntry(formField['name'], formField['value']));
}
}
final response = await dio.Dio().post(
'https://api.apidash.dev/io/img',
queryParameters: queryParams,
options: Options(headers: headers),
data: data,
);
print(response.statusCode);
print(response.data);
} on DioException catch (e, s) {
print(e.response?.statusCode);
print(e.response?.data);
print(s);
} catch (e, s) {
print(e);
print(s);
}
}
""";
expect(
codeGen.getCode(
CodegenLanguage.pythonRequests, requestModelPost7, "https"),
expectedCode);
});
test('POST 8', () {
const expectedCode = r"""import 'package:dio/dio.dart' as dio;
void main() async {
try {
final queryParams = {
'size': '2',
'len': '3',
};
final headers = {
'User-Agent': 'Test Agent',
'Keep-Alive': 'true',
};
final data = dio.FormData();
final List<Map<String, String>> formDataList = [
{"name": "token", "value": "xyz", "type": "text"},
{"name": "sep", "value": "|", "type": "text"},
{"name": "times", "value": "3", "type": "text"}
];
for (var formField in formDataList) {
if (formField['type'] == 'file') {
data.files.add(MapEntry(
formField['name'],
await MultipartFile.fromFile(formField['value'],
filename: formField['value']),
));
} else {
data.fields
.add(MapEntry(formField['name'], formField['value']));
}
}
final response = await dio.Dio().post(
'https://api.apidash.dev/io/form',
queryParameters: queryParams,
options: Options(headers: headers),
data: data,
);
print(response.statusCode);
print(response.data);
} on DioException catch (e, s) {
print(e.response?.statusCode);
print(e.response?.data);
print(s);
} catch (e, s) {
print(e);
print(s);
}
}
""";
expect(
codeGen.getCode(
CodegenLanguage.pythonRequests, requestModelPost8, "https"),
expectedCode);
});
test('POST 9', () {
const expectedCode = r"""import 'package:dio/dio.dart' as dio;
void main() async {
try {
final queryParams = {
'size': '2',
'len': '3',
};
final headers = {
'User-Agent': 'Test Agent',
'Keep-Alive': 'true',
};
final data = dio.FormData();
final List<Map<String, String>> formDataList = [
{"name": "token", "value": "xyz", "type": "text"},
{
"name": "imfile",
"value":
"/Desktop/mp.jpg",
"type": "file"
}
];
for (var formField in formDataList) {
if (formField['type'] == 'file') {
data.files.add(MapEntry(
formField['name'],
await MultipartFile.fromFile(formField['value'],
filename: formField['value']),
));
} else {
data.fields
.add(MapEntry(formField['name'], formField['value']));
}
}
final response = await dio.Dio().post(
'https://api.apidash.dev/io/img',
queryParameters: queryParams,
options: Options(headers: headers),
data: data,
);
print(response.statusCode);
print(response.data);
} on DioException catch (e, s) {
print(e.response?.statusCode);
print(e.response?.data);
print(s);
} catch (e, s) {
print(e);
print(s);
}
}
""";
expect(
codeGen.getCode(
CodegenLanguage.pythonRequests, requestModelPost9, "https"),
expectedCode);
});
});
group('PUT Request', () {
test('PUT 1', () {
const expectedCode = r"""import 'package:dio/dio.dart' as dio;