'ImageCache Create URL Tests', 'desc' => 'Assure that URLs are properly generated by imagecache_create_url(), as discussed at http://drupal.org/node/241541', 'group' => 'ImageCache', ); } /** * SimpleTest core method: code run before each and every test method. */ 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(); } /** * Test function that tests imagecache_create_url() under * the different combinations of clean URLs and file download method */ function testImageCacheCreateUrl() { // No Clean URLs + public downloads : http://example.com/?q=path/to/files/imagecache/preset/foo.jpg $this->_ImagecacheCreateUrlTest( false, FILE_DOWNLOADS_PUBLIC, 'path/to/files', 'preset', 'foo.jpg', '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 $this->_ImagecacheCreateUrlTest( false, FILE_DOWNLOADS_PRIVATE, 'path/to/files', 'preset', 'foo.jpg', 'http://example.com/?q=system/files/imagecache/preset/foo.jpg' ); // 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' ); } /** * Function to actually perform URL tests. * @param $clean_url * 'clean_url' setting for test. * @param $file_downloads * 'file_downloads' setting for test. * @param $file_directory_path * 'file_directory_path' setting for tests. * @param $preset * imagecache preset name to be used for test. * @param $path * file path to be used for generating output. * @param $expected * the url expected as output from imagecache_create_url * * 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) { // Drupal settings $this->drupalVariableSet('clean_url', $clean_url); $this->drupalVariableSet('file_downloads', $file_downloads); $this->drupalVariableSet('file_directory_path', $file_directory_path); // 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) ) ); } }