package com.griddynamics.jagger.invoker.scenario; import java.util.ArrayList; import java.util.List; import static java.lang.String.format; /** * This class is a representation of user scenario - sequence of the related http requests * Can be invoked by {@link JHttpUserScenarioInvoker}. * User can create as many steps ({@link JHttpUserScenarioStep}) as needed and they will be invoked as one invocation. * If any step fails whole scenario invacation will be marked as failed. * * @see JHttpUserScenarioInvoker * @see JHttpUserScenarioInvocationListener * * @ingroup Main_Http_User_Scenario_group */ public class JHttpUserScenario { private Integer stepsCounter = 0; private final String scenarioId; private final String scenarioDisplayName; private List<JHttpUserScenarioStep> userScenarioSteps = new ArrayList<>(); private JHttpScenarioGlobalContext scenarioGlobalContext; public JHttpUserScenario(String scenarioId, String scenarioDisplayName) { this.scenarioId = scenarioId; this.scenarioDisplayName = scenarioDisplayName; } public JHttpUserScenario withScenarioGlobalContext(JHttpScenarioGlobalContext scenarioGlobalContext) { this.scenarioGlobalContext = scenarioGlobalContext; return this; } public JHttpUserScenario addStep (JHttpUserScenarioStep userScenarioStep) { if (!isStepIdUnique(userScenarioStep.getStepId())) { throw new IllegalArgumentException(format("Step id '%s' is not unique!", userScenarioStep.getStepId())); } stepsCounter++; userScenarioStep.setStepNumber(stepsCounter); userScenarioSteps.add(userScenarioStep); return this; } private boolean isStepIdUnique(String id) { return userScenarioSteps.stream().map(JHttpUserScenarioStep::getStepId).noneMatch(stepId -> stepId.equals(id)); } public String getScenarioId() { return scenarioId; } public String getScenarioDisplayName() { return scenarioDisplayName; } public List<JHttpUserScenarioStep> getUserScenarioSteps() { return userScenarioSteps; } public JHttpUserScenarioStep getUserScenarioStep(int index) { return userScenarioSteps.get(index); } public JHttpScenarioGlobalContext getScenarioGlobalContext() { return scenarioGlobalContext; } }