From d5177c158e9521196be9c5d08eb7e1328604a708 Mon Sep 17 00:00:00 2001 From: priyeshmashelkar Date: Wed, 23 May 2018 18:44:15 +0100 Subject: [PATCH 1/9] Added for eval article --- .../baeldung/reactive/client/StockClient.java | 24 ++++++++++++ .../controller/StockReactiveController.java | 38 +++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 spring-5-reactive/src/main/java/com/baeldung/reactive/client/StockClient.java create mode 100644 spring-5-reactive/src/main/java/com/baeldung/reactive/controller/StockReactiveController.java diff --git a/spring-5-reactive/src/main/java/com/baeldung/reactive/client/StockClient.java b/spring-5-reactive/src/main/java/com/baeldung/reactive/client/StockClient.java new file mode 100644 index 0000000000..6c37c6b763 --- /dev/null +++ b/spring-5-reactive/src/main/java/com/baeldung/reactive/client/StockClient.java @@ -0,0 +1,24 @@ +package com.baeldung.reactive.client; + +import org.springframework.http.MediaType; +import org.springframework.web.reactive.function.client.WebClient; +import org.springframework.web.reactive.function.client.WebClient.RequestHeadersSpec; + +import com.baeldung.reactive.model.Stock; + +public class StockClient { + + public void getStockUpdates(String stockCode) { + WebClient client = WebClient.create("localhost:9111"); + RequestHeadersSpec request = client.get().uri("/rtes/stocks/"+stockCode).accept(MediaType.TEXT_EVENT_STREAM); + request.retrieve().bodyToFlux(Stock.class).toStream().forEach(System.out::println); + } + + public static void main(String[] args) throws InterruptedException { + new StockClient().getStockUpdates("GOOGL"); + + while(true) { + Thread.sleep(1000L); + } + } +} diff --git a/spring-5-reactive/src/main/java/com/baeldung/reactive/controller/StockReactiveController.java b/spring-5-reactive/src/main/java/com/baeldung/reactive/controller/StockReactiveController.java new file mode 100644 index 0000000000..4015d660b9 --- /dev/null +++ b/spring-5-reactive/src/main/java/com/baeldung/reactive/controller/StockReactiveController.java @@ -0,0 +1,38 @@ +package com.baeldung.reactive.controller; + +import java.math.BigDecimal; +import java.time.Duration; +import java.util.Random; +import java.util.stream.Stream; + +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.baeldung.reactive.model.Stock; + +import reactor.core.publisher.Flux; +import reactor.util.function.Tuple2; + +@RestController +@RequestMapping("/rtes") +public class StockReactiveController { + + @GetMapping(produces = MediaType.TEXT_EVENT_STREAM_VALUE, value = "/stocks/{code}") + public Flux getStocks(@PathVariable String code) { + BigDecimal startingPrice = new BigDecimal("100"); + Flux stockFlux = Flux.fromStream(Stream.generate(() -> new Stock( + code, + new Random().nextBoolean() ? + startingPrice.add(BigDecimal.valueOf(new Random().nextDouble())): + startingPrice.subtract(BigDecimal.valueOf(new Random().nextDouble()))))); + Flux emmitFlux = Flux.interval(Duration.ofSeconds(1)); + return Flux.zip(stockFlux, emmitFlux).map(Tuple2::getT1); + } + + public static void main(String [] args) { + + } +} From 5268c3e8c25a977370fb86aafeb05a956e73c542 Mon Sep 17 00:00:00 2001 From: priyeshmashelkar Date: Wed, 23 May 2018 18:49:26 +0100 Subject: [PATCH 2/9] Removed unused code --- .../java/com/baeldung/reactive/client/StockClient.java | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/spring-5-reactive/src/main/java/com/baeldung/reactive/client/StockClient.java b/spring-5-reactive/src/main/java/com/baeldung/reactive/client/StockClient.java index 6c37c6b763..909c9f3de4 100644 --- a/spring-5-reactive/src/main/java/com/baeldung/reactive/client/StockClient.java +++ b/spring-5-reactive/src/main/java/com/baeldung/reactive/client/StockClient.java @@ -12,13 +12,5 @@ public class StockClient { WebClient client = WebClient.create("localhost:9111"); RequestHeadersSpec request = client.get().uri("/rtes/stocks/"+stockCode).accept(MediaType.TEXT_EVENT_STREAM); request.retrieve().bodyToFlux(Stock.class).toStream().forEach(System.out::println); - } - - public static void main(String[] args) throws InterruptedException { - new StockClient().getStockUpdates("GOOGL"); - - while(true) { - Thread.sleep(1000L); - } - } + } } From c170f2111d298782edf5908ea5e1e50ac546a4e4 Mon Sep 17 00:00:00 2001 From: priyeshmashelkar Date: Thu, 24 May 2018 13:06:02 +0100 Subject: [PATCH 3/9] Used log() in StockClient and formatted in eclipse --- .../baeldung/reactive/client/StockClient.java | 24 +++++++++---------- .../controller/StockReactiveController.java | 14 +++++------ 2 files changed, 17 insertions(+), 21 deletions(-) diff --git a/spring-5-reactive/src/main/java/com/baeldung/reactive/client/StockClient.java b/spring-5-reactive/src/main/java/com/baeldung/reactive/client/StockClient.java index 6c37c6b763..8a65b77b37 100644 --- a/spring-5-reactive/src/main/java/com/baeldung/reactive/client/StockClient.java +++ b/spring-5-reactive/src/main/java/com/baeldung/reactive/client/StockClient.java @@ -6,19 +6,17 @@ import org.springframework.web.reactive.function.client.WebClient.RequestHeaders import com.baeldung.reactive.model.Stock; +import reactor.core.publisher.Flux; + public class StockClient { - public void getStockUpdates(String stockCode) { - WebClient client = WebClient.create("localhost:9111"); - RequestHeadersSpec request = client.get().uri("/rtes/stocks/"+stockCode).accept(MediaType.TEXT_EVENT_STREAM); - request.retrieve().bodyToFlux(Stock.class).toStream().forEach(System.out::println); - } - - public static void main(String[] args) throws InterruptedException { - new StockClient().getStockUpdates("GOOGL"); - - while(true) { - Thread.sleep(1000L); - } - } + public Flux getStockUpdates(String stockCode) { + WebClient client = WebClient.create("localhost:8080"); + RequestHeadersSpec request = client.get() + .uri("/rtes/stocks/" + stockCode) + .accept(MediaType.TEXT_EVENT_STREAM); + return request.retrieve() + .bodyToFlux(Stock.class) + .log(); + } } diff --git a/spring-5-reactive/src/main/java/com/baeldung/reactive/controller/StockReactiveController.java b/spring-5-reactive/src/main/java/com/baeldung/reactive/controller/StockReactiveController.java index 4015d660b9..8f8de79561 100644 --- a/spring-5-reactive/src/main/java/com/baeldung/reactive/controller/StockReactiveController.java +++ b/spring-5-reactive/src/main/java/com/baeldung/reactive/controller/StockReactiveController.java @@ -23,16 +23,14 @@ public class StockReactiveController { @GetMapping(produces = MediaType.TEXT_EVENT_STREAM_VALUE, value = "/stocks/{code}") public Flux getStocks(@PathVariable String code) { BigDecimal startingPrice = new BigDecimal("100"); - Flux stockFlux = Flux.fromStream(Stream.generate(() -> new Stock( - code, - new Random().nextBoolean() ? - startingPrice.add(BigDecimal.valueOf(new Random().nextDouble())): - startingPrice.subtract(BigDecimal.valueOf(new Random().nextDouble()))))); + Flux stockFlux = Flux.fromStream(Stream.generate(() -> new Stock(code, getLatestPrice(startingPrice)))); Flux emmitFlux = Flux.interval(Duration.ofSeconds(1)); - return Flux.zip(stockFlux, emmitFlux).map(Tuple2::getT1); + return Flux.zip(stockFlux, emmitFlux) + .map(Tuple2::getT1); } - public static void main(String [] args) { - + private BigDecimal getLatestPrice(BigDecimal startingPrice) { + BigDecimal priceChange = BigDecimal.valueOf(new Random().nextDouble()); + return new Random().nextBoolean() ? startingPrice.add(priceChange) : startingPrice.subtract(priceChange); } } From c0852bf743b98c040e69ab6ad888d50021824d50 Mon Sep 17 00:00:00 2001 From: priyeshmashelkar Date: Thu, 24 May 2018 13:15:52 +0100 Subject: [PATCH 4/9] Added model class --- .../com/baeldung/reactive/model/Stock.java | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 spring-5-reactive/src/main/java/com/baeldung/reactive/model/Stock.java diff --git a/spring-5-reactive/src/main/java/com/baeldung/reactive/model/Stock.java b/spring-5-reactive/src/main/java/com/baeldung/reactive/model/Stock.java new file mode 100644 index 0000000000..6743de064e --- /dev/null +++ b/spring-5-reactive/src/main/java/com/baeldung/reactive/model/Stock.java @@ -0,0 +1,32 @@ +package com.baeldung.reactive.model; + +import java.math.BigDecimal; + +public class Stock { + + private String code; + + private BigDecimal price; + + public Stock(String code, BigDecimal price) { + this.code = code; + this.price = price; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public BigDecimal getPrice() { + return price; + } + + public void setPrice(BigDecimal price) { + this.price = price; + } + +} From 0c1cee1a0bfee2dd369e3b5257e6c6633aaf6654 Mon Sep 17 00:00:00 2001 From: Priyesh Mashelkar Date: Fri, 29 Jun 2018 01:16:37 +0100 Subject: [PATCH 5/9] Please enter the commit message for your changes. Lines starting Added test classes for article --- .../java/org/baeldung/MockAnnotationTest.java | 33 +++++++++++++++++++ .../MockBeanAnnotationIntegrationTest.java | 31 +++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 spring-boot/src/test/java/org/baeldung/MockAnnotationTest.java create mode 100644 spring-boot/src/test/java/org/baeldung/MockBeanAnnotationIntegrationTest.java diff --git a/spring-boot/src/test/java/org/baeldung/MockAnnotationTest.java b/spring-boot/src/test/java/org/baeldung/MockAnnotationTest.java new file mode 100644 index 0000000000..a70b31177f --- /dev/null +++ b/spring-boot/src/test/java/org/baeldung/MockAnnotationTest.java @@ -0,0 +1,33 @@ +package org.baeldung; + +import org.baeldung.repository.UserRepository; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.junit.MockitoJUnitRunner; + +@RunWith(MockitoJUnitRunner.class) +public class MockAnnotationTest { + + @Mock + UserRepository mockRepository; + + @Test + public void testMockAnnotation() { + Mockito.when(mockRepository.count()).thenReturn(123L); + long userCount = mockRepository.count(); + Assert.assertEquals(123L, userCount); + Mockito.verify(mockRepository).count(); + } + + @Test + public void testMockitoMockMethod() { + UserRepository localMockRepository = Mockito.mock(UserRepository.class); + Mockito.when(localMockRepository.count()).thenReturn(111L); + long userCount = localMockRepository.count(); + Assert.assertEquals(111L, userCount); + Mockito.verify(localMockRepository).count(); + } +} diff --git a/spring-boot/src/test/java/org/baeldung/MockBeanAnnotationIntegrationTest.java b/spring-boot/src/test/java/org/baeldung/MockBeanAnnotationIntegrationTest.java new file mode 100644 index 0000000000..0c93004a49 --- /dev/null +++ b/spring-boot/src/test/java/org/baeldung/MockBeanAnnotationIntegrationTest.java @@ -0,0 +1,31 @@ +package org.baeldung; + +import org.baeldung.repository.UserRepository; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.ApplicationContext; +import org.springframework.test.context.junit4.SpringRunner; + + +@RunWith(SpringRunner.class) +public class MockBeanAnnotationIntegrationTest { + + @MockBean + UserRepository mockRepository; + + @Autowired + ApplicationContext context; + + @Test + public void testMockBean() { + Mockito.when(mockRepository.count()).thenReturn(123L); + UserRepository userRepoFromContext = context.getBean(UserRepository.class); + long userCount = userRepoFromContext.count(); + Assert.assertEquals(123L, userCount); + Mockito.verify(mockRepository).count(); + } +} From b741e4e6487eecadad9a59d085509504b00e8a54 Mon Sep 17 00:00:00 2001 From: priyeshmashelkar Date: Thu, 24 May 2018 13:15:52 +0100 Subject: [PATCH 6/9] Added model class --- .../com/baeldung/reactive/model/Stock.java | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 spring-5-reactive/src/main/java/com/baeldung/reactive/model/Stock.java diff --git a/spring-5-reactive/src/main/java/com/baeldung/reactive/model/Stock.java b/spring-5-reactive/src/main/java/com/baeldung/reactive/model/Stock.java new file mode 100644 index 0000000000..6743de064e --- /dev/null +++ b/spring-5-reactive/src/main/java/com/baeldung/reactive/model/Stock.java @@ -0,0 +1,32 @@ +package com.baeldung.reactive.model; + +import java.math.BigDecimal; + +public class Stock { + + private String code; + + private BigDecimal price; + + public Stock(String code, BigDecimal price) { + this.code = code; + this.price = price; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public BigDecimal getPrice() { + return price; + } + + public void setPrice(BigDecimal price) { + this.price = price; + } + +} From 3e3e577eeeb5e3d79912d61ce7af55da9a9eb4ba Mon Sep 17 00:00:00 2001 From: priyeshmashelkar Date: Mon, 2 Jul 2018 12:29:05 +0100 Subject: [PATCH 7/9] Deleted file from evaluation --- .../com/baeldung/reactive/model/Stock.java | 32 ------------------- 1 file changed, 32 deletions(-) delete mode 100644 spring-5-reactive/src/main/java/com/baeldung/reactive/model/Stock.java diff --git a/spring-5-reactive/src/main/java/com/baeldung/reactive/model/Stock.java b/spring-5-reactive/src/main/java/com/baeldung/reactive/model/Stock.java deleted file mode 100644 index 6743de064e..0000000000 --- a/spring-5-reactive/src/main/java/com/baeldung/reactive/model/Stock.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.baeldung.reactive.model; - -import java.math.BigDecimal; - -public class Stock { - - private String code; - - private BigDecimal price; - - public Stock(String code, BigDecimal price) { - this.code = code; - this.price = price; - } - - public String getCode() { - return code; - } - - public void setCode(String code) { - this.code = code; - } - - public BigDecimal getPrice() { - return price; - } - - public void setPrice(BigDecimal price) { - this.price = price; - } - -} From c7d58f3e583beefa6af3d4f83bd6756d92f51b4f Mon Sep 17 00:00:00 2001 From: priyeshmashelkar Date: Mon, 2 Jul 2018 12:29:42 +0100 Subject: [PATCH 8/9] Delete file from evaluation --- .../controller/StockReactiveController.java | 36 ------------------- 1 file changed, 36 deletions(-) delete mode 100644 spring-5-reactive/src/main/java/com/baeldung/reactive/controller/StockReactiveController.java diff --git a/spring-5-reactive/src/main/java/com/baeldung/reactive/controller/StockReactiveController.java b/spring-5-reactive/src/main/java/com/baeldung/reactive/controller/StockReactiveController.java deleted file mode 100644 index 8f8de79561..0000000000 --- a/spring-5-reactive/src/main/java/com/baeldung/reactive/controller/StockReactiveController.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.baeldung.reactive.controller; - -import java.math.BigDecimal; -import java.time.Duration; -import java.util.Random; -import java.util.stream.Stream; - -import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import com.baeldung.reactive.model.Stock; - -import reactor.core.publisher.Flux; -import reactor.util.function.Tuple2; - -@RestController -@RequestMapping("/rtes") -public class StockReactiveController { - - @GetMapping(produces = MediaType.TEXT_EVENT_STREAM_VALUE, value = "/stocks/{code}") - public Flux getStocks(@PathVariable String code) { - BigDecimal startingPrice = new BigDecimal("100"); - Flux stockFlux = Flux.fromStream(Stream.generate(() -> new Stock(code, getLatestPrice(startingPrice)))); - Flux emmitFlux = Flux.interval(Duration.ofSeconds(1)); - return Flux.zip(stockFlux, emmitFlux) - .map(Tuple2::getT1); - } - - private BigDecimal getLatestPrice(BigDecimal startingPrice) { - BigDecimal priceChange = BigDecimal.valueOf(new Random().nextDouble()); - return new Random().nextBoolean() ? startingPrice.add(priceChange) : startingPrice.subtract(priceChange); - } -} From 44caf3b868547ff83748029798ed6594b86dc32e Mon Sep 17 00:00:00 2001 From: priyeshmashelkar Date: Mon, 2 Jul 2018 12:30:59 +0100 Subject: [PATCH 9/9] Deleted file from evaluation --- .../baeldung/reactive/client/StockClient.java | 22 ------------------- 1 file changed, 22 deletions(-) delete mode 100644 spring-5-reactive/src/main/java/com/baeldung/reactive/client/StockClient.java diff --git a/spring-5-reactive/src/main/java/com/baeldung/reactive/client/StockClient.java b/spring-5-reactive/src/main/java/com/baeldung/reactive/client/StockClient.java deleted file mode 100644 index 8a65b77b37..0000000000 --- a/spring-5-reactive/src/main/java/com/baeldung/reactive/client/StockClient.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.baeldung.reactive.client; - -import org.springframework.http.MediaType; -import org.springframework.web.reactive.function.client.WebClient; -import org.springframework.web.reactive.function.client.WebClient.RequestHeadersSpec; - -import com.baeldung.reactive.model.Stock; - -import reactor.core.publisher.Flux; - -public class StockClient { - - public Flux getStockUpdates(String stockCode) { - WebClient client = WebClient.create("localhost:8080"); - RequestHeadersSpec request = client.get() - .uri("/rtes/stocks/" + stockCode) - .accept(MediaType.TEXT_EVENT_STREAM); - return request.retrieve() - .bodyToFlux(Stock.class) - .log(); - } -}