100% coverage for object views

PEP8 fixes
This commit is contained in:
Mark Gius 2011-07-11 16:02:43 -07:00
parent 401a819d4a
commit b6b6ee91f8
5 changed files with 184 additions and 13 deletions

View File

@ -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,

View File

@ -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()

View File

@ -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>

View File

@ -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>

View File

@ -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 }}