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()
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()
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$')
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'
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'] == {}
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']
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
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)