Commit fde0dbec authored by uday's avatar uday

written the component test case for producer

parent 7f355b96
......@@ -11,29 +11,21 @@ import org.mapstruct.Mapping;
public interface BoToDtoMapper {
@Mapping(target="offersDTO",source="offersBO")
OffersDataDTO map(OffersDataBO offersDataBO);
@Mapping(target="rulesDTO",source="rulesBO")
@Mapping(target="infoDTO",source="infoBO")
OffersDTO map(OffersBO offersBO);
@Mapping(target="idDTO",source="idBO")
@Mapping(target = "terminalsDTO",source="terminalsBO")
InfoDTO map(InfoBO infoBO);
IdDTO map(IdBO idBO);
@Mapping(target="benefitDTO",source="benefitBO")
RulesDTO map(RulesBO rulesBO);
@Mapping(target = "pointsDTO",source="pointsBO")
@Mapping(target = "discountDTO",source="discountBO")
BenefitDTO map(BenefitBO BenefitBO);
@Mapping(target = "discountTierDTO",source="discountTierBO")
DiscountDTO map(DiscountBO DiscountBO);
DiscountTierDTO map(DiscountTierBO discountTierBO);
PointsDTO map(PointsBO pointsBO);
}
......@@ -20,9 +20,10 @@ public class OffersDataProducer {
@Autowired
private ObjectMapper objectMapper;
public ListenableFuture<SendResult<String, String>> sendMessage(OffersDataDTO offersDataDTO) throws JsonProcessingException {
logger.info(String.format("$$ -> Producing message --> %s", offersDataDTO));
String offersDataBOResp = objectMapper.writeValueAsString(offersDataDTO);
ListenableFuture<SendResult<String, String>> message= kafkaTemplate.send(AppConfigs.TOPIC_NAME, offersDataBOResp);
logger.info("Start :: OffersDataProducer.sendMessage");
String offersDataDTOResp = objectMapper.writeValueAsString(offersDataDTO);
ListenableFuture<SendResult<String, String>> message= kafkaTemplate.send(AppConfigs.TOPIC_NAME, offersDataDTOResp);
logger.info("End :: OffersDataProducer.sendMessage");
return message;
}
}
{
"offerId": 135918555,
"offersDTO": [
{
"infoDTO":
{
"offerId": 135918555,
"idDTO":
{
"offerId": 135918555,
"manufacturerId": "MMM"
},
"offerProgramCode": "SC",
"terminalsDTO":
[
"Groceryworks (Safeway.com)",
"Smart Cart (QVS Virtual Terminals)",
"Bakery"
]
},
"rulesDTO":
{
"offerId": 135918555,
"startDate": "2019-07-27T07:00:00.000+00:00",
"endDate": "2021-02-27T06:59:58.000+00:00",
"benefitDTO":
{
"benefitValueType": "A",
"discountDTO":
[
{
"allowNegative": false,
"flexNegative": false,
"discountTierDTO":
[
{
"amount": 6.99,
"upTo": "3",
"itemLimit": 5,
"weightLimit": 2
}
]
}
],
"pointsDTO":
[
{
"generalPoints": 5,
"loyaltyPoints": 250
}
]
}
}
}
]
}
\ No newline at end of file
......@@ -9,10 +9,16 @@ import com.safeway.epe.offersdataproducer.dtomodel.*;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.clients.producer.RecordMetadata;
import org.apache.kafka.common.TopicPartition;
import org.json.JSONException;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.ArgumentMatchers;
import org.mockito.Mockito;
import org.skyscreamer.jsonassert.Customization;
import org.skyscreamer.jsonassert.JSONAssert;
import org.skyscreamer.jsonassert.JSONCompareMode;
import org.skyscreamer.jsonassert.comparator.CustomComparator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
......@@ -25,12 +31,16 @@ import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.util.concurrent.ListenableFuture;
import org.springframework.util.concurrent.SettableListenableFuture;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ActiveProfiles("test")
public class OffersDataProducerResourceComponentTest {
private static final String FILE_PATH = "src/test/java/com/safeway/epe/offersdataproducer/resource/";
@Autowired
private OffersDataProducerResource offersDataProducerResource;
@MockBean
......@@ -42,9 +52,9 @@ public class OffersDataProducerResourceComponentTest {
OffersDataDO offersDataDO = buildOffersDataDO();
OffersDataDTO offersDataDTO = buildOffersDataDTO();
ObjectMapper mapper = new ObjectMapper();
String excpected = mapper.writeValueAsString(offersDataDO);
String excpected = mapper.writeValueAsString(offersDataDTO);
SettableListenableFuture future = new SettableListenableFuture();
ProducerRecord<Integer, String> producerRecord = new ProducerRecord(AppConfigs.TOPIC_NAME, null, offersDataDO);
ProducerRecord<Integer, String> producerRecord = new ProducerRecord(AppConfigs.TOPIC_NAME, null, offersDataDTO);
RecordMetadata recordMetadata = new RecordMetadata(new TopicPartition(AppConfigs.TOPIC_NAME, 0),
8, 1, 342, System.currentTimeMillis(), -1, 581);
SendResult<Integer, String> sendResult = new SendResult<Integer, String>(producerRecord, recordMetadata);
......@@ -54,6 +64,94 @@ public class OffersDataProducerResourceComponentTest {
String actual = mapper.writeValueAsString(result.getBody().get().getProducerRecord().value());
JSONAssert.assertEquals(excpected ,actual ,false);
}
@Test
public void publishOfferEventWithArgumentCatureTest() throws JsonProcessingException, ExecutionException, InterruptedException {
ObjectMapper mapper = new ObjectMapper();
OffersDataDO offersDataDO = buildOffersDataDO();
OffersDataDTO offersDataDTO = buildOffersDataDTO();
SettableListenableFuture future = new SettableListenableFuture();
ProducerRecord<Integer, String> producerRecord = new ProducerRecord(AppConfigs.TOPIC_NAME, null, offersDataDTO);
RecordMetadata recordMetadata = new RecordMetadata(new TopicPartition(AppConfigs.TOPIC_NAME, 0),
8, 1, 342, System.currentTimeMillis(), -1, 581);
SendResult<Integer, String> sendResult = new SendResult<Integer, String>(producerRecord, recordMetadata);
future.set(sendResult);
ArgumentCaptor<OffersDataDTO> serviceRequestArgumentCaptor = ArgumentCaptor.forClass(OffersDataDTO.class);
Mockito.when(kafkaTemplate.send(ArgumentMatchers.any(),serviceRequestArgumentCaptor.capture())).thenReturn(future);
ResponseEntity<ListenableFuture<SendResult<String, String>>> result = offersDataProducerResource.publishOfferEvent(offersDataDO);
String actual = mapper.writeValueAsString(result.getBody().get().getProducerRecord().value());
validateRequest(serviceRequestArgumentCaptor ,"OffersDataDTO.json");
validteResponse(actual, "OffersDataDTO.json");
}
void validteResponse(String actualResponse, String fileName)
{
String expectedResponse = retrieveExpectedResult(fileName);
try {
JSONAssert.assertEquals(expectedResponse, actualResponse,
new CustomComparator(JSONCompareMode.STRICT,
new Customization(
"offerId" ,(value1 , value2) -> value1.equals(value2)) ,
new Customization("offersDTO[0].infoDTO.idDTO.offerId" ,(value1 , value2) -> value1.equals(value2) ),
new Customization("offersDTO[0].infoDTO.offerId" ,(value1 , value2) -> value1.equals(value2) ),
new Customization("offersDTO[0].rulesDTO.benefitDTO.benefitValueType" ,(value1 , value2) -> value1.equals(value2) ),
new Customization("offersDTO[0].rulesDTO.benefitDTO.discountDTO[0].allowNegative" ,(value1 , value2) -> value1.equals(value2) ),
new Customization("offersDTO[0].rulesDTO.benefitDTO.discountDTO[0].discountTierDTO[0].upTo" ,(value1 , value2) -> value1.equals(value2) ),
new Customization("offersDTO[0].rulesDTO.benefitDTO.discountDTO[0].flexNegative" ,(value1 , value2) -> value1.equals(value2) ),
new Customization("offersDTO[0].rulesDTO.endDate" ,(value1 , value2) -> true ),
new Customization("offersDTO[0].rulesDTO.offerId" ,(value1 , value2) -> value1.equals(value2) ),
new Customization("offersDTO[0].rulesDTO.startDate" ,(value1 , value2) -> true ),
new Customization("offersDTO[0].infoDTO.idDTO.offerId" ,(value1 , value2) -> value1.equals(value2) ),
new Customization("offersDTO[0].infoDTO.offerId" ,(value1 , value2) -> value1.equals(value2) ),
new Customization("offersDTO[0].rulesDTO.benefitDTO.benefitValueType" ,(value1 , value2) -> value1.equals(value2) )
)
);
} catch (JSONException e) {
e.printStackTrace();
}
}
private String retrieveExpectedResult(String fileName) {
StringBuilder sb = new StringBuilder();
try (BufferedReader br = new BufferedReader(new FileReader(FILE_PATH + fileName))) {
String line;
while ((line = br.readLine()) != null) {
sb.append(line);
}
} catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}
private void validateRequest(ArgumentCaptor<OffersDataDTO> argumentCaptor, String fileName) {
String actual = String.valueOf(argumentCaptor.getValue());
String expectedServiceRequest = retrieveExpectedResult(fileName);
try {
JSONAssert.assertEquals(expectedServiceRequest, actual,
new CustomComparator(JSONCompareMode.STRICT,
new Customization(
"offerId" ,(value1 , value2) -> value1.equals(value2)) ,
new Customization("offersDTO[0].infoDTO.idDTO.offerId" ,(value1 , value2) -> value1.equals(value2) ),
new Customization("offersDTO[0].infoDTO.offerId" ,(value1 , value2) -> value1.equals(value2) ),
new Customization("offersDTO[0].rulesDTO.benefitDTO.benefitValueType" ,(value1 , value2) -> value1.equals(value2) ),
new Customization("offersDTO[0].rulesDTO.benefitDTO.discountDTO[0].allowNegative" ,(value1 , value2) -> value1.equals(value2) ),
new Customization("offersDTO[0].rulesDTO.benefitDTO.discountDTO[0].discountTierDTO[0].upTo" ,(value1 , value2) -> value1.equals(value2) ),
new Customization("offersDTO[0].rulesDTO.benefitDTO.discountDTO[0].flexNegative" ,(value1 , value2) -> value1.equals(value2) ),
new Customization("offersDTO[0].rulesDTO.endDate" ,(value1 , value2) -> true ),
new Customization("offersDTO[0].rulesDTO.offerId" ,(value1 , value2) -> value1.equals(value2) ),
new Customization("offersDTO[0].rulesDTO.startDate" ,(value1 , value2) -> true ),
new Customization("offersDTO[0].infoDTO.idDTO.offerId" ,(value1 , value2) -> value1.equals(value2) ),
new Customization("offersDTO[0].infoDTO.offerId" ,(value1 , value2) -> value1.equals(value2) ),
new Customization("offersDTO[0].rulesDTO.benefitDTO.benefitValueType" ,(value1 , value2) -> value1.equals(value2) )
)
);
} catch (JSONException e) {
e.printStackTrace();
}
}
private OffersDataDO buildOffersDataDO() {
DiscountTierDO discountTierDO = DiscountTierDO
.builder().amount(6.99f).upTo("3")
......@@ -66,16 +164,16 @@ public class OffersDataProducerResourceComponentTest {
.builder().discountDO(Lists.newArrayList(discountDO))
.pointsDO(Lists.newArrayList(pointsDO)).benefitValueType("A")
.build();
IdDO idDO = IdDO.builder().manufacturerId("MMM").offerId(135918444).build();
IdDO idDO = IdDO.builder().manufacturerId("MMM").offerId(135918555).build();
InfoDO infoDO = InfoDO
.builder().offerId(135918444).idDO(idDO).offerProgramCode("SC")
.builder().offerId(135918555).idDO(idDO).offerProgramCode("SC")
.terminalsDO(Lists.newArrayList("Groceryworks (Safeway.com)",
"Smart Cart (QVS Virtual Terminals)",
"Bakery")).build();
RulesDO rulesDO = RulesDO.builder().offerId(135918444).benefitDO(benefitDO).endDate("2021-02-27T06:59:58.000+00:00")
RulesDO rulesDO = RulesDO.builder().offerId(135918555).benefitDO(benefitDO).endDate("2021-02-27T06:59:58.000+00:00")
.startDate("2019-07-27T07:00:00.000+00:00").build();
OffersDO offersDO = OffersDO.builder().infoDO(infoDO).rulesDO(rulesDO).build();
OffersDataDO offersDataDO = OffersDataDO.builder().offerId(135918444).offersDO(Lists.newArrayList(offersDO)).build();
OffersDataDO offersDataDO = OffersDataDO.builder().offerId(135918555).offersDO(Lists.newArrayList(offersDO)).build();
return offersDataDO;
}
......@@ -91,16 +189,16 @@ public class OffersDataProducerResourceComponentTest {
.builder().discountDTO(Lists.newArrayList(discountDTO))
.pointsDTO(Lists.newArrayList(pointsDTO)).benefitValueType("A")
.build();
IdDTO idDTO = IdDTO.builder().manufacturerId("MMM").offerId(135918444).build();
IdDTO idDTO = IdDTO.builder().manufacturerId("MMM").offerId(135918555).build();
InfoDTO infoDTO = InfoDTO
.builder().offerId(135918444).idDTO(idDTO).offerProgramCode("SC")
.builder().offerId(135918555).idDTO(idDTO).offerProgramCode("SC")
.terminalsDTO(Lists.newArrayList("Groceryworks (Safeway.com)",
"Smart Cart (QVS Virtual Terminals)",
"Bakery")).build();
RulesDTO rulesDTO = RulesDTO.builder().offerId(135918444).benefitDTO(benefitDTO).endDate("2021-02-27T06:59:58.000+00:00")
RulesDTO rulesDTO = RulesDTO.builder().offerId(135918555).benefitDTO(benefitDTO).endDate("2021-02-27T06:59:58.000+00:00")
.startDate("2019-07-27T07:00:00.000+00:00").build();
OffersDTO offersDTO = OffersDTO.builder().infoDTO(infoDTO).rulesDTO(rulesDTO).build();
OffersDataDTO offersDataDTO = OffersDataDTO.builder().offerId(135918444).offersDTO(Lists.newArrayList(offersDTO)).build();
OffersDataDTO offersDataDTO = OffersDataDTO.builder().offerId(135918555).offersDTO(Lists.newArrayList(offersDTO)).build();
return offersDataDTO;
}
......
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