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
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,12 @@ private static void initDefaultValues(MappingConfig mappingConfig) {
mappingConfig.setModelValidationAnnotation(MappingConfigConstants.DEFAULT_VALIDATION_ANNOTATION);
}
if (mappingConfig.getGenerateBuilder() == null) {
mappingConfig.setGenerateBuilder(MappingConfigConstants.DEFAULT_BUILDER);
if (GeneratedLanguage.SCALA.equals(mappingConfig.getGeneratedLanguage())) {
// functional expression
mappingConfig.setGenerateBuilder(false);
} else {
mappingConfig.setGenerateBuilder(MappingConfigConstants.DEFAULT_BUILDER);
}
}
if (mappingConfig.getGenerateEqualsAndHashCode() == null) {
mappingConfig.setGenerateEqualsAndHashCode(MappingConfigConstants.DEFAULT_EQUALS_AND_HASHCODE);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ package ${package}
<#list annotations as annotation>
@${annotation}
</#list>
object ${className} extends Enumeration<#if implements?has_content> with<#if fields?has_content><#list implements as interface> ${interface}<#if interface_has_next> with </#if></#list></#if></#if> {
object ${className} extends Enumeration<#if implements?has_content> with<#list implements as interface> ${interface}<#if interface_has_next> with </#if></#list></#if> {

type ${className} = Value

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ import ${field.type}._
<#list annotations as annotation>
@${annotation}
</#list>
trait ${className}<#if implements?has_content> extends<#if fields?has_content><#list implements as interface> ${interface}<#if interface_has_next> with </#if></#list></#if></#if> {
trait ${className}<#if implements?has_content> extends<#list implements as interface> ${interface}<#if interface_has_next> with </#if></#list></#if> {

<#if fields?has_content>
<#list fields as field>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,33 +93,35 @@ class ${className} extends GraphQLParametrizedInput {
return false
}
val that = obj.asInstanceOf[${className}]
<#if fields?has_content>
return <#list fields as field>Objects.equals(${field.name}, that.${field.name})<#if field_has_next> &&
</#if></#list>
<#else>
<#if fields?has_content>
Seq(
<#list fields as field>Objects.equals(${field.name}, that.${field.name})<#if field_has_next>
, </#if></#list>
).forall(o => o)
<#else>
true
</#if>
</#if>

}

