Commit 6f044282 authored by Kali Padhi's avatar Kali Padhi

Modifed Test Cases

parent 47d051e2
package com.nisum.offertransactionservice.client;
import com.nisum.offertransactionservice.genericexception.GlobalApiGenericException;
import com.nisum.offertransactionservice.model.PERequest;
import com.nisum.offertransactionservice.model.PEResponse;
import com.safeway.epe.model.Response;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
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.ClientResponse;
import org.springframework.web.reactive.function.client.ExchangeFilterFunction;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import javax.annotation.PostConstruct;
import static com.nisum.offertransactionservice.util.ExceptionUtil.handleError;
@Component
@Slf4j
public class ClientService {
private WebClient webClient;
@Value("${store.producer.url}")
private String storeConsumerUrl;
@Value("${store.producer.baseUrl}")
private String baseUrl;
@Value("${promotion.engine.calculate.discount.url}")
private String promotionEngineUrl;
@Value("${promotion.engine.baseUrl}")
private String peBaseUrl;
@PostConstruct
public void init() {
webClient = WebClient.builder().baseUrl(peBaseUrl).
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(baseUrl).build();
return build.post().
uri(storeConsumerUrl).
accept(MediaType.APPLICATION_JSON).
//contentType(MediaType.APPLICATION_JSON).
body(Mono.just(uuid), String.class).
retrieve().
onStatus(HttpStatus::is4xxClientError, clientResponse -> handleError(clientResponse)).
onStatus(HttpStatus::is5xxServerError, clientResponse -> handleError(clientResponse)).
bodyToMono(String.class);
}
public PEResponse getPeResponseFlux(PERequest peRequest) {
return webClient.post().
uri(promotionEngineUrl).
accept(MediaType.APPLICATION_JSON).
contentType(MediaType.APPLICATION_JSON).
body(Mono.just(peRequest), PERequest.class).
retrieve().
onStatus(HttpStatus::is4xxClientError, clientResponse -> handleError(clientResponse)).
onStatus(HttpStatus::is5xxServerError, clientResponse -> handleError(clientResponse)).
bodyToFlux(PEResponse.class)
.blockFirst();
}
}
package com.nisum.offertransactionservice.service;
import com.nisum.offertransactionservice.client.ClientService;
import com.nisum.offertransactionservice.genericexception.GlobalApiGenericException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.http.HttpHeaders;
......@@ -23,37 +25,11 @@ import static com.nisum.offertransactionservice.util.ExceptionUtil.handleError;
@Slf4j
public class EndOfTransactionService {
private WebClient webClient;
@Value("${store.producer.url}")
private String storeConsumerUrl;
@Value("${store.producer.baseUrl}")
private String baseUrl;
@Autowired
ClientService clientService;
@PostConstruct
public void init() {
webClient = WebClient.builder().baseUrl(baseUrl).
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 String endOfTransaction(String uuid) {
if (Objects.isNull(uuid) || uuid.isEmpty()) {
......@@ -61,22 +37,14 @@ public class EndOfTransactionService {
throw new GlobalApiGenericException("Unable to get the Offer transaction uuid ", new Exception("exception e"), "400", false);
}
log.info("Store Consumer WebClient call Start");
Mono<String> endOfTransactionRes = getStringMono(uuid);
Mono<String> endOfTransactionRes = clientService.getStringMono(uuid);
log.debug("Store consumer WebClient call End");
return endOfTransactionRes.toString();
}
public Mono<String> getStringMono(String uuid) {
return webClient.post().
uri(storeConsumerUrl).
accept(MediaType.APPLICATION_JSON).
contentType(MediaType.APPLICATION_JSON).
body(Mono.just(uuid), String.class).
retrieve().
onStatus(HttpStatus::is4xxClientError, clientResponse -> handleError(clientResponse)).
onStatus(HttpStatus::is5xxServerError, clientResponse -> handleError(clientResponse)).
bodyToMono(String.class);
}
}
package com.nisum.offertransactionservice.service;
import com.nisum.offertransactionservice.client.ClientService;
import com.nisum.offertransactionservice.converter.OfferConverter;
import com.nisum.offertransactionservice.converter.PEResponseToOfferTransactionResConverter;
import com.nisum.offertransactionservice.dao.OfferLookupRepo;
......@@ -34,24 +35,23 @@ public class OfferCallingPEService {
@Autowired
private PEResponseToOfferTransactionResConverter peResponseToOfferTransactionResConverter;
private WebClient webClient;
@Value("${promotion.engine.calculate.discount.url}")
private String promotionEngineUrl;
@Value("${promotion.engine.baseUrl}")
private String baseUrl;
@PostConstruct
public void init() {
webClient = WebClient.builder().baseUrl(baseUrl).
defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE).
filter(logRequest()).
filter(logResponse()).
build();
}
@Autowired
ClientService clientService;
// private WebClient webClient;
//
//
//
// @PostConstruct
// public void init() {
// webClient = WebClient.builder().baseUrl(baseUrl).
// defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE).
// filter(logRequest()).
// filter(logResponse()).
// build();
// }
//
private ExchangeFilterFunction logRequest() {
return ExchangeFilterFunction.ofRequestProcessor(clientRequest -> {
......@@ -80,30 +80,12 @@ public class OfferCallingPEService {
PERequest peRequest = offerConverter.apply(offerTransactionRequest);
peRequest.setEligibleOffers(eligibleOffer);
log.info("Promotional Engine WebClient call Start");
Flux<PEResponse> peResponseFlux = getPeResponseFlux(peRequest);
PEResponse peResponseFlux = clientService.getPeResponseFlux(peRequest);
log.debug("Promotional Engine WebClient call End");
offerTransactionResponse = peResponseToOfferTransactionResConverter.apply(peResponseFlux.toStream().findFirst().get());
offerTransactionResponse = peResponseToOfferTransactionResConverter.apply(peResponseFlux);
log.debug("Offer Transaction Response {}", offerTransactionResponse);
return offerTransactionResponse;
}
public Flux<PEResponse> getPeResponseFlux(PERequest peRequest) {
return webClient.post().
uri(promotionEngineUrl).
accept(MediaType.APPLICATION_JSON).
contentType(MediaType.APPLICATION_JSON).
body(Mono.just(peRequest), PERequest.class).
retrieve().
onStatus(HttpStatus::is4xxClientError, clientResponse -> handleError(clientResponse)).
onStatus(HttpStatus::is5xxServerError, clientResponse -> handleError(clientResponse)).
bodyToFlux(PEResponse.class);
}
private Mono<? extends Throwable> handleError(ClientResponse clientResponse) throws GlobalApiGenericException {
final Mono<Response> responseMono = clientResponse.bodyToMono(Response.class);
return responseMono.flatMap(response -> {
log.error("Error Response While Calling PE Service {}", response);
throw new GlobalApiGenericException(response, response.getHttpStatusCode());
});
}
}
......@@ -13,7 +13,7 @@ public class ExceptionUtil {
public static Mono<? extends Throwable> handleError(ClientResponse clientResponse)throws GlobalApiGenericException {
final Mono<Response> responseMono = clientResponse.bodyToMono(Response.class);
return responseMono.flatMap(response -> {
log.error("Error Response While Calling Store Consumer Service {}",response);
log.error("Error Response While Calling Service {}",response);
throw new GlobalApiGenericException(response, response.getHttpStatusCode());
});
}
......
spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/user
spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/postgres
spring.datasource.username=user
spring.datasource.password=password123
promotion.engine.calculate.discount.url=/promotionEngine/calculateDiscount
promotion.engine.baseUrl=http://localhost:8081
store.producer.url=/store/producer
//TODO: change the baseUrl post confirmation from Amar
store.producer.baseUrl=http://localhost:8081
\ No newline at end of file
store.producer.baseUrl=http://localhost:8083
\ No newline at end of file
package com.nisum.offertransactionservice.client;
import com.safeway.epe.model.Employee;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.junit.MockitoJUnitRunner;
import org.springframework.test.util.ReflectionTestUtils;
import org.springframework.test.web.reactive.server.WebTestClient;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class ClientServiceTest {
@Mock
WebTestClient webTestClient;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
}
@Mock
private WebClient webClientMock;
@Mock
private WebClient.RequestHeadersSpec requestHeadersMock;
@Mock
private WebClient.RequestHeadersUriSpec requestHeadersUriMock;
@Mock
private WebClient.RequestBodySpec requestBodyMock;
@Mock
private WebClient.RequestBodyUriSpec requestBodyUriMock;
@Mock
private WebClient.ResponseSpec responseMock;
@InjectMocks
ClientService clientService;
@Test
public void getStringMonoTest(){
String uuid = "86fd4146-0540-405b-b621-a95f4ccdfa0d";
ReflectionTestUtils.setField(clientService,"storeConsumerUrl","/store/producer");
// when(webClientMock.post()).thenReturn(requestBodyUriMock);
// when(requestHeadersUriMock.uri("/store/producer")).thenReturn(requestHeadersMock);
// when(requestHeadersMock.retrieve()).thenReturn(responseMock);
// when(responseMock.bodyToMono(String.class)).thenReturn(Mono.just(uuid));
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> employeeMono = clientService.getStringMono(uuid);
}
}
......@@ -7,10 +7,7 @@ import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentMatchers;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.mockito.*;
import org.mockito.junit.MockitoJUnitRunner;
import java.io.IOException;
......@@ -23,7 +20,12 @@ import java.util.stream.Collectors;
public class EndOfSaleTest {
@Mock
private EndOfSaleService endOfSaleServiceMock;
@InjectMocks
private EndOfSaleService endOfSaleService;
@Mock
private EndOfSaleRepo endOfSaleRepo;
......@@ -35,7 +37,7 @@ public class EndOfSaleTest {
@Test
public void putEndofSaleResInDbTest() throws IOException {
EndOfSaleReq endOfSaleReq = getEndOfSaleReq();
Mockito.doNothing().when(endOfSaleRepo.save(ArgumentMatchers.any()));
Mockito.when(endOfSaleRepo.save(ArgumentMatchers.any())).thenReturn(ArgumentMatchers.any());
UUID uuid = endOfSaleService.putEndofSaleResInDb(endOfSaleReq);
Assert.assertNotNull(uuid);
}
......
package com.nisum.offertransactionservice.service;
import com.nisum.offertransactionservice.client.ClientService;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.mockito.*;
import org.mockito.junit.MockitoJUnitRunner;
import org.springframework.http.MediaType;
import org.springframework.test.web.reactive.server.WebTestClient;
import reactor.core.publisher.Mono;
......@@ -17,7 +15,15 @@ import reactor.core.publisher.Mono;
public class EndOfTransactionTest {
@Mock
private EndOfTransactionService endOfTransactionService;
private EndOfTransactionService endOfTransactionServiceMock;
@InjectMocks
@Spy
private EndOfTransactionService endOfTransactionService = new EndOfTransactionService();
@Mock
ClientService clientService;;
@Mock
private WebTestClient webTestClient;
......@@ -27,20 +33,20 @@ public class EndOfTransactionTest {
MockitoAnnotations.initMocks(this);
}
@Test
public void getStringMonoTest() {
String uuid = "86fd4146-0540-405b-b621-a95f4ccdfa0d";
webTestClient.post().uri("http://localhost:8081/store/producer")
.contentType(MediaType.APPLICATION_JSON)
.body(Mono.just(uuid), String.class)
.exchange()
.expectBody().json("");
}
// @Test
// public void getStringMonoTest() {
// String uuid = "86fd4146-0540-405b-b621-a95f4ccdfa0d";
// webTestClient.post().uri("http://localhost:8081/store/producer")
// .contentType(MediaType.APPLICATION_JSON)
// .body(Mono.just(uuid), String.class)
// .exchange()
// .expectBody().json("");
// }
@Test
public void endOfTransaction() {
String uuid = "86fd4146-0540-405b-b621-a95f4ccdfa0d";
Mockito.when(endOfTransactionService.getStringMono(uuid)).thenReturn(Mono.just(""));
Mockito.when(clientService.getStringMono(ArgumentMatchers.any())).thenReturn(Mono.just("test"));
Assert.assertNotNull(endOfTransactionService.endOfTransaction(uuid));
}
}
package com.nisum.offertransactionservice.service;
import com.nisum.offertransactionservice.client.ClientService;
import com.nisum.offertransactionservice.converter.OfferConverter;
import com.nisum.offertransactionservice.converter.PEResponseToOfferTransactionResConverter;
import com.nisum.offertransactionservice.dao.OfferLookupRepo;
......@@ -14,11 +15,8 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.PropertySource;
import org.springframework.http.MediaType;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.web.reactive.server.WebTestClient;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import java.util.ArrayList;
import java.util.List;
......@@ -54,23 +52,26 @@ public class OfferServiceTest {
MockitoAnnotations.initMocks(this);
}
@Test
public void getPeResponseFluxTest() {
webTestClient.post().uri("hhtp://localhost:8081/" + promotionEngineUrl)
.contentType(MediaType.APPLICATION_JSON)
.body(Mono.just(getPEReq()), PERequest.class)
.exchange()
.expectBody()
.jsonPath("$.hhid").isEqualTo("123");
}
@Mock
ClientService clientService;
// @Test
// public void getPeResponseFluxTest() {
// webTestClient.post().uri("hhtp://localhost:8081/" + promotionEngineUrl)
// .contentType(MediaType.APPLICATION_JSON)
// .body(Mono.just(getPEReq()), PERequest.class)
// .exchange()
// .expectBody()
// .jsonPath("$.hhid").isEqualTo("123");
// }
@Test
public void serviceTest() {
OfferTransactionRequest offerTransactionRequest = getOfferTransactionRequest();
Mockito.when(offerLookupRepo.findAll()).thenReturn(returnOffers());
Mockito.when(offerConverter.apply(getOfferTransactionRequest())).thenReturn(getPEReq());
Mockito.when(offerCallingPEService.getPeResponseFlux(getPEReq()))
.thenReturn(Flux.just(getPeResponse()));
Mockito.when(clientService.getPeResponseFlux(ArgumentMatchers.any())).thenReturn(getPeResponse());
Mockito.when(peResponseToOfferTransactionResConverter.apply(getPeResponse())).thenReturn(retOfferTransRes());
OfferTransactionResponse offerTransactionResponse = offerCallingPEService.getDiscountedItemList(offerTransactionRequest);
Assert.assertEquals(offerTransactionResponse, retOfferTransRes());
......
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