package com.thoughtworks.go.plugin.access.configrepo.contract;
import com.thoughtworks.go.plugin.access.configrepo.ErrorCollection;
import com.thoughtworks.go.plugin.access.configrepo.contract.tasks.CRBuildTask;
import org.junit.Test;
import java.util.Arrays;
import java.util.Map;
import static com.thoughtworks.go.util.TestUtils.contains;
import static org.hamcrest.MatcherAssert.assertThat;
public class CRStageTest extends CRBaseTest<CRStage> {
private final CRStage stage;
private final CRStage stageWith2Jobs;
private final CRStage stageWithEnv;
private final CRStage stageWithApproval;
private final CRStage invalidNoName;
private final CRStage invalidNoJobs;
private final CRStage invalidSameEnvironmentVariableTwice;
private final CRStage invalidSameJobNameTwice;
public CRStageTest()
{
CRBuildTask rakeTask = CRBuildTask.rake();
CRBuildTask antTask = CRBuildTask.ant();
CRJob buildRake = new CRJob("build", rakeTask);
CRJob build2Rakes = new CRJob("build", rakeTask, CRBuildTask.rake("Rakefile.rb", "compile"));
CRJob jobWithVar = new CRJob("build", rakeTask);
jobWithVar.addEnvironmentVariable("key1","value1");
CRJob jobWithResource = new CRJob("test", antTask);
jobWithResource.addResource("linux");
stage = new CRStage("build",buildRake);
stageWith2Jobs = new CRStage("build",build2Rakes,jobWithResource);
stageWithEnv = new CRStage("test",jobWithResource);
stageWithEnv.addEnvironmentVariable("TEST_NUM","1");
CRApproval manualWithAuth = new CRApproval(CRApprovalCondition.manual);
manualWithAuth.setAuthorizedRoles(Arrays.asList("manager"));
stageWithApproval = new CRStage("deploy",buildRake);
stageWithApproval.setApproval(manualWithAuth);
invalidNoName = new CRStage(null,jobWithResource);
invalidNoJobs = new CRStage("build");
invalidSameEnvironmentVariableTwice = new CRStage("build",buildRake);
invalidSameEnvironmentVariableTwice.addEnvironmentVariable("key","value1");
invalidSameEnvironmentVariableTwice.addEnvironmentVariable("key","value2");
invalidSameJobNameTwice = new CRStage("build",buildRake,build2Rakes);
}
@Override
public void addGoodExamples(Map<String, CRStage> examples) {
examples.put("stage",stage);
examples.put("stageWith2Jobs",stageWith2Jobs);
examples.put("stageWithEnv",stageWithEnv);
examples.put("stageWithApproval",stageWithApproval);
}
@Override
public void addBadExamples(Map<String, CRStage> examples) {
examples.put("invalidNoName",invalidNoName);
examples.put("invalidNoJobs",invalidNoJobs);
examples.put("invalidSameEnvironmentVariableTwice",invalidSameEnvironmentVariableTwice);
examples.put("invalidSameJobNameTwice",invalidSameJobNameTwice);
}
@Test
public void shouldCheckErrorsInJobs()
{
CRStage withNamelessJob = new CRStage("build",new CRJob());
ErrorCollection errors = new ErrorCollection();
withNamelessJob.getErrors(errors,"TEST");
String fullError = errors.getErrorsAsText();
assertThat(fullError,contains("TEST; Stage (build)"));
assertThat(fullError,contains("Missing field 'name'"));
}
}