diff --git a/tzatziki-common/src/main/java/com/decathlon/tzatziki/utils/Types.java b/tzatziki-common/src/main/java/com/decathlon/tzatziki/utils/Types.java index 2f06ab98..3133aa92 100644 --- a/tzatziki-common/src/main/java/com/decathlon/tzatziki/utils/Types.java +++ b/tzatziki-common/src/main/java/com/decathlon/tzatziki/utils/Types.java @@ -8,7 +8,9 @@ import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.lang.reflect.TypeVariable; +import java.util.Arrays; import java.util.Map; +import java.util.Objects; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -124,5 +126,18 @@ public String toString() { return "%s<%s>".formatted(rawType.getTypeName(), Stream.of(actualTypeArguments).map(Type::getTypeName).collect(Collectors.joining(", "))); } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + ParameterizedTypeImpl that = (ParameterizedTypeImpl) o; + return Objects.equals(rawType, that.rawType) && Objects.deepEquals(actualTypeArguments, that.actualTypeArguments); + } + + @Override + public int hashCode() { + return Objects.hash(rawType, Arrays.hashCode(actualTypeArguments)); + } } } diff --git a/tzatziki-spring-jpa/src/main/java/com/decathlon/tzatziki/steps/SpringJPASteps.java b/tzatziki-spring-jpa/src/main/java/com/decathlon/tzatziki/steps/SpringJPASteps.java index ddda5ac4..7cb49ccf 100644 --- a/tzatziki-spring-jpa/src/main/java/com/decathlon/tzatziki/steps/SpringJPASteps.java +++ b/tzatziki-spring-jpa/src/main/java/com/decathlon/tzatziki/steps/SpringJPASteps.java @@ -4,12 +4,11 @@ import io.cucumber.java.Before; import io.cucumber.java.en.Given; import io.cucumber.java.en.Then; +import jakarta.annotation.Nullable; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.reflect.TypeUtils; import org.apache.commons.lang3.tuple.Pair; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.annotation.AnnotationUtils; import org.springframework.data.domain.Sort; import org.springframework.data.repository.CrudRepository; @@ -48,8 +47,7 @@ public class SpringJPASteps { public static boolean autoclean = true; public static List schemasToClean = List.of("public"); - @Autowired(required = false) - private List entityManagerFactories; + private final List entityManagerFactories; private Map> crudRepositoryByClass; private Map entityClassByTableName; @@ -61,9 +59,10 @@ public class SpringJPASteps { JacksonMapper.with(objectMapper -> objectMapper.registerModule(PersistenceUtil.getMapperModule())); } - public SpringJPASteps(ObjectSteps objects, SpringSteps spring) { + public SpringJPASteps(ObjectSteps objects, SpringSteps spring, @Nullable List entityManagerFactories) { this.objects = objects; this.spring = spring; + this.entityManagerFactories = entityManagerFactories; } @Before diff --git a/tzatziki-spring-kafka/src/main/java/com/decathlon/tzatziki/steps/KafkaSteps.java b/tzatziki-spring-kafka/src/main/java/com/decathlon/tzatziki/steps/KafkaSteps.java index 8ef0555e..d25bfceb 100644 --- a/tzatziki-spring-kafka/src/main/java/com/decathlon/tzatziki/steps/KafkaSteps.java +++ b/tzatziki-spring-kafka/src/main/java/com/decathlon/tzatziki/steps/KafkaSteps.java @@ -7,6 +7,7 @@ import io.cucumber.java.en.Given; import io.cucumber.java.en.Then; import io.cucumber.java.en.When; +import jakarta.annotation.Nullable; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.apache.avro.Schema; @@ -24,11 +25,8 @@ import org.apache.kafka.common.TopicPartition; import org.apache.kafka.common.header.Header; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import org.junit.Assert; import org.junit.jupiter.api.Assertions; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.kafka.config.KafkaListenerEndpointRegistry; import org.springframework.kafka.core.ConsumerFactory; import org.springframework.kafka.core.KafkaTemplate; import org.springframework.kafka.support.SendResult; @@ -58,7 +56,6 @@ import static org.assertj.core.api.Assertions.assertThat; @Slf4j -@SuppressWarnings({"SpringJavaAutowiredMembersInspection", "unchecked"}) public class KafkaSteps { public static final String RECORD = "(json messages?|" + VARIABLE_PATTERN + ")"; @@ -99,30 +96,26 @@ public static String bootstrapServers() { private final ObjectSteps objects; - @Autowired(required = false) - private KafkaTemplate avroKeyMessageKafkaTemplate; + private final KafkaTemplate avroKeyMessageKafkaTemplate; - @Autowired(required = false) - private KafkaTemplate avroKafkaTemplate; + private final KafkaTemplate avroKafkaTemplate; - @Autowired(required = false) - private KafkaTemplate jsonKafkaTemplate; + private final KafkaTemplate jsonKafkaTemplate; - @Autowired(required = false) - List> avroJacksonConsumerFactories = new ArrayList<>(); + List> avroJacksonConsumerFactories; - @Autowired(required = false) - List> avroConsumerFactories = new ArrayList<>(); + List> avroConsumerFactories; - @Autowired(required = false) - List> jsonConsumerFactories = new ArrayList<>(); + List> jsonConsumerFactories; - @Autowired(required = false) - private KafkaListenerEndpointRegistry registry; - - - public KafkaSteps(ObjectSteps objects) { + public KafkaSteps(ObjectSteps objects, @Nullable KafkaTemplate avroKeyMessageKafkaTemplate, @Nullable KafkaTemplate avroKafkaTemplate, @Nullable KafkaTemplate jsonKafkaTemplate, Optional>> avroJacksonConsumerFactories, Optional>> avroConsumerFactories, Optional>> jsonConsumerFactories) { this.objects = objects; + this.avroKeyMessageKafkaTemplate = avroKeyMessageKafkaTemplate; + this.avroKafkaTemplate = avroKafkaTemplate; + this.jsonKafkaTemplate = jsonKafkaTemplate; + this.avroJacksonConsumerFactories = avroJacksonConsumerFactories.orElse(new ArrayList<>()); + this.avroConsumerFactories = avroConsumerFactories.orElse(new ArrayList<>()); + this.jsonConsumerFactories = jsonConsumerFactories.orElse(new ArrayList<>()); } public static String schemaRegistryUrl() { @@ -548,9 +541,10 @@ public List> asListOfRecordsWithHeaders(Object content) { public Schema getSchema(String name) { Object schema = objects.getOrSelf("_kafka.schemas." + name); - if (schema instanceof String && name.endsWith("s")) { - schema = objects.getOrSelf("_kafka.schemas." + name.substring(0, name.length() - 1)); + if (schema instanceof Schema avroSchema) { + return avroSchema; } + schema = objects.getOrSelf("_kafka.schemas." + name.substring(0, name.length() - 1)); assertThat(schema).isInstanceOf(Schema.class); return (Schema) schema; }