Add Salesforce Apex codegen (#1285)

This commit is contained in:
Matthew Crumley
2020-10-17 03:09:23 -04:00
committed by GitHub
parent de97048424
commit b6b3cbcb9a
3 changed files with 157 additions and 0 deletions

View File

@@ -1002,6 +1002,84 @@ else
end"
`;
exports[`generate request for Salesforce Apex generate GET request 1`] = `
"HttpRequest request = new HttpRequest();
request.setMethod('GET');
request.setEndpoint('https://httpbin.org/path/to?a=b');
request.setHeader('Authorization', 'Basic bW9ja1VzZXI6bW9ja1Bhc3N3b3Jk');
request.setHeader('h1', 'h1v');
request.setHeader('h2', 'h2v');
try {
Http client = new Http();
HttpResponse response = client.send(request);
System.debug(response.getBody());
} catch (CalloutException ex) {
System.debug('An error occured ' + ex.getMessage());
}"
`;
exports[`generate request for Salesforce Apex generate POST request for JSON 1`] = `
"HttpRequest request = new HttpRequest();
request.setMethod('POST');
request.setEndpoint('https://httpbin.org/path/to?a=b');
request.setHeader('Authorization', 'Bearer abcdefghijklmn');
request.setHeader('Content-Type', 'application/json');
request.setHeader('h1', 'h1v');
request.setHeader('h2', 'h2v');
request.setBody('{\\"foo\\": \\"bar\\", \\"baz\\": \\"qux\\"}');
try {
Http client = new Http();
HttpResponse response = client.send(request);
System.debug(response.getBody());
} catch (CalloutException ex) {
System.debug('An error occured ' + ex.getMessage());
}"
`;
exports[`generate request for Salesforce Apex generate POST request for XML 1`] = `
"HttpRequest request = new HttpRequest();
request.setMethod('POST');
request.setEndpoint('https://httpbin.org/path/to?a=b');
request.setHeader('Authorization', 'Bearer abcdefghijklmn');
request.setHeader('Content-Type', 'application/xml');
request.setHeader('h1', 'h1v');
request.setHeader('h2', 'h2v');
request.setBody('<?xml version=\\\\'1.0\\\\' encoding=\\\\'utf-8\\\\'?>\\\\n<xml>\\\\n <element foo=\\"bar\\"></element>\\\\n</xml>');
try {
Http client = new Http();
HttpResponse response = client.send(request);
System.debug(response.getBody());
} catch (CalloutException ex) {
System.debug('An error occured ' + ex.getMessage());
}"
`;
exports[`generate request for Salesforce Apex generate PUT request for www-form-urlencoded 1`] = `
"HttpRequest request = new HttpRequest();
request.setMethod('PUT');
request.setEndpoint('https://httpbin.org/path/to?a=b');
request.setHeader('Content-Type', 'application/x-www-form-urlencoded');
request.setBody('foo=bar&baz=qux');
try {
Http client = new Http();
HttpResponse response = client.send(request);
System.debug(response.getBody());
} catch (CalloutException ex) {
System.debug('An error occured ' + ex.getMessage());
}"
`;
exports[`generate request for cURL generate GET request 1`] = `
"curl -X GET \\\\
'https://httpbin.org/path/to?a=b' \\\\

View File

@@ -13,6 +13,7 @@ import { PythonHttpClientCodegen } from "./generators/python-http-client"
import { WgetCodegen } from "./generators/wget"
import { CsRestSharpCodegen } from "./generators/cs-restsharp"
import { RubyNetHttpCodeGen } from "./generators/ruby-net-http"
import { SalesforceApexCodegen } from "./generators/salesforce-apex"
/* Register code generators here.
* A code generator is defined as an object with the following structure.
@@ -37,6 +38,7 @@ export const codegens = [
PythonRequestsCodegen,
PythonHttpClientCodegen,
RubyNetHttpCodeGen,
SalesforceApexCodegen,
WgetCodegen,
]

View File

@@ -0,0 +1,77 @@
export const SalesforceApexCodegen = {
id: "salesforce-apex",
name: "Salesforce Apex",
generator: ({
url,
pathName,
queryString,
auth,
httpUser,
httpPassword,
bearerToken,
method,
rawInput,
rawParams,
rawRequestBody,
contentType,
headers,
}) => {
const requestString = []
// initial request setup
let requestBody = rawInput ? rawParams : rawRequestBody
requestBody = JSON.stringify(requestBody)
.replace(/^"|"$/g, "")
.replace(/\\"/g, '"')
.replace(/'/g, "\\'") // Apex uses single quotes for strings
// create request
requestString.push(`HttpRequest request = new HttpRequest();\n`)
requestString.push(`request.setMethod('${method}');\n`)
requestString.push(`request.setEndpoint('${url}${pathName}${queryString}');\n\n`)
// authentification
if (auth === "Basic Auth") {
const basic = `${httpUser}:${httpPassword}`
requestString.push(
`request.setHeader('Authorization', 'Basic ${window.btoa(
unescape(encodeURIComponent(basic))
)}');\n`
)
} else if (auth === "Bearer Token" || auth === "OAuth 2.0") {
requestString.push(`request.setHeader('Authorization', 'Bearer ${bearerToken}');\n`)
}
// content type
if (contentType) {
requestString.push(`request.setHeader('Content-Type', '${contentType}');\n`)
}
// custom headers
if (headers) {
headers.forEach(({ key, value }) => {
if (key) {
requestString.push(`request.setHeader('${key}', '${value}');\n`)
}
})
}
requestString.push(`\n`)
// set body
if (["POST", "PUT", "PATCH", "DELETE"].includes(method)) {
requestString.push(`request.setBody('${requestBody}');\n\n`)
}
// process
requestString.push(`try {\n`)
requestString.push(` Http client = new Http();\n`)
requestString.push(` HttpResponse response = client.send(request);\n`)
requestString.push(` System.debug(response.getBody());\n`)
requestString.push(`} catch (CalloutException ex) {\n`)
requestString.push(` System.debug('An error occured ' + ex.getMessage());\n`)
requestString.push(`}`)
return requestString.join("")
},
}