override def hashCode(): Int = {
<#if fields?has_content>
return Objects.hash(<#list fields as field>${field.name}<#if field_has_next>, </#if></#list>)
Objects.hash(<#list fields as field>${field.name}<#if field_has_next>, </#if></#list>)
<#else>
0
</#if>
}
</#if>

override def toString(): String = {
val joiner = new StringJoiner(", ", "(", ")")
<#if fields?has_content>
<#list fields as field>
if (${field.name} != null) {
joiner.add("${field.originalName}: " + GraphQLRequestSerializer.getEntry(${field.name}))
}
</#list>
</#if>
joiner.toString
<#if fields?has_content>
Seq(
<#list fields as field>if (${field.name} != null) "${field.originalName}: " + GraphQLRequestSerializer.getEntry(${field.name}) else ""<#if field_has_next>
, </#if></#list>
).filter(_ != "").mkString("(", ",", ")")
<#else>
"()"
</#if>
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -101,12 +101,13 @@ class ${className} extends GraphQLOperationRequest {
</#if>
}

<#if builder>
object ${className} {

final val OPERATION_NAME: String = "${operationName}"
final val OPERATION_TYPE: GraphQLOperation = GraphQLOperation.${operationType}

<#if builder>

def builder(): Builder = new Builder()

class Builder {
Expand Down Expand Up @@ -153,5 +154,5 @@ object ${className} {
}

}
}
</#if>
</#if>
}
30 changes: 6 additions & 24 deletions src/main/resources/templates/scala-lang/scalaClassGraphqlType.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -68,31 +68,13 @@ case class ${className}(

<#if toString>
override def toString(): String = {
val joiner = new StringJoiner(", ", "{ ", " }")
<#if fields?has_content>
<#list fields as field>
<#if MapperUtil.isScalaPrimitive(field.type)>
<#if toStringForRequest>
joiner.add("${field.originalName}: " + GraphQLRequestSerializer.getEntry(${field.name}))
<#else>
joiner.add("${field.originalName}: " + ${field.name})
<#if fields?has_content>
Seq(<#list fields as field>
<#if MapperUtil.isScalaPrimitive(field.type)><#if toStringForRequest>"${field.originalName}: " + GraphQLRequestSerializer.getEntry(${field.name}<#if field.serializeUsingObjectMapper>, true</#if>)<#else>"${field.originalName}: " + ${field.name}</#if><#else>if (${field.name} != null) <#if toStringForRequest>"${field.originalName}: " + GraphQLRequestSerializer.getEntry(${field.name}<#if field.serializeUsingObjectMapper>, true</#if>)<#else><#if field.type == "String"> "${field.originalName}: \"${field.name}\"" <#else> "${field.originalName}: ${field.name}"</#if></#if> else ""</#if><#if field_has_next>,</#if></#list>
).filter(_ != "").mkString("{", ",", "}")
<#else>
"{}"
</#if>
<#else>
if (${field.name} != null) {
<#if toStringForRequest>
joiner.add("${field.originalName}: " + GraphQLRequestSerializer.getEntry(${field.name}))
<#else>
<#if field.type == "String">
joiner.add("${field.originalName}: \"${field.name}\"")
<#else>
joiner.add(${field.originalName}: ${field.name}")
</#if>
</#if>
}
</#if>
</#list>
</#if>
joiner.toString
}
</#if>
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
package com.kobylynskyi.graphql.codegen.scala;

import com.kobylynskyi.graphql.codegen.GraphQLCodegen;
import com.kobylynskyi.graphql.codegen.TestUtils;
import com.kobylynskyi.graphql.codegen.model.GeneratedLanguage;
import com.kobylynskyi.graphql.codegen.model.MappingConfig;
import com.kobylynskyi.graphql.codegen.utils.Utils;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;

import java.io.File;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;

import static com.kobylynskyi.graphql.codegen.TestUtils.assertSameTrimmedContent;
import static java.util.Collections.singleton;
import static java.util.Collections.singletonList;
import static java.util.stream.Collectors.toList;
import static org.junit.jupiter.api.Assertions.assertEquals;

class GraphQLCodegenReactorToStringTest {

private final MappingConfig mappingConfig = new MappingConfig();

private final File outputBuildDir = new File("build/generated");
private final File outputJavaClassesDir = new File("build/generated/com/kobylynskyi/graphql/codegen/prot");

@AfterEach
void cleanup() {
Utils.deleteDir(outputBuildDir);
}

@Test
void generate_SetGenerateBuilder_FALSE() throws Exception {
mappingConfig.setGeneratedLanguage(GeneratedLanguage.SCALA);
mappingConfig.setPackageName("com.kobylynskyi.graphql.codegen.prot");
mappingConfig.setGenerateBuilder(false);// fix bug when, set generate builder = false, can not use object.OPERATION_NAME,
mappingConfig.setGenerateEqualsAndHashCode(true);
mappingConfig.setGenerateClient(true);
mappingConfig.setGenerateModelsForRootTypes(true);
mappingConfig.setApiNameSuffix("API");
new GraphQLCodegen(singletonList("src/test/resources/schemas/scala/restricted-words.graphqls"),
outputBuildDir, mappingConfig, TestUtils.getStaticGeneratedInfo()).generate();

File[] files = Objects.requireNonNull(outputJavaClassesDir.listFiles());
List<String> generatedFileNames = Arrays.stream(files).map(File::getName).filter(f -> f.equals("CaseQueryRequest.scala")).sorted().collect(toList());
assertEquals(singletonList("CaseQueryRequest.scala"), generatedFileNames);

for (File file : files) {
if (file.getName().equals("CaseQueryRequest.scala")) {
assertSameTrimmedContent(
new File("src/test/resources/expected-classes/scala/builder/CaseQueryRequest.scala.txt"), file);
}
}
}

@Test
void generate_SetGenerateClient_TRUE_WithoutUseObjectMapperForRequestSerialization() throws Exception {
mappingConfig.setGeneratedLanguage(GeneratedLanguage.SCALA);
mappingConfig.setPackageName("com.kobylynskyi.graphql.codegen.prot");
mappingConfig.setGenerateClient(true);
mappingConfig.setGenerateEqualsAndHashCode(true);
mappingConfig.setGenerateModelsForRootTypes(true);
mappingConfig.setApiNameSuffix("API");
mappingConfig.setGenerateBuilder(false);// fix bug when, set generate builder = false, can not use object.OPERATION_NAME,
new GraphQLCodegen(singletonList("src/test/resources/schemas/scala/restricted-words.graphqls"),
outputBuildDir, mappingConfig, TestUtils.getStaticGeneratedInfo()).generate();

File[] files = Objects.requireNonNull(outputJavaClassesDir.listFiles());
List<String> generatedFileNames = Arrays.stream(files).map(File::getName).filter(f -> Arrays.asList("QueryPrivateParametrizedInput.scala", "Synchronized.scala").contains(f)).sorted().collect(toList());
assertEquals(Arrays.asList("QueryPrivateParametrizedInput.scala", "Synchronized.scala"), generatedFileNames);

for (File file : files) {
if (Arrays.asList("QueryPrivateParametrizedInput.scala", "Synchronized.scala").contains(file.getName())) {
assertSameTrimmedContent(
new File(String.format("src/test/resources/expected-classes/scala/tostring/without-mapper/%s.txt", file.getName())),
file);
}
}
}

@Test
void generate_SetGenerateClient_TRUE() throws Exception {
mappingConfig.setGeneratedLanguage(GeneratedLanguage.SCALA);
mappingConfig.setPackageName("com.kobylynskyi.graphql.codegen.prot");
mappingConfig.setGenerateEqualsAndHashCode(true);
mappingConfig.setGenerateClient(true);
mappingConfig.setGenerateBuilder(false);// fix bug when, set generate builder = false, can not use object.OPERATION_NAME,
mappingConfig.setUseObjectMapperForRequestSerialization(singleton("TestEnum"));
mappingConfig.putCustomTypeMappingIfAbsent("DateTime", "java.time.ZonedDateTime");
mappingConfig.setGenerateApis(true);
mappingConfig.setGenerateModelsForRootTypes(true);
mappingConfig.setApiNameSuffix("API");

new GraphQLCodegen(singletonList("src/test/resources/schemas/scala/restricted-words.graphqls"),
outputBuildDir, mappingConfig, TestUtils.getStaticGeneratedInfo()).generate();

File[] files = Objects.requireNonNull(outputJavaClassesDir.listFiles());
List<String> generatedFileNames = Arrays.stream(files).map(File::getName).filter(f -> Arrays.asList("QueryPrivateParametrizedInput.scala", "Synchronized.scala").contains(f)).sorted().collect(toList());
assertEquals(Arrays.asList("QueryPrivateParametrizedInput.scala", "Synchronized.scala"), generatedFileNames);

for (File file : files) {
if (Arrays.asList("QueryPrivateParametrizedInput.scala", "Synchronized.scala").contains(file.getName())) {
assertSameTrimmedContent(
new File(String.format("src/test/resources/expected-classes/scala/tostring/%s.txt", file.getName())),
file);
}
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -18,46 +18,10 @@ case class AddLabelsToLabelableInput(
) {

override def toString(): String = {
val joiner = new StringJoiner(", ", "{ ", " }")
if (clientMutationId != null) {
joiner.add("clientMutationId: " + GraphQLRequestSerializer.getEntry(clientMutationId))
}
if (labelIds != null) {
joiner.add("labelIds: " + GraphQLRequestSerializer.getEntry(labelIds))
}
if (labelableId != null) {
joiner.add("labelableId: " + GraphQLRequestSerializer.getEntry(labelableId))
}
joiner.toString
Seq(
if (clientMutationId != null) "clientMutationId: " + GraphQLRequestSerializer.getEntry(clientMutationId) else "",
if (labelIds != null) "labelIds: " + GraphQLRequestSerializer.getEntry(labelIds) else "",
if (labelableId != null) "labelableId: " + GraphQLRequestSerializer.getEntry(labelableId) else ""
).filter(_ != "").mkString("{", ",", "}")
}
}

object AddLabelsToLabelableInput {

def builder(): AddLabelsToLabelableInput.Builder = new Builder()

class Builder {

private var clientMutationId: String = _
private var labelIds: Seq[String] = _
private var labelableId: String = _

def setClientMutationId(clientMutationId: String): Builder = {
this.clientMutationId = clientMutationId
this
}

def setLabelIds(labelIds: Seq[String]): Builder = {
this.labelIds = labelIds
this
}

def setLabelableId(labelableId: String): Builder = {
this.labelableId = labelableId
this
}

def build(): AddLabelsToLabelableInput = AddLabelsToLabelableInput(clientMutationId, labelIds, labelableId)

}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -55,28 +55,4 @@ object AddLabelsToLabelableMutationRequest {
final val OPERATION_NAME: String = "addLabelsToLabelable"
final val OPERATION_TYPE: GraphQLOperation = GraphQLOperation.MUTATION

def builder(): Builder = new Builder()

class Builder {

private var $alias: String = _
private var input: AddLabelsToLabelableInput = _

def alias(alias: String): Builder = {
this.$alias = alias
this
}

def setInput(input: AddLabelsToLabelableInput ): Builder = {
this.input = input
this
}

def build(): AddLabelsToLabelableMutationRequest = {
val obj = new AddLabelsToLabelableMutationRequest($alias)
obj.setInput(input)
obj
}

}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,37 +15,9 @@ case class AddLabelsToLabelablePayload(
) {

override def toString(): String = {
val joiner = new StringJoiner(", ", "{ ", " }")
if (clientMutationId != null) {
joiner.add("clientMutationId: " + GraphQLRequestSerializer.getEntry(clientMutationId))
}
if (labelable != null) {
joiner.add("labelable: " + GraphQLRequestSerializer.getEntry(labelable))
}
joiner.toString
Seq(
if (clientMutationId != null) "clientMutationId: " + GraphQLRequestSerializer.getEntry(clientMutationId) else "",
if (labelable != null) "labelable: " + GraphQLRequestSerializer.getEntry(labelable) else ""
).filter(_ != "").mkString("{", ",", "}")
}
}

object AddLabelsToLabelablePayload {

def builder(): AddLabelsToLabelablePayload.Builder = new Builder()

class Builder {

private var clientMutationId: String = _
private var labelable: Labelable = _

def setClientMutationId(clientMutationId: String): Builder = {
this.clientMutationId = clientMutationId
this
}

def setLabelable(labelable: Labelable): Builder = {
this.labelable = labelable
this
}

def build(): AddLabelsToLabelablePayload = AddLabelsToLabelablePayload(clientMutationId, labelable)

}
}
}
Loading