Skip to content

Commit 233cf76

Browse files
authored
guides: support verbatim variables (#3871)
1 parent 9f21816 commit 233cf76

File tree

28 files changed

+78
-36
lines changed

28 files changed

+78
-36
lines changed

generators/src/main/java/com/algolia/codegen/cts/lambda/DynamicSnippetLambda.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,6 @@ public void execute(Template.Fragment fragment, Writer writer) throws IOExceptio
7676
Map<String, Object> context = (Map<String, Object>) fragment.context();
7777
snippet.addMethodCall(context, paramsType, operation);
7878

79-
writer.write(adaptor.compileTemplate(executor, context, "tests/client/method.mustache"));
79+
writer.write(adaptor.compileTemplate(executor, context, "tests/method.mustache"));
8080
}
8181
}

generators/src/main/java/com/algolia/codegen/cts/manager/CSharpCTSManager.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,13 @@ public void addTestsSupportingFiles(List<SupportingFile> supportingFiles) {
2929
@Override
3030
public void addSnippetsSupportingFiles(List<SupportingFile> supportingFiles, String output) {
3131
supportingFiles.add(new SupportingFile("snippets/src.csproj.mustache", output + "/csharp/src/src.csproj"));
32-
supportingFiles.add(new SupportingFile("snippets/Program.mustache", output + "/csharp/src/Program.cs"));
3332
supportingFiles.add(new SupportingFile("snippets/.gitignore.mustache", output + "/csharp/.gitignore"));
3433
supportingFiles.add(new SupportingFile("snippets/Algolia.mustache", output + "/csharp/Algolia.sln"));
3534
supportingFiles.add(new SupportingFile("snippets/dotnet-tools.mustache", output + "/csharp/.config/dotnet-tools.json"));
35+
36+
if (output.equals("snippets")) {
37+
supportingFiles.add(new SupportingFile("snippets/Program.mustache", output + "/csharp/src/Program.cs"));
38+
}
3639
}
3740

3841
@Override

generators/src/main/java/com/algolia/codegen/cts/manager/JavaCTSManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public void addTestsSupportingFiles(List<SupportingFile> supportingFiles) {
3838

3939
@Override
4040
public void addSnippetsSupportingFiles(List<SupportingFile> supportingFiles, String output) {
41-
supportingFiles.add(new SupportingFile("tests/build.mustache", output + "/java", "build.gradle"));
41+
supportingFiles.add(new SupportingFile("snippets/build.mustache", output + "/java", "build.gradle"));
4242
supportingFiles.add(new SupportingFile("snippets/settings.mustache", output + "/java", "settings.gradle"));
4343
}
4444

generators/src/main/java/com/algolia/codegen/cts/tests/ParametersWithDataType.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,12 +95,16 @@ public void enhanceParameters(Map<String, Object> parameters, Map<String, Object
9595
}
9696

9797
// Give the stringified version to mustache, for js
98-
bundle.put("parameters", Json.mapper().writeValueAsString(parameters));
98+
bundle.put("parameters", toJSONWithVar(parameters));
9999
bundle.put("parametersWithDataType", parametersWithDataType);
100100
// Also provide a map version for those who know which keys to look for
101101
bundle.put("parametersWithDataTypeMap", parametersWithDataTypeMap);
102102
}
103103

104+
private String toJSONWithVar(Map<String, Object> parameters) throws JsonProcessingException {
105+
return Json.mapper().writeValueAsString(parameters).replaceAll("\"\\$var: (.*?)\"", "$1");
106+
}
107+
104108
private Map<String, Object> traverseParams(
105109
String paramName,
106110
Object param,
@@ -154,6 +158,10 @@ private Map<String, Object> traverseParams(
154158

155159
if (param == null) {
156160
handleNull(spec, testOutput);
161+
} else if (param instanceof String && ((String) param).startsWith("$var: ")) {
162+
// bypass for verbatim variables used in the guides, we don't need to do any validation
163+
testOutput.put("isVerbatim", true);
164+
testOutput.put("value", ((String) param).substring(6));
157165
} else if (spec.getIsArray()) {
158166
handleArray(paramName, param, testOutput, spec, depth);
159167
} else if (spec.getIsEnum()) {
@@ -196,6 +204,10 @@ private Map<String, Object> traverseParamsWithoutSpec(String paramName, Object p
196204

197205
if (param == null) {
198206
handleNull(null, testOutput);
207+
} else if (param instanceof String && ((String) param).startsWith("$var: ")) {
208+
// bypass for verbatim variables used in the guides, we don't need to do any validation
209+
testOutput.put("isVerbatim", true);
210+
testOutput.put("value", ((String) param).substring(6));
199211
} else if (param instanceof List) {
200212
handleArray(paramName, param, testOutput, null, depth);
201213
} else if (param instanceof Map) {

generators/src/main/java/com/algolia/codegen/cts/tests/Snippet.java

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ public class Snippet {
1313

1414
public String testName;
1515
public boolean isSnippet;
16-
public boolean ignoreResponse;
1716

1817
public String method;
1918
public Map<String, Object> parameters;
@@ -34,7 +33,6 @@ public String toString() {
3433
sb.append("class Request {\n");
3534
sb.append(" testName: ").append(testName).append("\n");
3635
sb.append(" isSnippet").append(isSnippet).append("\n");
37-
sb.append(" ignoreResponse").append(ignoreResponse).append("\n");
3836
sb.append(" method: ").append(method).append("\n");
3937
sb.append(" parameters: ").append(parameters).append("\n");
4038
sb.append(" requestOptions: ").append(requestOptions).append("\n");
@@ -75,13 +73,10 @@ public void addMethodCall(Map<String, Object> context, ParametersWithDataType pa
7573

7674
// Determines whether the endpoint is expected to return a response payload deserialized
7775
// and therefore a variable to store it into.
78-
if (!ignoreResponse) {
79-
context.put("hasResponse", true);
80-
81-
for (CodegenResponse response : ope.responses) {
82-
if (response.code.equals("204")) {
83-
context.put("hasResponse", false);
84-
}
76+
context.put("hasResponse", true);
77+
for (CodegenResponse response : ope.responses) {
78+
if (response.code.equals("204")) {
79+
context.put("hasResponse", false);
8580
}
8681
}
8782

generators/src/main/java/com/algolia/codegen/cts/tests/TestsRequest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ public void run(Map<String, CodegenModel> models, Map<String, CodegenOperation>
8282
ParametersWithDataType paramsType = new ParametersWithDataType(models, language, client, false);
8383

8484
bundle.put("e2eApiKey", client.equals("monitoring") ? "MONITORING_API_KEY" : "ALGOLIA_ADMIN_KEY");
85+
bundle.put("useEchoRequester", true);
8586

8687
for (Map.Entry<String, CodegenOperation> entry : operations.entrySet()) {
8788
String operationId = entry.getKey();

scripts/buildLanguages.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ async function buildLanguage(language: Language, gens: Generator[], buildType: B
2424
}
2525
break;
2626
case 'go':
27-
await run('go build ./...', { cwd, language });
27+
await run('go build -o /dev/null ./...', { cwd, language });
2828
break;
2929
case 'javascript':
3030
await run('YARN_ENABLE_IMMUTABLE_INSTALLS=false yarn install', { cwd, language });
@@ -42,7 +42,10 @@ async function buildLanguage(language: Language, gens: Generator[], buildType: B
4242
break;
4343
case 'java':
4444
case 'kotlin':
45-
await run(`./gradle/gradlew -p ${cwd} assemble`, { language });
45+
await run(
46+
`./gradle/gradlew -p ${cwd} ${buildType === 'client' || buildType === 'playground' ? 'assemble' : 'build'}`,
47+
{ language },
48+
);
4649
break;
4750
case 'php':
4851
// await runComposerInstall();

templates/csharp/tests/generateInnerParams.mustache

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
{{#isNull}}
22
null
33
{{/isNull}}
4+
{{#isVerbatim}}
5+
{{{value}}}
6+
{{/isVerbatim}}
47
{{#isString}}
58
"{{#lambda.escapeQuotes}}{{#lambda.escapeSlash}}{{{value}}}{{/lambda.escapeSlash}}{{/lambda.escapeQuotes}}"
69
{{/isString}}

templates/dart/tests/param_value.mustache

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{{#isNull}}empty(){{/isNull}}
2+
{{#isVerbatim}}{{{value}}}{{/isVerbatim}}
23
{{#isString}}"{{#lambda.escapeDollar}}{{{value}}}{{/lambda.escapeDollar}}"{{/isString}}
34
{{#isNumber}}{{{value}}}{{/isNumber}}
45
{{#isBoolean}}{{{value}}}{{/isBoolean}}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
{{#isHelper}}{{#goFunctionalParam}}{{clientPrefix}}.With{{#lambda.pascalcase}}{{key}}{{/lambda.pascalcase}}({{/goFunctionalParam}}{{/isHelper}}{{#isNull}}{{#inClientTest}}tests.ZeroValue[{{#isNullObject}}*{{clientPrefix}}.{{/isNullObject}}{{objectName}}](){{/inClientTest}}{{^inClientTest}}nil{{/inClientTest}}{{/isNull}}{{#isString}}"{{{value}}}"{{/isString}}{{#isInteger}}{{{value}}}{{/isInteger}}{{#isLong}}{{{value}}}{{/isLong}}{{#isDouble}}{{{value}}}{{/isDouble}}{{#isBoolean}}{{{value}}}{{/isBoolean}}{{#isEnum}}{{clientPrefix}}.{{objectName}}("{{{value}}}"){{/isEnum}}{{#isArray}}
1+
{{#isVerbatim}}{{{value}}}{{/isVerbatim}}{{#isHelper}}{{#goFunctionalParam}}{{clientPrefix}}.With{{#lambda.pascalcase}}{{key}}{{/lambda.pascalcase}}({{/goFunctionalParam}}{{/isHelper}}{{#isNull}}{{#inClientTest}}tests.ZeroValue[{{#isNullObject}}*{{clientPrefix}}.{{/isNullObject}}{{objectName}}](){{/inClientTest}}{{^inClientTest}}nil{{/inClientTest}}{{/isNull}}{{#isString}}"{{{value}}}"{{/isString}}{{#isInteger}}{{{value}}}{{/isInteger}}{{#isLong}}{{{value}}}{{/isLong}}{{#isDouble}}{{{value}}}{{/isDouble}}{{#isBoolean}}{{{value}}}{{/isBoolean}}{{#isEnum}}{{clientPrefix}}.{{objectName}}("{{{value}}}"){{/isEnum}}{{#isArray}}
22
{{> tests/arrayType}}{{^value.isEmpty}}{ {{#value}}{{#isObject}}*{{/isObject}}{{#oneOfModel}}{{^isObject}}*{{/isObject}}{{/oneOfModel}}{{> tests/generateParams}},{{/value}} }{{/value.isEmpty}}{{/isArray}}{{#isObject}}
33
{{clientPrefix}}.NewEmpty{{objectName}}(){{#value}}{{#isAdditionalProperty}}.SetAdditionalProperty("{{{key}}}", {{> tests/generateParams}}){{/isAdditionalProperty}}{{^isAdditionalProperty}}.Set{{#lambda.pascalcase}}{{{key}}}{{/lambda.pascalcase}}({{> tests/generateParams}}){{/isAdditionalProperty}}{{/value}}{{/isObject}}{{#isFreeFormObject}}{{#isAnyType}}map[string]any{ {{#value}}{{#entrySet}}"{{{key}}}": "{{{value}}}",{{/entrySet}}{{/value}} }{{/isAnyType}}{{^isAnyType}}{{> tests/mapType}}{ {{#value}}"{{{key}}}": {{#oneOfModel}}{{^isObject}}*{{/isObject}}{{/oneOfModel}}{{#isObject}}*{{/isObject}}{{> tests/generateParams}},{{/value}} }{{/isAnyType}}{{/isFreeFormObject}}{{#isHelper}}{{#goFunctionalParam}}){{/goFunctionalParam}}{{/isHelper}}

0 commit comments

Comments
 (0)