package tw.com;
import com.amazonaws.services.cloudformation.model.Parameter;
import com.amazonaws.services.cloudformation.model.Stack;
import com.amazonaws.services.cloudformation.model.StackStatus;
import com.amazonaws.services.cloudformation.model.TemplateParameter;
import com.amazonaws.services.ec2.model.AvailabilityZone;
import com.amazonaws.services.ec2.model.Vpc;
import org.easymock.EasyMock;
import org.easymock.EasyMockSupport;
import tw.com.entity.ProjectAndEnv;
import tw.com.entity.StackNameAndId;
import tw.com.exceptions.CfnAssistException;
import tw.com.repository.CloudFormRepository;
import tw.com.repository.CloudRepository;
import tw.com.repository.VpcRepository;
import java.io.IOException;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class UpdateStackExpectations extends EasyMockSupport {
private String regionName = EnvironmentSetupForTests.getRegion().getName();
protected static final String VPC_ID = "vpcId";
protected CloudFormRepository cfnRepository;
protected VpcRepository vpcRepository;
protected MonitorStackEvents monitor;
protected CloudRepository cloudRepository;
protected ProjectAndEnv projectAndEnv = EnvironmentSetupForTests.getMainProjectAndEnv();
private Map<String, AvailabilityZone> zones = new HashMap<>();
protected StackNameAndId setUpdateExpectations(String stackName, String filename,
List<TemplateParameter> templateParameters,
Collection<Parameter> parameters)
throws CfnAssistException, InterruptedException, IOException {
String stackId = "stackId";
Stack stack = new Stack().withStackId(stackId);
StackNameAndId stackNameAndId = new StackNameAndId(stackName, stackId);
String contents = EnvironmentSetupForTests.loadFile(filename);
EasyMock.expect(vpcRepository.getCopyOfVpc(projectAndEnv)).andReturn(new Vpc().withVpcId(VPC_ID));
EasyMock.expect(cfnRepository.validateStackTemplate(contents)).andReturn(templateParameters);
EasyMock.expect(cfnRepository.updateStack(contents, parameters, monitor, stackName)).andReturn(stackNameAndId);
EasyMock.expect(monitor.waitForUpdateFinished(stackNameAndId)).andReturn(StackStatus.UPDATE_COMPLETE.toString());
EasyMock.expect(cfnRepository.updateSuccess(stackNameAndId)).andReturn(stack);
EasyMock.expect(cloudRepository.getZones(regionName)).andReturn(zones);
return stackNameAndId;
}
}