resolve a few CredentialType.inputs validation issues

see: #6363
This commit is contained in:
Ryan Petrello 2017-06-06 10:38:44 -04:00
parent b380b1587a
commit 9bba3d9749
2 changed files with 41 additions and 15 deletions

View File

@ -1895,11 +1895,14 @@ class CredentialTypeSerializer(BaseSerializer):
raise PermissionDenied(
detail= _("Modifications to inputs are not allowed for credential types that are in use")
)
ret = super(CredentialTypeSerializer, self).validate(attrs)
fields = attrs.get('inputs', {}).get('fields', [])
for field in fields:
if field.get('ask_at_runtime', False):
raise serializers.ValidationError({"inputs": _("'ask_at_runtime' is not supported for custom credentials.")})
return super(CredentialTypeSerializer, self).validate(attrs)
return ret
def get_related(self, obj):
res = super(CredentialTypeSerializer, self).get_related(obj)

View File

@ -167,15 +167,49 @@ def test_create_with_valid_inputs(get, post, admin):
@pytest.mark.django_db
def test_create_with_invalid_inputs_xfail(post, admin):
@pytest.mark.parametrize('inputs', [
True,
100,
[1, 2, 3, 4],
'malformed',
{'feelds': {}},
{'fields': [123, 234, 345]},
{'fields': [{'id':'one', 'label':'One'}, 234]},
{'feelds': {}, 'fields': [{'id':'one', 'label':'One'}, 234]}
])
def test_create_with_invalid_inputs_xfail(post, admin, inputs):
response = post(reverse('api:credential_type_list'), {
'kind': 'cloud',
'name': 'MyCloud',
'inputs': {'feeelds': {},},
'inputs': inputs,
'injectors': {}
}, admin)
assert response.status_code == 400
assert "'feeelds' was unexpected" in json.dumps(response.data)
@pytest.mark.django_db
@pytest.mark.parametrize('injectors', [
True,
100,
[1, 2, 3, 4],
'malformed',
{'mal': 'formed'},
{'env': {'ENV_VAR': 123}, 'mal': 'formed'},
{'env': True},
{'env': [1, 2, 3]},
{'file': True},
{'file': [1, 2, 3]},
{'extra_vars': True},
{'extra_vars': [1, 2, 3]},
])
def test_create_with_invalid_injectors_xfail(post, admin, injectors):
response = post(reverse('api:credential_type_list'), {
'kind': 'cloud',
'name': 'MyCloud',
'inputs': {},
'injectors': injectors,
}, admin)
assert response.status_code == 400
@pytest.mark.django_db
@ -235,17 +269,6 @@ def test_create_with_valid_injectors(get, post, admin):
}
@pytest.mark.django_db
def test_create_with_invalid_injectors_xfail(post, admin):
response = post(reverse('api:credential_type_list'), {
'kind': 'cloud',
'name': 'MyCloud',
'inputs': {},
'injectors': {'nonsense': 123}
}, admin)
assert response.status_code == 400
@pytest.mark.django_db
def test_create_with_undefined_template_variable_xfail(post, admin):
response = post(reverse('api:credential_type_list'), {