Commit c8eed474 authored by Sarika Sama's avatar Sarika Sama

added junit and mockito to controller and service

parent c367a550
...@@ -51,6 +51,11 @@ ...@@ -51,6 +51,11 @@
<artifactId>reactor-test</artifactId> <artifactId>reactor-test</artifactId>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
...@@ -17,7 +17,7 @@ public class ProductController { ...@@ -17,7 +17,7 @@ public class ProductController {
private ProductService productService; private ProductService productService;
@PostMapping @PostMapping
public Mono<ProductDto> saveproduct(@RequestBody ProductDto productDto){ public Mono<ProductDto> saveproduct(@RequestBody Mono<ProductDto> productDto){
return productService.saveProduct(productDto); return productService.saveProduct(productDto);
} }
@GetMapping("{id}") @GetMapping("{id}")
...@@ -31,7 +31,7 @@ public class ProductController { ...@@ -31,7 +31,7 @@ public class ProductController {
} }
@PutMapping("{id}") @PutMapping("{id}")
public Mono<ProductDto> updateProduct(@RequestBody ProductDto productDto,@PathVariable("id")int id){ public Mono<ProductDto> updateProduct(@RequestBody Mono<ProductDto> productDto,@PathVariable("id")int id){
return productService.updateProduct(productDto,id); return productService.updateProduct(productDto,id);
} }
......
...@@ -6,13 +6,13 @@ import reactor.core.publisher.Mono; ...@@ -6,13 +6,13 @@ import reactor.core.publisher.Mono;
public interface ProductService { public interface ProductService {
Mono<ProductDto> saveProduct(ProductDto productDto); Mono<ProductDto> saveProduct(Mono<ProductDto> productDto);
Mono<ProductDto> getProduct(int id); Mono<ProductDto> getProduct(int id);
Flux<ProductDto> getAllProducts(); Flux<ProductDto> getAllProducts();
Mono<ProductDto> updateProduct(ProductDto productDto, int id); Mono<ProductDto> updateProduct(Mono<ProductDto> productDto, int id);
Mono<Void> deleteProduct(int id); Mono<Void> deleteProduct(int id);
......
...@@ -12,10 +12,10 @@ import reactor.core.publisher.Flux; ...@@ -12,10 +12,10 @@ import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono; import reactor.core.publisher.Mono;
@Service @Service
@AllArgsConstructor @AllArgsConstructor
public class ProductServiceImpl implements ProductService { public abstract class ProductServiceImpl implements ProductService {
@Autowired @Autowired
private ProductRepository productRepository; private ProductRepository productRepository;
@Override // @Override
public Mono<ProductDto> saveProduct(ProductDto productDto) { public Mono<ProductDto> saveProduct(ProductDto productDto) {
Product product = ProductMapper.mapToProduct(productDto); Product product = ProductMapper.mapToProduct(productDto);
Mono<Product> savedProduct= productRepository.save(product); Mono<Product> savedProduct= productRepository.save(product);
...@@ -38,7 +38,7 @@ private ProductRepository productRepository; ...@@ -38,7 +38,7 @@ private ProductRepository productRepository;
.switchIfEmpty(Flux.empty()); .switchIfEmpty(Flux.empty());
} }
@Override // @Override
public Mono<ProductDto> updateProduct(ProductDto productDto, int id) { public Mono<ProductDto> updateProduct(ProductDto productDto, int id) {
Mono<Product> productMono = productRepository.findById(id); Mono<Product> productMono = productRepository.findById(id);
return productMono.flatMap((existingProduct)->{ return productMono.flatMap((existingProduct)->{
......
package com.nisum.webfluxreactivemongodb; package com.nisum.webfluxreactivemongodb;
import com.nisum.webfluxreactivemongodb.controller.ProductController;
import com.nisum.webfluxreactivemongodb.dto.ProductDto;
import com.nisum.webfluxreactivemongodb.service.ProductService;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.reactive.WebFluxTest;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.web.reactive.server.WebTestClient;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import reactor.test.StepVerifier;
@SpringBootTest import static org.mockito.ArgumentMatchers.any;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.when;
@RunWith(SpringJUnit4ClassRunner.class)
@WebFluxTest({ ProductService.class, ProductController.class })
class WebfluxReactiveMongodbApplicationTests { class WebfluxReactiveMongodbApplicationTests {
@Autowired
WebTestClient webTestClient;
@MockBean
ProductService productService;
@Test
void addProductTest() {
Mono<ProductDto> productDtoMono = Mono.just(new ProductDto(1,"tv",4,15000.00));
when(productService.saveProduct(productDtoMono)).thenReturn(productDtoMono);
webTestClient.post().uri("/api/products")
.body(Mono.just(productDtoMono),ProductDto.class)
.exchange()
.expectStatus().isOk();//200
}
@Test
void getProductsTest(){
Flux<ProductDto> productDtoFlux=Flux.just(new ProductDto(1,"tv",4,15000.00),
new ProductDto(2,"mobile",5,20000.00));
when(productService.getAllProducts()).thenReturn(productDtoFlux);
Flux<ProductDto> responseBody = webTestClient.get().uri("/api/products")
.exchange()
.expectStatus().isOk()
.returnResult(ProductDto.class)
.getResponseBody();
StepVerifier.create(responseBody)
.expectSubscription()
.expectNext(new ProductDto(1,"tv",4,15000.00))
.expectNext(new ProductDto(2,"mobile",5,20000.00))
.verifyComplete();
}
@Test @Test
void contextLoads() { void getProductByIdTest(){
Mono<ProductDto> productDtoMono = Mono.just(new ProductDto(2,"mobile",5,20000.00));
when(productService.getProduct(2)).thenReturn(productDtoMono);
Flux<ProductDto> responseBody = webTestClient.get().uri("/api/products/2")
.exchange()
.expectStatus().isOk()
.returnResult(ProductDto.class)
.getResponseBody();
StepVerifier.create(responseBody)
.expectSubscription()
.expectNextMatches(productDto -> productDto.getName().equals("mobile"))
.verifyComplete();
}
@Test
void updateProductTest(){
Mono<ProductDto> productDtoMono = Mono.just(new ProductDto(3,"laptop",2,50000.00));
when(productService.updateProduct(productDtoMono,3)).thenReturn(productDtoMono);
webTestClient.put().uri("/api/products/3")
.body(Mono.just(productDtoMono),ProductDto.class)
.exchange()
.expectStatus().isOk();
}
@Test
void deleteProductTest(){
given(productService.deleteProduct(3)).willReturn(Mono.empty());
webTestClient.delete().uri("/api/products/3")
.exchange()
.expectStatus().isOk();
} }
// @Test
// void productBetweenRangeTest(){
// Flux<ProductDto> productDtoMono = Flux.just(new ProductDto(2,"mobile",5,20000.00));
// when(productService.getProductInRange(0,1000000)).thenReturn(productDtoMono);
//
//
// Flux<ProductDto> responseBody = webTestClient.get().uri("/api/products/product-range")
// .exchange()
// .expectStatus().isOk()
// .returnResult(ProductDto.class)
// .getResponseBody();
//
// StepVerifier.create(responseBody)
// .expectSubscription()
// .verifyComplete();
//
//
// }
} }
package com.nisum.webfluxreactivemongodb.service;
import com.nisum.webfluxreactivemongodb.controller.ProductController;
import com.nisum.webfluxreactivemongodb.dto.ProductDto;
import com.nisum.webfluxreactivemongodb.repository.ProductRepository;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.reactive.WebFluxTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.context.junit4.SpringRunner;
import reactor.core.publisher.Flux;
import reactor.test.StepVerifier;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.when;
@RunWith(SpringRunner.class)
@WebFluxTest({ ProductService.class,ProductRepository.class })
public class ProductServiceTest {
@MockBean
ProductRepository productRepository;
@Autowired
ProductService productService;
@Test
void getProductsTest(){
//
StepVerifier.create(productService.findByAll)
.expectSubscription()
.expectNext()
.verifyComplete();
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment