Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

support for Jakarta persistence layer (JPL) annotations #835

Merged
merged 10 commits into from
Nov 15, 2023

Large diffs are not rendered by default.

16 changes: 16 additions & 0 deletions e2e-tests/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -68,4 +68,20 @@
</pluginManagement>
</build>

<profiles>
jgaleotti marked this conversation as resolved.
Show resolved Hide resolved
<profile>
<id>Configs for JDK >= 17</id>
<activation>
<jdk>[17,)</jdk>
</activation>
<!--
This module should be enabled after Spring2 dependencies
are pulled down to each e2e project
-->
<!-- <modules>-->
<!-- <module>spring-rest-jakarta</module>-->
<!-- </modules>-->
</profile>
</profiles>

</project>
74 changes: 74 additions & 0 deletions e2e-tests/spring-rest-jakarta/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
<groupId>org.evomaster</groupId>
<artifactId>evomaster-e2e-tests</artifactId>
<version>2.0.1-SNAPSHOT</version>
</parent>

<artifactId>evomaster-e2e-tests-spring-rest-jakarta</artifactId>
<packaging>jar</packaging>

<dependencies>

<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
<version>${jakarta.validation-api.version}</version>
</dependency>

<dependency>
<groupId>jakarta.persistence</groupId>
<artifactId>jakarta.persistence-api</artifactId>
<version>${jakarta.persistence-api.version}</version>
</dependency>

<dependency>
<groupId>jakarta.ws.rs</groupId>
<artifactId>jakarta.ws.rs-api</artifactId>
<version>${jakarta.ws.rs-api.version}</version>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>${springboot3.version}</version>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${springboot3.version}</version>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
<version>${springboot3.version}</version>
</dependency>

<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>

<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
</dependency>

</dependencies>


<profiles>
<profile>
<id>skipE2E_V2</id>
<properties>
<maven.test.skip>true</maven.test.skip>
</properties>
</profile>
</profiles>

</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.foo.jakarta;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;


@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
public class PersonApplication {

public static void main(String[] args) {
SpringApplication.run(PersonApplication.class, args);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package com.foo.jakarta;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.ElementCollection;
import jakarta.persistence.Id;
import jakarta.validation.constraints.*;

import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import java.time.LocalDate;
import java.util.List;

@Entity
public class PersonEntity {

@Id
@GeneratedValue
private Long id;

@Min(value = 0)
public int age;

@Max(value = 200)
public int maxAge;

@NotBlank
public String name;

@Email
public String emailAddress;

@Negative
public int debt;

@NegativeOrZero
public int netWorth;

@Positive
public int income;

@PositiveOrZero
public int savings;

@Future
public LocalDate birthDate;

@FutureOrPresent
public LocalDate nextAppointment;

@Past
public LocalDate graduationDate;

@PastOrPresent
public LocalDate lastUpdate;

@Null
public Object nullField;

@DecimalMin(value = "0.0", message = "Value must be at least 0.0")
@DecimalMax(value = "1000000.0", message = "Value must be at most 1,000,000.0")
private Float annualIncome;

@Pattern(regexp = "^[A-Za-z]+$", message = "Only alphabetic characters are allowed")
private String nickname;

@Size(min = 0, max = 100, message = "Must contain between 0 and 100 items")
@ElementCollection
private List<String> otherDetails;

@Digits(integer = 6, fraction = 2, message = "Invalid format, max 6 digits with 2 decimal places")
private float weight;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.foo.jakarta;

import org.springframework.data.repository.CrudRepository;

import java.util.List;

public interface PersonRepository extends CrudRepository<PersonEntity, Long> {

List<PersonEntity> findByName(String name);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.foo.jakarta;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import jakarta.ws.rs.core.MediaType;
import java.util.List;

@RestController
@RequestMapping(path = "/api/jakarta/person")
public class PersonRest {

@Autowired
private PersonRepository repository;


@RequestMapping(
method = RequestMethod.POST
)
public ResponseEntity<Void> post(String name) {
PersonEntity entity = new PersonEntity();
entity.name = name;
repository.save(entity);
return ResponseEntity.status(200).build();
}


@RequestMapping(
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON
)
public ResponseEntity<Void> get(String name) {

List<PersonEntity> list = repository.findByName(name);
if (list.isEmpty()) {
return ResponseEntity.status(400).build();
} else {
return ResponseEntity.status(200).build();
}
}
}
5 changes: 4 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,7 @@
<swagger.parser-v3.version>2.1.8</swagger.parser-v3.version>
<swagger.annotations.version>2.2.7</swagger.annotations.version>
<springboot.version>2.5.4</springboot.version>
<springboot3.version>3.1.5</springboot3.version>
<springfox.version>3.0.0</springfox.version>
<springdoc.version>1.6.9</springdoc.version>
<jetty.version>9.4.29.v20200521</jetty.version>
Expand Down Expand Up @@ -158,12 +159,14 @@
<okhttp.client.version>2.4.0</okhttp.client.version>
<dns.cache.manipulator.version>1.8.0</dns.cache.manipulator.version>
<jakarta.annotation.version>2.0.0</jakarta.annotation.version>
<jakarta.validation-api.version>3.0.2</jakarta.validation-api.version>
<jakarta.persistence-api.version>3.1.0</jakarta.persistence-api.version>
<jakarta.ws.rs-api.version>3.1.0</jakarta.ws.rs-api.version>
<micronaut.version>3.2.7</micronaut.version>
<micronaut.openapi.version>3.2.0</micronaut.openapi.version>
<micronaut.test.version>3.0.5</micronaut.test.version>
<org.mongodb.version>4.2.3</org.mongodb.version>
<org.locationtech.jts.version>1.19.0</org.locationtech.jts.version>

</properties>


Expand Down