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() def test_filter(self): PREFIX = 'prefix' formData = {'method': 'FilterObjects', 'container_name': self.CONTAINER_NAME, 'object_prefix': PREFIX, } self.mox.StubOutWithMock(api, 'swift_get_objects') api.swift_get_objects(unicode(self.CONTAINER_NAME), prefix=unicode(PREFIX) ).AndReturn(self.swift_objects) self.mox.ReplayAll() res = self.client.post(reverse('dash_objects', args=[self.TEST_TENANT, self.CONTAINER_NAME]), formData) self.assertTemplateUsed(res, 'dash_objects.html') self.mox.VerifyAll()