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