Added test for Chainable Undefined Behavior

Signed-off-by: Will Haines <william.haines@colorado.edu>
This commit is contained in:
Will Haines 2021-01-07 17:24:56 -07:00
parent fc2a2e538f
commit 9ec958f839

View File

@ -3,7 +3,7 @@ __metaclass__ = type
import pytest
from awx.main.models import NotificationTemplate
from awx.main.models import NotificationTemplate, Job
def compare_with_encrypted(model_config, param_config):
@ -109,3 +109,32 @@ def test_deprecated_to_modern_no_op(run_module, admin_user, organization):
), admin_user)
assert not result.get('failed', False), result.get('msg', result)
assert not result.pop('changed', None), result
@pytest.mark.django_db
def test_build_notification_message_undefined(run_module, admin_user, organization):
"""Job notification templates may encounter undefined values in the context when they are
rendered. Make sure that accessing attributes or items of an undefined value returns another
instance of Undefined, rather than raising an UndefinedError. This enables the use of expressions
like "{{ job.created_by.first_name | default('unknown') }}"."""
job = Job.objects.create(name='foobar')
nt_config = {
'url': 'http://www.example.com/hook',
'headers': {
'X-Custom-Header': 'value123'
}
}
custom_start_template = {'body': '{"started_by": "{{ job.summary_fields.created_by.username | default(\'My Placeholder\') }}"}'}
messages = {'started': custom_start_template, 'success': None, 'error': None, 'workflow_approval': None}
result = run_module('tower_notification_template', dict(
name='foo-notification-template',
organization=organization.name,
notification_type='webhook',
notification_configuration=nt_config,
messages=messages,
), admin_user)
nt = NotificationTemplate.objects.get(id=result['id'])
_, body = job.build_notification_message(nt, 'running')
assert '{"started_by": "My Placeholder"}' in body