Merge pull request #377 from AcousticDeveloper/resolve-issue-375

Validated CodeGen for PHP (cURL)
This commit is contained in:
Ankit Mahato
2024-04-07 00:31:37 +05:30
committed by GitHub
3 changed files with 1016 additions and 278 deletions

View File

@ -1,175 +1,100 @@
import 'dart:convert';
import 'package:jinja/jinja.dart' as jj; import 'package:jinja/jinja.dart' as jj;
import 'package:apidash/utils/utils.dart' import 'package:apidash/utils/utils.dart'
show getNewUuid, getValidRequestUri, requestModelToHARJsonRequest; show getValidRequestUri, stripUriParams;
import 'package:apidash/models/models.dart' show RequestModel; import 'package:apidash/models/models.dart' show RequestModel;
import 'package:apidash/consts.dart'; import 'package:apidash/consts.dart';
class PHPcURLCodeGen { class PHPcURLCodeGen {
final String kTemplateStart = """ final String kTemplateStart = r'''
<?php <?php
""";
final String kTemplateUri = """ ''';
\$uri = "{{uri}}";
"""; final String kTemplateUri = r'''
$uri = '{{uri}}';
''';
String kTemplateBody = r'''
{%- if body is iterable -%}
$request_body = [
{%- for data in body %}
{%- if data.type == 'text' %}
'{{ data.name }}' => '{{ data.value }}',
{%- elif data.type == 'file' %}
'{{ data.name }}' => new CURLFILE('{{ data.value }}'),
{%- endif %}
{%- endfor %}
];
{%- else -%}
$request_body = '{{body}}';
{%- endif %}
''';
//defining query parameters //defining query parameters
String kTemplateParams = """ String kTemplateParams = r'''
$queryParams = [
{%- for name, value in params %}
'{{ name }}' => '{{ value }}',
{%- endfor %}
];
$uri .= '?' . http_build_query($queryParams);
\$queryParams = [{{params}}];
\$queryString = "?" . http_build_query(\$queryParams);
if (count(\$queryParams) > 0) {
\$uri .= \$queryString;
}
"""; ''';
//specifying headers
String kTemplateHeaders = r'''
$headers = [
{%- for name, value in headers %}
'{{ name }}: {{ value }}',
{%- endfor %}
];
''';
//initialising the request //initialising the request
String kTemplateRequestInit = """ String kStringRequestInit = r'''
$request = curl_init($uri);
\$request = curl_init(\$uri); ''';
"""; String kTemplateRequestOptsInit = r'''
curl_setopt_array($request, [
String kTemplateBody = """ CURLOPT_RETURNTRANSFER => 1,
CURLOPT_CUSTOMREQUEST => '{{ method|upper }}',
\$request_body = <<<EOF
{{body}}
EOF;
""";
//specifying headers
String kTemplateHeaders = """
\$headers = [{{headers}}];
curl_setopt(\$request, CURLOPT_HTTPHEADER, \$headers);
""";
String kTemplateFormHeaderContentType = '''
multipart/form-data; boundary={{boundary}}''';
String kTemplateRequest = """
curl_setopt(\$request, CURLOPT_RETURNTRANSFER, 1);
curl_setopt(\$request, {{method}}, 1);
""";
''';
String kStringHeaderOpt = r'''
CURLOPT_HTTPHEADER => $headers,
''';
//passing the request body //passing the request body
String kStringRequestBody = """ String kStringRequestBodyOpt = r'''
curl_setopt(\$request, CURLOPT_POSTFIELDS, \$request_body); CURLOPT_POSTFIELDS => $request_body,
''';
""";
//ending template //ending template
final String kStringRequestEnd = """ final String kStringRequestEnd = r'''
\$response = curl_exec(\$request); CURLOPT_FOLLOWLOCATION => true,
curl_close(\$request); ]);
var_dump(\$response);
"""; $response = curl_exec($request);
//template for generating unique boundary curl_close($request);
String kBoundaryUniqueIdTemplate = """
\$boundary = "{{uuid}}";
"""; $httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE);
echo "Status Code: " . $httpCode . "\n";
// echo $response . "\n";
String kFileClassString = """ ''';
class File
{
public string \$name;
public string \$filename;
public string \$content;
function __construct(\$name, \$filename)
{
\$this->name = \$name;
\$this->filename = \$filename;
\$available_content = file_get_contents(\$this->filename);
\$this->content = \$available_content ? \$available_content : "";
}
}
""";
//function to build formdata without 'file' type
String kBuildFormDataFunctionWithoutFilesString = """
function build_data(\$boundary, \$fields)
{
\$data = '';
\$eol = "\\r\\n";
\$delimiter = '-------------' . \$boundary;
foreach (\$fields as \$name => \$content) {
\$data .= "--" . \$delimiter . \$eol
. 'Content-Disposition: form-data; name="' . \$name . "\\"" . \$eol . \$eol
. \$content . \$eol;
}
\$data .= "--" . \$delimiter . "--" . \$eol;
return \$data;
}
""";
//function to build formdata with 'file' type
String kBuildFormDataFunctionWithFilesString = """
function build_data_files(\$boundary, \$fields, \$files)
{
\$data = '';
\$eol = "\\r\\n";
\$delimiter = '-------------' . \$boundary;
foreach (\$fields as \$name => \$content) {
\$data .= "--" . \$delimiter . \$eol
. 'Content-Disposition: form-data; name="' . \$name . "\\"" . \$eol . \$eol
. \$content . \$eol;
}
foreach (\$files as \$uploaded_file) {
if (\$uploaded_file instanceof File) {
\$data .= "--" . \$delimiter . \$eol
. 'Content-Disposition: form-data; name="' . \$uploaded_file->name . '"; filename="' . \$uploaded_file->filename . '"' . \$eol
. 'Content-Transfer-Encoding: binary' . \$eol;
\$data .= \$eol;
\$data .= \$uploaded_file->content . \$eol;
}
}
\$data .= "--" . \$delimiter . "--" . \$eol;
return \$data;
}
""";
//
String kMultiPartBodyWithFiles = """
\$request_body = build_data_files(\$boundary, \$fields, \$files);
""";
//
String kMultiPartBodyWithoutFiles = """
\$request_body = build_data(\$boundary, \$fields);
""";
String? getCode(RequestModel requestModel) { String? getCode(RequestModel requestModel) {
String uuid = getNewUuid();
uuid = uuid.replaceAll(RegExp(r'-'), "");
try { try {
String result = ""; String result = "";
bool hasQuery = false;
bool hasBody = false; bool hasBody = false;
var rec = getValidRequestUri( var rec = getValidRequestUri(
@ -184,131 +109,55 @@ function build_data_files(\$boundary, \$fields, \$files)
var templateStart = jj.Template(kTemplateStart); var templateStart = jj.Template(kTemplateStart);
result += templateStart.render(); result += templateStart.render();
// if the request does not contain any file uploads, we do not need
// to add the class for File in the request
if (requestModel.hasFileInFormData) {
result += kFileClassString;
}
//adds the function to build formdata with or without 'file' type
if (requestModel.hasFormData) {
result += requestModel.hasFileInFormData
? kBuildFormDataFunctionWithFilesString
: kBuildFormDataFunctionWithoutFilesString;
}
var templateUri = jj.Template(kTemplateUri); var templateUri = jj.Template(kTemplateUri);
result += templateUri.render({"uri": requestModel.url}); result += templateUri.render({'uri': stripUriParams(uri)});
//renders the request body contains the HTTP method associated with the request
if (requestModel.hasBody) {
hasBody = true;
// contains the entire request body as a string if body is present
var templateBody = jj.Template(kTemplateBody);
result += templateBody.render({
'body': requestModel.hasFormData
? requestModel.formDataMapList
: requestModel.requestBody,
});
}
//checking and adding query params //checking and adding query params
if (uri.hasQuery) { if (uri.hasQuery) {
var params = uri.queryParameters; if (requestModel.enabledParamsMap.isNotEmpty) {
if (params.isNotEmpty) {
hasQuery = true;
var templateParams = jj.Template(kTemplateParams); var templateParams = jj.Template(kTemplateParams);
result += templateParams
// generating the map of key and value for the query parameters .render({"params": requestModel.enabledParamsMap});
List<String> queryList = [];
for (MapEntry<String, String> entry in params.entries) {
String entryStr = "\"${entry.key}\" => \"${entry.value}\"";
queryList.add(entryStr);
} }
String paramsString = "\n ${queryList.join(",\n ")}\n";
result += templateParams.render({"params": paramsString});
} }
var headers = requestModel.enabledHeadersMap;
if (requestModel.hasBody && !requestModel.hasContentTypeHeader) {
if (requestModel.hasJsonData || requestModel.hasTextData) {
headers[kHeaderContentType] =
requestModel.requestBodyContentType.header;
}
}
if (headers.isNotEmpty) {
var templateHeader = jj.Template(kTemplateHeaders);
result += templateHeader.render({'headers': headers});
} }
// renders the initial request init function call // renders the initial request init function call
var templateRequestInit = jj.Template(kTemplateRequestInit); result += kStringRequestInit;
result += templateRequestInit.render();
var harJson =
requestModelToHARJsonRequest(requestModel, useEnabled: true);
var headers = harJson["headers"];
//parses and adds the headers
if (headers.isNotEmpty || requestModel.hasFormData) {
var templateHeader = jj.Template(kTemplateHeaders);
var m = {};
for (var i in headers) {
m[i["name"]] = i["value"];
}
if (requestModel.hasFormData) {
// we will override any existing boundary and use our own boundary
m[kHeaderContentType] =
"${ContentType.formdata.header}; boundary=-------------$uuid";
var boundaryUniqueIdTemplate =
jj.Template(kBoundaryUniqueIdTemplate);
result += boundaryUniqueIdTemplate.render({"uuid": uuid});
var fieldsString = '\$fields = [\n';
var filesString = '\$files = [\n';
for (var formData in requestModel.formDataMapList) {
if (formData['type'] == 'text') {
// the four spaces on the left hand side are for indentation, hence do not remove
fieldsString +=
' "${formData['name']}" => "${formData['value']}",\n';
} else if (formData['type'] == 'file') {
filesString +=
' new File("${formData['name']}", "${formData['value']}"),\n';
}
}
fieldsString += '];\n';
filesString += '];\n';
result += fieldsString;
if (requestModel.hasFileInFormData) {
result += filesString;
result += kMultiPartBodyWithFiles;
} else {
result += kMultiPartBodyWithoutFiles;
}
}
var headersString = '\n';
m.forEach((key, value) {
headersString += "\t\t\t\t'$key: $value', \n";
});
result += templateHeader.render({
"headers": headersString,
});
}
// contains the HTTP method associated with the request
var method = requestModel.method;
// contains the entire request body as a string if body is present
var requestBody = requestModel.requestBody;
//renders the request body
if (kMethodsWithBody.contains(method) && requestBody != null) {
var contentLength = utf8.encode(requestBody).length;
if (contentLength > 0) {
hasBody = true;
var templateBody = jj.Template(kTemplateBody);
result += templateBody.render({"body": requestBody});
}
}
//renders the request temlate //renders the request temlate
var templateRequest = jj.Template(kTemplateRequest); var templateRequestOptsInit = jj.Template(kTemplateRequestOptsInit);
result += templateRequest.render({ result += templateRequestOptsInit
"authority": uri.authority, .render({'method': requestModel.method.name});
"method": httpMethod(method.name.toUpperCase()), if (headers.isNotEmpty) {
"path": uri.path, result += kStringHeaderOpt;
"queryParamsStr": hasQuery ? "queryParamsStr" : "", }
});
if (hasBody || requestModel.hasFormData) { if (hasBody || requestModel.hasFormData) {
result += kStringRequestBody; result += kStringRequestBodyOpt;
} }
//and of the request //and of the request
@ -319,24 +168,4 @@ function build_data_files(\$boundary, \$fields, \$files)
return null; return null;
} }
} }
//function for http verb to curl mapping
String httpMethod(String methodName) {
switch (methodName) {
case "POST":
return "CURLOPT_POST";
case "GET":
return "CURLOPT_HTTPGET";
case "PUT":
return "CURLOPT_PUT";
case "DELETE":
return "CURLOPT_CUSTOMREQUEST";
case "PATCH":
return "CURLOPT_CUSTOMREQUEST";
case "HEAD":
return "CURLOPT_NOBODY";
default:
return "";
}
}
} }

View File

@ -294,8 +294,8 @@ enum CodegenLanguage {
javaAsyncHttpClient("Java (asynchttpclient)", "java", "java"), javaAsyncHttpClient("Java (asynchttpclient)", "java", "java"),
javaHttpClient("Java (HttpClient)", "java", "java"), javaHttpClient("Java (HttpClient)", "java", "java"),
juliaHttp("Julia (HTTP)", "julia", "jl"), juliaHttp("Julia (HTTP)", "julia", "jl"),
phpGuzzle("PHP (guzzle)", "php", "php"), phpCurl("PHP (cURL)", "php", "php"),
phpCurl("PHP (curl)", "php", "php"); phpGuzzle("PHP (guzzle)", "php", "php");
const CodegenLanguage(this.label, this.codeHighlightLang, this.ext); const CodegenLanguage(this.label, this.codeHighlightLang, this.ext);
final String label; final String label;

View File

@ -0,0 +1,909 @@
import 'package:apidash/codegen/codegen.dart';
import 'package:apidash/consts.dart';
import 'package:test/test.dart';
import '../request_models.dart';
void main() {
final codeGen = Codegen();
group('GET Request', () {
test('GET 1', () {
const expectedCode = r'''<?php
$uri = 'https://api.apidash.dev';
$request = curl_init($uri);
curl_setopt_array($request, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_FOLLOWLOCATION => true,
]);
$response = curl_exec($request);
curl_close($request);
$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE);
echo "Status Code: " . $httpCode . "\n";
echo $response . "\n";
''';
expect(
codeGen.getCode(CodegenLanguage.phpCurl, requestModelGet1, 'https'),
expectedCode);
});
test('GET 2', () {
const expectedCode = r'''<?php
$uri = 'https://api.apidash.dev/country/data';
$queryParams = [
'code' => 'US',
];
$uri .= '?' . http_build_query($queryParams);
$request = curl_init($uri);
curl_setopt_array($request, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_FOLLOWLOCATION => true,
]);
$response = curl_exec($request);
curl_close($request);
$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE);
echo "Status Code: " . $httpCode . "\n";
echo $response . "\n";
''';
expect(
codeGen.getCode(CodegenLanguage.phpCurl, requestModelGet2, 'https'),
expectedCode);
});
test('GET 3', () {
const expectedCode = r'''<?php
$uri = 'https://api.apidash.dev/country/data';
$queryParams = [
'code' => 'IND',
];
$uri .= '?' . http_build_query($queryParams);
$request = curl_init($uri);
curl_setopt_array($request, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_FOLLOWLOCATION => true,
]);
$response = curl_exec($request);
curl_close($request);
$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE);
echo "Status Code: " . $httpCode . "\n";
echo $response . "\n";
''';
expect(
codeGen.getCode(CodegenLanguage.phpCurl, requestModelGet3, "https"),
expectedCode);
});
test('GET 4', () {
const expectedCode = r'''<?php
$uri = 'https://api.apidash.dev/humanize/social';
$queryParams = [
'num' => '8700000',
'digits' => '3',
'system' => 'SS',
'add_space' => 'true',
'trailing_zeros' => 'true',
];
$uri .= '?' . http_build_query($queryParams);
$request = curl_init($uri);
curl_setopt_array($request, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_FOLLOWLOCATION => true,
]);
$response = curl_exec($request);
curl_close($request);
$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE);
echo "Status Code: " . $httpCode . "\n";
echo $response . "\n";
''';
expect(
codeGen.getCode(CodegenLanguage.phpCurl, requestModelGet4, "https"),
expectedCode);
});
test('GET 5', () {
const expectedCode = r'''<?php
$uri = 'https://api.github.com/repos/foss42/apidash';
$headers = [
'User-Agent: Test Agent',
];
$request = curl_init($uri);
curl_setopt_array($request, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => $headers,
CURLOPT_FOLLOWLOCATION => true,
]);
$response = curl_exec($request);
curl_close($request);
$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE);
echo "Status Code: " . $httpCode . "\n";
echo $response . "\n";
''';
expect(
codeGen.getCode(CodegenLanguage.phpCurl, requestModelGet5, 'https'),
expectedCode);
});
test('GET 6', () {
const expectedCode = r'''<?php
$uri = 'https://api.github.com/repos/foss42/apidash';
$queryParams = [
'raw' => 'true',
];
$uri .= '?' . http_build_query($queryParams);
$headers = [
'User-Agent: Test Agent',
];
$request = curl_init($uri);
curl_setopt_array($request, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => $headers,
CURLOPT_FOLLOWLOCATION => true,
]);
$response = curl_exec($request);
curl_close($request);
$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE);
echo "Status Code: " . $httpCode . "\n";
echo $response . "\n";
''';
expect(
codeGen.getCode(CodegenLanguage.phpCurl, requestModelGet6, "https"),
expectedCode);
});
test('GET 7', () {
const expectedCode = r'''<?php
$uri = 'https://api.apidash.dev';
$request = curl_init($uri);
curl_setopt_array($request, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_FOLLOWLOCATION => true,
]);
$response = curl_exec($request);
curl_close($request);
$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE);
echo "Status Code: " . $httpCode . "\n";
echo $response . "\n";
''';
expect(
codeGen.getCode(CodegenLanguage.phpCurl, requestModelGet7, "https"),
expectedCode);
});
test('GET 8', () {
const expectedCode = r'''<?php
$uri = 'https://api.github.com/repos/foss42/apidash';
$queryParams = [
'raw' => 'true',
];
$uri .= '?' . http_build_query($queryParams);
$headers = [
'User-Agent: Test Agent',
];
$request = curl_init($uri);
curl_setopt_array($request, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => $headers,
CURLOPT_FOLLOWLOCATION => true,
]);
$response = curl_exec($request);
curl_close($request);
$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE);
echo "Status Code: " . $httpCode . "\n";
echo $response . "\n";
''';
expect(
codeGen.getCode(CodegenLanguage.phpCurl, requestModelGet8, "https"),
expectedCode);
});
test('GET 9', () {
const expectedCode = r'''<?php
$uri = 'https://api.apidash.dev/humanize/social';
$queryParams = [
'num' => '8700000',
'add_space' => 'true',
];
$uri .= '?' . http_build_query($queryParams);
$request = curl_init($uri);
curl_setopt_array($request, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_FOLLOWLOCATION => true,
]);
$response = curl_exec($request);
curl_close($request);
$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE);
echo "Status Code: " . $httpCode . "\n";
echo $response . "\n";
''';
expect(
codeGen.getCode(CodegenLanguage.phpCurl, requestModelGet9, "https"),
expectedCode);
});
test('GET 10', () {
const expectedCode = r'''<?php
$uri = 'https://api.apidash.dev/humanize/social';
$headers = [
'User-Agent: Test Agent',
];
$request = curl_init($uri);
curl_setopt_array($request, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => $headers,
CURLOPT_FOLLOWLOCATION => true,
]);
$response = curl_exec($request);
curl_close($request);
$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE);
echo "Status Code: " . $httpCode . "\n";
echo $response . "\n";
''';
expect(
codeGen.getCode(CodegenLanguage.phpCurl, requestModelGet10, "https"),
expectedCode);
});
test('GET 11', () {
const expectedCode = r'''<?php
$uri = 'https://api.apidash.dev/humanize/social';
$queryParams = [
'num' => '8700000',
'digits' => '3',
];
$uri .= '?' . http_build_query($queryParams);
$headers = [
'User-Agent: Test Agent',
];
$request = curl_init($uri);
curl_setopt_array($request, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => $headers,
CURLOPT_FOLLOWLOCATION => true,
]);
$response = curl_exec($request);
curl_close($request);
$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE);
echo "Status Code: " . $httpCode . "\n";
echo $response . "\n";
''';
expect(
codeGen.getCode(CodegenLanguage.phpCurl, requestModelGet11, "https"),
expectedCode);
});
test('GET 12', () {
const expectedCode = r'''<?php
$uri = 'https://api.apidash.dev/humanize/social';
$request = curl_init($uri);
curl_setopt_array($request, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_FOLLOWLOCATION => true,
]);
$response = curl_exec($request);
curl_close($request);
$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE);
echo "Status Code: " . $httpCode . "\n";
echo $response . "\n";
''';
expect(
codeGen.getCode(CodegenLanguage.phpCurl, requestModelGet12, "https"),
expectedCode);
});
});
group('HEAD Request', () {
test('HEAD 1', () {
const expectedCode = r'''<?php
$uri = 'https://api.apidash.dev';
$request = curl_init($uri);
curl_setopt_array($request, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_CUSTOMREQUEST => 'HEAD',
CURLOPT_FOLLOWLOCATION => true,
]);
$response = curl_exec($request);
curl_close($request);
$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE);
echo "Status Code: " . $httpCode . "\n";
echo $response . "\n";
''';
expect(
codeGen.getCode(CodegenLanguage.phpCurl, requestModelHead1, "https"),
expectedCode);
});
test('HEAD 2', () {
const expectedCode = r'''<?php
$uri = 'http://api.apidash.dev';
$request = curl_init($uri);
curl_setopt_array($request, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_CUSTOMREQUEST => 'HEAD',
CURLOPT_FOLLOWLOCATION => true,
]);
$response = curl_exec($request);
curl_close($request);
$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE);
echo "Status Code: " . $httpCode . "\n";
echo $response . "\n";
''';
expect(
codeGen.getCode(CodegenLanguage.phpCurl, requestModelHead2, "http"),
expectedCode);
});
});
group('POST Request', () {
test('POST 1', () {
const expectedCode = r'''<?php
$uri = 'https://api.apidash.dev/case/lower';
$request_body = '{
"text": "I LOVE Flutter"
}';
$headers = [
'Content-Type: text/plain',
];
$request = curl_init($uri);
curl_setopt_array($request, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POSTFIELDS => $request_body,
CURLOPT_FOLLOWLOCATION => true,
]);
$response = curl_exec($request);
curl_close($request);
$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE);
echo "Status Code: " . $httpCode . "\n";
echo $response . "\n";
''';
expect(
codeGen.getCode(CodegenLanguage.phpCurl, requestModelPost1, "https"),
expectedCode);
});
test('POST 2', () {
const expectedCode = r'''<?php
$uri = 'https://api.apidash.dev/case/lower';
$request_body = '{
"text": "I LOVE Flutter",
"flag": null,
"male": true,
"female": false,
"no": 1.2,
"arr": ["null", "true", "false", null]
}';
$headers = [
'Content-Type: application/json',
];
$request = curl_init($uri);
curl_setopt_array($request, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POSTFIELDS => $request_body,
CURLOPT_FOLLOWLOCATION => true,
]);
$response = curl_exec($request);
curl_close($request);
$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE);
echo "Status Code: " . $httpCode . "\n";
echo $response . "\n";
''';
expect(
codeGen.getCode(CodegenLanguage.phpCurl, requestModelPost2, "https"),
expectedCode);
});
test('POST 3', () {
const expectedCode = r'''<?php
$uri = 'https://api.apidash.dev/case/lower';
$request_body = '{
"text": "I LOVE Flutter"
}';
$headers = [
'User-Agent: Test Agent',
'Content-Type: application/json',
];
$request = curl_init($uri);
curl_setopt_array($request, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POSTFIELDS => $request_body,
CURLOPT_FOLLOWLOCATION => true,
]);
$response = curl_exec($request);
curl_close($request);
$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE);
echo "Status Code: " . $httpCode . "\n";
echo $response . "\n";
''';
expect(
codeGen.getCode(CodegenLanguage.phpCurl, requestModelPost3, "https"),
expectedCode);
});
test('POST 4', () {
const expectedCode = r'''<?php
$uri = 'https://api.apidash.dev/io/form';
$request_body = [
'text' => 'API',
'sep' => '|',
'times' => '3',
];
$request = curl_init($uri);
curl_setopt_array($request, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => $request_body,
CURLOPT_FOLLOWLOCATION => true,
]);
$response = curl_exec($request);
curl_close($request);
$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE);
echo "Status Code: " . $httpCode . "\n";
echo $response . "\n";
''';
expect(
codeGen.getCode(CodegenLanguage.phpCurl, requestModelPost4, "https"),
expectedCode);
});
test('POST 5', () {
const expectedCode = r'''<?php
$uri = 'https://api.apidash.dev/io/form';
$request_body = [
'text' => 'API',
'sep' => '|',
'times' => '3',
];
$headers = [
'User-Agent: Test Agent',
];
$request = curl_init($uri);
curl_setopt_array($request, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POSTFIELDS => $request_body,
CURLOPT_FOLLOWLOCATION => true,
]);
$response = curl_exec($request);
curl_close($request);
$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE);
echo "Status Code: " . $httpCode . "\n";
echo $response . "\n";
''';
expect(
codeGen.getCode(CodegenLanguage.phpCurl, requestModelPost5, "https"),
expectedCode);
});
test('POST 6', () {
const expectedCode = r'''<?php
$uri = 'https://api.apidash.dev/io/img';
$request_body = [
'token' => 'xyz',
'imfile' => new CURLFILE('/Documents/up/1.png'),
];
$request = curl_init($uri);
curl_setopt_array($request, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => $request_body,
CURLOPT_FOLLOWLOCATION => true,
]);
$response = curl_exec($request);
curl_close($request);
$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE);
echo "Status Code: " . $httpCode . "\n";
echo $response . "\n";
''';
expect(
codeGen.getCode(CodegenLanguage.phpCurl, requestModelPost6, "https"),
expectedCode);
});
test('POST 7', () {
const expectedCode = r'''<?php
$uri = 'https://api.apidash.dev/io/img';
$request_body = [
'token' => 'xyz',
'imfile' => new CURLFILE('/Documents/up/1.png'),
];
$request = curl_init($uri);
curl_setopt_array($request, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => $request_body,
CURLOPT_FOLLOWLOCATION => true,
]);
$response = curl_exec($request);
curl_close($request);
$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE);
echo "Status Code: " . $httpCode . "\n";
echo $response . "\n";
''';
expect(
codeGen.getCode(CodegenLanguage.phpCurl, requestModelPost7, "https"),
expectedCode);
});
test('POST 8', () {
const expectedCode = r'''<?php
$uri = 'https://api.apidash.dev/io/form';
$request_body = [
'text' => 'API',
'sep' => '|',
'times' => '3',
];
$queryParams = [
'size' => '2',
'len' => '3',
];
$uri .= '?' . http_build_query($queryParams);
$request = curl_init($uri);
curl_setopt_array($request, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => $request_body,
CURLOPT_FOLLOWLOCATION => true,
]);
$response = curl_exec($request);
curl_close($request);
$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE);
echo "Status Code: " . $httpCode . "\n";
echo $response . "\n";
''';
expect(
codeGen.getCode(CodegenLanguage.phpCurl, requestModelPost8, "https"),
expectedCode);
});
test('POST 9', () {
const expectedCode = r'''<?php
$uri = 'https://api.apidash.dev/io/img';
$request_body = [
'token' => 'xyz',
'imfile' => new CURLFILE('/Documents/up/1.png'),
];
$queryParams = [
'size' => '2',
'len' => '3',
];
$uri .= '?' . http_build_query($queryParams);
$headers = [
'User-Agent: Test Agent',
'Keep-Alive: true',
];
$request = curl_init($uri);
curl_setopt_array($request, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POSTFIELDS => $request_body,
CURLOPT_FOLLOWLOCATION => true,
]);
$response = curl_exec($request);
curl_close($request);
$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE);
echo "Status Code: " . $httpCode . "\n";
echo $response . "\n";
''';
expect(
codeGen.getCode(CodegenLanguage.phpCurl, requestModelPost9, "https"),
expectedCode);
});
});
group('PUT Request', () {
test('PUT 1', () {
const expectedCode = r'''<?php
$uri = 'https://reqres.in/api/users/2';
$request_body = '{
"name": "morpheus",
"job": "zion resident"
}';
$headers = [
'Content-Type: application/json',
];
$request = curl_init($uri);
curl_setopt_array($request, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POSTFIELDS => $request_body,
CURLOPT_FOLLOWLOCATION => true,
]);
$response = curl_exec($request);
curl_close($request);
$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE);
echo "Status Code: " . $httpCode . "\n";
echo $response . "\n";
''';
expect(
codeGen.getCode(CodegenLanguage.phpCurl, requestModelPut1, "https"),
expectedCode);
});
});
group('PATCH Request', () {
test('PATCH 1', () {
const expectedCode = r'''<?php
$uri = 'https://reqres.in/api/users/2';
$request_body = '{
"name": "marfeus",
"job": "accountant"
}';
$headers = [
'Content-Type: application/json',
];
$request = curl_init($uri);
curl_setopt_array($request, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POSTFIELDS => $request_body,
CURLOPT_FOLLOWLOCATION => true,
]);
$response = curl_exec($request);
curl_close($request);
$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE);
echo "Status Code: " . $httpCode . "\n";
echo $response . "\n";
''';
expect(
codeGen.getCode(CodegenLanguage.phpCurl, requestModelPatch1, "https"),
expectedCode);
});
});
group('DELETE Request', () {
test('DELETE 1', () {
const expectedCode = r'''<?php
$uri = 'https://reqres.in/api/users/2';
$request = curl_init($uri);
curl_setopt_array($request, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_FOLLOWLOCATION => true,
]);
$response = curl_exec($request);
curl_close($request);
$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE);
echo "Status Code: " . $httpCode . "\n";
echo $response . "\n";
''';
expect(
codeGen.getCode(
CodegenLanguage.phpCurl, requestModelDelete1, "https"),
expectedCode);
});
test('DELETE 2', () {
const expectedCode = r'''<?php
$uri = 'https://reqres.in/api/users/2';
$request_body = '{
"name": "marfeus",
"job": "accountant"
}';
$headers = [
'Content-Type: application/json',
];
$request = curl_init($uri);
curl_setopt_array($request, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POSTFIELDS => $request_body,
CURLOPT_FOLLOWLOCATION => true,
]);
$response = curl_exec($request);
curl_close($request);
$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE);
echo "Status Code: " . $httpCode . "\n";
echo $response . "\n";
''';
expect(
codeGen.getCode(
CodegenLanguage.phpCurl, requestModelDelete2, "https"),
expectedCode);
});
});
}