Skip to content

Commit

Permalink
Merge pull request #102 from hmcts/RET-4096
Browse files Browse the repository at this point in the history
Ret 4096
  • Loading branch information
kalachandrasekar1 committed Aug 24, 2023
2 parents e7d6151 + d3f6766 commit 66dc9d6
Show file tree
Hide file tree
Showing 5 changed files with 533 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,15 @@
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import static org.junit.jupiter.api.Assertions.assertNotNull;

public class TestScenario {

private final Map<String, Object> scenarioMapValues;
Expand All @@ -18,7 +22,7 @@ public class TestScenario {
private final Map<String, Object> postRoleAssignmentClauseValues;
private final String jurisdiction;
private final String caseType;

private final List<String> taskIds;
private final Map<String, String> caseIdMap;
private final Set<Map<String, Object>> searchMap;
private Headers requestAuthorizationHeaders;
Expand All @@ -40,6 +44,7 @@ public TestScenario(@NotNull Map<String, Object> scenarioMapValues,
this.postRoleAssignmentClauseValues = postRoleAssignmentClauseValues;
this.caseIdMap = new HashMap<>();
this.searchMap = new HashSet<>();
this.taskIds = new ArrayList<>();
}

public Map<String, Object> getScenarioMapValues() {
Expand Down Expand Up @@ -108,4 +113,13 @@ public Set<Map<String, Object>> getSearchMap() {
return searchMap;
}

public void addTaskId(String taskId) {
assertNotNull(taskId);
taskIds.add(taskId);
}

public List<String> getTaskIds() {
return taskIds;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ public String search(Map<String, Object> clauseValues,
//Also trigger (CRON) Jobs programmatically
taskMonitorService.triggerInitiationJob(authorizationHeaders);
taskMonitorService.triggerTerminationJob(authorizationHeaders);
taskMonitorService.triggerReconfigurationJob(authorizationHeaders);

int expectedStatus = MapValueExtractor.extractOrDefault(
clauseValues, "status", 200);
Expand All @@ -66,7 +67,7 @@ public String search(Map<String, Object> clauseValues,
.contentType(MediaType.APPLICATION_JSON_VALUE)
.body(requestBody)
.when()
.post(taskManagementUrl + "/task");
.post(taskManagementUrl + "/task/extended-search");

result.then().assertThat()
.statusCode(expectedStatus)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ public void triggerReconfigurationJob(Headers authorizationHeaders) {
Map<String, Map<String, String>> requestBody = Map.of("job_details", Map.of("name", "RECONFIGURATION"));

initiateJob(requestBody, authorizationHeaders);
await().atLeast(DEFAULT_TIMEOUT_SECONDS, SECONDS);
}

private void initiateJob(Map<String, Map<String, String>> requestBody, Headers authorizationHeaders) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,16 @@
import uk.gov.hmcts.reform.wapostdeploymentfttests.verifiers.Verifier;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;

import static java.util.Collections.emptyMap;
import static java.util.Collections.singletonList;
import static java.util.concurrent.TimeUnit.SECONDS;
import static org.awaitility.Awaitility.await;
Expand Down Expand Up @@ -92,6 +96,7 @@ public void retrieveTask(Map<String, Object> clauseValues, TestScenario scenario
additionalValues
);

log.info("Expectation {}", expectedResponseBody);
if (searchByCaseIdResponseBody.isBlank()) {
log.error("Find my case ID response is empty. Test will now fail");
return false;
Expand Down Expand Up @@ -120,40 +125,99 @@ public void retrieveTask(Map<String, Object> clauseValues, TestScenario scenario
return false;
}

String taskId = MapValueExtractor.extract(tasks.get(0), "id");
log.info("task id is {}", taskId);

String retrieveTaskRolePermissionsResponseBody =
taskManagementService.retrieveTaskRolePermissions(
clauseValues,
taskId,
scenario.getExpectationAuthorizationHeaders()
);

if (retrieveTaskRolePermissionsResponseBody.isBlank()) {
log.error("Task role permissions response is empty. Test will now fail");
return false;
}
tasks.forEach(t -> scenario.addTaskId(MapValueExtractor.extract(t, "id")));
AtomicReference<Map<String, Object>> actualRoleResponse = new AtomicReference<>(emptyMap());
AtomicReference<Map<String, Object>> expectedRoleResponse = new AtomicReference<>(emptyMap());

String rolesExpectationResponseBody = buildRolesExpectationResponseBody(
Map<String, Object> scenarioMap = deserializeValuesUtil.expandMapValues(
deserializedClauseValues,
additionalValues
);

log.info("expected roles: {}", rolesExpectationResponseBody);
Map<String, Object> actualRoleResponse = MapSerializer.deserialize(
retrieveTaskRolePermissionsResponseBody);
Map<String, Object> expectedRoleResponse = MapSerializer.deserialize(
rolesExpectationResponseBody);

verifiers.forEach(verifier ->
verifier.verify(
clauseValues,
expectedRoleResponse,
actualRoleResponse
)
);

AtomicInteger index = new AtomicInteger(0);
tasks.forEach(task -> {
try {
String taskId = MapValueExtractor.extract(task, "id");
log.info("task id is {}", taskId);

List<Map<String, Object>> taskDataList = MapValueExtractor.extract(
scenarioMap,
"taskData.replacements.tasks"
);

if (taskDataList == null || taskDataList.isEmpty()) {
log.info("taskDataList is null or empty");
return;
}

Map<String, Object> taskData = taskDataList.get(index.get());

List<Map<String, Object>> metaDataList = MapValueExtractor.extract(
taskData,
"test_meta_data"
);

if (metaDataList == null || metaDataList.isEmpty()) {
log.info("metaDataList is null or empty");
return;
}

String roleDataKey = metaDataList.stream()
.filter(md -> md.containsKey("key"))
.map(md -> md.get("value").toString())
.findFirst()
.orElse(null);

Map<String, Object> roleDataMap = filterRoleData(clauseValues, roleDataKey);

//skip role assignment validation if no role data provided in scenario
if (roleDataMap.isEmpty()) {
isTestPassed.set(true);
return;
}

String retrieveTaskRolePermissionsResponseBody =
taskManagementService.retrieveTaskRolePermissions(
roleDataMap,
taskId,
scenario.getExpectationAuthorizationHeaders()
);

if (retrieveTaskRolePermissionsResponseBody.isBlank()) {
log.error("Task role permissions response is empty. Test will now fail");
isTestPassed.set(false);
}

String rolesExpectationResponseBody = buildRolesExpectationResponseBody(
deserializedClauseValues,
additionalValues
);

log.info("expected roles: {}", rolesExpectationResponseBody);
actualRoleResponse.set(MapSerializer.deserialize(
retrieveTaskRolePermissionsResponseBody));
expectedRoleResponse.set(MapSerializer.deserialize(
rolesExpectationResponseBody));

verifiers.forEach(verifier ->
verifier.verify(
clauseValues,
expectedRoleResponse.get(),
actualRoleResponse.get()
)
);

index.getAndIncrement();

} catch (Exception e) {
isTestPassed.set(false);
Logger.say(SCENARIO_FAILED, scenario.getScenarioMapValues().get("description"));
throw new RuntimeException(e);
}

});

isTestPassed.set(true);
return true;
Expand All @@ -164,6 +228,21 @@ public void retrieveTask(Map<String, Object> clauseValues, TestScenario scenario
}
}

protected Map<String, Object> filterRoleData(Map<String, Object> clauseValues, String key) {

List<Map<String, Object>> roleData =
MapValueExtractor.extractOrDefault(
clauseValues,
"roleData",
new ArrayList<>()
);

return roleData.stream()
.filter((Map<String, Object> rd) -> rd.get("key").equals(key))
.findFirst()
.orElse(emptyMap());
}

private Comparator<JsonNode> taskTitleComparator() {
return (j1, j2) -> {
String title1 = j1.findValue("task_title").asText();
Expand Down
Loading

0 comments on commit 66dc9d6

Please sign in to comment.