Merge "Check if network_id and qos_policy_id is empty"
This commit is contained in:
commit
cee0537227
@ -65,6 +65,7 @@ class CreatePolicyForm(forms.SelfHandlingForm):
|
|||||||
'data-switch-on': 'action_object_type',
|
'data-switch-on': 'action_object_type',
|
||||||
'data-action_object_type-shared_network': _('Network'),
|
'data-action_object_type-shared_network': _('Network'),
|
||||||
'data-action_object_type-external_network': _('Network'),
|
'data-action_object_type-external_network': _('Network'),
|
||||||
|
'data-required-when-shown': 'true',
|
||||||
}),
|
}),
|
||||||
required=False)
|
required=False)
|
||||||
qos_policy_id = forms.ThemableChoiceField(
|
qos_policy_id = forms.ThemableChoiceField(
|
||||||
@ -73,9 +74,22 @@ class CreatePolicyForm(forms.SelfHandlingForm):
|
|||||||
'class': 'switched',
|
'class': 'switched',
|
||||||
'data-switch-on': 'action_object_type',
|
'data-switch-on': 'action_object_type',
|
||||||
'data-action_object_type-shared_qos_policy': _('QoS Policy'),
|
'data-action_object_type-shared_qos_policy': _('QoS Policy'),
|
||||||
|
'data-required-when-shown': 'true',
|
||||||
}),
|
}),
|
||||||
required=False)
|
required=False)
|
||||||
|
|
||||||
|
def clean(self):
|
||||||
|
cleaned_data = super(CreatePolicyForm, self).clean()
|
||||||
|
action_object_type = cleaned_data.get("action_object_type")
|
||||||
|
error_msg = _("This field is required.")
|
||||||
|
if action_object_type in ["shared_network", "external_network"]:
|
||||||
|
if not cleaned_data.get("network_id"):
|
||||||
|
self._errors['network_id'] = self.error_class([error_msg])
|
||||||
|
elif action_object_type == "shared_qos_policy":
|
||||||
|
if not cleaned_data.get("qos_policy_id"):
|
||||||
|
self._errors['qos_policy_id'] = self.error_class([error_msg])
|
||||||
|
return cleaned_data
|
||||||
|
|
||||||
def __init__(self, request, *args, **kwargs):
|
def __init__(self, request, *args, **kwargs):
|
||||||
super(CreatePolicyForm, self).__init__(request, *args, **kwargs)
|
super(CreatePolicyForm, self).__init__(request, *args, **kwargs)
|
||||||
tenant_choices = [('', _("Select a project"))]
|
tenant_choices = [('', _("Select a project"))]
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
|
import mock
|
||||||
|
|
||||||
from openstack_dashboard import api
|
from openstack_dashboard import api
|
||||||
from openstack_dashboard.test import helpers as test
|
from openstack_dashboard.test import helpers as test
|
||||||
@ -118,3 +119,63 @@ class RBACPolicyTests(test.BaseAdminViewTests):
|
|||||||
'object_id': qos_policy.id}
|
'object_id': qos_policy.id}
|
||||||
self.mock_rbac_policy_create.assert_called_once_with(
|
self.mock_rbac_policy_create.assert_called_once_with(
|
||||||
test.IsHttpRequest(), **params)
|
test.IsHttpRequest(), **params)
|
||||||
|
|
||||||
|
@test.create_mocks({api.neutron: ('network_list',
|
||||||
|
'is_extension_supported',),
|
||||||
|
api.keystone: ('tenant_list',)})
|
||||||
|
def test_rbac_create_post_with_network_type_and_no_network_id(self):
|
||||||
|
tenants = self.tenants.list()
|
||||||
|
rbac_policy = self.rbac_policies.first()
|
||||||
|
|
||||||
|
self.mock_tenant_list.return_value = [tenants, False]
|
||||||
|
self.mock_network_list.return_value = self.networks.list()
|
||||||
|
self.mock_is_extension_supported.return_value = False
|
||||||
|
|
||||||
|
form_data = {'target_tenant': rbac_policy.target_tenant,
|
||||||
|
'action_object_type': 'external_network',
|
||||||
|
'network_id': None}
|
||||||
|
url = reverse('horizon:admin:rbac_policies:create')
|
||||||
|
res = self.client.post(url, form_data)
|
||||||
|
|
||||||
|
self.assertFormErrors(res, 1)
|
||||||
|
self.assertContains(res, "This field is required.")
|
||||||
|
|
||||||
|
self.assert_mock_multiple_calls_with_same_arguments(
|
||||||
|
self.mock_tenant_list, 2, mock.call(test.IsHttpRequest()))
|
||||||
|
self.assert_mock_multiple_calls_with_same_arguments(
|
||||||
|
self.mock_network_list, 2, mock.call(test.IsHttpRequest()))
|
||||||
|
self.assert_mock_multiple_calls_with_same_arguments(
|
||||||
|
self.mock_is_extension_supported, 2,
|
||||||
|
mock.call(test.IsHttpRequest(), extension_alias='qos'))
|
||||||
|
|
||||||
|
@test.create_mocks({api.neutron: ('network_list',
|
||||||
|
'policy_list',
|
||||||
|
'is_extension_supported',),
|
||||||
|
api.keystone: ('tenant_list',)})
|
||||||
|
def test_rbac_create_post_with_qos_policy_type_and_no_qos_policy_id(self):
|
||||||
|
tenants = self.tenants.list()
|
||||||
|
rbac_policy = self.rbac_policies.filter(object_type="qos_policy")[0]
|
||||||
|
|
||||||
|
self.mock_tenant_list.return_value = [tenants, False]
|
||||||
|
self.mock_network_list.return_value = self.networks.list()
|
||||||
|
self.mock_policy_list.return_value = self.qos_policies.list()
|
||||||
|
self.mock_is_extension_supported.return_value = True
|
||||||
|
|
||||||
|
form_data = {'target_tenant': rbac_policy.target_tenant,
|
||||||
|
'action_object_type': 'shared_qos_policy',
|
||||||
|
'qos_policy_id': None}
|
||||||
|
url = reverse('horizon:admin:rbac_policies:create')
|
||||||
|
res = self.client.post(url, form_data)
|
||||||
|
|
||||||
|
self.assertFormErrors(res, 1)
|
||||||
|
self.assertContains(res, "This field is required.")
|
||||||
|
|
||||||
|
self.assert_mock_multiple_calls_with_same_arguments(
|
||||||
|
self.mock_tenant_list, 2, mock.call(test.IsHttpRequest()))
|
||||||
|
self.assert_mock_multiple_calls_with_same_arguments(
|
||||||
|
self.mock_network_list, 2, mock.call(test.IsHttpRequest()))
|
||||||
|
self.assert_mock_multiple_calls_with_same_arguments(
|
||||||
|
self.mock_policy_list, 2, mock.call(test.IsHttpRequest()))
|
||||||
|
self.assert_mock_multiple_calls_with_same_arguments(
|
||||||
|
self.mock_is_extension_supported, 2,
|
||||||
|
mock.call(test.IsHttpRequest(), extension_alias='qos'))
|
||||||
|
Loading…
Reference in New Issue
Block a user