Skip to content

Commit abb21d9

Browse files
Merge pull request #1674 from okta/api-test-template-pr
Add api_test.mustache template for auto-generated test classes
2 parents 489f6f7 + 6feda9f commit abb21d9

1 file changed

Lines changed: 123 additions & 0 deletions

File tree

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
package {{package}};
2+
3+
import {{invokerPackage}}.ApiException;
4+
import {{modelPackage}}.*;
5+
import com.okta.sdk.helper.PresetHelper;
6+
import com.okta.sdk.helper.TerraformHelper;
7+
import org.junit.jupiter.api.BeforeEach;
8+
import org.junit.jupiter.api.Test;
9+
import org.junit.jupiter.api.DisplayName;
10+
11+
{{#imports}}
12+
import {{import}};
13+
{{/imports}}
14+
15+
import java.util.*;
16+
17+
/**
18+
* Auto-generated unit tests for {{classname}} operations
19+
*
20+
* NOTE: This test class requires Terraform-generated prerequisite data to run.
21+
* Tests will fail if the TF_OUTPUTS environment variable is not set with the
22+
* required test prerequisite data.
23+
*/
24+
public class {{classname}}Test {
25+
26+
private {{classname}} apiClient;
27+
private PresetHelper presetHelper;
28+
private TerraformHelper terraformHelper;
29+
30+
@BeforeEach
31+
public void setUp() {
32+
presetHelper = new PresetHelper();
33+
terraformHelper = new TerraformHelper();
34+
apiClient = new {{classname}}(presetHelper.getApiClient());
35+
}
36+
37+
{{#operations}}
38+
{{#operation}}
39+
/**
40+
* Test case for {{operationId}} operation.
41+
*
42+
* This test executes the actual API method with parameters extracted from
43+
* prerequisite data created by Terraform. It validates HTTP response codes.
44+
*
45+
* Method name: test_{{operationId}}
46+
*/
47+
@Test
48+
@DisplayName("Test {{operationId}} operation")
49+
@SuppressWarnings("unchecked")
50+
public void test_{{operationId}}() throws Exception {
51+
// Load prerequisite data from Terraform
52+
Map<String, Object> prerequisiteData = terraformHelper.getPrerequisiteDataForTest("test_{{operationId}}");
53+
54+
// Fail if no prerequisite data found - tests require Terraform data
55+
if (prerequisiteData.isEmpty()) {
56+
throw new AssertionError("No prerequisite data found in Terraform output for test: test_{{operationId}}");
57+
}
58+
59+
// Execute the API method with parameters extracted from prerequisiteData
60+
try {
61+
{{#returnType}}
62+
{{{returnType}}} response = apiClient.{{operationId}}(
63+
{{#allParams}}
64+
{{#isBodyParam}}extractParameterWithType(prerequisiteData, "{{paramName}}", null, "{{datatype}}", "{{paramName}}"){{/isBodyParam}}{{^isBodyParam}}extractParameter(prerequisiteData, "{{paramName}}", null){{/isBodyParam}}{{^-last}}, {{/-last}}
65+
{{/allParams}}
66+
);
67+
68+
// Verify response is not null
69+
if (response == null) {
70+
throw new AssertionError("Response should not be null for {{operationId}}");
71+
}
72+
{{/returnType}}
73+
{{^returnType}}
74+
apiClient.{{operationId}}(
75+
{{#allParams}}
76+
{{#isBodyParam}}extractParameterWithType(prerequisiteData, "{{paramName}}", null, "{{datatype}}", "{{paramName}}"){{/isBodyParam}}{{^isBodyParam}}extractParameter(prerequisiteData, "{{paramName}}", null){{/isBodyParam}}{{^-last}}, {{/-last}}
77+
{{/allParams}}
78+
);
79+
{{/returnType}}
80+
} catch (ApiException e) {
81+
// Verify the HTTP response status code is valid (200, 201, 202, 204)
82+
int code = e.getCode();
83+
if (!(code == 200 || code == 201 || code == 202 || code == 204)) {
84+
throw new AssertionError("API returned unexpected status code: " + code);
85+
}
86+
}
87+
}
88+
89+
{{/operation}}
90+
{{/operations}}
91+
92+
/**
93+
* Helper method to extract a parameter from prerequisite data.
94+
* Delegates to TerraformHelper.extractParameter for smart field name resolution.
95+
*
96+
* @param prerequisiteData Map containing Terraform prerequisite data
97+
* @param paramName Name of the parameter to extract
98+
* @param defaultValue Default value if parameter is not found
99+
* @return The extracted parameter value or default value
100+
*/
101+
@SuppressWarnings("unchecked")
102+
private <T> T extractParameter(Map<String, Object> prerequisiteData, String paramName, T defaultValue) {
103+
Object value = TerraformHelper.extractParameter(prerequisiteData, paramName, defaultValue);
104+
return (T) value;
105+
}
106+
107+
/**
108+
* Helper method to extract a parameter with a specific target class for deserialization.
109+
* This is useful when a parameter can be multiple model types (e.g., Group vs AddGroupRequest).
110+
*
111+
* @param prerequisiteData Map containing Terraform prerequisite data
112+
* @param paramName Name of the parameter to extract
113+
* @param defaultValue Default value if parameter is not found
114+
* @param targetClassName Fully qualified class name for deserialization
115+
* @param typeHint Parameter name hint for intelligent type inference
116+
* @return The extracted parameter value deserialized to the target class, or default value
117+
*/
118+
@SuppressWarnings("unchecked")
119+
private <T> T extractParameterWithType(Map<String, Object> prerequisiteData, String paramName, T defaultValue, String targetClassName, String typeHint) {
120+
Object value = TerraformHelper.extractParameter(prerequisiteData, paramName, defaultValue, targetClassName, typeHint);
121+
return (T) value;
122+
}
123+
}

0 commit comments

Comments
 (0)