Skip to content

Commit 00184fd

Browse files
committed
Enhance oneOf test with comprehensive assertions
Add detailed assertions for sealed traits, discriminators, Scala 3 syntax, edge cases, and verify inlined members are not in separate files
1 parent 1d8ef81 commit 00184fd

1 file changed

Lines changed: 69 additions & 2 deletions

File tree

modules/openapi-generator/src/test/java/org/openapitools/codegen/scala/ScalaHttp4sClientCodegenTest.java

Lines changed: 69 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,8 +170,75 @@ public void oneOfWithDiscriminatorTest() throws IOException {
170170

171171
List<File> files = generator.opts(clientOptInput).generate();
172172

173-
// Verify that oneOf models were generated
174-
assertTrue(files.size() > 0);
173+
// Verify expected oneOf model files are generated
174+
TestUtils.ensureContainsFile(files, output, "src/main/scala/org/openapitools/client/models/FruitReqDisc.scala");
175+
TestUtils.ensureContainsFile(files, output, "src/main/scala/org/openapitools/client/models/FruitInlineDisc.scala");
176+
TestUtils.ensureContainsFile(files, output, "src/main/scala/org/openapitools/client/models/FruitOneOfEnumMappingDisc.scala");
177+
178+
// Verify edge case files (regular traits)
179+
TestUtils.ensureContainsFile(files, output, "src/main/scala/org/openapitools/client/models/FruitOneOfDisc.scala");
180+
TestUtils.ensureContainsFile(files, output, "src/main/scala/org/openapitools/client/models/FruitType.scala");
181+
182+
// Read and verify sealed trait with inlined members (common case)
183+
File fruitReqDiscFile = new File(output, "src/main/scala/org/openapitools/client/models/FruitReqDisc.scala");
184+
String fruitReqDiscContent = Files.readString(fruitReqDiscFile.toPath());
185+
186+
// Assert sealed trait keyword
187+
assertTrue(fruitReqDiscContent.contains("sealed trait FruitReqDisc"),
188+
"FruitReqDisc should be a sealed trait");
189+
190+
// Assert inlined case classes in same file
191+
assertTrue(fruitReqDiscContent.contains("case class AppleReqDisc"),
192+
"AppleReqDisc should be inlined in FruitReqDisc file");
193+
assertTrue(fruitReqDiscContent.contains("case class BananaReqDisc"),
194+
"BananaReqDisc should be inlined in FruitReqDisc file");
195+
196+
// Assert extends relationship
197+
assertTrue(fruitReqDiscContent.contains("extends FruitReqDisc"),
198+
"Inlined classes should extend parent trait");
199+
200+
// Assert discriminator handling in encoder
201+
assertTrue(fruitReqDiscContent.contains("case obj: AppleReqDisc => obj.asJson.mapObject"),
202+
"Encoder should handle discriminator");
203+
assertTrue(fruitReqDiscContent.contains("\"fruitType\""),
204+
"Discriminator property name should be present");
205+
206+
// Assert discriminator handling in decoder
207+
assertTrue(fruitReqDiscContent.contains("cursor.downField(\"fruitType\")"),
208+
"Decoder should read discriminator property");
209+
assertTrue(fruitReqDiscContent.contains("case \"AppleReqDisc\" => cursor.as[AppleReqDisc]"),
210+
"Decoder should handle discriminator values");
211+
assertTrue(fruitReqDiscContent.contains("DecodingFailure"),
212+
"Decoder should handle unknown discriminator values");
213+
214+
// Assert Scala 3 syntax
215+
assertTrue(fruitReqDiscContent.contains("import cats.syntax.functor.*"),
216+
"Should use Scala 3 wildcard import syntax");
217+
assertTrue(fruitReqDiscContent.contains("given encoder"),
218+
"Should use Scala 3 given syntax");
219+
220+
// Read and verify regular trait (edge case)
221+
File fruitOneOfDiscFile = new File(output, "src/main/scala/org/openapitools/client/models/FruitOneOfDisc.scala");
222+
String fruitOneOfDiscContent = Files.readString(fruitOneOfDiscFile.toPath());
223+
224+
// Assert regular trait (not sealed) for edge case
225+
assertTrue(fruitOneOfDiscContent.contains("trait FruitOneOfDisc"),
226+
"FruitOneOfDisc should be a trait");
227+
assertFalse(fruitOneOfDiscContent.contains("sealed trait FruitOneOfDisc"),
228+
"FruitOneOfDisc should NOT be sealed (edge case)");
229+
230+
// Verify that inlined members don't have separate files
231+
TestUtils.ensureDoesNotContainFile(files, output, "src/main/scala/org/openapitools/client/models/AppleReqDisc.scala");
232+
TestUtils.ensureDoesNotContainFile(files, output, "src/main/scala/org/openapitools/client/models/BananaReqDisc.scala");
233+
234+
// Verify discriminator mapping case
235+
File fruitMappingFile = new File(output, "src/main/scala/org/openapitools/client/models/FruitOneOfEnumMappingDisc.scala");
236+
String fruitMappingContent = Files.readString(fruitMappingFile.toPath());
237+
238+
assertTrue(fruitMappingContent.contains("case \"APPLE\" =>"),
239+
"Discriminator mapping should use mapped values");
240+
assertTrue(fruitMappingContent.contains("case \"BANANA\" =>"),
241+
"Discriminator mapping should use mapped values");
175242
}
176243

177244
}

0 commit comments

Comments
 (0)