testes de integracao

master
Kleber Cardoso 2 years ago
parent 90fe1f1efc
commit 15c0e2932f

@ -1,23 +1,19 @@
package br.com.ae3tecnologia.ms.tangerino; package br.com.ae3tecnologia.ms.tangerino;
import org.springframework.boot.Banner; import org.springframework.boot.Banner;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication @SpringBootApplication
@ComponentScan(basePackages = {"br.com.ae3tecnologia.ms.tangerino"})
@EnableAutoConfiguration
public class TangerinoMSApplication extends SpringBootServletInitializer { public class TangerinoMSApplication extends SpringBootServletInitializer {
@Override @Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(getClass()); return builder.sources(getClass());
} }
public static void main(String[] args) { public static void main(String[] args) {
new SpringApplicationBuilder(TangerinoMSApplication.class).bannerMode(Banner.Mode.OFF).run(args); new SpringApplicationBuilder(TangerinoMSApplication.class).bannerMode(Banner.Mode.OFF).run(args);
} }
} }

@ -109,4 +109,12 @@ public class PtoAdjustController {
forObject.getContent().forEach(x -> eventos.add(new PtoAdjustModel(x))); forObject.getContent().forEach(x -> eventos.add(new PtoAdjustModel(x)));
return eventos; return eventos;
} }
public void setToken(String token) {
this.token = token;
}
public void setUrlApis(String urlApis) {
this.urlApis = urlApis;
}
} }

