diff --git a/pom.xml b/pom.xml index 3f8eeb6264..91af48f79f 100644 --- a/pom.xml +++ b/pom.xml @@ -111,7 +111,7 @@ selenium-junit-testng solr spark-java - + spring-5 spring-akka spring-amqp spring-all diff --git a/spring-5/.gitignore b/spring-5/.gitignore index 83c05e60c8..dec013dfa4 100644 --- a/spring-5/.gitignore +++ b/spring-5/.gitignore @@ -1,6 +1,5 @@ -*.class - #folders# +.idea /target /neoDb* /data diff --git a/spring-5/src/main/java/com/baeldung/functional/FormHandler.java b/spring-5/src/main/java/com/baeldung/functional/FormHandler.java index c44db76f56..5c3890d412 100644 --- a/spring-5/src/main/java/com/baeldung/functional/FormHandler.java +++ b/spring-5/src/main/java/com/baeldung/functional/FormHandler.java @@ -18,33 +18,24 @@ public class FormHandler { return request .body(toFormData()) .map(MultiValueMap::toSingleValueMap) - .map(formData -> { - System.out.println("form data: " + formData.toString()); - if ("baeldung".equals(formData.get("user")) && "you_know_what_to_do".equals(formData.get("token"))) { - return ok() - .body(Mono.just("welcome back!"), String.class) - .block(); - } - return ServerResponse - .badRequest() - .build() - .block(); - }); + .filter(formData -> "baeldung".equals(formData.get("user"))) + .filter(formData -> "you_know_what_to_do".equals(formData.get("token"))) + .flatMap(formData -> ok().body(Mono.just("welcome back!"), String.class)) + .or(ServerResponse.badRequest().build()); } Mono handleUpload(ServerRequest request) { return request .body(toDataBuffers()) .collectList() - .map(dataBuffers -> { + .flatMap(dataBuffers -> { AtomicLong atomicLong = new AtomicLong(0); dataBuffers.forEach(d -> atomicLong.addAndGet(d .asByteBuffer() .array().length)); - System.out.println("data length:" + atomicLong.get()); + return ok() - .body(fromObject(atomicLong.toString())) - .block(); + .body(fromObject(atomicLong.toString())); }); } } diff --git a/spring-5/src/main/java/com/baeldung/web/FooController.java b/spring-5/src/main/java/com/baeldung/web/FooController.java index d0b69e707e..0e7c94bd8f 100644 --- a/spring-5/src/main/java/com/baeldung/web/FooController.java +++ b/spring-5/src/main/java/com/baeldung/web/FooController.java @@ -1,26 +1,15 @@ package com.baeldung.web; -import java.util.List; -import java.util.Optional; - -import javax.validation.constraints.Max; -import javax.validation.constraints.Min; - +import com.baeldung.persistence.FooRepository; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.http.HttpStatus; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.ResponseStatus; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import com.baeldung.persistence.FooRepository; +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import java.util.List; @RestController("/foos") public class FooController { @@ -30,30 +19,29 @@ public class FooController { // API - read - @RequestMapping(method = RequestMethod.GET, value = "/foos/{id}") + @GetMapping("/foos/{id}") @ResponseBody @Validated public Foo findById(@PathVariable @Min(0) final long id) { - return repo.findOne(id).orElse(null); + return repo.findById(id).orElse(null); } - @RequestMapping(method = RequestMethod.GET) + @GetMapping @ResponseBody public List findAll() { return repo.findAll(); } - @RequestMapping(params = { "page", "size" }, method = RequestMethod.GET) + @GetMapping(params = { "page", "size" }) @ResponseBody @Validated public List findPaginated(@RequestParam("page") @Min(0) final int page, @Max(100) @RequestParam("size") final int size) { - final Page resultPage = repo.findAll(new PageRequest(page, size)); - return resultPage.getContent(); + return repo.findAll(PageRequest.of(page, size)).getContent(); } // API - write - @RequestMapping(method = RequestMethod.PUT, value = "/foos/{id}") + @PutMapping("/foos/{id}") @ResponseStatus(HttpStatus.OK) @ResponseBody public Foo update(@PathVariable("id") final String id, @RequestBody final Foo foo) { diff --git a/spring-5/src/test/java/com/baeldung/IntegrationTestExample1.java b/spring-5/src/test/java/com/baeldung/Example1IntegrationTest.java similarity index 93% rename from spring-5/src/test/java/com/baeldung/IntegrationTestExample1.java rename to spring-5/src/test/java/com/baeldung/Example1IntegrationTest.java index 0a27be4a95..8b9e66213f 100644 --- a/spring-5/src/test/java/com/baeldung/IntegrationTestExample1.java +++ b/spring-5/src/test/java/com/baeldung/Example1IntegrationTest.java @@ -7,7 +7,7 @@ import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest -public class IntegrationTestExample1 { +public class Example1IntegrationTest { @Test public void test1a() { diff --git a/spring-5/src/test/java/com/baeldung/IntegrationTestExample2.java b/spring-5/src/test/java/com/baeldung/Example2IntegrationTest.java similarity index 93% rename from spring-5/src/test/java/com/baeldung/IntegrationTestExample2.java rename to spring-5/src/test/java/com/baeldung/Example2IntegrationTest.java index 0bb2d47ef5..6ed53ca4e9 100644 --- a/spring-5/src/test/java/com/baeldung/IntegrationTestExample2.java +++ b/spring-5/src/test/java/com/baeldung/Example2IntegrationTest.java @@ -7,7 +7,7 @@ import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest -public class IntegrationTestExample2 { +public class Example2IntegrationTest { @Test public void test1a() { diff --git a/spring-5/src/test/java/com/baeldung/ParallelTestExample.java b/spring-5/src/test/java/com/baeldung/ParallelIntegrationTest.java similarity index 62% rename from spring-5/src/test/java/com/baeldung/ParallelTestExample.java rename to spring-5/src/test/java/com/baeldung/ParallelIntegrationTest.java index e73b8d4649..1ce96de4ef 100644 --- a/spring-5/src/test/java/com/baeldung/ParallelTestExample.java +++ b/spring-5/src/test/java/com/baeldung/ParallelIntegrationTest.java @@ -5,18 +5,18 @@ import org.junit.experimental.ParallelComputer; import org.junit.runner.Computer; import org.junit.runner.JUnitCore; -public class ParallelTestExample { +public class ParallelIntegrationTest { @Test public void runTests() { - final Class[] classes = { IntegrationTestExample1.class, IntegrationTestExample2.class }; + final Class[] classes = { Example1IntegrationTest.class, Example2IntegrationTest.class }; JUnitCore.runClasses(new Computer(), classes); } @Test public void runTestsInParallel() { - final Class[] classes = { IntegrationTestExample1.class, IntegrationTestExample2.class }; + final Class[] classes = { Example1IntegrationTest.class, Example2IntegrationTest.class }; JUnitCore.runClasses(new ParallelComputer(true, true), classes); } diff --git a/spring-5/src/test/java/com/baeldung/Spring5ApplicationTests.java b/spring-5/src/test/java/com/baeldung/Spring5ApplicationIntegrationTest.java similarity index 85% rename from spring-5/src/test/java/com/baeldung/Spring5ApplicationTests.java rename to spring-5/src/test/java/com/baeldung/Spring5ApplicationIntegrationTest.java index 537ec56a89..af288c3c2d 100644 --- a/spring-5/src/test/java/com/baeldung/Spring5ApplicationTests.java +++ b/spring-5/src/test/java/com/baeldung/Spring5ApplicationIntegrationTest.java @@ -7,7 +7,7 @@ import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest -public class Spring5ApplicationTests { +public class Spring5ApplicationIntegrationTest { @Test public void contextLoads() { diff --git a/spring-5/src/test/java/com/baeldung/functional/FunctionalWebApplicationIntegrationTest.java b/spring-5/src/test/java/com/baeldung/functional/FunctionalWebApplicationIntegrationTest.java index dda25f46f7..fe7f4b06ff 100644 --- a/spring-5/src/test/java/com/baeldung/functional/FunctionalWebApplicationIntegrationTest.java +++ b/spring-5/src/test/java/com/baeldung/functional/FunctionalWebApplicationIntegrationTest.java @@ -4,152 +4,139 @@ import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import org.springframework.boot.web.server.WebServer; -import org.springframework.core.io.ClassPathResource; -import org.springframework.core.io.Resource; -import org.springframework.http.MediaType; -//import org.springframework.test.web.reactive.server.WebTestClient; -import org.springframework.util.LinkedMultiValueMap; -import org.springframework.util.MultiValueMap; -import org.springframework.web.reactive.function.BodyInserters; +import org.springframework.test.web.reactive.server.WebTestClient; -import static org.springframework.web.reactive.function.BodyInserters.fromObject; -import static org.springframework.web.reactive.function.BodyInserters.fromResource; - -// TODO The class does not compile, WebTestClient cannot be resolved. Missing dependency? public class FunctionalWebApplicationIntegrationTest { -// private static WebTestClient client; -// private static WebServer server; -// -// @BeforeClass -// public static void setup() throws Exception { -// server = new FunctionalWebApplication().start(); -// client = WebTestClient -// .bindToServer() -// .baseUrl("http://localhost:" + server.getPort()) -// .build(); -// } -// -// @AfterClass -// public static void destroy() { -// server.stop(); -// } -// -// @Test -// public void givenRouter_whenGetTest_thenGotHelloWorld() throws Exception { -// client -// .get() -// .uri("/test") -// .exchange() -// .expectStatus() -// .isOk() -// .expectBody(String.class) -// .value() -// .isEqualTo("helloworld"); -// } -// -// @Test -// public void givenIndexFilter_whenRequestRoot_thenRewrittenToTest() throws Exception { -// client -// .get() -// .uri("/") -// .exchange() -// .expectStatus() -// .isOk() -// .expectBody(String.class) -// .value() -// .isEqualTo("helloworld"); -// } -// -// @Test -// public void givenLoginForm_whenPostValidToken_thenSuccess() throws Exception { -// MultiValueMap formData = new LinkedMultiValueMap<>(1); -// formData.add("user", "baeldung"); -// formData.add("token", "you_know_what_to_do"); -// -// client -// .post() -// .uri("/login") -// .contentType(MediaType.APPLICATION_FORM_URLENCODED) -// .exchange(BodyInserters.fromFormData(formData)) -// .expectStatus() -// .isOk() -// .expectBody(String.class) -// .value() -// .isEqualTo("welcome back!"); -// } -// -// @Test -// public void givenLoginForm_whenRequestWithInvalidToken_thenFail() throws Exception { -// MultiValueMap formData = new LinkedMultiValueMap<>(2); -// formData.add("user", "baeldung"); -// formData.add("token", "try_again"); -// -// client -// .post() -// .uri("/login") -// .contentType(MediaType.APPLICATION_FORM_URLENCODED) -// .exchange(BodyInserters.fromFormData(formData)) -// .expectStatus() -// .isBadRequest(); -// } -// -// @Test -// public void givenUploadForm_whenRequestWithMultipartData_thenSuccess() throws Exception { -// Resource resource = new ClassPathResource("/baeldung-weekly.png"); -// client -// .post() -// .uri("/upload") -// .contentType(MediaType.MULTIPART_FORM_DATA) -// .exchange(fromResource(resource)) -// .expectStatus() -// .isOk() -// .expectBody(String.class) -// .value() -// .isEqualTo(String.valueOf(resource.contentLength())); -// } -// -// @Test -// public void givenActors_whenAddActor_thenAdded() throws Exception { -// client -// .get() -// .uri("/actor") -// .exchange() -// .expectStatus() -// .isOk() -// .expectBody(Actor.class) -// .list() -// .hasSize(2); -// -// client -// .post() -// .uri("/actor") -// .exchange(fromObject(new Actor("Clint", "Eastwood"))) -// .expectStatus() -// .isOk(); -// -// client -// .get() -// .uri("/actor") -// .exchange() -// .expectStatus() -// .isOk() -// .expectBody(Actor.class) -// .list() -// .hasSize(3); -// } -// -// @Test -// public void givenResources_whenAccess_thenGot() throws Exception { -// client -// .get() -// .uri("/files/hello.txt") -// .exchange() -// .expectStatus() -// .isOk() -// .expectBody(String.class) -// .value() -// .isEqualTo("hello"); -// } + private static WebTestClient client; + private static WebServer server; + + @BeforeClass + public static void setup() throws Exception { + server = new FunctionalWebApplication().start(); + client = WebTestClient + .bindToServer() + .baseUrl("http://localhost:" + server.getPort()) + .build(); + } + + @AfterClass + public static void destroy() { + server.stop(); + } + + @Test + public void givenRouter_whenGetTest_thenGotHelloWorld() throws Exception { + client + .get() + .uri("/test") + .exchange() + .expectStatus() + .isOk() + .expectBody(String.class) + .isEqualTo("helloworld"); + } + + @Test + public void givenIndexFilter_whenRequestRoot_thenRewrittenToTest() throws Exception { + client + .get() + .uri("/") + .exchange() + .expectStatus() + .isOk() + .expectBody(String.class) + .isEqualTo("helloworld"); + } + + /* @Test + public void givenLoginForm_whenPostValidToken_thenSuccess() throws Exception { + MultiValueMap formData = new LinkedMultiValueMap<>(1); + formData.add("user", "baeldung"); + formData.add("token", "you_know_what_to_do"); + + client + .post() + .uri("/login") + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .exchange(BodyInserters.fromFormData(formData)) + .expectStatus() + .isOk() + .expectBody(String.class) + .value() + .isEqualTo("welcome back!"); + }*/ + + /* @Test + public void givenLoginForm_whenRequestWithInvalidToken_thenFail() throws Exception { + MultiValueMap formData = new LinkedMultiValueMap<>(2); + formData.add("user", "baeldung"); + formData.add("token", "try_again"); + + client + .post() + .uri("/login") + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .exchange(BodyInserters.fromFormData(formData)) + .expectStatus() + .isBadRequest(); + } +*/ + /* @Test + public void givenUploadForm_whenRequestWithMultipartData_thenSuccess() throws Exception { + Resource resource = new ClassPathResource("/baeldung-weekly.png"); + client + .post() + .uri("/upload") + .contentType(MediaType.MULTIPART_FORM_DATA) + .exchange(fromResource(resource)) + .expectStatus() + .isOk() + .expectBody(String.class) + .value() + .isEqualTo(String.valueOf(resource.contentLength())); + } +*/ + /* @Test + public void givenActors_whenAddActor_thenAdded() throws Exception { + client + .get() + .uri("/actor") + .exchange() + .expectStatus() + .isOk() + .expectBody(Actor.class) + .list() + .hasSize(2); + + client + .post() + .uri("/actor") + .exchange(fromObject(new Actor("Clint", "Eastwood"))) + .expectStatus() + .isOk(); + + client + .get() + .uri("/actor") + .exchange() + .expectStatus() + .isOk() + .expectBody(Actor.class) + .list() + .hasSize(3); + }*/ + + @Test + public void givenResources_whenAccess_thenGot() throws Exception { + client + .get() + .uri("/files/hello.txt") + .exchange() + .expectStatus() + .isOk() + .expectBody(String.class) + .isEqualTo("hello"); + } } diff --git a/spring-5/src/test/java/com/baeldung/jupiter/Spring5JUnit5ParallelTest.java b/spring-5/src/test/java/com/baeldung/jupiter/Spring5JUnit5ParallelTest.java index a060b78c93..92d69b2d91 100644 --- a/spring-5/src/test/java/com/baeldung/jupiter/Spring5JUnit5ParallelTest.java +++ b/spring-5/src/test/java/com/baeldung/jupiter/Spring5JUnit5ParallelTest.java @@ -1,7 +1,7 @@ package com.baeldung.jupiter; -import com.baeldung.IntegrationTestExample1; -import com.baeldung.IntegrationTestExample2; +import com.baeldung.Example1IntegrationTest; +import com.baeldung.Example2IntegrationTest; import org.junit.experimental.ParallelComputer; import org.junit.jupiter.api.Test; import org.junit.runner.Computer; @@ -12,7 +12,7 @@ public class Spring5JUnit5ParallelTest { @Test public void givenTwoTestClasses_whenJUnitRunParallel_thenTheTestsExecutingParallel() { final Class[] classes = { - IntegrationTestExample1.class, IntegrationTestExample2.class + Example1IntegrationTest.class, Example2IntegrationTest.class }; JUnitCore.runClasses(new ParallelComputer(true, true), classes); @@ -21,7 +21,7 @@ public class Spring5JUnit5ParallelTest { @Test public void givenTwoTestClasses_whenJUnitRunParallel_thenTheTestsExecutingLinear() { final Class[] classes = { - IntegrationTestExample1.class, IntegrationTestExample2.class + Example1IntegrationTest.class, Example2IntegrationTest.class }; JUnitCore.runClasses(new Computer(), classes);