mirror of
https://github.com/ansible/awx.git
synced 2026-01-14 11:20:39 -03:30
Perform json and yaml validation on Job Templates
This commit is contained in:
parent
e5bebf7b51
commit
675b596fb0
@ -1773,6 +1773,21 @@ class JobTemplateSerializer(UnifiedJobTemplateSerializer, JobOptionsSerializer):
|
||||
|
||||
return super(JobTemplateSerializer, self).validate(attrs)
|
||||
|
||||
def validate_extra_vars(self, value):
|
||||
# extra_vars must be blank, a valid JSON or YAML dict, or ...
|
||||
# FIXME: support key=value pairs.
|
||||
try:
|
||||
json.loads((value or '').strip() or '{}')
|
||||
return value
|
||||
except ValueError:
|
||||
pass
|
||||
try:
|
||||
yaml.safe_load(value)
|
||||
return value
|
||||
except yaml.YAMLError:
|
||||
pass
|
||||
raise serializers.ValidationError('Must be valid JSON or YAML')
|
||||
|
||||
|
||||
class JobSerializer(UnifiedJobSerializer, JobOptionsSerializer):
|
||||
|
||||
|
||||
@ -6,6 +6,9 @@ import mock
|
||||
from awx.api.serializers import JobTemplateSerializer, JobSerializer, JobOptionsSerializer
|
||||
from awx.main.models import Label, Job
|
||||
|
||||
#DRF
|
||||
from rest_framework import serializers
|
||||
|
||||
@pytest.fixture
|
||||
def job_template(mocker):
|
||||
return mocker.MagicMock(pk=5)
|
||||
@ -49,7 +52,7 @@ class GetSummaryFieldsMixin:
|
||||
summary = self._mock_and_run(serializer_class, model_obj)
|
||||
self._assert(summary, summary_field_name)
|
||||
return summary
|
||||
|
||||
|
||||
@mock.patch('awx.api.serializers.UnifiedJobTemplateSerializer.get_related', lambda x,y: {})
|
||||
@mock.patch('awx.api.serializers.JobOptionsSerializer.get_related', lambda x,y: {})
|
||||
class TestJobTemplateSerializerGetRelated(GetRelatedMixin):
|
||||
@ -153,3 +156,14 @@ class TestJobOptionsSerializerGetSummaryFields(GetSummaryFieldsMixin):
|
||||
def test_labels_exists(self, mocker, job_template):
|
||||
self._test_get_summary_fields(JobOptionsSerializer, job_template, 'labels')
|
||||
|
||||
class TestJobTemplateSerializerValidation(object):
|
||||
|
||||
good_extra_vars = ["{\"test\": \"keys\"}", "---\ntest: key"]
|
||||
bad_extra_vars = ["{\"test\": \"keys\"", "---\ntest: [2"]
|
||||
def test_validate_extra_vars(self):
|
||||
serializer = JobTemplateSerializer()
|
||||
for ev in self.good_extra_vars:
|
||||
serializer.validate_extra_vars(ev)
|
||||
for ev in self.bad_extra_vars:
|
||||
with pytest.raises(serializers.ValidationError):
|
||||
serializer.validate_extra_vars(ev)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user