@Test
public void shouldCreatePermittedAgentContextCorrectly() throws Exception {
AgentConfig linux = agent("uuid1", "linux");
AgentConfig windows = agent("uuid2", "windows");
windows.disable();
Agents matchingAgents = new Agents(linux, windows);
EnvironmentVariablesConfig existing = new EnvironmentVariablesConfig();
existing.add("firstVar", "firstVal");
existing.add("overriddenVar", "originalVal");
SchedulingContext schedulingContext = new DefaultSchedulingContext("approver", matchingAgents);
schedulingContext = schedulingContext.overrideEnvironmentVariables(existing);
EnvironmentVariablesConfig stageLevel = new EnvironmentVariablesConfig();
stageLevel.add("stageVar", "stageVal");
stageLevel.add("overriddenVar", "overriddenVal");
StageConfig config = StageConfigMother.custom("test", Approval.automaticApproval());
config.setVariables(stageLevel);
SchedulingContext context = schedulingContext.overrideEnvironmentVariables(config.getVariables());
ReflectionUtil.setField(context, "rerun", true);
SchedulingContext permittedAgentContext = context.permittedAgent("uuid1");
Agents agents = (Agents) ReflectionUtil.getField(permittedAgentContext, "agents");
assertThat(agents.size(), is(1));
assertThat(agents.get(0).getAgentIdentifier().getUuid(), is("uuid1"));
assertThat(permittedAgentContext.isRerun(), is(true));
assertThat(permittedAgentContext.getApprovedBy(), is("approver"));
EnvironmentVariablesConfig environmentVariablesUsed = permittedAgentContext.getEnvironmentVariablesConfig();
assertThat(environmentVariablesUsed.size(), is(3));
assertThat(environmentVariablesUsed, hasItem(new EnvironmentVariableConfig("firstVar", "firstVal")));
assertThat(environmentVariablesUsed, hasItem(new EnvironmentVariableConfig("overriddenVar", "overriddenVal")));
assertThat(environmentVariablesUsed, hasItem(new EnvironmentVariableConfig("stageVar", "stageVal")));
}