示例#1
0
 def test_variables_needed_to_start(self, survey_spec_factory):
     "Assure that variables_needed_to_start output contains mandatory vars"
     spec = survey_spec_factory(['question1', 'question2', 'question3'])
     spec['spec'][0]['required'] = False
     spec['spec'][1]['required'] = True
     spec['spec'][2]['required'] = False
     wfjt = WorkflowJobTemplate(name="test-wfjt",
                                survey_spec=spec,
                                survey_enabled=True,
                                extra_vars="question2: hiworld")
     assert wfjt.variables_needed_to_start == ['question2']
     assert not wfjt.can_start_without_user_input()
示例#2
0
 def test_update_kwargs_survey_defaults(self, survey_spec_factory):
     "Assure that the survey default over-rides a JT variable"
     spec = survey_spec_factory('var1')
     spec['spec'][0]['default'] = 3
     spec['spec'][0]['required'] = False
     wfjt = WorkflowJobTemplate(name="test-wfjt",
                                survey_spec=spec,
                                survey_enabled=True,
                                extra_vars="var1: 5")
     updated_extra_vars = wfjt._update_unified_job_kwargs({}, {})
     assert 'extra_vars' in updated_extra_vars
     assert json.loads(updated_extra_vars['extra_vars'])['var1'] == 3
     assert wfjt.can_start_without_user_input()
示例#3
0
 def test_set_survey_passwords_create(self, jt):
     serializer = WorkflowJobTemplateNodeSerializer()
     wfjt = WorkflowJobTemplate(name='fake-wfjt')
     attrs = serializer.validate({'unified_job_template': jt, 'workflow_job_template': wfjt, 'extra_data': {'var1': 'secret_answer'}})
     assert 'survey_passwords' in attrs
     assert 'var1' in attrs['survey_passwords']
     assert attrs['extra_data']['var1'].startswith('$encrypted$')
     assert len(attrs['extra_data']['var1']) > len('$encrypted$')
示例#4
0
 def test_use_db_answer(self, jt, mocker):
     serializer = WorkflowJobTemplateNodeSerializer()
     wfjt = WorkflowJobTemplate(name='fake-wfjt')
     serializer.instance = WorkflowJobTemplateNode(workflow_job_template=wfjt, unified_job_template=jt, extra_data={'var1': '$encrypted$foooooo'})
     with mocker.patch('awx.main.models.mixins.decrypt_value', return_value='foo'):
         attrs = serializer.validate({'unified_job_template': jt, 'workflow_job_template': wfjt, 'extra_data': {'var1': '$encrypted$'}})
     assert 'survey_passwords' in attrs
     assert 'var1' in attrs['survey_passwords']
     assert attrs['extra_data']['var1'] == '$encrypted$foooooo'
示例#5
0
 def test_accept_password_default(self, jt, mocker):
     """
     If user provides "$encrypted$" without a corresponding DB value for the
     node, but survey question has a default, then variables are accepted
     with that particular var omitted so on launch time the default takes effect
     """
     serializer = WorkflowJobTemplateNodeSerializer()
     wfjt = WorkflowJobTemplate(name='fake-wfjt')
     jt.survey_spec['spec'][0]['default'] = '$encrypted$bar'
     attrs = serializer.validate({'unified_job_template': jt, 'workflow_job_template': wfjt, 'extra_data': {'var1': '$encrypted$'}})
     assert 'survey_passwords' in attrs
     assert attrs['survey_passwords'] == {}
     assert attrs['extra_data'] == {}
示例#6
0
 def test_set_survey_passwords_modify(self, jt):
     serializer = WorkflowJobTemplateNodeSerializer()
     wfjt = WorkflowJobTemplate(name='fake-wfjt')
     serializer.instance = WorkflowJobTemplateNode(
         workflow_job_template=wfjt, unified_job_template=jt)
     attrs = serializer.validate({
         'unified_job_template': jt,
         'workflow_job_template': wfjt,
         'extra_data': {
             'var1': 'secret_answer'
         }
     })
     assert 'survey_passwords' in attrs
     assert 'var1' in attrs['survey_passwords']
示例#7
0
def mk_workflow_job_template(name, extra_vars='', spec=None, organization=None, persisted=True, webhook_service=''):
    if extra_vars:
        extra_vars = json.dumps(extra_vars)

    wfjt = WorkflowJobTemplate(name=name, extra_vars=extra_vars, organization=organization, webhook_service=webhook_service)

    wfjt.survey_spec = spec
    if wfjt.survey_spec:
        wfjt.survey_enabled = True

    if persisted:
        wfjt.save()
    return wfjt
示例#8
0
 def test_wfjt_extra_vars_counting(self, provided_vars, valid):
     wfjt = WorkflowJobTemplate(name='foo', extra_vars={'tmpl_var': 'bar'})
     prompted_fields, ignored_fields, errors = wfjt._accept_or_ignore_job_kwargs(
         extra_vars=provided_vars)
     self.process_vars_and_assert(wfjt, provided_vars, valid)