mirror of
https://github.com/ansible/awx.git
synced 2026-02-02 10:08:10 -03:30
Add unit tests for notification module
This commit is contained in:
@@ -426,7 +426,9 @@ def main():
|
||||
final_notification_configuration.update(notification_configuration)
|
||||
|
||||
# Create the data that gets sent for create and update
|
||||
new_fields = {'notification_configuration': final_notification_configuration}
|
||||
new_fields = {}
|
||||
if final_notification_configuration:
|
||||
new_fields['notification_configuration'] = final_notification_configuration
|
||||
new_fields['name'] = new_name if new_name else name
|
||||
if description is not None:
|
||||
new_fields['description'] = description
|
||||
|
||||
84
awx_collection/test/awx/test_notification.py
Normal file
84
awx_collection/test/awx/test_notification.py
Normal file
@@ -0,0 +1,84 @@
|
||||
from __future__ import (absolute_import, division, print_function)
|
||||
__metaclass__ = type
|
||||
|
||||
import pytest
|
||||
|
||||
from awx.main.models import NotificationTemplate
|
||||
|
||||
|
||||
def compare_with_encrypted(model_config, param_config):
|
||||
'''Given a model_config from the database, assure that this is consistent
|
||||
with the config given in the notification_configuration parameter
|
||||
this requires handling of password fields
|
||||
'''
|
||||
for key, model_val in model_config.items():
|
||||
param_val = param_config.get(key, 'missing')
|
||||
if isinstance(model_val, str) and (model_val.startswith('$encrypted$') or param_val.startswith('$encrypted$')):
|
||||
assert model_val.startswith('$encrypted$') # must be saved as encrypted
|
||||
assert len(model_val) > len('$encrypted$')
|
||||
else:
|
||||
assert model_val == param_val, 'Config key {0} did not match, (model: {1}, input: {2})'.format(
|
||||
key, model_val, param_val
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_create_modify_notification_template(run_module, admin_user, organization):
|
||||
nt_config = {
|
||||
'username': 'user',
|
||||
'password': 'password',
|
||||
'sender': 'foo@invalid.com',
|
||||
'recipients': ['foo2@invalid.com'],
|
||||
'host': 'smtp.example.com',
|
||||
'port': 25,
|
||||
'use_tls': False, 'use_ssl': False,
|
||||
'timeout': 4
|
||||
}
|
||||
result = run_module('tower_notification', dict(
|
||||
name='foo-notification-template',
|
||||
organization=organization.name,
|
||||
notification_type='email',
|
||||
notification_configuration=nt_config,
|
||||
), admin_user)
|
||||
assert not result.get('failed', False), result.get('msg', result)
|
||||
assert result.pop('changed', None), result
|
||||
|
||||
nt = NotificationTemplate.objects.get(id=result['id'])
|
||||
compare_with_encrypted(nt.notification_configuration, nt_config)
|
||||
assert nt.organization == organization
|
||||
|
||||
# Test no-op, this is impossible if the notification_configuration is given
|
||||
# because we cannot determine if password fields changed
|
||||
result = run_module('tower_notification', dict(
|
||||
name='foo-notification-template',
|
||||
organization=organization.name,
|
||||
notification_type='email',
|
||||
), admin_user)
|
||||
assert not result.get('failed', False), result.get('msg', result)
|
||||
assert not result.pop('changed', None), result
|
||||
|
||||
# Test a change in the configuration
|
||||
nt_config['timeout'] = 12
|
||||
result = run_module('tower_notification', dict(
|
||||
name='foo-notification-template',
|
||||
organization=organization.name,
|
||||
notification_type='email',
|
||||
notification_configuration=nt_config,
|
||||
), admin_user)
|
||||
assert not result.get('failed', False), result.get('msg', result)
|
||||
assert result.pop('changed', None), result
|
||||
|
||||
nt.refresh_from_db()
|
||||
compare_with_encrypted(nt.notification_configuration, nt_config)
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_invalid_notification_configuration(run_module, admin_user, organization):
|
||||
result = run_module('tower_notification', dict(
|
||||
name='foo-notification-template',
|
||||
organization=organization.name,
|
||||
notification_type='email',
|
||||
notification_configuration={},
|
||||
), admin_user)
|
||||
assert result.get('failed', False), result.get('msg', result)
|
||||
assert 'Missing required fields for Notification Configuration' in result['msg']
|
||||
Reference in New Issue
Block a user