Index: tests/imagecache_create_url.test =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/imagecache/tests/imagecache_create_url.test,v retrieving revision 1.1.2.2 diff -u -u -p -r1.1.2.2 imagecache_create_url.test --- tests/imagecache_create_url.test 11 May 2008 23:58:47 -0000 1.1.2.2 +++ tests/imagecache_create_url.test 20 May 2008 22:31:14 -0000 @@ -1,8 +1,22 @@ _ImagecacheCreateUrlTest( - false, FILE_DOWNLOADS_PUBLIC, - 'path/to/files', 'preset', 'foo.jpg', - 'http://example.com/?q=path/to/files/imagecache/preset/foo.jpg', - 'DirtyUrlsPublicDownloads' + function setUp() { + // Always call the setUp() function from the parent class. + parent::setUp(); + + // Make sure that the ImageCache module is enabled. + $this->drupalModuleEnable('imagecache'); + + // Create admin user + $permissions = array( + 'administer filters', + ); + $this->admin_user = $this->drupalCreateUserRolePerm($permissions); + + // Log in with admin user. + $this->drupalLoginUser($this->admin_user); + + // Add an input format with PHP evaluator. + $edit = array( + 'name' => $this->randomName(10, 'inputformat_'), + 'filters[filter/1]' => TRUE, + 'roles[2]' => TRUE, ); + $this->drupalPostRequest('admin/settings/filters/add', $edit, t('Save configuration')); + // Store the format id of the created input format. + $this->input_format_id = db_result(db_query("SELECT format FROM {filter_formats} WHERE name = '%s'", $edit['name'])); + $this->assertTrue($this->input_format_id, t('Input format id (%s)')); + + } + + /** + * SimpleTest core method: code run after each and every test method. + */ + function tearDown() { + // Remove input format. + $this->drupalPostRequest('admin/settings/filters/delete/'. $this->input_format_id, array(), t('Delete')); + // Log out admin user. + $this->drupalGet('logout'); + + // Always call the tearDown() function from the parent class. + parent::tearDown(); } /** - * Clean URLs + public downloads : http://example.com/path/to/files/imagecache/preset/foo.jpg + * Test function that tests imagecache_create_url() under + * the different combinations of clean URLs and file download method */ - function testCleanUrlsPublicDownloads() { + function testImageCacheCreateUrl() { + // No Clean URLs + public downloads : http://example.com/?q=path/to/files/imagecache/preset/foo.jpg $this->_ImagecacheCreateUrlTest( - true, FILE_DOWNLOADS_PUBLIC, + false, FILE_DOWNLOADS_PUBLIC, 'path/to/files', 'preset', 'foo.jpg', - 'http://example.com/path/to/files/imagecache/preset/foo.jpg', - 'CleanUrlsPublicDownloads' + 'http://example.com/?q=path/to/files/imagecache/preset/foo.jpg' ); - } + // Clean URLs + public downloads : http://example.com/path/to/files/imagecache/preset/foo.jpg + $this->_ImagecacheCreateUrlTest( + true, FILE_DOWNLOADS_PUBLIC, + 'path/to/files', 'preset', 'foo.jpg', + 'http://example.com/path/to/files/imagecache/preset/foo.jpg' + ); - /** - * No Clean URLs + private downloads : http://example.com/?q=system/files/imagecache/preset/foo.jpg - */ - function testDirtyUrlsPrivateDownloads() { + // No Clean URLs + private downloads : http://example.com/?q=system/files/imagecache/preset/foo.jpg $this->_ImagecacheCreateUrlTest( false, FILE_DOWNLOADS_PRIVATE, 'path/to/files', 'preset', 'foo.jpg', - 'http://example.com/?q=system/files/imagecache/preset/foo.jpg', - 'DirtyUrlsPrivateDownloads' + 'http://example.com/?q=system/files/imagecache/preset/foo.jpg' ); - } - - /** - * Clean URLs + private downloads : http://example.com/system/files/imagecache/preset/foo.jpg - */ - function testCleanUrlsPrivateDownloads() { + // Clean URLs + private downloads : http://example.com/system/files/imagecache/preset/foo.jpg $this->_ImagecacheCreateUrlTest( true, FILE_DOWNLOADS_PRIVATE, 'path/to/files', 'preset', 'foo.jpg', - 'http://example.com/system/files/imagecache/preset/foo.jpg', - 'CleanUrlsPrivateDownloads' + 'http://example.com/system/files/imagecache/preset/foo.jpg' ); } /** - * function to actually perform URL tests. + * Function to actually perform URL tests. * @param $clean_url * 'clean_url' setting for test. * @param $file_downloads @@ -78,27 +121,49 @@ class ImageCacheUrlTests extends DrupalT * file path to be used for generating output. * @param $expected * the url expected as output from imagecache_create_url - * @param $error - * error message to be displayed on assertion failure. + * + * Note about the implementation: + * At first sight one might think this can be easily implemented with just + * setting the Drupal settings, calling imagecache_create_url() and checking + * the result. This does not work however because the url() function, which is + * used by imagecache_create_url(), caches the clean_url setting with an + * internal static variable. This means that only one setting of clean_url + * can be evaluated per page view. + * To make testing possible, this function creates a node with the PHP + * evaluator as input filter and puts a proper call to imagecache_create_url() + * in the node body. The node view, which is a page view on its own can then + * be checked for the correctly generated URL. */ - - private function _ImagecacheCreateUrlTest($clean_url, $file_downloads, $file_directory_path, $preset, $path, $expected, $error = '') { + private function _ImagecacheCreateUrlTest($clean_url, $file_downloads, $file_directory_path, $preset, $path, $expected) { // Drupal settings $this->drupalVariableSet('clean_url', $clean_url); $this->drupalVariableSet('file_downloads', $file_downloads); $this->drupalVariableSet('file_directory_path', $file_directory_path); - // Change base_url (and save original value) - $original_baseurl = $GLOBALS['base_url']; - $GLOBALS['base_url'] = 'http://example.com'; - - // Generate URL and check it. - $url = imagecache_create_url($preset, $path); - $this->assertTrue($url == $expected, - t('[@type] expected "@expected" and got "@result"', array('@type' => $error, '@expected' => $expected, '@result' => $url)) - ); - // Restore base_url. - $GLOBALS['base_url'] = $original_baseurl; + // Build node body (php code). + $body = ""; + // Create node. + $node = $this->drupalCreateNode(array( + 'body' => $body, + 'format' => $this->input_format_id, + )); + + // Show node. + $this->drupalGet(url('node/' . $node->nid, NULL, NULL, TRUE)); + + // Check if expected url shows up + $this->assertWantedRaw($expected, + t('[ImageCacheUrlTests] @clean_url + @file_downloads should return "@expected"', array( + '@clean_url' => ($clean_url ? 'Clean URLs' : 'No clean URLs'), + '@file_downloads' => ($file_downloads == FILE_DOWNLOADS_PRIVATE ? 'private downloads' : 'public downloads'), + '@expected' => $expected) + ) + ); } }