100% coverage for object views
PEP8 fixes
This commit is contained in:
parent
401a819d4a
commit
b6b6ee91f8
@ -39,10 +39,11 @@ LOG = logging.getLogger('django_openstack.dash')
|
||||
|
||||
class DeleteObject(forms.SelfHandlingForm):
|
||||
object_name = forms.CharField(widget=forms.HiddenInput())
|
||||
container_name = forms.CharField(widget=forms.HiddenInput())
|
||||
|
||||
def handle(self, request, data):
|
||||
api.swift_delete_object(
|
||||
request.POST['container_name'],
|
||||
data['container_name'],
|
||||
data['object_name'])
|
||||
messages.info(request,
|
||||
'Successfully deleted object: %s' % \
|
||||
@ -53,12 +54,13 @@ class DeleteObject(forms.SelfHandlingForm):
|
||||
class UploadObject(forms.SelfHandlingForm):
|
||||
name = forms.CharField(max_length="255", label="Object Name")
|
||||
object_file = forms.FileField(label="File")
|
||||
container_name = forms.CharField(widget=forms.HiddenInput())
|
||||
|
||||
def handle(self, request, data):
|
||||
api.swift_upload_object(
|
||||
request.POST['container_name'],
|
||||
data['container_name'],
|
||||
data['name'],
|
||||
request.FILES['object_file'].read())
|
||||
self.files['object_file'].read())
|
||||
|
||||
messages.success(request, "Object was successfully uploaded.")
|
||||
return shortcuts.redirect(request.build_absolute_uri())
|
||||
@ -70,17 +72,20 @@ class CopyObject(forms.SelfHandlingForm):
|
||||
|
||||
new_object_name = forms.CharField(max_length="255",
|
||||
label="New object name")
|
||||
orig_container_name = forms.CharField(widget=forms.HiddenInput())
|
||||
orig_object_name = forms.CharField(widget=forms.HiddenInput())
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(CopyObject, self).__init__(*args, **kwargs)
|
||||
|
||||
container_choices = [(c.name, c.name) for c in api.swift_get_containers()]
|
||||
container_choices = \
|
||||
[(c.name, c.name) for c in api.swift_get_containers()]
|
||||
self.fields['new_container_name'].choices = container_choices
|
||||
|
||||
def handle(self, request, data):
|
||||
orig_container_name = request.POST['orig_container_name']
|
||||
orig_object_name = request.POST['orig_object_name']
|
||||
new_container_name = request.POST['new_container_name']
|
||||
orig_container_name = data['orig_container_name']
|
||||
orig_object_name = data['orig_object_name']
|
||||
new_container_name = data['new_container_name']
|
||||
new_object_name = data['new_object_name']
|
||||
|
||||
api.swift_copy_object(orig_container_name, orig_object_name,
|
||||
@ -101,6 +106,7 @@ def index(request, tenant_id, container_name):
|
||||
|
||||
objects = api.swift_get_objects(container_name)
|
||||
|
||||
delete_form.fields['container_name'].initial = container_name
|
||||
return render_to_response('dash_objects.html', {
|
||||
'container_name': container_name,
|
||||
'objects': objects,
|
||||
@ -114,6 +120,7 @@ def upload(request, tenant_id, container_name):
|
||||
if handled:
|
||||
return handled
|
||||
|
||||
form.fields['container_name'].initial = container_name
|
||||
return render_to_response('dash_objects_upload.html', {
|
||||
'container_name': container_name,
|
||||
'upload_form': form,
|
||||
@ -137,11 +144,13 @@ def download(request, tenant_id, container_name, object_name):
|
||||
def copy(request, tenant_id, container_name, object_name):
|
||||
form, handled = CopyObject.maybe_handle(request)
|
||||
|
||||
form.fields['new_container_name'].initial = container_name
|
||||
|
||||
if handled:
|
||||
return handled
|
||||
|
||||
form.fields['new_container_name'].initial = container_name
|
||||
form.fields['orig_container_name'].initial = container_name
|
||||
form.fields['orig_object_name'].initial = object_name
|
||||
|
||||
return render_to_response(
|
||||
'dash_object_copy.html',
|
||||
{'container_name': container_name,
|
||||
|
@ -0,0 +1,166 @@
|
||||
import tempfile
|
||||
|
||||
from django.core.urlresolvers import reverse
|
||||
from django_openstack import api
|
||||
from django_openstack.tests.view_tests import base
|
||||
|
||||
|
||||
class ObjectViewTests(base.BaseViewTests):
|
||||
CONTAINER_NAME = 'containerName'
|
||||
|
||||
def setUp(self):
|
||||
super(ObjectViewTests, self).setUp()
|
||||
swift_object = self.mox.CreateMock(api.SwiftObject)
|
||||
self.swift_objects = [swift_object]
|
||||
|
||||
def test_index(self):
|
||||
self.mox.StubOutWithMock(api, 'swift_get_objects')
|
||||
api.swift_get_objects(
|
||||
self.CONTAINER_NAME).AndReturn(self.swift_objects)
|
||||
|
||||
self.mox.ReplayAll()
|
||||
|
||||
res = self.client.get(reverse('dash_objects',
|
||||
args=[self.TEST_TENANT,
|
||||
self.CONTAINER_NAME]))
|
||||
self.assertTemplateUsed(res, 'dash_objects.html')
|
||||
self.assertItemsEqual(res.context['objects'], self.swift_objects)
|
||||
|
||||
self.mox.VerifyAll()
|
||||
|
||||
def test_upload_index(self):
|
||||
res = self.client.get(reverse('dash_objects_upload',
|
||||
args=[self.TEST_TENANT,
|
||||
self.CONTAINER_NAME]))
|
||||
|
||||
self.assertTemplateUsed(res, 'dash_objects_upload.html')
|
||||
|
||||
def test_upload(self):
|
||||
OBJECT_DATA = 'objectData'
|
||||
OBJECT_FILE = tempfile.TemporaryFile()
|
||||
OBJECT_FILE.write(OBJECT_DATA)
|
||||
OBJECT_FILE.flush()
|
||||
OBJECT_FILE.seek(0)
|
||||
OBJECT_NAME = 'objectName'
|
||||
|
||||
formData = {'method': 'UploadObject',
|
||||
'container_name': self.CONTAINER_NAME,
|
||||
'name': OBJECT_NAME,
|
||||
'object_file': OBJECT_FILE}
|
||||
|
||||
self.mox.StubOutWithMock(api, 'swift_upload_object')
|
||||
api.swift_upload_object(unicode(self.CONTAINER_NAME),
|
||||
unicode(OBJECT_NAME),
|
||||
OBJECT_DATA)
|
||||
|
||||
self.mox.ReplayAll()
|
||||
|
||||
res = self.client.post(reverse('dash_objects_upload',
|
||||
args=[self.TEST_TENANT,
|
||||
self.CONTAINER_NAME]),
|
||||
formData)
|
||||
|
||||
self.assertRedirectsNoFollow(res, reverse('dash_objects_upload',
|
||||
args=[self.TEST_TENANT,
|
||||
self.CONTAINER_NAME]))
|
||||
|
||||
self.mox.VerifyAll()
|
||||
|
||||
def test_delete(self):
|
||||
OBJECT_NAME = 'objectName'
|
||||
formData = {'method': 'DeleteObject',
|
||||
'container_name': self.CONTAINER_NAME,
|
||||
'object_name': OBJECT_NAME}
|
||||
|
||||
self.mox.StubOutWithMock(api, 'swift_delete_object')
|
||||
api.swift_delete_object(self.CONTAINER_NAME, OBJECT_NAME)
|
||||
|
||||
self.mox.ReplayAll()
|
||||
|
||||
res = self.client.post(reverse('dash_objects',
|
||||
args=[self.TEST_TENANT,
|
||||
self.CONTAINER_NAME]),
|
||||
formData)
|
||||
|
||||
self.assertRedirectsNoFollow(res, reverse('dash_objects',
|
||||
args=[self.TEST_TENANT,
|
||||
self.CONTAINER_NAME]))
|
||||
|
||||
self.mox.VerifyAll()
|
||||
|
||||
def test_download(self):
|
||||
OBJECT_DATA = 'objectData'
|
||||
OBJECT_NAME = 'objectName'
|
||||
|
||||
self.mox.StubOutWithMock(api, 'swift_get_object_data')
|
||||
api.swift_get_object_data(unicode(self.CONTAINER_NAME),
|
||||
unicode(OBJECT_NAME)).AndReturn(OBJECT_DATA)
|
||||
|
||||
self.mox.ReplayAll()
|
||||
|
||||
res = self.client.get(reverse('dash_objects_download',
|
||||
args=[self.TEST_TENANT,
|
||||
self.CONTAINER_NAME,
|
||||
OBJECT_NAME]))
|
||||
|
||||
self.assertEqual(res.content, OBJECT_DATA)
|
||||
self.assertTrue(res.has_header('Content-Disposition'))
|
||||
|
||||
self.mox.VerifyAll()
|
||||
|
||||
def test_copy_index(self):
|
||||
OBJECT_NAME = 'objectName'
|
||||
|
||||
container = self.mox.CreateMock(api.Container)
|
||||
container.name = self.CONTAINER_NAME
|
||||
|
||||
self.mox.StubOutWithMock(api, 'swift_get_containers')
|
||||
api.swift_get_containers().AndReturn([container])
|
||||
|
||||
self.mox.ReplayAll()
|
||||
|
||||
res = self.client.get(reverse('dash_object_copy',
|
||||
args=[self.TEST_TENANT,
|
||||
self.CONTAINER_NAME,
|
||||
OBJECT_NAME]))
|
||||
|
||||
self.assertTemplateUsed(res, 'dash_object_copy.html')
|
||||
|
||||
self.mox.VerifyAll()
|
||||
|
||||
def test_copy(self):
|
||||
NEW_CONTAINER_NAME = self.CONTAINER_NAME
|
||||
NEW_OBJECT_NAME = 'newObjectName'
|
||||
ORIG_CONTAINER_NAME = 'origContainerName'
|
||||
ORIG_OBJECT_NAME = 'origObjectName'
|
||||
|
||||
formData = {'method': 'CopyObject',
|
||||
'new_container_name': NEW_CONTAINER_NAME,
|
||||
'new_object_name': NEW_OBJECT_NAME,
|
||||
'orig_container_name': ORIG_CONTAINER_NAME,
|
||||
'orig_object_name': ORIG_OBJECT_NAME}
|
||||
|
||||
container = self.mox.CreateMock(api.Container)
|
||||
container.name = self.CONTAINER_NAME
|
||||
|
||||
self.mox.StubOutWithMock(api, 'swift_get_containers')
|
||||
api.swift_get_containers().AndReturn([container])
|
||||
|
||||
self.mox.StubOutWithMock(api, 'swift_copy_object')
|
||||
api.swift_copy_object(ORIG_CONTAINER_NAME, ORIG_OBJECT_NAME,
|
||||
NEW_CONTAINER_NAME, NEW_OBJECT_NAME)
|
||||
|
||||
self.mox.ReplayAll()
|
||||
|
||||
res = self.client.post(reverse('dash_object_copy',
|
||||
args=[self.TEST_TENANT,
|
||||
ORIG_CONTAINER_NAME,
|
||||
ORIG_OBJECT_NAME]),
|
||||
formData)
|
||||
|
||||
self.assertRedirectsNoFollow(res, reverse('dash_object_copy',
|
||||
args=[self.TEST_TENANT,
|
||||
ORIG_CONTAINER_NAME,
|
||||
ORIG_OBJECT_NAME]))
|
||||
|
||||
self.mox.VerifyAll()
|
@ -6,7 +6,5 @@
|
||||
{{ field.errors }}
|
||||
{{ field }}
|
||||
{% endfor %}
|
||||
<input type="hidden" name="orig_container_name" value="{{ container_name }}" />
|
||||
<input type="hidden" name="orig_object_name" value="{{ object_name }}" />
|
||||
<input type="submit" value="Copy Object" class="large-rounded" />
|
||||
</form>
|
||||
|
@ -3,7 +3,6 @@
|
||||
{% for hidden in form.hidden_fields %}
|
||||
{{hidden}}
|
||||
{% endfor %}
|
||||
<input type="hidden" name="container_name" value="{{ container_name }}" />
|
||||
<input name="object_name" type="hidden" value="{{ object.name }}" />
|
||||
<input id="delete_{{ object.name }}" class="delete" title="Object: {{ object.name }}" type="submit" value="Delete" />
|
||||
</form>
|
||||
|
@ -1,6 +1,5 @@
|
||||
<form id="object_form" enctype="multipart/form-data" method="post">
|
||||
{% csrf_token %}
|
||||
<input type="hidden" name="container_name" value="{{ container_name }}" />
|
||||
{% for hidden in form.hidden_fields %}{{ hidden }}{% endfor %}
|
||||
{% for field in form.visible_fields %}
|
||||
{{ field.label_tag }}
|
||||
|
Loading…
x
Reference in New Issue
Block a user