Commit 3e892827 authored by sgandhi's avatar sgandhi

Added test cases

parent d373c0f8
......@@ -36,6 +36,7 @@ dependencies {
compile group: 'org.codehaus.jackson', name: 'jackson-mapper-asl', version: '1.9.0'
// https://mvnrepository.com/artifact/com.vladmihalcea/hibernate-types-parent
compile 'com.vladmihalcea:hibernate-types-52:2.0.0'
testCompile 'com.squareup.okhttp3:mockwebserver:3.8.0'
implementation group: 'junit', name: 'junit', version: '4.12'
testImplementation('org.springframework.boot:spring-boot-starter-test')
......
......@@ -65,7 +65,8 @@ CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE TABLE endofsale(
uuid uuid NOT NULL DEFAULT uuid_generate_v1(),
offertransactionresponse jsonb NOT NULL,
offers jsonb NOT NULL
offers jsonb NOT NULL,
isprocessed boolean
);
......
......@@ -35,4 +35,6 @@ public class EndOfSaleEntity {
@Type(type = "jsonb")
@Column(name = "offers")
String offers;
@Column(name = "isprocessed")
Boolean isProcessed = Boolean.TRUE;
}
......@@ -25,6 +25,4 @@ public class Item {
@NotNull
String cmsCoupouns;
String offerIdApplied;
}
......@@ -25,10 +25,10 @@ public class EndOfTransactionService {
private WebClient webClient;
@Value("${store.consumer.url}")
@Value("${store.producer.url}")
private String storeConsumerUrl;
@Value("${store.consumer.baseUrl}")
@Value("${store.producer.baseUrl}")
private String baseUrl;
@PostConstruct
......@@ -61,18 +61,22 @@ 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 = 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);
Mono<String> endOfTransactionRes = 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);
}
}
......@@ -67,7 +67,6 @@ public class OfferCallingPEService {
});
}
public OfferTransactionResponse getDiscountedItemList(OfferTransactionRequest offerTransactionRequest) {
log.info("Inside getDiscountedItemList Method");
List<OfferLookup> eligibleOffer = new ArrayList();
......@@ -81,21 +80,25 @@ public class OfferCallingPEService {
PERequest peRequest = offerConverter.apply(offerTransactionRequest);
peRequest.setEligibleOffers(eligibleOffer);
log.info("Promotional Engine WebClient call Start");
Flux<PEResponse> peResponseFlux = 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);
Flux<PEResponse> peResponseFlux = getPeResponseFlux(peRequest);
log.debug("Promotional Engine WebClient call End");
offerTransactionResponse = peResponseToOfferTransactionResConverter.apply(peResponseFlux.toStream().findFirst().get());
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 -> {
......
......@@ -3,6 +3,6 @@ spring.datasource.username=user
spring.datasource.password=password123
promotion.engine.calculate.discount.url=/promotionEngine/calculateDiscount
promotion.engine.baseUrl=http://localhost:8081
store.consumer.url=central/producer
store.producer.url=/store/producer
//TODO: change the baseUrl post confirmation from Amar
store.consumer.baseUrl=http://localhost:8081
\ No newline at end of file
store.producer.baseUrl=http://localhost:8081
\ No newline at end of file
package com.nisum.offertransactionservice.service;
import com.nisum.offertransactionservice.dao.EndOfSaleRepo;
import com.nisum.offertransactionservice.dao.OfferLookupRepo;
import com.nisum.offertransactionservice.model.*;
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.junit.MockitoJUnitRunner;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
@RunWith(MockitoJUnitRunner.class)
public class EndOfSaleTest {
@Mock
private EndOfSaleService endOfSaleService;
@Mock
private EndOfSaleRepo endOfSaleRepo;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
}
@Test
public void putEndofSaleResInDbTest() throws IOException {
EndOfSaleReq endOfSaleReq = getEndOfSaleReq();
Mockito.doNothing().when(endOfSaleRepo.save(ArgumentMatchers.any()));
UUID uuid = endOfSaleService.putEndofSaleResInDb(endOfSaleReq);
Assert.assertNotNull(uuid);
}
private EndOfSaleReq getEndOfSaleReq() {
EndOfSaleReq endOfSaleReq = new EndOfSaleReq();
endOfSaleReq.setOfferTransactionResponse(retOfferTransRes());
endOfSaleReq.setOffers(returnOffers());
return endOfSaleReq;
}
private OfferTransactionResponse retOfferTransRes() {
OfferTransactionResponse offerTransactionResponse = new OfferTransactionResponse();
offerTransactionResponse.setHhid("123");
List<Item> itemList = new ArrayList<>();
Item item1 = new Item("Coke", "12", 6.05, "cmsCoupons");
Item item2 = new Item("Thumpsup", "11", 12.32, "cmsCoupons");
itemList.add(item1);
itemList.add(item2);
offerTransactionResponse.setDiscountedItemList(itemList);
return offerTransactionResponse;
}
public List<OfferLookup> returnOffers() {
OfferLookup offerLookup1 = new OfferLookup("1", "12", "234", "02", "AND", "BOGO");
OfferLookup offerLookup2 = new OfferLookup("2", "13", "234", "02", "OR", "BXGY");
List<OfferLookup> offerLookups = new ArrayList<>();
offerLookups.add(offerLookup1);
offerLookups.add(offerLookup2);
return offerLookups.stream().collect(Collectors.toList());
}
}
package com.nisum.offertransactionservice.service;
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.junit.MockitoJUnitRunner;
import org.springframework.http.MediaType;
import org.springframework.test.web.reactive.server.WebTestClient;
import reactor.core.publisher.Mono;
@RunWith(MockitoJUnitRunner.class)
public class EndOfTransactionTest {
@Mock
private EndOfTransactionService endOfTransactionService;
@Mock
private WebTestClient webTestClient;
@Before
public void setUp() throws Exception {
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 endOfTransaction() {
String uuid = "86fd4146-0540-405b-b621-a95f4ccdfa0d";
Mockito.when(endOfTransactionService.getStringMono(uuid)).thenReturn(Mono.just(""));
Assert.assertNotNull(endOfTransactionService.endOfTransaction(uuid));
}
}
......@@ -11,25 +11,28 @@ import org.junit.runner.RunWith;
import org.mockito.*;
import org.mockito.junit.MockitoJUnitRunner;
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.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.TestPropertySource;
import org.springframework.test.util.ReflectionTestUtils;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.reactive.function.client.WebClient;
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;
import java.util.stream.Collectors;
@RunWith(MockitoJUnitRunner.class)
@SpringBootTest
@DirtiesContext
@AutoConfigureWebTestClient
@PropertySource("classpath:application-test.yml")
public class OfferServiceTest {
@Mock
private RestTemplate restTemplate;
private WebTestClient webTestClient;
@Mock
private OfferConverter offerConverter;
......@@ -40,54 +43,57 @@ public class OfferServiceTest {
@Mock
private PEResponseToOfferTransactionResConverter peResponseToOfferTransactionResConverter;
// @Spy
// private final SpringJunitService springJunitService = new SpringJunitService();
@InjectMocks
private OfferCallingPEService offerCallingPEService = new OfferCallingPEService();
@Value("${promotion.engine.calculate.discount.url}")
private String promotionEngineUrl ;
private String promotionEngineUrl;
@Before
public void setUp() throws Exception {
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");
}
@Test
public void serviceTest() {
//ReflectionTestUtils.setField(springJunitService, "securityKey", "it's a security key");
OfferTransactionRequest offerTransactionRequest = getOfferTransactionRequest();
Mockito.when(offerLookupRepo.findAll()).thenReturn(returnOffers());
Mockito.when(offerConverter.apply(getOfferTransactionRequest())).thenReturn(getPEReq());
Mockito.when(restTemplate.postForEntity("http://localhost:8081"+promotionEngineUrl,getPEReq(), PEResponse.class))
.thenReturn(new ResponseEntity<PEResponse>(getPeResponse(), HttpStatus.OK));
Mockito.when(offerCallingPEService.getPeResponseFlux(getPEReq()))
.thenReturn(Flux.just(getPeResponse()));
Mockito.when(peResponseToOfferTransactionResConverter.apply(getPeResponse())).thenReturn(retOfferTransRes());
OfferTransactionResponse offerTransactionResponse = offerCallingPEService.getDiscountedItemList(offerTransactionRequest);
Assert.assertEquals(offerTransactionResponse,retOfferTransRes());
OfferTransactionResponse offerTransactionResponse = offerCallingPEService.getDiscountedItemList(offerTransactionRequest);
Assert.assertEquals(offerTransactionResponse, retOfferTransRes());
}
private OfferTransactionResponse retOfferTransRes() {
OfferTransactionResponse offerTransactionResponse = new OfferTransactionResponse();
offerTransactionResponse.setHhid("123");
List<Item> itemList = new ArrayList<>();
Item item1 = new Item("Coke","12",6.05,"cmsCoupons");
Item item2 = new Item("Thumpsup","11",12.32,"cmsCoupons");
Item item1 = new Item("Coke", "12", 6.05, "cmsCoupons");
Item item2 = new Item("Thumpsup", "11", 12.32, "cmsCoupons");
itemList.add(item1);
itemList.add(item2);
offerTransactionResponse.setDiscountedItemList(itemList);
return offerTransactionResponse;
}
private PEResponse getPeResponse(){
private PEResponse getPeResponse() {
PEResponse peResponse = new PEResponse();
peResponse.setHhid("123");
List<Item> itemList = new ArrayList<>();
Item item1 = new Item("Coke","12",6.05,"cmsCoupons");
Item item2 = new Item("Thumpsup","11",12.32,"cmsCoupons");
Item item1 = new Item("Coke", "12", 6.05, "cmsCoupons");
Item item2 = new Item("Thumpsup", "11", 12.32, "cmsCoupons");
itemList.add(item1);
itemList.add(item2);
peResponse.setDiscountedItemList(itemList);
......@@ -98,8 +104,8 @@ public class OfferServiceTest {
PERequest peRequest = new PERequest();
peRequest.setHhId("123");
List<Item> itemList = new ArrayList<>();
Item item1 = new Item("Coke","12",13.05,"cmsCoupons");
Item item2 = new Item("Thumpsup","11",14.05,"cmsCoupons");
Item item1 = new Item("Coke", "12", 13.05, "cmsCoupons");
Item item2 = new Item("Thumpsup", "11", 14.05, "cmsCoupons");
itemList.add(item1);
itemList.add(item2);
peRequest.setItemList(itemList);
......
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