From 56d095006a8c17e10610f2650f2ef48ba228eaa3 Mon Sep 17 00:00:00 2001 From: ricardogrande-masmovil Date: Wed, 19 Nov 2025 17:52:14 +0100 Subject: [PATCH] fix: missing imports for array of files and date-time parameters (#1) --- .../codegen/languages/AbstractGoCodegen.java | 12 ++- .../codegen/go/AbstractGoCodegenTest.java | 99 +++++++++++++++++++ 2 files changed, 107 insertions(+), 4 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java index 415912c4ae79..16b909eab448 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java @@ -547,13 +547,15 @@ public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List arraySchema = new ArraySchema().items( + new BinarySchema() + ); + + ObjectSchema objectSchema = new ObjectSchema(); + objectSchema.addProperty("files", arraySchema); + mediaType.setSchema(objectSchema); + content.addMediaType("multipart/form-data", mediaType); + requestBody.setContent(content); + operation.setRequestBody(requestBody); + + codegen.setOpenAPI(openAPI); + + // Convert to CodegenOperation + CodegenOperation codegenOperation = codegen.fromOperation("/upload", "post", operation, null); + + // Create OperationsMap structure + OperationMap operationMap = new OperationMap(); + operationMap.setOperation(codegenOperation); + OperationsMap operationsMap = new OperationsMap(); + operationsMap.setOperation(operationMap); + operationsMap.setImports(new ArrayList<>()); + + // Post-process the operations + OperationsMap result = codegen.postProcessOperationsWithModels(operationsMap, Collections.emptyList()); + + // Assert that "os" import was added + List> imports = result.getImports(); + boolean hasOsImport = imports.stream() + .anyMatch(imp -> "os".equals(imp.get("import"))); + + Assert.assertTrue(hasOsImport, "Expected 'os' import to be added for array of binary files"); + } + + @Test(description = "test that time import is added for array of date-time parameters in operations") + public void testTimeImportForArrayOfDateTimeParametersInOperations() { + // Create OpenAPI spec with array of date-time parameter + OpenAPI openAPI = new OpenAPI(); + openAPI.setComponents(new Components()); + + Operation operation = new Operation(); + Parameter parameter = new Parameter(); + parameter.setName("timestamps"); + parameter.setIn("query"); + + ArraySchema arraySchema = new ArraySchema(); + DateTimeSchema dateTimeSchema = new DateTimeSchema(); + arraySchema.setItems(dateTimeSchema); + parameter.setSchema(arraySchema); + + operation.addParametersItem(parameter); + + codegen.setOpenAPI(openAPI); + + // Convert to CodegenOperation + CodegenOperation codegenOperation = codegen.fromOperation("/events", "get", operation, null); + + // Create OperationsMap structure + OperationMap operationMap = new OperationMap(); + operationMap.setOperation(codegenOperation); + OperationsMap operationsMap = new OperationsMap(); + operationsMap.setOperation(operationMap); + operationsMap.setImports(new ArrayList<>()); + + // Post-process the operations + OperationsMap result = codegen.postProcessOperationsWithModels(operationsMap, Collections.emptyList()); + + // Assert that "time" import was added + List> imports = result.getImports(); + boolean hasTimeImport = imports.stream() + .anyMatch(imp -> "time".equals(imp.get("import"))); + + Assert.assertTrue(hasTimeImport, "Expected 'time' import to be added for array of date-time parameters"); + } }