Skip to content
Snippets Groups Projects
Commit 3f20b235 authored by Filip Piták's avatar Filip Piták
Browse files

Add integration tests for Process API

parent 5cd164a3
No related branches found
No related tags found
No related merge requests found
...@@ -9,6 +9,8 @@ import cz.muni.pa165.banking.domain.process.Process; ...@@ -9,6 +9,8 @@ import cz.muni.pa165.banking.domain.process.Process;
import cz.muni.pa165.banking.domain.process.ProcessOperations; import cz.muni.pa165.banking.domain.process.ProcessOperations;
import cz.muni.pa165.banking.domain.process.status.Status; import cz.muni.pa165.banking.domain.process.status.Status;
import cz.muni.pa165.banking.domain.process.status.StatusInformation; import cz.muni.pa165.banking.domain.process.status.StatusInformation;
import cz.muni.pa165.banking.transaction.processor.dto.ProcessStatusDto;
import cz.muni.pa165.banking.transaction.processor.dto.ProcessStatusListDto;
import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.extension.ExtendWith;
...@@ -25,10 +27,14 @@ import org.springframework.test.web.servlet.MockMvc; ...@@ -25,10 +27,14 @@ import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult; import org.springframework.test.web.servlet.MvcResult;
import java.time.*; import java.time.*;
import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Set;
import java.util.UUID; import java.util.UUID;
import java.util.stream.Collectors;
import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.patch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.patch;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
...@@ -46,6 +52,9 @@ public class ProcessControllerIT { ...@@ -46,6 +52,9 @@ public class ProcessControllerIT {
@Autowired @Autowired
private ObjectMapper objectMapper; private ObjectMapper objectMapper;
@Autowired
private ProcessRepositoryJpa repository;
@MockBean @MockBean
private ExchangeRatesApi apiMock; private ExchangeRatesApi apiMock;
...@@ -55,34 +64,45 @@ public class ProcessControllerIT { ...@@ -55,34 +64,45 @@ public class ProcessControllerIT {
private static final Instant instant = LocalDateTime.of(2024, Month.APRIL, 24, 12, 0, 0).toInstant(ZoneOffset.UTC); private static final Instant instant = LocalDateTime.of(2024, Month.APRIL, 24, 12, 0, 0).toInstant(ZoneOffset.UTC);
private static Set<Process> storedProcesses;
private static Process processedProcess;
@BeforeAll @BeforeAll
public static void initDb(@Autowired ProcessRepositoryJpa repository) { public static void initDb(@Autowired ProcessRepositoryJpa repository) {
repository.save(Process.createNew()); repository.save(Process.createNew());
repository.save(Process.createNew()); repository.save(Process.createNew());
Process processed1 = Process.createNew(); Process process1 = Process.createNew();
ProcessOperations.changeState(processed1, new StatusInformation(instant, Status.PENDING, "PENDING")); ProcessOperations.changeState(process1, new StatusInformation(instant, Status.PENDING, "PENDING"));
repository.save(processed1); repository.save(process1);
Process processed2 = Process.createNew(); Process process2 = Process.createNew();
ProcessOperations.changeState(processed2, new StatusInformation(instant, Status.PENDING, "PENDING")); ProcessOperations.changeState(process2, new StatusInformation(instant, Status.PENDING, "PENDING"));
repository.save(processed2); repository.save(process2);
LocalDateTime currentDateTime = LocalDateTime.ofInstant(instant, ZoneOffset.UTC); LocalDateTime currentDateTime = LocalDateTime.ofInstant(instant, ZoneOffset.UTC);
LocalDateTime newDateTime = currentDateTime.minusDays(10); LocalDateTime newDateTime = currentDateTime.minusDays(10);
Instant tenDaysAgo = newDateTime.toInstant(ZoneOffset.UTC); Instant tenDaysAgo = newDateTime.toInstant(ZoneOffset.UTC);
Process processed4 = Process.createNew(); processedProcess = Process.createNew();
ProcessOperations.changeState(processed4, new StatusInformation(tenDaysAgo, Status.CREATED, "CREATED")); ProcessOperations.changeState(processedProcess, new StatusInformation(tenDaysAgo, Status.PROCESSED, "PROCESSED"));
repository.save(processed4); repository.save(processedProcess);
Process processed5 = Process.createNew(); Process process4 = Process.createNew();
ProcessOperations.changeState(processed5, new StatusInformation(tenDaysAgo, Status.PENDING, "PENDING")); ProcessOperations.changeState(process4, new StatusInformation(tenDaysAgo, Status.CREATED, "CREATED"));
repository.save(processed5); repository.save(process4);
Process process5 = Process.createNew();
ProcessOperations.changeState(process5, new StatusInformation(tenDaysAgo, Status.PENDING, "PENDING"));
repository.save(process5);
storedProcesses = Set.of(process1, process2, processedProcess, process4, process5);
} }
@WithMockUser(authorities = "SCOPE_test_2")
@Test @Test
@WithMockUser(authorities = "SCOPE_test_2")
public void resolveStaleProcesses() throws Exception { public void resolveStaleProcesses() throws Exception {
LocalDateTime currentDateTime = LocalDateTime.ofInstant(instant, ZoneOffset.UTC); LocalDateTime currentDateTime = LocalDateTime.ofInstant(instant, ZoneOffset.UTC);
LocalDateTime newDateTime = currentDateTime.minusDays(1); LocalDateTime newDateTime = currentDateTime.minusDays(1);
...@@ -91,6 +111,7 @@ public class ProcessControllerIT { ...@@ -91,6 +111,7 @@ public class ProcessControllerIT {
List<Process> staleProcesses = service.unresolvedProcessesToDate(yesterday); List<Process> staleProcesses = service.unresolvedProcessesToDate(yesterday);
for (Process process : staleProcesses) { for (Process process : staleProcesses) {
assertNotEquals(Status.FAILED, process.getStatus()); assertNotEquals(Status.FAILED, process.getStatus());
assertNotEquals(Status.PROCESSED, process.getStatus());
} }
List<UUID> staleProcessIds = staleProcesses.stream() List<UUID> staleProcessIds = staleProcesses.stream()
.map(Process::getUuid) .map(Process::getUuid)
...@@ -114,5 +135,61 @@ public class ProcessControllerIT { ...@@ -114,5 +135,61 @@ public class ProcessControllerIT {
} }
} }
@Test
@WithMockUser(authorities = "SCOPE_test_2")
public void fetchProcessedProcesses() throws Exception {
Set<UUID> expectedProcessIds = storedProcesses.stream()
.filter(p -> p.getStatus().equals(Status.PROCESSED))
.map(Process::getUuid)
.collect(Collectors.toSet());
MvcResult response = mockMvc.perform(get("/processes/v1/PROCESSED")
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andReturn();
String jsonResponse = response.getResponse().getContentAsString();
List<ProcessStatusDto> foundProcesses = objectMapper.readValue(jsonResponse, ProcessStatusListDto.class).getProcesses();
assertEquals(expectedProcessIds.size(), foundProcesses.size());
for (ProcessStatusDto process : foundProcesses) {
assertEquals(process.getStatus().getStatus().getValue(), "PROCESSED");
assertTrue(expectedProcessIds.contains(process.getIdentifier()));
}
}
@Test
@WithMockUser(authorities = "SCOPE_test_2")
public void fetchValidProcessStatus() throws Exception {
MvcResult response = mockMvc.perform(get("/process/v1/{uuid}/status", processedProcess.getUuid())
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andReturn();
String jsonResponse = response.getResponse().getContentAsString();
ProcessStatusDto status = objectMapper.readValue(jsonResponse, ProcessStatusDto.class);
assertEquals(processedProcess.getUuid(), status.getIdentifier());
assertEquals(processedProcess.getStatus().name(), status.getStatus().getStatus().getValue());
}
@Test
@WithMockUser(authorities = "SCOPE_test_2")
public void fetchInvalidProcessStatus() throws Exception {
MvcResult response = mockMvc.perform(get("/process/v1/{uuid}/status", UUID.randomUUID())
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isNotFound())
.andReturn();
String jsonResponse = response.getResponse().getContentAsString();
LinkedHashMap JSON = objectMapper.readValue(jsonResponse, LinkedHashMap.class);
assertTrue(JSON.containsKey("status"));
assertEquals("NOT_FOUND", JSON.get("status"));
assertTrue(JSON.containsKey("message"));
assertEquals("Entity not present in repository", JSON.get("message"));
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment