diff --git a/tuskar_ui/infrastructure/images/tables.py b/tuskar_ui/infrastructure/images/tables.py index e6cb439f0..8bd8bbf4c 100644 --- a/tuskar_ui/infrastructure/images/tables.py +++ b/tuskar_ui/infrastructure/images/tables.py @@ -27,6 +27,10 @@ class DeleteImage(project_tables.DeleteImage): return True +class CreateImage(project_tables.CreateImage): + url = "horizon:infrastructure:images:create" + + class UpdateRow(tables.Row): ajax = True @@ -65,7 +69,6 @@ class ImagesTable(tables.DataTable): name = "images" row_class = UpdateRow verbose_name = _("Provisioning Images") - table_actions = (DeleteImage, - ImageFilterAction) + table_actions = (CreateImage, DeleteImage, ImageFilterAction) row_actions = (EditImage, DeleteImage) template = "horizon/common/_enhanced_data_table.html" diff --git a/tuskar_ui/infrastructure/images/templates/images/_create.html b/tuskar_ui/infrastructure/images/templates/images/_create.html new file mode 100644 index 000000000..160d975c5 --- /dev/null +++ b/tuskar_ui/infrastructure/images/templates/images/_create.html @@ -0,0 +1,14 @@ +{% extends "horizon/common/_modal_form.html" %} +{% load i18n %} +{% load url from future %} + +{% block form_id %}create_image_form{% endblock %} +{% block form_action %}{% url 'horizon:infrastructure:images:create' %}{% endblock %} + +{% block modal_id %}create_image_modal{% endblock %} +{% block modal-header %}{% trans "Create Image" %}{% endblock %} + +{% block modal-body-right %} +
{% trans "Modify different properties of an image." %}
+{% endblock %} diff --git a/tuskar_ui/infrastructure/images/templates/images/_update.html b/tuskar_ui/infrastructure/images/templates/images/_update.html index 3ac3c6c8d..4a3e98f95 100644 --- a/tuskar_ui/infrastructure/images/templates/images/_update.html +++ b/tuskar_ui/infrastructure/images/templates/images/_update.html @@ -8,14 +8,7 @@ {% block modal_id %}update_image_modal{% endblock %} {% block modal-header %}{% trans "Update Image" %}{% endblock %} -{% block modal-body %} -{% trans "Modify different properties of an image." %}
-{% trans "Modify different properties of an image." %}
{% endblock %} diff --git a/tuskar_ui/infrastructure/images/templates/images/create.html b/tuskar_ui/infrastructure/images/templates/images/create.html new file mode 100644 index 000000000..d9d23a024 --- /dev/null +++ b/tuskar_ui/infrastructure/images/templates/images/create.html @@ -0,0 +1,12 @@ +{% extends 'base.html' %} +{% load i18n %} + +{% block title %}{% trans "Create Image" %}{% endblock %} + +{% block page_header %} + {% include "horizon/common/_page_header.html" with title=_("Create Image") %} +{% endblock page_header %} + +{% block main %} + {% include 'infrastructure/images/_create.html' %} +{% endblock %} diff --git a/tuskar_ui/infrastructure/images/tests.py b/tuskar_ui/infrastructure/images/tests.py index 1ac6400ed..b74244301 100644 --- a/tuskar_ui/infrastructure/images/tests.py +++ b/tuskar_ui/infrastructure/images/tests.py @@ -22,8 +22,8 @@ from openstack_dashboard.dashboards.project.images.images import forms from tuskar_ui import api from tuskar_ui.test import helpers as test -INDEX_URL = urlresolvers.reverse( - 'horizon:infrastructure:images:index') +INDEX_URL = urlresolvers.reverse('horizon:infrastructure:images:index') +CREATE_URL = 'horizon:infrastructure:images:create' UPDATE_URL = 'horizon:infrastructure:images:update' @@ -48,6 +48,45 @@ class ImagesTest(test.BaseAdminViewTests): self.assertTemplateUsed(res, 'infrastructure/images/index.html') + def test_create_get(self): + res = self.client.get(urlresolvers.reverse(CREATE_URL)) + self.assertTemplateUsed(res, 'infrastructure/images/create.html') + + def test_create_post(self): + image = self.images.list()[0] + data = { + 'name': 'Fedora', + 'description': 'Login with admin/admin', + 'source_type': 'url', + 'image_url': 'http://www.test.com/test.iso', + 'disk_format': 'qcow2', + 'architecture': 'x86-64', + 'minimum_disk': 15, + 'minimum_ram': 512, + 'is_public': True, + 'protected': False} + + forms.IMAGE_FORMAT_CHOICES = [('qcow2', 'qcow2')] + + with contextlib.nested( + patch('openstack_dashboard.api.glance.image_create', + return_value=image),) as (mocked_create,): + + res = self.client.post( + urlresolvers.reverse(CREATE_URL), data) + + self.assertNoFormErrors(res) + self.assertEqual(res.status_code, 302) + self.assertRedirectsNoFollow(res, INDEX_URL) + + mocked_create.assert_called_once_with( + mock.ANY, name='Fedora', container_format='bare', + min_ram=512, disk_format='qcow2', protected=False, + is_public=True, min_disk=15, + location='http://www.test.com/test.iso', + properties={'description': 'Login with admin/admin', + 'architecture': 'x86-64'}) + def test_update_get(self): image = self.images.list()[0] diff --git a/tuskar_ui/infrastructure/images/urls.py b/tuskar_ui/infrastructure/images/urls.py index 766205b1c..f67d55769 100644 --- a/tuskar_ui/infrastructure/images/urls.py +++ b/tuskar_ui/infrastructure/images/urls.py @@ -19,6 +19,7 @@ from tuskar_ui.infrastructure.images import views urlpatterns = urls.patterns( '', urls.url(r'^$', views.IndexView.as_view(), name='index'), + urls.url(r'^create/$', views.CreateView.as_view(), name='create'), urls.url(r'^(?P