package com.griddynamics.jagger.test.jaas.validator.tests;
import com.griddynamics.jagger.engine.e1.services.data.service.TestEntity;
import com.griddynamics.jagger.invoker.v2.JHttpEndpoint;
import com.griddynamics.jagger.invoker.v2.JHttpQuery;
import com.griddynamics.jagger.invoker.v2.JHttpResponse;
import com.griddynamics.jagger.test.jaas.util.TestContext;
import com.griddynamics.jagger.test.jaas.validator.BaseHttpResponseValidator;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertTrue;
/**
* [JFG-879]
* Validates response of /sessions/{sessionId}/tests/.
* Expected:
* - list of tests is of size 1 and greater;
* - the list's size is the same as the one's available via DataService;
* - the list contains no duplicates;
* - a randomly picked records is the same as corresponding expected one.
*/
public class TestsListResponseContentValidator extends BaseHttpResponseValidator<TestEntity[]> {
@Override
public String getName() {
return "TestsListResponseContentValidator";
}
@Override
public boolean isValid(JHttpQuery<String> query, JHttpEndpoint endpoint, JHttpResponse<TestEntity[]> result) {
List<TestEntity> actualEntities = Arrays.asList(result.getBody());
String sessionId = getSessionIdFromQuery(query);
Set<TestEntity> expectedEntities = TestContext.getTestsBySessionId(sessionId);
int actlSize = actualEntities.size();
int expctdSize = expectedEntities.size();
assertTrue("At least one test record is expected. Check returned list's size", 0 < actlSize);
List<TestEntity> noDuplicatesActualList = actualEntities.stream().distinct().collect(Collectors.toList());
assertEquals("Response contains duplicate records", actlSize, noDuplicatesActualList.size());
assertEquals("Actual list's size is not the same as expected one's.", actlSize, expctdSize);
//TODO: Wait for JFG-916 to be implemented and un-comment.
//assertTrue("Actual list is not the same as expected set.", expectedEntities.containsAll(actualEntities));
return true;
}
private String getSessionIdFromQuery(JHttpQuery query) {
// ${jaas.rest.root}/sessions/{sessionId}/tests => ${jaas.rest.root} + sessions + {sessionId} + tests
String[] parts = query.getPath().split("/");
return parts[parts.length - 2];
}
}