Commit c8eed474 authored by Sarika Sama's avatar Sarika Sama

added junit and mockito to controller and service

parent c367a550
......@@ -51,6 +51,11 @@
<artifactId>reactor-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
......
......@@ -17,7 +17,7 @@ public class ProductController {
private ProductService productService;
@PostMapping
public Mono<ProductDto> saveproduct(@RequestBody ProductDto productDto){
public Mono<ProductDto> saveproduct(@RequestBody Mono<ProductDto> productDto){
return productService.saveProduct(productDto);
}
@GetMapping("{id}")
......@@ -31,7 +31,7 @@ public class ProductController {
}
@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);
}
......
......@@ -6,13 +6,13 @@ import reactor.core.publisher.Mono;
public interface ProductService {
Mono<ProductDto> saveProduct(ProductDto productDto);
Mono<ProductDto> saveProduct(Mono<ProductDto> productDto);
Mono<ProductDto> getProduct(int id);
Flux<ProductDto> getAllProducts();
Mono<ProductDto> updateProduct(ProductDto productDto, int id);
Mono<ProductDto> updateProduct(Mono<ProductDto> productDto, int id);
Mono<Void> deleteProduct(int id);
......
......@@ -12,10 +12,10 @@ import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
@Service
@AllArgsConstructor
public class ProductServiceImpl implements ProductService {
public abstract class ProductServiceImpl implements ProductService {
@Autowired
private ProductRepository productRepository;
@Override
// @Override
public Mono<ProductDto> saveProduct(ProductDto productDto) {
Product product = ProductMapper.mapToProduct(productDto);
Mono<Product> savedProduct= productRepository.save(product);
......@@ -38,7 +38,7 @@ private ProductRepository productRepository;
.switchIfEmpty(Flux.empty());
}
@Override
// @Override
public Mono<ProductDto> updateProduct(ProductDto productDto, int id) {
Mono<Product> productMono = productRepository.findById(id);
return productMono.flatMap((existingProduct)->{
......
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.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.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 {
@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
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