Skip to content

Commit 93cdbce

Browse files
author
Luuk Peters
committed
initial commit adding all files for test case
for https://github.com/spring-projects/spring-data-jpa/issues/3355
0 parents  commit 93cdbce

22 files changed

+1638
-0
lines changed

.editorconfig

Lines changed: 1120 additions & 0 deletions
Large diffs are not rendered by default.

.gitignore

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
target/
2+
!.mvn/wrapper/maven-wrapper.jar
3+
!**/src/main/**/target/
4+
!**/src/test/**/target/
5+
6+
### IntelliJ IDEA ###
7+
.idea/modules.xml
8+
.idea/jarRepositories.xml
9+
.idea/compiler.xml
10+
.idea/libraries/
11+
*.iws
12+
*.iml
13+
*.ipr
14+
15+
### Mac OS ###
16+
.DS_Store

.idea/.gitignore

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/encodings.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/misc.xml

Lines changed: 13 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/vcs.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.run/EngineTroubleIT.run.xml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<component name="ProjectRunConfigurationManager">
2+
<configuration default="false" name="EngineTroubleIT" type="JUnit" factoryName="JUnit" nameIsGenerated="true">
3+
<module name="engine-trouble" />
4+
<extension name="coverage">
5+
<pattern>
6+
<option name="PATTERN" value="nl.topicus.enginetrouble.*" />
7+
<option name="ENABLED" value="true" />
8+
</pattern>
9+
</extension>
10+
<option name="PACKAGE_NAME" value="nl.topicus.enginetrouble" />
11+
<option name="MAIN_CLASS_NAME" value="nl.topicus.enginetrouble.EngineTroubleIT" />
12+
<option name="METHOD_NAME" value="" />
13+
<option name="TEST_OBJECT" value="class" />
14+
<method v="2">
15+
<option name="Make" enabled="true" />
16+
</method>
17+
</configuration>
18+
</component>

.run/mvn-clean-package.run.xml

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<component name="ProjectRunConfigurationManager">
2+
<configuration default="false" name="mvn-clean-package" type="MavenRunConfiguration" factoryName="Maven">
3+
<MavenSettings>
4+
<option name="myGeneralSettings" />
5+
<option name="myRunnerSettings">
6+
<MavenRunnerSettings>
7+
<option name="delegateBuildToMaven" value="false" />
8+
<option name="environmentProperties">
9+
<map />
10+
</option>
11+
<option name="jreName" value="#USE_PROJECT_JDK" />
12+
<option name="mavenProperties">
13+
<map />
14+
</option>
15+
<option name="passParentEnv" value="true" />
16+
<option name="runMavenInBackground" value="true" />
17+
<option name="skipTests" value="false" />
18+
<option name="vmOptions" value="" />
19+
</MavenRunnerSettings>
20+
</option>
21+
<option name="myRunnerParameters">
22+
<MavenRunnerParameters>
23+
<option name="cmdOptions" />
24+
<option name="profiles">
25+
<set />
26+
</option>
27+
<option name="goals">
28+
<list>
29+
<option value="clean" />
30+
<option value="package" />
31+
<option value="-am" />
32+
</list>
33+
</option>
34+
<option name="multimoduleDir" />
35+
<option name="pomFileName" />
36+
<option name="profilesMap">
37+
<map />
38+
</option>
39+
<option name="projectsCmdOptionValues">
40+
<list />
41+
</option>
42+
<option name="resolveToWorkspace" value="false" />
43+
<option name="workingDirPath" value="$PROJECT_DIR$" />
44+
</MavenRunnerParameters>
45+
</option>
46+
</MavenSettings>
47+
<method v="2" />
48+
</configuration>
49+
</component>
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<component name="ProjectRunConfigurationManager">
2+
<configuration default="false" name="start-engine-trouble-application" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
3+
<option name="ACTIVE_PROFILES" value="local" />
4+
<envs>
5+
<env name="DB_PASSWORD" value="engine-trouble" />
6+
<env name="DB_URL" value="jdbc:postgresql://localhost:5432/engine-trouble" />
7+
<env name="DB_USER" value="engine-trouble" />
8+
</envs>
9+
<module name="engine-trouble" />
10+
<option name="SPRING_BOOT_MAIN_CLASS" value="nl.topicus.enginetrouble.EngineTroubleApplication" />
11+
<method v="2">
12+
<option name="Make" enabled="true" />
13+
</method>
14+
</configuration>
15+
</component>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<component name="ProjectRunConfigurationManager">
2+
<configuration default="false" name="start-postgresql-docker-container" type="docker-deploy" factoryName="docker-compose.yml" server-name="Docker">
3+
<deployment type="docker-compose.yml">
4+
<settings>
5+
<option name="envFilePath" value="" />
6+
<option name="commandLineOptions" value="--build" />
7+
<option name="sourceFilePath" value="docker-compose.yaml" />
8+
</settings>
9+
</deployment>
10+
<method v="2" />
11+
</configuration>
12+
</component>

docker-compose.yaml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
version: "3.9"
2+
services:
3+
engine-trouble-postgres:
4+
image: postgres:15.2-alpine
5+
environment:
6+
- TZ=Europe/Amsterdam
7+
- PGTZ=Europe/Amsterdam
8+
- POSTGRES_USER=engine-trouble
9+
- POSTGRES_PASSWORD=engine-trouble
10+
ports:
11+
- "5432:5432"

pom.xml

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
3+
<modelVersion>4.0.0</modelVersion>
4+
<parent>
5+
<groupId>org.springframework.boot</groupId>
6+
<artifactId>spring-boot-starter-parent</artifactId>
7+
<version>3.2.2</version>
8+
<relativePath/>
9+
</parent>
10+
11+
<groupId>nl.topicus.engine-trouble</groupId>
12+
<artifactId>engine-trouble</artifactId>
13+
<version>2024.1.0-SNAPSHOT</version>
14+
15+
<properties>
16+
<java.version>21</java.version>
17+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
18+
19+
<rest-assured.version>5.3.0</rest-assured.version>
20+
21+
<maven.compiler.source>21</maven.compiler.source>
22+
<maven.compiler.target>21</maven.compiler.target>
23+
</properties>
24+
25+
<dependencies>
26+
<dependency>
27+
<groupId>org.springframework.boot</groupId>
28+
<artifactId>spring-boot-starter-web</artifactId>
29+
</dependency>
30+
<dependency>
31+
<groupId>org.springframework.boot</groupId>
32+
<artifactId>spring-boot-starter-data-jdbc</artifactId>
33+
</dependency>
34+
<dependency>
35+
<groupId>org.springframework.boot</groupId>
36+
<artifactId>spring-boot-starter-validation</artifactId>
37+
</dependency>
38+
<dependency>
39+
<groupId>org.springframework.boot</groupId>
40+
<artifactId>spring-boot-starter-actuator</artifactId>
41+
</dependency>
42+
<dependency>
43+
<groupId>org.springframework.boot</groupId>
44+
<artifactId>spring-boot-starter-test</artifactId>
45+
</dependency>
46+
<dependency>
47+
<groupId>org.springframework.boot</groupId>
48+
<artifactId>spring-boot-starter-aop</artifactId>
49+
</dependency>
50+
<dependency>
51+
<groupId>net.logstash.logback</groupId>
52+
<artifactId>logstash-logback-encoder</artifactId>
53+
<version>7.3</version>
54+
</dependency>
55+
<dependency>
56+
<groupId>org.liquibase</groupId>
57+
<artifactId>liquibase-core</artifactId>
58+
</dependency>
59+
<dependency>
60+
<groupId>org.postgresql</groupId>
61+
<artifactId>postgresql</artifactId>
62+
</dependency>
63+
<dependency>
64+
<groupId>io.rest-assured</groupId>
65+
<artifactId>rest-assured</artifactId>
66+
<version>${rest-assured.version}</version>
67+
</dependency>
68+
</dependencies>
69+
70+
<build>
71+
<pluginManagement>
72+
<plugins>
73+
<plugin>
74+
<groupId>org.openapitools</groupId>
75+
<artifactId>openapi-generator-maven-plugin</artifactId>
76+
<version>7.2.0</version>
77+
</plugin>
78+
</plugins>
79+
</pluginManagement>
80+
<plugins>
81+
<plugin>
82+
<groupId>org.springframework.boot</groupId>
83+
<artifactId>spring-boot-maven-plugin</artifactId>
84+
</plugin>
85+
</plugins>
86+
</build>
87+
</project>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package nl.topicus.enginetrouble;
2+
3+
import org.springframework.boot.SpringApplication;
4+
import org.springframework.boot.autoconfigure.SpringBootApplication;
5+
6+
@SpringBootApplication
7+
public class EngineTroubleApplication {
8+
public static void main(String[] args) {
9+
SpringApplication.run(EngineTroubleApplication.class, args);
10+
}
11+
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package nl.topicus.enginetrouble.controllers;
2+
3+
import java.util.Set;
4+
import java.util.UUID;
5+
6+
import org.slf4j.Logger;
7+
import org.slf4j.LoggerFactory;
8+
import org.springframework.http.ResponseEntity;
9+
import org.springframework.web.bind.annotation.PostMapping;
10+
import org.springframework.web.bind.annotation.RestController;
11+
12+
import nl.topicus.enginetrouble.core.EngineTroubleRepository;
13+
import nl.topicus.enginetrouble.core.model.Car;
14+
import nl.topicus.enginetrouble.core.model.Engine;
15+
import nl.topicus.enginetrouble.core.model.Piston;
16+
17+
@RestController
18+
public class EngineTroubleController {
19+
private static final Logger LOGGER = LoggerFactory.getLogger(EngineTroubleController.class);
20+
21+
private final EngineTroubleRepository engineTroubleRepository;
22+
23+
public EngineTroubleController(EngineTroubleRepository engineTroubleRepository) {
24+
this.engineTroubleRepository = engineTroubleRepository;
25+
}
26+
27+
@PostMapping("/engine-trouble")
28+
public ResponseEntity<String> engineTroublePost() {
29+
final var carWithoutEngine = new Car(null, UUID.randomUUID().toString(), null);
30+
engineTroubleRepository.save(carWithoutEngine);
31+
32+
final var car = new Car(
33+
null,
34+
UUID.randomUUID().toString(),
35+
new Engine(
36+
null,
37+
Set.of(
38+
new Piston(
39+
null,
40+
"piston1"
41+
),
42+
new Piston(
43+
null,
44+
"piston2"
45+
),
46+
new Piston(
47+
null,
48+
"piston3"
49+
)
50+
)
51+
));
52+
final var engine = car.engine();
53+
LOGGER.info("Number of pistons in engine: {}", engine.pistons().size());
54+
55+
engineTroubleRepository.save(car);
56+
57+
final var carFound = engineTroubleRepository.findByReference(car.reference()).orElseThrow(() -> new RuntimeException("No car with id [" + car.reference() + "] could be found."));
58+
final var engineWithoutPistons = carFound.engine();
59+
if (engineWithoutPistons.pistons().isEmpty()) {
60+
LOGGER.error("PISTONS WERE STOLEN FROM ENGINE");
61+
return ResponseEntity.internalServerError().build();
62+
}
63+
LOGGER.info("Number of pistons in engine: {}", engineWithoutPistons.pistons().size());
64+
return ResponseEntity.ok(carFound.reference());
65+
}
66+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package nl.topicus.enginetrouble.core;
2+
3+
import java.util.Optional;
4+
5+
import org.springframework.data.repository.CrudRepository;
6+
import org.springframework.stereotype.Repository;
7+
8+
import nl.topicus.enginetrouble.core.model.Car;
9+
10+
@Repository
11+
public interface EngineTroubleRepository extends CrudRepository<Car, Long> {
12+
13+
Optional<Car> findByReference(String reference);
14+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package nl.topicus.enginetrouble.core.model;
2+
3+
import org.springframework.data.annotation.Id;
4+
5+
public record Car(@Id Long id,
6+
String reference,
7+
Engine engine) {
8+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package nl.topicus.enginetrouble.core.model;
2+
3+
import java.util.Set;
4+
5+
import org.springframework.data.annotation.Id;
6+
7+
public record Engine(@Id Long id,
8+
Set<Piston> pistons) {
9+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package nl.topicus.enginetrouble.core.model;
2+
3+
import org.springframework.data.annotation.Id;
4+
5+
public record Piston(@Id Long id,
6+
String name) {
7+
}

0 commit comments

Comments
 (0)