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.controller;
import com.github.tomakehurst.wiremock.junit.WireMockRule;
import com.nisum.offertransactionservice.dto.*;
import com.nisum.offertransactionservice.model.OfferLookup;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.cloud.contract.wiremock.AutoConfigureWireMock;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpMethod;
import org.springframework.http.RequestEntity;
import org.springframework.http.ResponseEntity;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import static com.github.tomakehurst.wiremock.client.WireMock.*;
@SpringBootTest(webEnvironment= SpringBootTest.WebEnvironment.DEFINED_PORT)
@AutoConfigureWireMock
public class OfferTransactionControllerIntegrationTest extends AbstractTestBase{
@RegisterExtension
public WireMockRule wireMockRule = new WireMockRule(7072);
@Autowired
private TestRestTemplate testRestTemplate;
@BeforeEach
public void setUp() {
mockForOfferTransactionCall();
mockForEndOfSale();
mockForEndOfTransaction();
}
private void mockForOfferTransactionCall() {
mWireMockServer.stubFor(post(urlEqualTo("/offerTransactionCall"))
.willReturn(aResponse()
.withStatus(200)
.withHeader("Content-Type", "application/json")
.withBodyFile("response.json")
));
}
private void mockForEndOfSale() {
mWireMockServer.stubFor(post(urlEqualTo("/endOfSale"))
.willReturn(aResponse()
.withStatus(200)
.withHeader("Content-Type", "application/json")
.withBodyFile("endOfSale-response.json")
));
}
private void mockForEndOfTransaction() {
mWireMockServer.stubFor(post(urlEqualTo("/endOfTransaction"))
.willReturn(aResponse()
.withStatus(200)
.withHeader("Content-Type", "application/json")
.withBodyFile("endOfTransaction-response.json")
));
}
@Test
public void getOfferTransactionResponseTest() {
URI uri = URI.create("http://localhost:7072/offerTransactionCall");
RequestEntity requestEntity = new RequestEntity(getOfferTransactionRequest(),HttpMethod.POST,uri);
ResponseEntity<OfferTransactionResponse> responseEntity = testRestTemplate.exchange("http://localhost:7072/offerTransactionCall", HttpMethod.POST,requestEntity,
new ParameterizedTypeReference<OfferTransactionResponse>(){}
);
OfferTransactionResponse offerTransactionResponse = responseEntity.getBody();
System.out.println(offerTransactionResponse);
Assertions.assertNotNull(offerTransactionResponse.getTransactionId());
}
@Test
public void endOfSaleTest() {
URI uri = URI.create("http://localhost:7072/endOfSale");
RequestEntity requestEntity = new RequestEntity(getEndOfSaleReq(),HttpMethod.POST,uri);
ResponseEntity<EndOfSaleResponse> responseEntity = testRestTemplate.exchange("http://localhost:7072/endOfSale", HttpMethod.POST,requestEntity,
new ParameterizedTypeReference<EndOfSaleResponse>(){}
);
EndOfSaleResponse endOfSaleResponse = responseEntity.getBody();
Assertions.assertNotNull(endOfSaleResponse.getUuId());
}
@Test
public void endOfTransactionTest() {
URI uri = URI.create("http://localhost:7072/endOfTransaction");
String uuid = "86fd4146-0540-405b-b621-a95f4ccdfa0d";
RequestEntity requestEntity = new RequestEntity(uuid,HttpMethod.POST,uri);
ResponseEntity<String> responseEntity = testRestTemplate.exchange("http://localhost:7072/endOfTransaction", HttpMethod.POST,requestEntity,
new ParameterizedTypeReference<String>(){}
);
String endOfTransactionRes = responseEntity.getBody();
Assertions.assertNotNull(endOfTransactionRes);
}
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);
Item item2 = new Item("Thumpsup", "11", 12.32);
itemList.add(item1);
itemList.add(item2);
offerTransactionResponse.setDiscountedItemList(itemList);
offerTransactionResponse.setTransactionId("123456788899999998");
return offerTransactionResponse;
}
public List<OfferLookup> returnOffers() {
OfferLookup offerLookup1 = new OfferLookup("1", "12", 23L, "02", "AND", "BOGO");
OfferLookup offerLookup2 = new OfferLookup("2", "13", 24L, "02", "OR", "BXGY");
List<OfferLookup> offerLookups = new ArrayList<>();
offerLookups.add(offerLookup1);
offerLookups.add(offerLookup2);
return offerLookups.stream().collect(Collectors.toList());
}
private OfferTransactionRequest getOfferTransactionRequest() {
OfferTransactionRequest offerTransactionRequest = new OfferTransactionRequest();
offerTransactionRequest.setHhId("54321");
offerTransactionRequest.setItemList(getItemList());
return offerTransactionRequest;
}
private List<Item> getItemList() {
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);
return itemList;
}
}
//package com.nisum.offertransactionservice.controller;
//
//import com.github.tomakehurst.wiremock.junit.WireMockRule;
//import com.nisum.offertransactionservice.config.FeignClientConfig;
//import com.nisum.offertransactionservice.dto.*;
//import com.nisum.offertransactionservice.model.OfferLookup;
//import org.junit.ClassRule;
//import org.junit.jupiter.api.Assertions;
//import org.junit.jupiter.api.BeforeEach;
//import org.junit.jupiter.api.Test;
//import org.junit.jupiter.api.extension.RegisterExtension;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.boot.test.context.SpringBootTest;
//import org.springframework.boot.test.web.client.TestRestTemplate;
//import org.springframework.cloud.contract.wiremock.AutoConfigureWireMock;
//import org.springframework.cloud.openfeign.EnableFeignClients;
//import org.springframework.cloud.openfeign.FeignClient;
//import org.springframework.core.ParameterizedTypeReference;
//import org.springframework.http.HttpMethod;
//import org.springframework.http.RequestEntity;
//import org.springframework.http.ResponseEntity;
//import org.springframework.web.bind.annotation.PostMapping;
//
//import java.net.URI;
//import java.util.ArrayList;
//import java.util.List;
//import java.util.stream.Collectors;
//
//import static com.github.tomakehurst.wiremock.client.WireMock.*;
//
//
//@SpringBootTest(webEnvironment= SpringBootTest.WebEnvironment.DEFINED_PORT)
//@AutoConfigureWireMock
//@EnableFeignClients(clients = OfferTransactionControllerIntegrationTest.PromotionEngineFeignClient.class)
//public class OfferTransactionControllerIntegrationTest{
//
// @RegisterExtension
// @ClassRule
// public WireMockRule wireMockRule = new WireMockRule(9090);
//
// @Autowired
// private TestRestTemplate testRestTemplate;
//
//
//
// @FeignClient(name = "${pe.application.name}", url="${pe.application.url}", configuration = FeignClientConfig.class)
// public interface PromotionEngineFeignClient {
//
// @PostMapping(value = "${endpoint.url.promotionEngineUrl}")
// ResponseEntity<PEResponse> callPEService(PERequest peRequest);
// }
//
// @Autowired
// PromotionEngineFeignClient feignClientService;
//
// @BeforeEach
// public void setUp() {
// mockForOfferTransactionCall();
// mockForEndOfSale();
// mockForEndOfTransaction();
// }
//
// private void mockForOfferTransactionCall() {
// wireMockRule.stubFor(post(urlEqualTo("/promotionEngine/calculateDiscount"))
// .willReturn(aResponse()
// .withStatus(200)
// .withHeader("Content-Type", "application/json")
// .withBodyFile("response.json")
// ));
// }
//
// private void mockForEndOfSale() {
// wireMockRule.stubFor(post(urlEqualTo("/endOfSale"))
// .willReturn(aResponse()
// .withStatus(200)
// .withHeader("Content-Type", "application/json")
// .withBodyFile("endOfSale-response.json")
// ));
// }
//
// private void mockForEndOfTransaction() {
// wireMockRule.stubFor(post(urlEqualTo("/endOfTransaction"))
// .willReturn(aResponse()
// .withStatus(200)
// .withHeader("Content-Type", "application/json")
// .withBodyFile("endOfTransaction-response.json")
// ));
// }
//
// @Test
// public void getOfferTransactionResponseTest() {
// URI uri = URI.create("http://localhost:7072/offer-service/offerTransactionCall");
// RequestEntity requestEntity = new RequestEntity(getOfferTransactionRequest(),HttpMethod.POST,uri);
//
// ResponseEntity<OfferTransactionResponse> responseEntity = testRestTemplate.exchange("http://localhost:7072/offer-service/offerTransactionCall", HttpMethod.POST,requestEntity,
// new ParameterizedTypeReference<OfferTransactionResponse>(){}
// );
// OfferTransactionResponse offerTransactionResponse = responseEntity.getBody();
// System.out.println(offerTransactionResponse);
// Assertions.assertNotNull(offerTransactionResponse.getTransactionId());
//
// }
//
// @Test
// public void endOfSaleTest() {
// URI uri = URI.create("http://localhost:7072/endOfSale");
// RequestEntity requestEntity = new RequestEntity(getEndOfSaleReq(),HttpMethod.POST,uri);
//
// ResponseEntity<EndOfSaleResponse> responseEntity = testRestTemplate.exchange("http://localhost:7072/endOfSale", HttpMethod.POST,requestEntity,
// new ParameterizedTypeReference<EndOfSaleResponse>(){}
// );
// EndOfSaleResponse endOfSaleResponse = responseEntity.getBody();
// Assertions.assertNotNull(endOfSaleResponse.getUuId());
//
// }
//
// @Test
// public void endOfTransactionTest() {
// URI uri = URI.create("http://localhost:7072/endOfTransaction");
// String uuid = "86fd4146-0540-405b-b621-a95f4ccdfa0d";
// RequestEntity requestEntity = new RequestEntity(uuid,HttpMethod.POST,uri);
//
// ResponseEntity<String> responseEntity = testRestTemplate.exchange("http://localhost:7072/endOfTransaction", HttpMethod.POST,requestEntity,
// new ParameterizedTypeReference<String>(){}
// );
// String endOfTransactionRes = responseEntity.getBody();
// Assertions.assertNotNull(endOfTransactionRes);
//
// }
//
// 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);
// Item item2 = new Item("Thumpsup", "11", 12.32);
// itemList.add(item1);
// itemList.add(item2);
// offerTransactionResponse.setDiscountedItemList(itemList);
// offerTransactionResponse.setTransactionId("123456788899999998");
// return offerTransactionResponse;
// }
//
//
//
// public List<OfferLookup> returnOffers() {
// OfferLookup offerLookup1 = new OfferLookup("1", "12", 23L, "02", "AND", "BOGO");
// OfferLookup offerLookup2 = new OfferLookup("2", "13", 24L, "02", "OR", "BXGY");
// List<OfferLookup> offerLookups = new ArrayList<>();
// offerLookups.add(offerLookup1);
// offerLookups.add(offerLookup2);
// return offerLookups.stream().collect(Collectors.toList());
// }
//
// private OfferTransactionRequest getOfferTransactionRequest() {
// OfferTransactionRequest offerTransactionRequest = new OfferTransactionRequest();
// offerTransactionRequest.setHhId("54321");
// offerTransactionRequest.setItemList(getItemList());
// return offerTransactionRequest;
// }
//
// private List<Item> getItemList() {
// 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);
// return itemList;
// }
//}
package com.nisum.offertransactionservice.controller;
import com.nisum.offertransactionservice.client.ClientService;
import com.nisum.offertransactionservice.dao.EndOfSaleRepo;
import com.nisum.offertransactionservice.dao.OfferLookupRepo;
import com.nisum.offertransactionservice.dao.OfferMetaDataRepo;
import com.nisum.offertransactionservice.dto.*;
import com.nisum.offertransactionservice.model.EndOfSaleEntity;
import com.nisum.offertransactionservice.model.OfferLookup;
import com.nisum.offertransactionservice.model.OfferMeta;
import com.nisum.offertransactionservice.service.OfferCallingPEService;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import org.mockito.ArgumentMatchers;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.Description;
import reactor.core.publisher.Mono;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.*;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.when;
@SpringBootTest
class OfferTransactionControllerTest {
@InjectMocks
@Autowired
private OfferTransactionController offerTransactionController;
@Mock
private OfferLookupRepo offerLookupRepo;
@Mock
private OfferMetaDataRepo offerMetaDataRepo;
@Mock
private EndOfSaleRepo endOfSaleRepo;
@Mock
private ClientService clientService;
private String HH_ID_FOR_END_OF_SALE = "id01";
private String TRANSACTION_ID_FOR_END_OF_SALE = "tx01";
private final String UU_ID_FOR_END_OF_TRANSACTION = "id01";
private String DISCOUNT_DESC = "10 percent";
@Mock
private OfferCallingPEService offerCallingPEService;
@Description("Component test for getOfferTransactionResponse method")
@Test
void getOfferTransactionResponse() throws InterruptedException {
when(offerLookupRepo.findByHhId(ArgumentMatchers.any(),ArgumentMatchers.any())).thenReturn(getOffers());
when(clientService.getPeResponseFlux(Mockito.any(PERequest.class))).thenReturn(getPeResponse());
when(offerCallingPEService.getOfferMetaDto(ArgumentMatchers.any())).thenReturn(getOfferLookupDto());
Mockito.doReturn(Optional.of(getOfferMeta())).when(offerMetaDataRepo).findByOfferIdAndOfferStatusIgnoreCase(Mockito.anyLong(), Mockito.anyString());
OfferTransactionResponse offerTransactionResponse = offerTransactionController.getOfferTransactionResponse(getOfferTransactionRequest());
assertEquals(true,Objects.nonNull(offerTransactionResponse.getTransactionId()));
}
@Description("Component test for endOfSale method")
@Test
void endOfSale() throws IOException {
when(endOfSaleRepo.save(Mockito.any(EndOfSaleEntity.class))).thenReturn(new EndOfSaleEntity());
assertEquals(true,Objects.nonNull(offerTransactionController.endOfSale(buildEndOfSaleReq())));
}
@Description("Component test for endOfTransaction method")
@ParameterizedTest
@ValueSource(strings = {UU_ID_FOR_END_OF_TRANSACTION})
void endOfTransaction(String uuId) {
when(clientService.getStringMono(Mockito.anyString())).thenReturn(getMonoOfString());
assertEquals(true,Objects.nonNull(offerTransactionController.endOfTransaction(uuId)));
}
private List<OfferLookup> getOffers() {
OfferLookup offerLookup1 = new OfferLookup("123", "12", 234L, "02", "AND", "BOGO");
OfferLookup offerLookup2 = new OfferLookup("1213", "13", 234L, "02", "OR", "BXGY");
List<OfferLookup> offerLookups = new ArrayList<>();
offerLookups.add(offerLookup1);
offerLookups.add(offerLookup2);
return offerLookups;
}
private OfferTransactionRequest getOfferTransactionRequest() {
OfferTransactionRequest offerTransactionRequest = new OfferTransactionRequest();
offerTransactionRequest.setHhId("54321");
offerTransactionRequest.setItemList(getItemList());
return offerTransactionRequest;
}
private PEResponse getPeResponse() {
PEResponse peResponse = new PEResponse();
peResponse.setHhid(123L);
peResponse.setDiscountedItemList(getItemList());
return peResponse;
}
private EndOfSaleReq buildEndOfSaleReq() {
OfferTransactionResponse offerTransactionResponse = new OfferTransactionResponse(HH_ID_FOR_END_OF_SALE, TRANSACTION_ID_FOR_END_OF_SALE, getItemList(),DISCOUNT_DESC);
EndOfSaleReq endOfSaleReq = new EndOfSaleReq(offerTransactionResponse, getOffers());
return endOfSaleReq;
}
private List<Item> getItemList() {
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);
return itemList;
}
private Mono<String> getMonoOfString() {
return Mono.just("MONO_TO_STRING");
}
private OfferMeta getOfferMeta(){
OfferMeta offerMetaDTO = new OfferMeta();
offerMetaDTO.setDiscount("discount");
offerMetaDTO.setEligibility("eligibility");
offerMetaDTO.setExpiryTime(LocalDateTime.of(2021,01,01,01,01));
offerMetaDTO.setStartTime(LocalDateTime.of(2020,01,01,01,01));
offerMetaDTO.setOfferDesc("30 percent");
offerMetaDTO.setOfferId(1L);
offerMetaDTO.setOfferStatus("Active");
offerMetaDTO.setRcptTxt("text");
offerMetaDTO.setOfferType("aaa");
return offerMetaDTO;
}
private List<OfferLookupDTO> getOfferLookupDto(){
OfferLookupDTO offerLookupDTO = new OfferLookupDTO();
offerLookupDTO.setId("123");
offerLookupDTO.setIdType("1234");
offerLookupDTO.setOfferId(1L);
offerLookupDTO.setPreCondition("And");
offerLookupDTO.setStoreId("001");
offerLookupDTO.setTerminal("001");
OfferMetaDTO offerMetaDTO = new OfferMetaDTO();
offerMetaDTO.setDiscount("discount");
offerMetaDTO.setEligibility("eligibility");
offerMetaDTO.setExpiryTime(LocalDateTime.of(2021,01,01,01,01));
offerMetaDTO.setStartTime(LocalDateTime.of(2020,01,01,01,01));
offerMetaDTO.setOfferDesc("30 percent");
offerMetaDTO.setOfferId(1L);
offerMetaDTO.setOfferStatus("Active");
offerMetaDTO.setRcptTxt("text");
offerMetaDTO.setOfferType("aaa");
offerLookupDTO.setOfferMetaDTO(offerMetaDTO);
OfferLookupDTO offerLookupDTO1 = new OfferLookupDTO();
offerLookupDTO1.setId("123");
offerLookupDTO1.setIdType("1234");
offerLookupDTO1.setOfferId(1L);
offerLookupDTO1.setPreCondition("And");
offerLookupDTO1.setStoreId("001");
offerLookupDTO1.setTerminal("001");
OfferMetaDTO offerMetaDTO1 = new OfferMetaDTO();
offerMetaDTO1.setDiscount("discount");
offerMetaDTO1.setEligibility("eligibility");
offerMetaDTO1.setExpiryTime(LocalDateTime.of(2021,01,01,01,01));
offerMetaDTO1.setStartTime(LocalDateTime.of(2020,01,01,01,01));
offerMetaDTO1.setOfferDesc("20 percent");
offerMetaDTO1.setOfferId(1L);
offerMetaDTO1.setOfferStatus("Active");
offerMetaDTO1.setRcptTxt("text");
offerMetaDTO1.setOfferType("aaa");
offerLookupDTO1.setOfferMetaDTO(offerMetaDTO);
List<OfferLookupDTO> offerLookupDTOList = Arrays.asList(offerLookupDTO1, offerLookupDTO);
return offerLookupDTOList;
}
}
\ No newline at end of file
//package com.nisum.offertransactionservice.controller;
//
//import com.nisum.offertransactionservice.client.ClientService;
//import com.nisum.offertransactionservice.dao.EndOfSaleRepo;
//import com.nisum.offertransactionservice.dao.OfferLookupRepo;
//import com.nisum.offertransactionservice.dao.OfferMetaDataRepo;
//import com.nisum.offertransactionservice.dto.*;
//import com.nisum.offertransactionservice.model.EndOfSaleEntity;
//import com.nisum.offertransactionservice.model.OfferLookup;
//import com.nisum.offertransactionservice.model.OfferMeta;
//import com.nisum.offertransactionservice.service.OfferCallingPEService;
//import org.junit.jupiter.api.Test;
//import org.junit.jupiter.params.ParameterizedTest;
//import org.junit.jupiter.params.provider.ValueSource;
//import org.mockito.ArgumentMatchers;
//import org.mockito.InjectMocks;
//import org.mockito.Mock;
//import org.mockito.Mockito;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.boot.test.context.SpringBootTest;
//import org.springframework.context.annotation.Description;
//import reactor.core.publisher.Mono;
//
//import java.io.IOException;
//import java.time.LocalDateTime;
//import java.util.*;
//
//import static org.junit.jupiter.api.Assertions.assertEquals;
//import static org.mockito.Mockito.when;
//
//@SpringBootTest
//class OfferTransactionControllerTest {
//
// @InjectMocks
// @Autowired
// private OfferTransactionController offerTransactionController;
//
// @Mock
// private OfferLookupRepo offerLookupRepo;
//
// @Mock
// private OfferMetaDataRepo offerMetaDataRepo;
//
// @Mock
// private EndOfSaleRepo endOfSaleRepo;
//
// @Mock
// private ClientService clientService;
//
// private String HH_ID_FOR_END_OF_SALE = "id01";
//
// private String TRANSACTION_ID_FOR_END_OF_SALE = "tx01";
//
// private final String UU_ID_FOR_END_OF_TRANSACTION = "id01";
//
// private String DISCOUNT_DESC = "10 percent";
//
//
// @Mock
// private OfferCallingPEService offerCallingPEService;
//
// @Description("Component test for getOfferTransactionResponse method")
// @Test
// void getOfferTransactionResponse() throws InterruptedException {
// when(offerLookupRepo.findByHhId(ArgumentMatchers.any(),ArgumentMatchers.any())).thenReturn(getOffers());
// when(clientService.getPeResponseFlux(Mockito.any(PERequest.class))).thenReturn(getPeResponse());
// when(offerCallingPEService.getOfferMetaDto(ArgumentMatchers.any())).thenReturn(getOfferLookupDto());
// Mockito.doReturn(Optional.of(getOfferMeta())).when(offerMetaDataRepo).findByOfferIdAndOfferStatusIgnoreCase(Mockito.anyLong(), Mockito.anyString());
// OfferTransactionResponse offerTransactionResponse = offerTransactionController.getOfferTransactionResponse(getOfferTransactionRequest());
// assertEquals(true,Objects.nonNull(offerTransactionResponse.getTransactionId()));
// }
//
// @Description("Component test for endOfSale method")
// @Test
// void endOfSale() throws IOException {
// when(endOfSaleRepo.save(Mockito.any(EndOfSaleEntity.class))).thenReturn(new EndOfSaleEntity());
// assertEquals(true,Objects.nonNull(offerTransactionController.endOfSale(buildEndOfSaleReq())));
// }
//
// @Description("Component test for endOfTransaction method")
// @ParameterizedTest
// @ValueSource(strings = {UU_ID_FOR_END_OF_TRANSACTION})
// void endOfTransaction(String uuId) {
// when(clientService.getStringMono(Mockito.anyString())).thenReturn(getMonoOfString());
// assertEquals(true,Objects.nonNull(offerTransactionController.endOfTransaction(uuId)));
// }
//
// private List<OfferLookup> getOffers() {
// OfferLookup offerLookup1 = new OfferLookup("123", "12", 234L, "02", "AND", "BOGO");
// OfferLookup offerLookup2 = new OfferLookup("1213", "13", 234L, "02", "OR", "BXGY");
// List<OfferLookup> offerLookups = new ArrayList<>();
// offerLookups.add(offerLookup1);
// offerLookups.add(offerLookup2);
// return offerLookups;
// }
//
// private OfferTransactionRequest getOfferTransactionRequest() {
// OfferTransactionRequest offerTransactionRequest = new OfferTransactionRequest();
// offerTransactionRequest.setHhId("54321");
// offerTransactionRequest.setItemList(getItemList());
// return offerTransactionRequest;
// }
//
// private PEResponse getPeResponse() {
// PEResponse peResponse = new PEResponse();
// peResponse.setHhid(123L);
// peResponse.setDiscountedItemList(getItemList());
// return peResponse;
// }
//
// private EndOfSaleReq buildEndOfSaleReq() {
// OfferTransactionResponse offerTransactionResponse = new OfferTransactionResponse(HH_ID_FOR_END_OF_SALE, TRANSACTION_ID_FOR_END_OF_SALE, getItemList(),DISCOUNT_DESC);
// EndOfSaleReq endOfSaleReq = new EndOfSaleReq(offerTransactionResponse, getOffers());
// return endOfSaleReq;
// }
//
// private List<Item> getItemList() {
// 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);
// return itemList;
// }
// private Mono<String> getMonoOfString() {
// return Mono.just("MONO_TO_STRING");
// }
//
//
// private OfferMeta getOfferMeta(){
// OfferMeta offerMetaDTO = new OfferMeta();
// offerMetaDTO.setDiscount("discount");
// offerMetaDTO.setEligibility("eligibility");
// offerMetaDTO.setExpiryTime(LocalDateTime.of(2021,01,01,01,01));
// offerMetaDTO.setStartTime(LocalDateTime.of(2020,01,01,01,01));
// offerMetaDTO.setOfferDesc("30 percent");
// offerMetaDTO.setOfferId(1L);
// offerMetaDTO.setOfferStatus("Active");
// offerMetaDTO.setRcptTxt("text");
// offerMetaDTO.setOfferType("aaa");
// return offerMetaDTO;
// }
//
//
// private List<OfferLookupDTO> getOfferLookupDto(){
// OfferLookupDTO offerLookupDTO = new OfferLookupDTO();
// offerLookupDTO.setId("123");
// offerLookupDTO.setIdType("1234");
// offerLookupDTO.setOfferId(1L);
// offerLookupDTO.setPreCondition("And");
// offerLookupDTO.setStoreId("001");
// offerLookupDTO.setTerminal("001");
//
// OfferMetaDTO offerMetaDTO = new OfferMetaDTO();
// offerMetaDTO.setDiscount("discount");
// offerMetaDTO.setEligibility("eligibility");
// offerMetaDTO.setExpiryTime(LocalDateTime.of(2021,01,01,01,01));
// offerMetaDTO.setStartTime(LocalDateTime.of(2020,01,01,01,01));
// offerMetaDTO.setOfferDesc("30 percent");
// offerMetaDTO.setOfferId(1L);
// offerMetaDTO.setOfferStatus("Active");
// offerMetaDTO.setRcptTxt("text");
// offerMetaDTO.setOfferType("aaa");
//
// offerLookupDTO.setOfferMetaDTO(offerMetaDTO);
//
//
// OfferLookupDTO offerLookupDTO1 = new OfferLookupDTO();
// offerLookupDTO1.setId("123");
// offerLookupDTO1.setIdType("1234");
// offerLookupDTO1.setOfferId(1L);
// offerLookupDTO1.setPreCondition("And");
// offerLookupDTO1.setStoreId("001");
// offerLookupDTO1.setTerminal("001");
//
// OfferMetaDTO offerMetaDTO1 = new OfferMetaDTO();
// offerMetaDTO1.setDiscount("discount");
// offerMetaDTO1.setEligibility("eligibility");
// offerMetaDTO1.setExpiryTime(LocalDateTime.of(2021,01,01,01,01));
// offerMetaDTO1.setStartTime(LocalDateTime.of(2020,01,01,01,01));
// offerMetaDTO1.setOfferDesc("20 percent");
// offerMetaDTO1.setOfferId(1L);
// offerMetaDTO1.setOfferStatus("Active");
// offerMetaDTO1.setRcptTxt("text");
// offerMetaDTO1.setOfferType("aaa");
//
// offerLookupDTO1.setOfferMetaDTO(offerMetaDTO);
//
//
// List<OfferLookupDTO> offerLookupDTOList = Arrays.asList(offerLookupDTO1, offerLookupDTO);
// return offerLookupDTOList;
//
//
// }
//}
\ No newline at end of file
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