Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 16 additions & 51 deletions config/openapitools.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,63 +34,55 @@
"additionalProperties": {
"packageName": "@experimental-api-clients-automation/client-personalization",
"buildFile": "client-personalization",
"packageVersion": "0.3.0",
"hasRegionalHost": true
"packageVersion": "0.3.0"
}
},
"javascript-analytics": {
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/client-analytics",
"additionalProperties": {
"packageName": "@experimental-api-clients-automation/client-analytics",
"buildFile": "client-analytics",
"packageVersion": "0.3.0",
"hasRegionalHost": true
"packageVersion": "0.3.0"
}
},
"javascript-insights": {
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/client-insights",
"additionalProperties": {
"packageName": "@experimental-api-clients-automation/client-insights",
"buildFile": "client-insights",
"packageVersion": "0.3.0",
"hasRegionalHost": true
"packageVersion": "0.3.0"
}
},
"javascript-abtesting": {
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/client-abtesting",
"additionalProperties": {
"packageName": "@experimental-api-clients-automation/client-abtesting",
"buildFile": "client-abtesting",
"packageVersion": "0.3.0",
"hasRegionalHost": true
"packageVersion": "0.3.0"
}
},
"javascript-query-suggestions": {
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/client-query-suggestions",
"additionalProperties": {
"packageName": "@experimental-api-clients-automation/client-query-suggestions",
"buildFile": "client-query-suggestions",
"packageVersion": "0.3.0",
"hasRegionalHost": true
"packageVersion": "0.3.0"
}
},
"javascript-sources": {
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/client-sources",
"additionalProperties": {
"packageName": "@experimental-api-clients-automation/client-sources",
"buildFile": "client-sources",
"packageVersion": "0.3.0",
"hasRegionalHost": true
"packageVersion": "0.3.0"
}
},
"javascript-predict": {
"templateDir": "#{cwd}/templates/javascript/",
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/client-predict",
"additionalProperties": {
"packageName": "@experimental-api-clients-automation/client-predict",
"buildFile": "client-predict",
"packageVersion": "0.3.0",
"hasRegionalHost": true
"packageVersion": "0.3.0"
}
},
"java-search": {
Expand All @@ -100,34 +92,19 @@
"output": "#{cwd}/clients/algoliasearch-client-java-2"
},
"java-personalization": {
"output": "#{cwd}/clients/algoliasearch-client-java-2",
"additionalProperties": {
"hasRegionalHost": true
}
"output": "#{cwd}/clients/algoliasearch-client-java-2"
},
"java-analytics": {
"output": "#{cwd}/clients/algoliasearch-client-java-2",
"additionalProperties": {
"hasRegionalHost": true
}
"output": "#{cwd}/clients/algoliasearch-client-java-2"
},
"java-insights": {
"output": "#{cwd}/clients/algoliasearch-client-java-2",
"additionalProperties": {
"hasRegionalHost": true
}
"output": "#{cwd}/clients/algoliasearch-client-java-2"
},
"java-abtesting": {
"output": "#{cwd}/clients/algoliasearch-client-java-2",
"additionalProperties": {
"hasRegionalHost": true
}
"output": "#{cwd}/clients/algoliasearch-client-java-2"
},
"java-query-suggestions": {
"output": "#{cwd}/clients/algoliasearch-client-java-2",
"additionalProperties": {
"hasRegionalHost": true
}
"output": "#{cwd}/clients/algoliasearch-client-java-2"
},
"java-predict": {
"output": "#{cwd}/clients/algoliasearch-client-java-2"
Expand All @@ -139,28 +116,16 @@
"output": "#{cwd}/clients/algoliasearch-client-php"
},
"php-personalization": {
"output": "#{cwd}/clients/algoliasearch-client-php",
"additionalProperties": {
"hasRegionalHost": true
}
"output": "#{cwd}/clients/algoliasearch-client-php"
},
"php-analytics": {
"output": "#{cwd}/clients/algoliasearch-client-php",
"additionalProperties": {
"hasRegionalHost": true
}
"output": "#{cwd}/clients/algoliasearch-client-php"
},
"php-insights": {
"output": "#{cwd}/clients/algoliasearch-client-php",
"additionalProperties": {
"hasRegionalHost": true
}
"output": "#{cwd}/clients/algoliasearch-client-php"
},
"php-abtesting": {
"output": "#{cwd}/clients/algoliasearch-client-php",
"additionalProperties": {
"hasRegionalHost": true
}
"output": "#{cwd}/clients/algoliasearch-client-php"
},
"php-query-suggestions": {
"output": "#{cwd}/clients/algoliasearch-client-php"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public void processOpts() {
setLibrary("okhttp-gson");
setSourceFolder("algoliasearch-core/src/main/java");
setGroupId("com.algolia");
setModelPackage("com.algolia.model." + Utils.toCamelCase(client));
setModelPackage("com.algolia.model." + Utils.camelize(client));
additionalProperties.put("invokerPackage", "com.algolia");
setApiPackage("com.algolia.api");
setApiNameSuffix(Utils.API_SUFFIX);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public String getName() {
public void processOpts() {
super.processOpts();

CLIENT = Utils.toCamelCase((String) additionalProperties.get("client"));
CLIENT = Utils.camelize((String) additionalProperties.get("client"));

// generator specific options
setSupportsES6(true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public void processOpts() {
String client = (String) additionalProperties.get("client");
setApiNameSuffix(Utils.API_SUFFIX);
setParameterNamingConvention("camelCase");
additionalProperties.put("modelPackage", "Model\\" + Utils.toPascalCase(client));
additionalProperties.put("modelPackage", "Model\\" + Utils.createClientName(client, "php"));
additionalProperties.put("invokerPackage", "Algolia\\AlgoliaSearch");

super.processOpts();
Expand Down
32 changes: 10 additions & 22 deletions generators/src/main/java/com/algolia/codegen/Utils.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,15 @@ public static String capitalize(String str) {
return str.substring(0, 1).toUpperCase() + str.substring(1);
}

public static String camelize(String kebabStr) {
String[] parts = kebabStr.split("-");
String camel = parts[0].toLowerCase();
for (int i = 1; i < parts.length; i++) {
camel += capitalize(parts[i]);
}
return camel;
}

/**
* Will add the boolean `vendorExtensions.x-is-custom-request` to operations if they should not
* escape '/' in the path variable
Expand All @@ -40,28 +49,7 @@ public static CodegenOperation specifyCustomRequest(CodegenOperation ope) {

/** Returns the client name for the given language */
public static String createClientName(String client, String language) {
return language.equals("javascript") ? toCamelCase(client) : toPascalCase(client);
}

// test-input -> testInput
public static String toCamelCase(String kebabStr) {
String[] parts = kebabStr.split("-");
String camel = "";
camel = parts[0].toLowerCase();
for (int i = 1; i < parts.length; i++) {
camel += capitalize(parts[i]);
}
return camel;
}

// test-input -> TestInput
public static String toPascalCase(String kebabStr) {
String[] parts = kebabStr.split("-");
String pascal = "";
for (int i = 0; i < parts.length; i++) {
pascal += capitalize(parts[i]);
}
return pascal;
return language.equals("javascript") ? camelize(client) : capitalize(camelize(client));
}

// testInput -> test-input
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ public void processOpts() {
ctsManager.addSupportingFiles(supportingFiles);

testsGenerators.add(new TestsRequest(language, client));
testsGenerators.add(new TestsClient(language, client));

for (TestsGenerator testGen : testsGenerators) {
testGen.addSupportingFiles(supportingFiles, outputFolder, extension);
Expand Down Expand Up @@ -97,7 +98,19 @@ public Map<String, Object> postProcessSupportingFileData(Map<String, Object> obj
ctsManager.addDataToBundle(bundle);

for (TestsGenerator testGen : testsGenerators) {
testGen.run(models, operations, bundle);
try {
testGen.run(models, operations, bundle);
} catch (CTSException e) {
if (e.isSkipable()) {
System.out.println(e.getMessage());
continue;
}
e.printStackTrace();
System.exit(1);
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}

return bundle;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,6 @@ public void addSupportingFiles(List<SupportingFile> supportingFiles) {
@Override
public void addDataToBundle(Map<String, Object> bundle) throws GeneratorException {
bundle.put("packageVersion", Utils.getClientConfigField("java", "packageVersion"));
bundle.put("import", Utils.toCamelCase(this.client));
bundle.put("import", Utils.camelize(this.client));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.algolia.codegen.cts.tests;

import java.util.List;
import java.util.Map;

public class ClientTestData {

public String testName;
public boolean autoCreateClient = true;
public List<Step> steps;
}

class Step {

public String type;
public String object;
public String path;
public Map<String, Object> parameters;
public Expected expected;
}

class Expected {

public Object error;
public Match match;
public String testSubject;
}

class Match {

public String regexp;
public Map<String, Object> objectContaining;
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,49 +28,77 @@ public ParametersWithDataType(Map<String, CodegenModel> models, String language)

public void enhanceParameters(Map<String, Object> parameters, Map<String, Object> bundle, CodegenOperation operation)
throws CTSException, JsonMappingException, JsonProcessingException {
if (parameters == null || parameters.size() == 0) {
return;
}
// Give the stringified version to mustache, for js
bundle.put("parameters", Json.mapper().writeValueAsString(parameters));

List<Object> parametersWithDataType = new ArrayList<>();
this.enhanceParameters(parameters, bundle, operation, null, null);
}

for (Entry<String, Object> param : parameters.entrySet()) {
CodegenParameter specParam = null;
if (operation != null) {
for (CodegenParameter sp : operation.allParams) {
if (sp.paramName.equals(param.getKey())) {
specParam = sp;
break;
}
}
if (specParam == null) {
throw new CTSException("Parameter " + param.getKey() + " not found in the root parameter");
}
}
parametersWithDataType.add(traverseParams(param.getKey(), param.getValue(), specParam, "", 0));
}
public void enhanceParameters(
Map<String, Object> parameters,
Map<String, Object> bundle,
IJsonSchemaValidationProperties spec,
String paramName
) throws CTSException, JsonMappingException, JsonProcessingException {
this.enhanceParameters(parameters, bundle, null, spec, paramName);
}

bundle.put("parametersWithDataType", parametersWithDataType);
public void enhanceParameters(Map<String, Object> parameters, Map<String, Object> bundle)
throws CTSException, JsonMappingException, JsonProcessingException {
this.enhanceParameters(parameters, bundle, null, null, null);
}

public void enhanceRootParameters(
/**
* @param parameters The object to traverse and annotate with type
* @param bundle The output object
* @param operation (optional) The model in which to look for spec
* @param spec (optional) (mutually exclusive with operation) If the parameter is a root param,
* the spec must be provided, alongside it's paramName
* @param paramName (optional) (required if spec) the parameter name
*/
private void enhanceParameters(
Map<String, Object> parameters,
String paramName,
Map<String, Object> bundle,
CodegenOperation operation,
IJsonSchemaValidationProperties spec,
Map<String, Object> bundle
String paramName
) throws CTSException, JsonMappingException, JsonProcessingException {
if (parameters == null || parameters.size() == 0) {
if (parameters == null) {
return;
}
if (parameters.size() == 0) {
bundle.put("parameters", "{}");
return;
}
List<Map<String, Object>> parametersWithDataType = new ArrayList<>();
Map<String, Object> parametersWithDataTypeMap = new HashMap<>();

if (paramName == null) {
for (Entry<String, Object> param : parameters.entrySet()) {
CodegenParameter specParam = null;
if (operation != null) {
for (CodegenParameter sp : operation.allParams) {
if (sp.paramName.equals(param.getKey())) {
specParam = sp;
break;
}
}
if (specParam == null) {
throw new CTSException("Parameter " + param.getKey() + " not found in the root parameter");
}
}
Map<String, Object> paramWithType = traverseParams(param.getKey(), param.getValue(), specParam, "", 0);
parametersWithDataType.add(paramWithType);
parametersWithDataTypeMap.put((String) paramWithType.get("key"), paramWithType);
}
} else {
Map<String, Object> paramWithType = traverseParams(paramName, parameters, spec, "", 0);
parametersWithDataType.add(paramWithType);
parametersWithDataTypeMap.put((String) paramWithType.get("key"), paramWithType);
}

// Give the stringified version to mustache, for js
bundle.put("parameters", Json.mapper().writeValueAsString(parameters));

List<Object> parametersWithDataType = new ArrayList<>();
parametersWithDataType.add(traverseParams(paramName, parameters, spec, "", 0));

bundle.put("parametersWithDataType", parametersWithDataType);
// Also provide a map version for those who know which keys to look for
bundle.put("parametersWithDataTypeMap", parametersWithDataTypeMap);
}

private Map<String, Object> traverseParams(
Expand Down
Loading