@ -21,10 +21,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
import java.util.ArrayList; import java.util.*;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;
@ -62,12 +59,14 @@ public class PtoExtractRestController {
AtomicReference<Integer> lastNsr = new AtomicReference<>(0); AtomicReference<Integer> lastNsr = new AtomicReference<>(0);
HashMap<String, Object> map = new HashMap<>(); HashMap<String, Object> map = new HashMap<>();
map.put("serialNumber", eq.getSerialNumber()); map.put("serialNumber", eq.getSerialNumber());
map.put("nsrType", 3); map.put("page", 1);
map.put("nsr", eq.getLastNsr()); //precisa pegar o ultimo NSR do relogio para passar como parametro map.put("size", 50);
map.put("registerType", 3);
map.put("nsr", eq.getLastNsr() == null ? 0 : eq.getLastNsr()); //precisa pegar o ultimo NSR do relogio para passar como parametro
try { try {
// requisita da API do tangerino os pontos disponiveis, salvando eles na tabela ptoEvento // requisita da API do tangerino os pontos disponiveis, salvando eles na tabela ptoEvento
List<PtoEventModel> ptoEventModels = gePunchTangerinoAPI(map); List<PtoEventModel> ptoEventModels = gePunchTangerinoAPI(map, Arrays.asList());
lastNsr.set(extractEventsAndReturnLastNsr(lastNsr.get(), ptoEventModels, eq)); lastNsr.set(extractEventsAndReturnLastNsr(lastNsr.get(), ptoEventModels, eq));
} catch (JsonProcessingException e) { } catch (JsonProcessingException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
@ -86,11 +85,14 @@ public class PtoExtractRestController {
AtomicReference<Integer> nsr = new AtomicReference<>(0); AtomicReference<Integer> nsr = new AtomicReference<>(0);
AtomicInteger nsrForEach = new AtomicInteger(lastNsr); AtomicInteger nsrForEach = new AtomicInteger(lastNsr);
ptoEventModels.stream().sorted(Comparator.comparing(PtoEventModel::getNsr)).forEach(x -> { ptoEventModels.stream().sorted(Comparator.comparing(PtoEventModel::getNsr)).forEach(x -> {
if (x.getNsr() > lastNsr) { // tratando para nao duplicar os nsr if (x.getNsr() > lastNsr && eventoService.findByNsrAndEquipament(x.getNsr(), equipamentoModel.getId()) == null) { // tratando para nao duplicar os nsr
x.setEquipament(equipamentoModel.getId());
eventoService.save(x); eventoService.save(x);
nsr.set(x.getNsr()); nsr.set(x.getNsr());
if(x.getNsr() - nsrForEach.get() > 1){ //se a diferença entre o ultimo nsr e o atual for maior que um, chamará o Ajustes if(x.getNsr() - nsrForEach.get() > 1){ //se a diferença entre o ultimo nsr e o atual for maior que um, chamará o Ajustes
PtoAdjustController ajusteController = new PtoAdjustController(equipamentoService, ajusteService); PtoAdjustController ajusteController = new PtoAdjustController(equipamentoService, ajusteService);
ajusteController.setToken(token);
ajusteController.setUrlApis(urlApis);
ajusteController.extract(equipamentoModel, nsrForEach.get()); ajusteController.extract(equipamentoModel, nsrForEach.get());
} }
nsrForEach.set(x.getNsr()); nsrForEach.set(x.getNsr());
@ -104,18 +106,24 @@ public class PtoExtractRestController {
return equipamentoService.findByInativo(inativo); return equipamentoService.findByInativo(inativo);
} }
public List<PtoEventModel> gePunchTangerinoAPI(HashMap<String, Object> filtros) throws JsonProcessingException { public List<PtoEventModel> gePunchTangerinoAPI(HashMap<String, Object> filtros, List<PtoEventModel> eventList) throws JsonProcessingException {
List<PtoEventModel> eventos = new ArrayList<>();
if(!eventList.isEmpty()){
eventos.addAll(eventList);
}
RestTemplate restTemplate = new RestTemplate(); RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders(); HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
headers.setBasicAuth(token); headers.setBasicAuth(token);
String url = urlApis + TANGERINO_API_PUNCH; String url = urlApis + TANGERINO_API_PUNCH;
final String[] filter = {""}; final String[] filter = {""};
AtomicInteger actualPage = new AtomicInteger();
filtros.forEach((k, v) -> { filtros.forEach((k, v) -> {
if(k.equals("page")){
actualPage.set(Integer.valueOf(v.toString()));
}
if (filter[0].isEmpty()) { if (filter[0].isEmpty()) {
filter[0] = filter[0].concat(k).concat("=").concat(v.toString()); filter[0] = filter[0].concat(k).concat("=").concat(v.toString());
} else { } else {
@ -131,8 +139,12 @@ public class PtoExtractRestController {
ObjectMapper objectMapper = new ObjectMapper(); ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true);
ResultEventDTO forObject = objectMapper.readValue(jsonStr, ResultEventDTO.class); ResultEventDTO forObject = objectMapper.readValue(jsonStr, ResultEventDTO.class);
List<PtoEventModel> eventos = new ArrayList<>();
forObject.getContent().forEach(x -> eventos.add(new PtoEventModel(x))); forObject.getContent().forEach(x -> eventos.add(new PtoEventModel(x)));
if(forObject.getTotalPages() > actualPage.get()){
filtros.remove("page");
filtros.putIfAbsent("page", actualPage.get()+1);
return gePunchTangerinoAPI(filtros, eventos);
}
return eventos; return eventos;
} }
} }

@ -59,7 +59,8 @@ public class PtoEventModel {
LocalDate localDate = Instant.ofEpochMilli(dto.getPunchDate()).atZone(ZoneId.systemDefault()).toLocalDate(); LocalDate localDate = Instant.ofEpochMilli(dto.getPunchDate()).atZone(ZoneId.systemDefault()).toLocalDate();
this.setEventDate(localDate); this.setEventDate(localDate);
this.setEventTime(Instant.ofEpochMilli(dto.getPunchDate()).atZone(ZoneId.systemDefault()).toLocalTime()); this.setEventTime(Instant.ofEpochMilli(dto.getPunchDate()).atZone(ZoneId.systemDefault()).toLocalTime());
String periodo = localDate.getYear() + StringUtils.leftPad("0",2, String.valueOf(localDate.getMonthValue())); String periodo = String.valueOf(localDate.getYear());
periodo = periodo + StringUtils.leftPad(String.valueOf(localDate.getMonthValue()),2, "0");
this.setPeriod(periodo); this.setPeriod(periodo);
this.setProcess(false); this.setProcess(false);
this.setRegisterType(3); this.setRegisterType(3);

@ -4,7 +4,10 @@ import br.com.ae3tecnologia.ms.tangerino.model.PtoEventModel;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.Optional;
@Repository @Repository
public interface PtoEventRepository extends JpaRepository<PtoEventModel, Integer> { public interface PtoEventRepository extends JpaRepository<PtoEventModel, Integer> {
Optional<PtoEventModel> findByNsrAndEquipament(Integer nsr, int equipament);
} }

@ -5,6 +5,7 @@ import br.com.ae3tecnologia.ms.tangerino.repository.PtoEventRepository;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.swing.text.html.Option;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
@ -27,4 +28,8 @@ public class PtoEventService {
return optional.isPresent() ? optional.get() : null; return optional.isPresent() ? optional.get() : null;
} }
public PtoEventModel findByNsrAndEquipament(Integer nsr, int equipament) {
Optional<PtoEventModel> optional = repository.findByNsrAndEquipament(nsr, equipament);
return optional.isPresent() ? optional.get() : null;
}
} }

@ -2,6 +2,6 @@ package br.com.ae3tecnologia.ms.tangerino.utils;
public class Constants { public class Constants {
public static final String API_ROUTE = "/public/api"; public static final String API_ROUTE = "/public/api";
public static final String TANGERINO_API_PUNCH = "/punch"; public static final String TANGERINO_API_PUNCH = "/punch/electronic-watch/afd-data-export";
} }

@ -1,6 +1,6 @@
app: app:
token: YzJiYjNhZmQ0NDMyNDk3OGFiZTY4NmFhYTE4ZWUzYTk6MWMyNDdjZDc3MDMyNGQ3MmFmMmYyZjg5MmM0ZDBkODk= token: OGQ0YTk1YTYyNDNjNGQ0OTgxMTBhNjMxZDhlOTBjOWY6Njg4ZDgzMTE1ZWM4NDY4ZDliN2FlMDZhNDE5NDE3Yzg=
url: url:
employer: https://employer.tangerino.com.br employer: https://employer.tangerino.com.br
apis: https://apis.tangerino.com.br apis: https://apis.tangerino.com.br

@ -18,7 +18,7 @@ import java.util.List;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
class PtoAdjustsControllerMockTest { class PtoAdjustsMockControllerTest {
@Mock @Mock
PtoAdjustController controller; PtoAdjustController controller;
PtoEquipamentModel equipamento01; PtoEquipamentModel equipamento01;

@ -0,0 +1,82 @@
package br.com.ae3tecnologia.ms.tangerino.controller;
import br.com.ae3tecnologia.ms.tangerino.model.PtoAdjustModel;
import br.com.ae3tecnologia.ms.tangerino.model.PtoEquipamentModel;
import br.com.ae3tecnologia.ms.tangerino.model.PtoEventModel;
import com.fasterxml.jackson.core.JsonProcessingException;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.MockitoAnnotations;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.Arrays;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.List;
@ExtendWith(SpringExtension.class)
@SpringBootTest
class PtoAdjustsRestControllerTest {
@Autowired
PtoAdjustController controller;
PtoEquipamentModel equipamento01;
PtoAdjustModel evento01;
@BeforeEach
void setUp() {
equipamento01 = new PtoEquipamentModel(
123,
"00004004330082159",
1,
0,
GregorianCalendar.getInstance().getTime(),
null,
"default",
true
);
evento01 = new PtoAdjustModel(
123,
278,
4,
LocalDate.now(),
LocalDate.now(),
LocalTime.now().minusHours(10),
LocalTime.now(),
1,
"202304"
);
MockitoAnnotations.openMocks(this);
}
@Test
void mustObteinPunchAdjustTangerinoAPI() throws JsonProcessingException {
HashMap<String, Object> map = new HashMap<>();
map.put("serialNumber", equipamento01.getSerialNumber());
map.put("page", 1);
map.put("size", 50);
map.put("registerType", 4);
List<PtoAdjustModel> ptoList = controller.gePunchTangerinoAPI(map);
Assertions.assertTrue(ptoList.size() > 0);
}
@Test
void mustObteinLastNsrByExtractEventsAndReturnLastNsr() {
Integer lastNsr = controller.extractAdjustsAndReturnLastNsr(evento01.getNsr(), Arrays.asList(evento01));
Assertions.assertEquals(278, lastNsr);
}
}
//Generated with love by TestMe :) Please report issues and submit feature requests at: http://weirddev.com/forum#!/testme

@ -19,7 +19,7 @@ import java.util.List;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
class PtoExtractRestControllerMockTest { class PtoExtractMockControllerTest {
@Mock @Mock
PtoExtractRestController controller; PtoExtractRestController controller;
PtoEquipamentModel equipamento01; PtoEquipamentModel equipamento01;
@ -72,8 +72,8 @@ class PtoExtractRestControllerMockTest {
map.put("page", 1); map.put("page", 1);
map.put("size", 50); map.put("size", 50);
when(controller.getToken()).thenReturn("1231231231313"); when(controller.getToken()).thenReturn("1231231231313");
when(controller.gePunchTangerinoAPI(map)).thenReturn(Arrays.asList(evento01)); when(controller.gePunchTangerinoAPI(map, Arrays.asList())).thenReturn(Arrays.asList(evento01));
List<PtoEventModel> ptoEventModels = controller.gePunchTangerinoAPI(map); List<PtoEventModel> ptoEventModels = controller.gePunchTangerinoAPI(map, Arrays.asList());
Assertions.assertTrue(ptoEventModels.size() > 0); Assertions.assertTrue(ptoEventModels.size() > 0);
} }

@ -0,0 +1,92 @@
package br.com.ae3tecnologia.ms.tangerino.controller;
import br.com.ae3tecnologia.ms.tangerino.model.PtoAdjustModel;
import br.com.ae3tecnologia.ms.tangerino.model.PtoEquipamentModel;
import br.com.ae3tecnologia.ms.tangerino.model.PtoEventModel;
import com.fasterxml.jackson.core.JsonProcessingException;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.Arrays;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.List;
import static org.mockito.Mockito.when;
@ExtendWith(SpringExtension.class)
@SpringBootTest
class PtoExtractRestControllerTest {
@Autowired
PtoExtractRestController controller;
PtoEquipamentModel equipamento01;
PtoEventModel evento01;
@BeforeEach
void setUp() {
equipamento01 = new PtoEquipamentModel(
123,
"00004004330082159",
1,
0,
GregorianCalendar.getInstance().getTime(),
null,
"default",
true
);
evento01 = new PtoEventModel(
1,
123,
1,
LocalDate.now(),
LocalTime.now(),
"123123123123",
123,
123,
false,
1,
"202304",
LocalDateTime.now()
);
MockitoAnnotations.openMocks(this);
}
@Test
void mustObteinPunchEventTangerinoAPI() throws JsonProcessingException {
HashMap<String, Object> map = new HashMap<>();
map.put("serialNumber", equipamento01.getSerialNumber());
map.put("page", 1);
map.put("size", 50);
map.put("registerType", 3);
List<PtoEventModel> ptoEventModels = controller.gePunchTangerinoAPI(map, Arrays.asList());
Assertions.assertTrue(ptoEventModels.size() > 0);
}
@Test
void mustObteinLastNsrByExtractEventsAndReturnLastNsr() {
Integer lastNsr = controller.extractEventsAndReturnLastNsr(evento01.getNsr(), Arrays.asList(evento01), equipamento01);
Assertions.assertEquals(0, lastNsr);
}
@Test
void mustObteinWatchesMock() {
List<PtoEquipamentModel> ptoEquipamentModels = controller.getWatches(false);
Assertions.assertNotEquals(null, ptoEquipamentModels);
Assertions.assertFalse(ptoEquipamentModels.isEmpty());
}
}
//Generated with love by TestMe :) Please report issues and submit feature requests at: http://weirddev.com/forum#!/testme
Loading…
Cancel
Save