package com.griddynamics.jagger.test.jaas.validator.executions; 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.util.entity.ExecutionEntity; import com.griddynamics.jagger.test.jaas.validator.BaseHttpResponseValidator; import junit.framework.Assert; import java.util.Arrays; import java.util.List; import java.util.Random; import java.util.Set; import java.util.stream.Collectors; /** * Validates response of GET /executions * Expected: * - there are more then one record * - there are no duplicates * - there are all expected records * - a randomly picked record is the same as corresponding expected one. */ public class ExListResponseValidator extends BaseHttpResponseValidator<ExecutionEntity[]> { @Override public String getName() { return "ExListResponseValidator"; } @Override public boolean isValid(JHttpQuery<String> query, JHttpEndpoint endpoint, JHttpResponse<ExecutionEntity[]> result) { List<ExecutionEntity> actualEntities = Arrays.asList(result.getBody()); Set<Long> expectedIds = TestContext.getCreatedExecutionIds(); int actlSize = actualEntities.size(); Assert.assertTrue("Several execution records are expected. Check returned list's size", 1 < actlSize); Set<Long> noDuplicatesIds = actualEntities.stream().map(ExecutionEntity::getId).collect(Collectors.toSet()); Assert.assertEquals("Response contains duplicate execution records", actlSize, noDuplicatesIds.size()); Assert.assertTrue("Size of actual list should be not less than expected one.", expectedIds.size() <= actlSize); List<Long> actualIds = actualEntities.stream().map(ExecutionEntity::getId).collect(Collectors.toList()); Assert.assertTrue("Actual set of executions should contains all expected ids.", expectedIds.stream().allMatch(actualIds::contains)); Long randomId = (Long) expectedIds.toArray()[new Random().nextInt(expectedIds.size())]; ExecutionEntity randomActualEntity = actualEntities.stream().filter(e -> e.getId().equals(randomId)).findFirst().orElse(null); ExecutionEntity expected = ExecutionEntity.getDefault(); Assert.assertEquals("Randomly selected actual execution has unexpected value", expected.getEnvId(), randomActualEntity.getEnvId()); Assert.assertEquals("Randomly selected actual execution has unexpected value", ExecutionEntity.TestExecutionStatus.PENDING, randomActualEntity.getStatus()); Assert.assertEquals("Randomly selected actual execution has unexpected value", expected.getExecutionTimeToStartInSeconds(), randomActualEntity.getExecutionTimeToStartInSeconds()); Assert.assertEquals("Randomly selected actual execution has unexpected value", expected.getLoadScenarioId(), randomActualEntity.getLoadScenarioId()); return true; } }