package tw.com.unit;
import com.amazonaws.services.cloudformation.model.Parameter;
import com.amazonaws.services.cloudformation.model.TemplateParameter;
import com.amazonaws.services.ec2.model.AvailabilityZone;
import org.junit.Before;
import org.junit.Test;
import tw.com.EnvironmentSetupForTests;
import tw.com.entity.ProjectAndEnv;
import tw.com.exceptions.CannotFindVpcException;
import tw.com.exceptions.InvalidStackParameterException;
import tw.com.parameters.CfnBuiltInParams;
import tw.com.parameters.ProvidesZones;
import java.io.IOException;
import java.util.Collection;
import java.util.LinkedList;
import java.util.Map;
import static junit.framework.TestCase.assertEquals;
import static org.junit.Assert.assertTrue;
public class TestCfnBuiltInParams implements ProvidesZones {
private CfnBuiltInParams parameters;
private LinkedList<Parameter> results;
private LinkedList<TemplateParameter> declaredParameters;
private String vpcId;
@Before
public void beforeEachTestRuns() {
vpcId = "vpcId";
parameters = new CfnBuiltInParams(vpcId);
results = new LinkedList<>();
declaredParameters = new LinkedList<>();
}
@Test
public void shouldNotPopulateEnvAndEpvParametersIfNotDeclared() throws InvalidStackParameterException, CannotFindVpcException, IOException {
parameters.addParameters(results, declaredParameters, EnvironmentSetupForTests.getMainProjectAndEnv(), this);
assertTrue(results.isEmpty());
}
@Test
public void shouldPopulateEnvAndVPCIfDeclared() throws InvalidStackParameterException, CannotFindVpcException, IOException {
declaredParameters.add(new TemplateParameter().withParameterKey("env"));
declaredParameters.add(new TemplateParameter().withParameterKey("vpc"));
ProjectAndEnv projAndEnv = EnvironmentSetupForTests.getMainProjectAndEnv();
parameters.addParameters(results, declaredParameters, projAndEnv, this);
assertEquals(2, results.size());
assertTrue(isPresentIn(results, "env", projAndEnv.getEnv()));
assertTrue(isPresentIn(results, "vpc", vpcId));
}
@Test
public void shouldPopulateEnvVpcAndBuildIfDeclared() throws InvalidStackParameterException, CannotFindVpcException, IOException {
declaredParameters.add(new TemplateParameter().withParameterKey("env"));
declaredParameters.add(new TemplateParameter().withParameterKey("vpc"));
declaredParameters.add(new TemplateParameter().withParameterKey("build"));
ProjectAndEnv projAndEnv = EnvironmentSetupForTests.getMainProjectAndEnv();
projAndEnv.addBuildNumber(5426);
parameters.addParameters(results, declaredParameters, projAndEnv, this);
assertEquals(3, results.size());
assertTrue(isPresentIn(results, "env", projAndEnv.getEnv()));
assertTrue(isPresentIn(results, "vpc", vpcId));
assertTrue(isPresentIn(results, "build", "5426"));
}
@Test
public void shouldPopulateEnvVpcIfDeclaredButBuildNotDeclared() throws InvalidStackParameterException, CannotFindVpcException, IOException {
declaredParameters.add(new TemplateParameter().withParameterKey("env"));
declaredParameters.add(new TemplateParameter().withParameterKey("vpc"));
ProjectAndEnv projAndEnv = EnvironmentSetupForTests.getMainProjectAndEnv();
projAndEnv.addBuildNumber(5426);
parameters.addParameters(results, declaredParameters, projAndEnv, this);
assertEquals(2, results.size());
assertTrue(isPresentIn(results, "env", projAndEnv.getEnv()));
assertTrue(isPresentIn(results, "vpc", vpcId));
}
private boolean isPresentIn(Collection<Parameter> results, String key, String value) {
for(Parameter candidate : results) {
if (candidate.getParameterKey().equals(key) && (candidate.getParameterValue().equals(value))) {
return true;
}
}
return false;
}
@Override
public Map<String, AvailabilityZone> getZones() {
return null;
}
}