def test_can_invoke_api_call_with_no_output(self): params = {'name': 'foo', 'trust_policy': {'trust': 'policy'}, 'policy': {'iam': 'policy'}} call = APICall('create_role', params) self.execute([call]) self.mock_client.create_role.assert_called_with(**params)
def test_can_print_ui_messages(self): params = {'name': 'foo', 'trust_policy': {'trust': 'policy'}, 'policy': {'iam': 'policy'}} call = APICall('create_role', params) messages = {id(call): 'Creating role'} self.execute([call], messages) self.mock_client.create_role.assert_called_with(**params) self.ui.write.assert_called_with('Creating role')
def test_validates_no_unresolved_deploy_vars(self): params = {'zip_contents': models.Placeholder.BUILD_STAGE} call = APICall('create_function', params) self.mock_client.create_function.return_value = 'function:arn' # We should raise an exception because a param has # a models.Placeholder.BUILD_STAGE value which should have # been handled in an earlier stage. with pytest.raises(UnresolvedValueError): self.execute([call])
def test_empty_values_omitted(self): params = {'name': 'foo', 'empty_list': [], 'empty_dict': {}, 'empty_str': ''} call = APICall('create_role', params) plan_output = self.get_plan_output([call]) assert 'empty_list' not in plan_output assert 'empty_dict' not in plan_output assert 'empty_str' not in plan_output
def test_can_store_api_result(self): params = {'name': 'foo', 'trust_policy': {'trust': 'policy'}, 'policy': {'iam': 'policy'}} apicall = APICall('create_role', params, output_var='my_variable_name') self.mock_client.create_role.return_value = 'myrole:arn' self.execute([apicall]) assert self.executor.variables['my_variable_name'] == 'myrole:arn'
def test_variable_pool_printed_if_needed(self): params = {'name': 'foo', 'policy': {'iam': 'policy'}} call = APICall('create_role', params) plan_output = self.get_plan_output([call]) # Dictionaries for param values are printed at the end so they # don't clutter the plan output. We should see a placeholder here. assert 'policy: ${POLICY_0}' in plan_output assert 'Variable Pool' in plan_output assert "${POLICY_0}:\n{'iam': 'policy'}" in plan_output
def test_can_reference_varname(self): self.mock_client.create_function.return_value = 'function:arn' self.execute([ APICall('create_function', {}, output_var='myvarname'), RecordResourceVariable( resource_type='lambda_function', resource_name='myfunction', name='myfunction_arn', variable_name='myvarname', ), ]) assert self.executor.resource_values == [{ 'name': 'myfunction', 'resource_type': 'lambda_function', 'myfunction_arn': 'function:arn', }]
def test_can_return_created_resources(self): params = {} call = APICall('create_function', params, output_var='myfunction_arn') self.mock_client.create_function.return_value = 'function:arn' record_instruction = RecordResourceVariable( resource_type='lambda_function', resource_name='myfunction', name='myfunction_arn', variable_name='myfunction_arn', ) self.execute([call, record_instruction]) assert self.executor.resource_values == [{ 'name': 'myfunction', 'myfunction_arn': 'function:arn', 'resource_type': 'lambda_function', }]
def test_can_reference_stored_results_in_api_calls(self): params = { 'name': Variable('role_name'), 'trust_policy': {'trust': 'policy'}, 'policy': {'iam': 'policy'} } call = APICall('create_role', params) self.mock_client.create_role.return_value = 'myrole:arn' self.executor.variables['role_name'] = 'myrole-name' self.execute([call]) self.mock_client.create_role.assert_called_with( name='myrole-name', trust_policy={'trust': 'policy'}, policy={'iam': 'policy'}, )
def test_can_display_plan(self): params = {'name': 'foo', 'trust_policy': {'trust': 'policy'}, 'policy': {'iam': 'policy'}} call = APICall('create_role', params) plan_output = self.get_plan_output([call]) # Should have a plan title. assert plan_output.startswith('Plan\n====') # Should print the api call in upper camel case. assert 'API_CALL' in plan_output # Should print the name of the method in the plan. assert 'method_name: create_role' in plan_output # Should print out the api call arguments in output. assert 'name: foo' in plan_output # The values for these are in the tests for the variable pool. assert 'trust_policy: ' in plan_output assert 'policy: ' in plan_output
def test_byte_value_replaced_if_over_length(self): params = {'name': 'foo', 'zip_contents': b'\x01' * 50} call = APICall('create_role', params) plan_output = self.get_plan_output([call]) assert 'zip_contents: <bytes>' in plan_output
def test_variable_pool_omitted_if_empty(self): params = {'name': 'foo'} call = APICall('create_role', params) plan_output = self.get_plan_output([call]) assert 'Variable Pool' not in plan_output