Commit 86a9dc0a authored by Amar Bogari's avatar Amar Bogari

added unit test cases and commented integration test cases code.

parent 50f10b71
package com.nisum.offertransactionservice.client;
import com.nisum.offertransactionservice.config.OfferTransactionConfig;
import com.nisum.offertransactionservice.dto.PERequest;
import com.nisum.offertransactionservice.dto.PEResponse;
import com.nisum.offertransactionservice.util.ExceptionUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.web.reactive.function.client.ExchangeFilterFunction;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;
import javax.annotation.PostConstruct;
@Component
@Slf4j
public class ClientService {
private WebClient webClient;
@Autowired
OfferTransactionConfig offerTransactionConfig;
@PostConstruct
public void init() {
webClient = WebClient.builder().baseUrl(offerTransactionConfig.getPeBaseUrl()).
defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE).
filter(logRequest()).
filter(logResponse()).
build();
}
private ExchangeFilterFunction logRequest() {
return ExchangeFilterFunction.ofRequestProcessor(clientRequest -> {
log.info("Store Consumer Request {}", clientRequest);
return Mono.just(clientRequest);
});
}
private ExchangeFilterFunction logResponse() {
return ExchangeFilterFunction.ofResponseProcessor(clientResponse -> {
log.info("Store Consumer Request {}", clientResponse);
return Mono.just(clientResponse);
});
}
public Mono<String> getStringMono(String uuid) {
WebClient build = WebClient.builder().baseUrl(offerTransactionConfig.getSpBaseUrl()).build();
return build.post().
uri(offerTransactionConfig.getStoreProducerUrl()).
accept(MediaType.APPLICATION_JSON).
body(Mono.just(uuid), String.class).
retrieve().
onStatus(HttpStatus::is4xxClientError, ExceptionUtil::handleError).
onStatus(HttpStatus::is5xxServerError, ExceptionUtil::handleError).
bodyToMono(String.class);
}
public PEResponse getPeResponseFlux(PERequest peRequest) {
return webClient.post().
uri(offerTransactionConfig.getPromotionEngineUrl()).
accept(MediaType.APPLICATION_JSON).
contentType(MediaType.APPLICATION_JSON).
body(Mono.just(peRequest), PERequest.class).
retrieve().
onStatus(HttpStatus::is4xxClientError, ExceptionUtil::handleError).
onStatus(HttpStatus::is5xxServerError, ExceptionUtil::handleError).
bodyToFlux(PEResponse.class).
blockFirst();
}
}
package com.nisum.offertransactionservice.client;
import com.nisum.offertransactionservice.config.FeignClientConfig;
import com.nisum.offertransactionservice.dto.PERequest;
import com.nisum.offertransactionservice.dto.PEResponse;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
@FeignClient(name = "${storeproducer.application.name}")
@FeignClient(name = "${storeproducer.application.name}",configuration = FeignClientConfig.class)
public interface StoreProducerFeignClient {
@PostMapping(value = "${endpoint.url.storeProducerUrl}")
......
package com.nisum.offertransactionservice.service;
import com.nisum.offertransactionservice.client.ClientService;
import com.nisum.offertransactionservice.client.StoreProducerFeignClient;
import com.nisum.offertransactionservice.genericexception.GlobalApiGenericException;
import lombok.extern.slf4j.Slf4j;
......
package com.nisum.offertransactionservice.service;
import com.nisum.offertransactionservice.client.ClientService;
import com.nisum.offertransactionservice.client.PromotionEngineFeignClient;
import com.nisum.offertransactionservice.client.StoreProducerFeignClient;
import com.nisum.offertransactionservice.converter.OfferConvertion;
import com.nisum.offertransactionservice.dao.OfferLookupRepo;
import com.nisum.offertransactionservice.dao.OfferMetaDataRepo;
......@@ -34,9 +34,6 @@ public class OfferCallingPEService {
@Autowired
private OfferLookupRepo offerLookupRepo;
@Autowired
private ClientService clientService;
@Autowired
private OfferMetaDataRepo offerMetaDataRepo;
......
package com.nisum.offertransactionservice.client;
import com.nisum.offertransactionservice.config.OfferTransactionConfig;
import com.nisum.offertransactionservice.dto.Item;
import com.nisum.offertransactionservice.dto.PERequest;
import com.nisum.offertransactionservice.dto.PEResponse;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;
import java.util.ArrayList;
import java.util.List;
public class ClientServiceTest {
@InjectMocks
ClientService clientService;
@Mock
private WebClient webClientMock;
@Mock
private WebClient.RequestHeadersSpec requestHeadersMock;
@Mock
private WebClient.RequestBodySpec requestBodyMock;
@Mock
private WebClient.RequestBodyUriSpec requestBodyUriMock;
@Mock
private WebClient.ResponseSpec responseMock;
@Mock
OfferTransactionConfig offerTransactionConfig;
@BeforeEach
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
}
@Test
void getStringMonoTest(){
String uuid = "86fd4146-0540-405b-b621-a95f4ccdfa0d";
//when(offerTransactionConfig.getPeBaseUrl()).thenReturn("http://localhost:8089");
//when(offerTransactionConfig.getSpBaseUrl()).thenReturn("http://localhost:8081");
// when(webClientMock.post()).thenReturn(requestBodyUriMock);
// when(requestBodyUriMock.uri("/store/producer")).thenReturn(requestBodyMock);
// when(requestBodyMock.bodyValue(Mono.just(uuid))).thenReturn(requestHeadersMock);
// when(requestHeadersMock.retrieve()).thenReturn(responseMock);
// when(responseMock.bodyToMono(String.class)).thenReturn(Mono.just(uuid));
Mono<String> stringMono = clientService.getStringMono(uuid);
Assertions.assertNotNull(stringMono);
}
private PERequest getPEReq() {
PERequest peRequest = new PERequest();
peRequest.setHhId(123L);
List<Item> itemList = new ArrayList<>();
Item item1 = new Item("Coke", "12", 13.05);
Item item2 = new Item("Thumpsup", "11", 14.05);
itemList.add(item1);
itemList.add(item2);
peRequest.setItemList(itemList);
return peRequest;
}
private PEResponse getPeResponse() {
PEResponse peResponse = new PEResponse();
peResponse.setHhid(123L);
List<Item> itemList = new ArrayList<>();
Item item1 = new Item("Coke", "12", 6.05);
Item item2 = new Item("Thumpsup", "11", 12.32);
itemList.add(item1);
itemList.add(item2);
peResponse.setDiscountedItemList(itemList);
return peResponse;
}
}
//package com.nisum.offertransactionservice.client;
//
//
//import com.nisum.offertransactionservice.config.OfferTransactionConfig;
//import com.nisum.offertransactionservice.dto.Item;
//import com.nisum.offertransactionservice.dto.PERequest;
//import com.nisum.offertransactionservice.dto.PEResponse;
//import org.junit.jupiter.api.Assertions;
//import org.junit.jupiter.api.BeforeEach;
//import org.junit.jupiter.api.Test;
//import org.mockito.InjectMocks;
//import org.mockito.Mock;
//import org.mockito.MockitoAnnotations;
//import org.springframework.web.reactive.function.client.WebClient;
//import reactor.core.publisher.Mono;
//
//import java.util.ArrayList;
//import java.util.List;
//
//public class ClientServiceTest {
//
//
// @InjectMocks
// ClientService clientService;
//
// @Mock
// private WebClient webClientMock;
//
// @Mock
// private WebClient.RequestHeadersSpec requestHeadersMock;
//
// @Mock
// private WebClient.RequestBodySpec requestBodyMock;
//
// @Mock
// private WebClient.RequestBodyUriSpec requestBodyUriMock;
//
// @Mock
// private WebClient.ResponseSpec responseMock;
//
// @Mock
// OfferTransactionConfig offerTransactionConfig;
//
//
// @BeforeEach
// public void setUp() throws Exception {
// MockitoAnnotations.initMocks(this);
// }
//
// @Test
// void getStringMonoTest(){
// String uuid = "86fd4146-0540-405b-b621-a95f4ccdfa0d";
// //when(offerTransactionConfig.getPeBaseUrl()).thenReturn("http://localhost:8089");
// //when(offerTransactionConfig.getSpBaseUrl()).thenReturn("http://localhost:8081");
//// when(webClientMock.post()).thenReturn(requestBodyUriMock);
//// when(requestBodyUriMock.uri("/store/producer")).thenReturn(requestBodyMock);
//// when(requestBodyMock.bodyValue(Mono.just(uuid))).thenReturn(requestHeadersMock);
//// when(requestHeadersMock.retrieve()).thenReturn(responseMock);
//// when(responseMock.bodyToMono(String.class)).thenReturn(Mono.just(uuid));
// Mono<String> stringMono = clientService.getStringMono(uuid);
// Assertions.assertNotNull(stringMono);
// }
//
//
// private PERequest getPEReq() {
// PERequest peRequest = new PERequest();
// peRequest.setHhId(123L);
// List<Item> itemList = new ArrayList<>();
// Item item1 = new Item("Coke", "12", 13.05);
// Item item2 = new Item("Thumpsup", "11", 14.05);
// itemList.add(item1);
// itemList.add(item2);
// peRequest.setItemList(itemList);
// return peRequest;
// }
//
// private PEResponse getPeResponse() {
// PEResponse peResponse = new PEResponse();
// peResponse.setHhid(123L);
// List<Item> itemList = new ArrayList<>();
// Item item1 = new Item("Coke", "12", 6.05);
// Item item2 = new Item("Thumpsup", "11", 12.32);
// itemList.add(item1);
// itemList.add(item2);
// peResponse.setDiscountedItemList(itemList);
// return peResponse;
// }
//
//}
package com.nisum.offertransactionservice.controller;
import com.github.tomakehurst.wiremock.WireMockServer;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public abstract class AbstractTestBase {
private static final Logger LOGGER = LoggerFactory.getLogger(AbstractTestBase.class);
protected final static int HTTP_ENDPOINT_PORT = 9090;
protected static WireMockServer mWireMockServer = new WireMockServer(HTTP_ENDPOINT_PORT);
@BeforeAll
public static void setup() {
mWireMockServer.start();
}
@AfterAll
public static void tearDown() {
/* Stop the WireMock server. */
mWireMockServer.stop();
}
}
package com.nisum.offertransactionservice.service;
import com.nisum.offertransactionservice.client.ClientService;
import com.nisum.offertransactionservice.client.StoreProducerFeignClient;
import com.nisum.offertransactionservice.genericexception.GlobalApiGenericException;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
......@@ -11,10 +11,11 @@ import org.mockito.ArgumentMatchers;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import reactor.core.publisher.Mono;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.when;
public class EndOfTransactionTest {
......@@ -23,7 +24,8 @@ public class EndOfTransactionTest {
private EndOfTransactionService endOfTransactionService;
@Mock
private ClientService clientService;
@Autowired
private StoreProducerFeignClient storeProducerFeignClient;
@BeforeEach
public void setUp() throws Exception {
......@@ -35,10 +37,11 @@ public class EndOfTransactionTest {
@ParameterizedTest
@ValueSource(strings={"86fd4146-0540-405b-b621-a95f4ccdfa0d"})
public void endOfTransactionTest(String uuid) {
when(clientService.getStringMono(ArgumentMatchers.any())).thenReturn(Mono.just("test"));
assertNotNull(endOfTransactionService.endOfTransaction(uuid));
ResponseEntity<String> responseEntity = ResponseEntity.ok("test");
when(storeProducerFeignClient.callStoreProducer(ArgumentMatchers.any())).thenReturn(responseEntity);
String storeResponse = endOfTransactionService.endOfTransaction(uuid);
assertNotNull(storeResponse);
assertEquals("test",storeResponse);
}
......
package com.nisum.offertransactionservice.service;
import com.nisum.offertransactionservice.client.ClientService;
import com.nisum.offertransactionservice.client.PromotionEngineFeignClient;
import com.nisum.offertransactionservice.dao.OfferLookupRepo;
import com.nisum.offertransactionservice.dao.OfferMetaDataRepo;
import com.nisum.offertransactionservice.dto.*;
......@@ -17,6 +17,8 @@ import org.mockito.ArgumentMatchers;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import java.time.LocalDateTime;
import java.util.ArrayList;
......@@ -42,21 +44,21 @@ public class OfferServiceTest {
@Mock
private OfferMetaDataRepo offerMetaDataRepo;
@Mock
private PromotionEngineFeignClient feignClientService;
@BeforeEach
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
}
@Mock
ClientService clientService;
@DisplayName("testing the getDiscountedItemList method")
@ParameterizedTest
@MethodSource("getOfferTransactionRequestSource")
public void testGetDiscountedItemList(OfferTransactionRequest offerTransactionRequest) {
when(offerLookupRepo.findByHhId(ArgumentMatchers.any(), ArgumentMatchers.any())).thenReturn(returnOffers());
when(clientService.getPeResponseFlux(ArgumentMatchers.any())).thenReturn(getPeResponse());
when(feignClientService.callPEService(ArgumentMatchers.any())).thenReturn(getPeResponse());
doReturn(getOfferMeta()).when(offerMetaDataRepo).findByOfferIdAndOfferStatusIgnoreCase(ArgumentMatchers.any(),ArgumentMatchers.any());
OfferTransactionResponse offerTransactionResponse = offerCallingPEService.getDiscountedItemList(offerTransactionRequest);
assertNotNull(offerTransactionResponse, ()->"response should not be null");
......@@ -95,7 +97,7 @@ public class OfferServiceTest {
return offerTransactionResponse;
}
private PEResponse getPeResponse() {
private ResponseEntity<PEResponse> getPeResponse() {
PEResponse peResponse = new PEResponse();
peResponse.setHhid(123L);
List<Item> itemList = new ArrayList<>();
......@@ -104,7 +106,7 @@ public class OfferServiceTest {
itemList.add(item1);
itemList.add(item2);
peResponse.setDiscountedItemList(itemList);
return peResponse;
return ResponseEntity.ok(peResponse);
}
private PERequest getPEReq() {
......
spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/storedb
spring.datasource.username=postgres
spring.datasource.password=dbpwd
server.port = 7072
spring.application.name=ots
# PE Application properties
pe.application.name=pe
pe.application.url=http://localhost:9090
endpoint.url.promotionEngineUrl=/promotionEngine/calculateDiscount
endpoint.url.peBaseUrl=http://localhost:7073
# Store Producer Application properties
storeproducer.application.name=storeproducer
endpoint.url.storeProducerUrl=/store/producer
endpoint.url.spBaseUrl=http://localhost:7070
server.port = 7072
#Eureka server url
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka
endpoints.restart.enabled=true
endpoints.shutdown.enabled=true
endpoints.health.sensitive=false
maxattempts=3
backoff=2000
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