Commit 3e892827 authored by sgandhi's avatar sgandhi

Added test cases

parent d373c0f8
...@@ -36,6 +36,7 @@ dependencies { ...@@ -36,6 +36,7 @@ dependencies {
compile group: 'org.codehaus.jackson', name: 'jackson-mapper-asl', version: '1.9.0' compile group: 'org.codehaus.jackson', name: 'jackson-mapper-asl', version: '1.9.0'
// https://mvnrepository.com/artifact/com.vladmihalcea/hibernate-types-parent // https://mvnrepository.com/artifact/com.vladmihalcea/hibernate-types-parent
compile 'com.vladmihalcea:hibernate-types-52:2.0.0' 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' implementation group: 'junit', name: 'junit', version: '4.12'
testImplementation('org.springframework.boot:spring-boot-starter-test') testImplementation('org.springframework.boot:spring-boot-starter-test')
......
...@@ -65,7 +65,8 @@ CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; ...@@ -65,7 +65,8 @@ CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE TABLE endofsale( CREATE TABLE endofsale(
uuid uuid NOT NULL DEFAULT uuid_generate_v1(), uuid uuid NOT NULL DEFAULT uuid_generate_v1(),
offertransactionresponse jsonb NOT NULL, offertransactionresponse jsonb NOT NULL,
offers jsonb NOT NULL offers jsonb NOT NULL,
isprocessed boolean
); );
......
...@@ -35,4 +35,6 @@ public class EndOfSaleEntity { ...@@ -35,4 +35,6 @@ public class EndOfSaleEntity {
@Type(type = "jsonb") @Type(type = "jsonb")
@Column(name = "offers") @Column(name = "offers")
String offers; String offers;
@Column(name = "isprocessed")
Boolean isProcessed = Boolean.TRUE;
} }
...@@ -25,6 +25,4 @@ public class Item { ...@@ -25,6 +25,4 @@ public class Item {
@NotNull @NotNull
String cmsCoupouns; String cmsCoupouns;
String offerIdApplied;
} }
...@@ -25,10 +25,10 @@ public class EndOfTransactionService { ...@@ -25,10 +25,10 @@ public class EndOfTransactionService {
private WebClient webClient; private WebClient webClient;
@Value("${store.consumer.url}") @Value("${store.producer.url}")
private String storeConsumerUrl; private String storeConsumerUrl;
@Value("${store.consumer.baseUrl}") @Value("${store.producer.baseUrl}")
private String baseUrl; private String baseUrl;
@PostConstruct @PostConstruct
...@@ -61,18 +61,22 @@ public class EndOfTransactionService { ...@@ -61,18 +61,22 @@ 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 = webClient.post(). Mono<String> endOfTransactionRes = getStringMono(uuid);
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);
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);
}
} }
...@@ -67,7 +67,6 @@ public class OfferCallingPEService { ...@@ -67,7 +67,6 @@ public class OfferCallingPEService {
}); });
} }
public OfferTransactionResponse getDiscountedItemList(OfferTransactionRequest offerTransactionRequest) { public OfferTransactionResponse getDiscountedItemList(OfferTransactionRequest offerTransactionRequest) {
log.info("Inside getDiscountedItemList Method"); log.info("Inside getDiscountedItemList Method");
List<OfferLookup> eligibleOffer = new ArrayList(); List<OfferLookup> eligibleOffer = new ArrayList();
...@@ -81,21 +80,25 @@ public class OfferCallingPEService { ...@@ -81,21 +80,25 @@ 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 = webClient.post(). Flux<PEResponse> peResponseFlux = getPeResponseFlux(peRequest);
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);
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.toStream().findFirst().get());
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 { private 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 -> {
......
...@@ -3,6 +3,6 @@ spring.datasource.username=user ...@@ -3,6 +3,6 @@ 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.consumer.url=central/producer store.producer.url=/store/producer
//TODO: change the baseUrl post confirmation from Amar //TODO: change the baseUrl post confirmation from Amar
store.consumer.baseUrl=http://localhost:8081 store.producer.baseUrl=http://localhost:8081
\ No newline at end of file \ 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; ...@@ -11,25 +11,28 @@ import org.junit.runner.RunWith;
import org.mockito.*; import org.mockito.*;
import org.mockito.junit.MockitoJUnitRunner; import org.mockito.junit.MockitoJUnitRunner;
import org.springframework.beans.factory.annotation.Value; 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.context.annotation.PropertySource;
import org.springframework.http.HttpStatus; import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity; import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ContextConfiguration; import org.springframework.test.web.reactive.server.WebTestClient;
import org.springframework.test.context.TestPropertySource; import reactor.core.publisher.Flux;
import org.springframework.test.util.ReflectionTestUtils; import reactor.core.publisher.Mono;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.reactive.function.client.WebClient;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@RunWith(MockitoJUnitRunner.class) @RunWith(MockitoJUnitRunner.class)
@SpringBootTest
@DirtiesContext
@AutoConfigureWebTestClient
@PropertySource("classpath:application-test.yml") @PropertySource("classpath:application-test.yml")
public class OfferServiceTest { public class OfferServiceTest {
@Mock @Mock
private RestTemplate restTemplate; private WebTestClient webTestClient;
@Mock @Mock
private OfferConverter offerConverter; private OfferConverter offerConverter;
...@@ -40,54 +43,57 @@ public class OfferServiceTest { ...@@ -40,54 +43,57 @@ public class OfferServiceTest {
@Mock @Mock
private PEResponseToOfferTransactionResConverter peResponseToOfferTransactionResConverter; private PEResponseToOfferTransactionResConverter peResponseToOfferTransactionResConverter;
// @Spy
// private final SpringJunitService springJunitService = new SpringJunitService();
@InjectMocks @InjectMocks
private OfferCallingPEService offerCallingPEService = new OfferCallingPEService(); private OfferCallingPEService offerCallingPEService = new OfferCallingPEService();
@Value("${promotion.engine.calculate.discount.url}") @Value("${promotion.engine.calculate.discount.url}")
private String promotionEngineUrl ; private String promotionEngineUrl;
@Before @Before
public void setUp() throws Exception { public void setUp() throws Exception {
MockitoAnnotations.initMocks(this); 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 @Test
public void serviceTest() { public void serviceTest() {
//ReflectionTestUtils.setField(springJunitService, "securityKey", "it's a security key");
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(restTemplate.postForEntity("http://localhost:8081"+promotionEngineUrl,getPEReq(), PEResponse.class)) Mockito.when(offerCallingPEService.getPeResponseFlux(getPEReq()))
.thenReturn(new ResponseEntity<PEResponse>(getPeResponse(), HttpStatus.OK)); .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());
} }
private OfferTransactionResponse retOfferTransRes() { private OfferTransactionResponse retOfferTransRes() {
OfferTransactionResponse offerTransactionResponse = new OfferTransactionResponse(); OfferTransactionResponse offerTransactionResponse = new OfferTransactionResponse();
offerTransactionResponse.setHhid("123"); offerTransactionResponse.setHhid("123");
List<Item> itemList = new ArrayList<>(); List<Item> itemList = new ArrayList<>();
Item item1 = new Item("Coke","12",6.05,"cmsCoupons"); Item item1 = new Item("Coke", "12", 6.05, "cmsCoupons");
Item item2 = new Item("Thumpsup","11",12.32,"cmsCoupons"); Item item2 = new Item("Thumpsup", "11", 12.32, "cmsCoupons");
itemList.add(item1); itemList.add(item1);
itemList.add(item2); itemList.add(item2);
offerTransactionResponse.setDiscountedItemList(itemList); offerTransactionResponse.setDiscountedItemList(itemList);
return offerTransactionResponse; return offerTransactionResponse;
} }
private PEResponse getPeResponse(){ private PEResponse getPeResponse() {
PEResponse peResponse = new PEResponse(); PEResponse peResponse = new PEResponse();
peResponse.setHhid("123"); peResponse.setHhid("123");
List<Item> itemList = new ArrayList<>(); List<Item> itemList = new ArrayList<>();
Item item1 = new Item("Coke","12",6.05,"cmsCoupons"); Item item1 = new Item("Coke", "12", 6.05, "cmsCoupons");
Item item2 = new Item("Thumpsup","11",12.32,"cmsCoupons"); Item item2 = new Item("Thumpsup", "11", 12.32, "cmsCoupons");
itemList.add(item1); itemList.add(item1);
itemList.add(item2); itemList.add(item2);
peResponse.setDiscountedItemList(itemList); peResponse.setDiscountedItemList(itemList);
...@@ -98,8 +104,8 @@ public class OfferServiceTest { ...@@ -98,8 +104,8 @@ public class OfferServiceTest {
PERequest peRequest = new PERequest(); PERequest peRequest = new PERequest();
peRequest.setHhId("123"); peRequest.setHhId("123");
List<Item> itemList = new ArrayList<>(); List<Item> itemList = new ArrayList<>();
Item item1 = new Item("Coke","12",13.05,"cmsCoupons"); Item item1 = new Item("Coke", "12", 13.05, "cmsCoupons");
Item item2 = new Item("Thumpsup","11",14.05,"cmsCoupons"); Item item2 = new Item("Thumpsup", "11", 14.05, "cmsCoupons");
itemList.add(item1); itemList.add(item1);
itemList.add(item2); itemList.add(item2);
peRequest.setItemList(itemList); 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