* @version $Revision: 16994 $ */ class ReuploadOptionTest extends ItemEditOptionTestCase { function ReuploadOptionTest($methodName) { $this->ItemEditOptionTestCase($methodName, 'reupload', 'ReuploadPhotoOption'); } function setUp() { global $gallery; parent::setUp(); list ($ret, $this->_album) = $this->_createRandomAlbum($this->_getRootId()); if ($ret) { print $ret->getAsHtml(); return $this->failWithStatus($ret); } $this->_markForCleanup($this->_album); /* Register a dummy toolkit */ $ret = GalleryCoreApi::registerFactoryImplementation( 'GalleryToolkit', 'ReuploadOptionTestToolkit', 'ReuploadOptionTestToolkit', 'modules/reupload/test/phpunit/ReuploadOptionTest.class', 'reuploadTest', null); if ($ret) { print $ret->getAsHtml(); return $this->failWithStatus($ret); } $this->_markToolkitForCleanup('ReuploadOptionTestToolkit'); $ret = GalleryCoreApi::registerToolkitProperty('ReuploadOptionTestToolkit', array('image/known'), 'dimensions', 'int,int', 'desc'); if ($ret) { print $ret->getAsHtml(); return $this->failWithStatus($ret); } list ($ret, $this->_item) = $this->_createRandomDataItem($this->_album->getId(), 'image/known'); if ($ret) { print $ret->getAsHtml(); return $this->failWithStatus($ret); } $this->_itemSize = $this->_item->getSize(); /* create custom platform to return dummy filesize, imagesize, etc. */ $gallery->setPlatform(new ReuploadOptionTestPlatform($gallery->getPlatform())); } function testReupload() { $form['tmp_name']['reupload'] = 'bogus.tmp'; $form['size']['reupload'] = 800; $form['serialNumber'] = $this->_item->getSerialNumber(); /* Perform the request and verify that we succeeded */ list ($errors, $warnings) = $this->_handleRequestAfterEdit($form, $this->_item); $this->assertEquals(array(), $errors, 'Errors'); $this->assertEquals(array($this->_translate('Reuploaded file successfully.')), $warnings, 'Warnings'); $this->assertEquals(800, $this->_item->getSize(), 'Item size'); } /* * This imitates the case when the file couldn't be uploaded. * We are assuming that the reason is that filesize exceeds the limit * which is most common case. */ function testReuploadFailure() { $form['tmp_name']['reupload'] = ''; $form['name']['reupload'] = 'itried.jpg'; $form['size']['reupload'] = 0; $form['serialNumber'] = $this->_item->getSerialNumber(); /* Perform the request and verify that we failed and filesize didn't change */ list ($errors, $warnings) = $this->_handleRequestAfterEdit($form, $this->_item); $this->assertEquals(array('form[error][reupload][failure]'), $errors, 'Errors'); $this->assertEquals(array(), $warnings, 'Warnings'); $this->assertEquals($this->_itemSize, $this->_item->getSize(), 'Item size'); } /* This imitates the case when the new file has different mime type than the old one */ function testReuploadToolkitFailure() { $form['tmp_name']['reupload'] = 'bogus.mpeg'; $form['size']['reupload'] = 1500; $form['serialNumber'] = $this->_item->getSerialNumber(); GalleryUtilities::putRequestVariable('dimensions', 'bad_data'); /* Perform the request and verify that we failed and filesize didn't change */ list ($errors, $warnings) = $this->_handleRequestAfterEdit($form, $this->_item); $this->assertEquals(array('form[error][reupload][toolkit]'), $errors, 'Errors'); $this->assertEquals(array(), $warnings, 'Warnings'); /* Size might been changed, but transaction was aborted */ list ($ret, $item) = $this->_item->refresh(); if ($ret) { print $ret->getAsHtml(); return $this->failWithStatus($ret); } $this->assertEquals($this->_itemSize, $item->getSize(), 'Item size'); } /* * This imitates the case when we didn't even try to upload the file * Shouldn't be any errors! */ function testReuploadNothing() { $form['tmp_name']['reupload'] = ''; $form['name']['reupload'] = ''; $form['size']['reupload'] = 0; $form['serialNumber'] = $this->_item->getSerialNumber(); /* Perform the request and verify that we failed and filesize didn't change */ list ($errors, $warnings) = $this->_handleRequestAfterEdit($form, $this->_item); $this->assertEquals(array(), $errors, 'Errors'); $this->assertEquals(array(), $warnings, 'Warnings'); } /** * Verify that attempt to reupload to a linked entity is blocked (UI doesn't allow it). */ function testReuploadLinkedEntity() { list ($ret, $linkedEntity) = $this->_createLinkedItem($this->_album->getId(), $this->_item); if ($ret) { return $ret; } $form['tmp_name']['reupload'] = 'bogus.tmp'; $form['size']['reupload'] = 800; $form['serialNumber'] = $this->_item->getSerialNumber(); /* Perform the request and verify that we failed */ $this->_handleRequestAfterEdit($form, $this->_item, ERROR_BAD_PARAMETER); } } /** * Test platform */ class ReuploadOptionTestPlatform extends GalleryPlatform { function ReuploadOptionTestPlatform($originalPlatform) { $this->_savedPlatform = $originalPlatform; } function is_uploaded_file($file) { return true; } function file_exists($file) { return !strstr($file,'albumtest'); } function unlink($file) { return true; } function copy($input, $output) { return true; } function filesize($path) { return 800; } } /** * Test toolkit */ class ReuploadOptionTestToolkit extends GalleryToolkit { /** * @see GalleryToolkit::getProperty */ function getProperty($mimeType, $propertyName, $file) { if ($propertyName == 'dimensions') { $dimensionRequest = GalleryUtilities::getRequestVariables('dimensions'); if ($dimensionRequest == 'bad_data') { return array(GalleryCoreApi::error(ERROR_BAD_DATA_TYPE), null); } else { return array(null, array(2603, 1966)); } } return array(GalleryCoreApi::error(ERROR_UNIMPLEMENTED), null); } } ?>