View source
<?php
class ImageTestCase extends DrupalWebTestCase {
protected $web_user;
protected $image;
protected $another_image;
function getInfo() {
return array(
'name' => t('Image functionality'),
'description' => t('Test Image module functionality.'),
'group' => t('Image'),
);
}
function setUp() {
parent::setUp('image');
$this->web_user = $this
->drupalCreateUser(array(
'create images',
'view original images',
'edit own images',
'edit any images',
'delete own images',
'delete any images',
'administer site configuration',
));
$this
->drupalLogin($this->web_user);
$this->image = 'misc/druplicon.png';
$this->another_image = 'misc/throbber.gif';
$image_sizes = image_get_sizes();
$image_sizes['_original']['operation'] = 'scale';
$image_sizes['thumbnail']['operation'] = 'scale';
$image_sizes['thumbnail']['width'] = 5;
$image_sizes['thumbnail']['height'] = 5;
$image_sizes['preview']['operation'] = 'scale';
$image_sizes['preview']['width'] = 10;
$image_sizes['preview']['height'] = 10;
variable_set('image_sizes', $image_sizes);
}
function __tearDown() {
$result = db_query('SELECT * FROM {files} WHERE status = %d', FILE_STATUS_TEMPORARY);
while ($file = db_fetch_object($result)) {
if (file_exists($file->filepath)) {
if (!file_delete($file->filepath)) {
$this
->error(t('Could not delete temporary file "%path" during garbage collection', array(
'%path' => $file->filepath,
)));
continue;
}
}
db_query('DELETE FROM {files} WHERE fid = %d', $file->fid);
}
}
function testImageNode() {
$edit = array(
'title' => $this
->randomName(),
'body' => $this
->randomName(),
'files[image]' => realpath($this->image),
);
$this
->drupalPost('node/add/image', $edit, t('Save'));
$this
->assertRaw(t('@type %title has been created.', array(
'@type' => 'Image',
'%title' => $edit['title'],
)), t('Image node was created.'));
$node = node_load(array(
'title' => $edit['title'],
));
$this
->assertTrue($node, t('Image node is found in database.'));
$this
->drupalGet('node/' . $node->nid, array(
'query' => 'size=_original',
));
$this
->assertPattern('@<img[^>]+?' . $node->images['_original'] . '[^>]+?>@', t('Original image displayed on the page.'));
$this
->assertTrue(file_exists($node->images['_original']), t('Original image exists.'));
$this
->drupalGet('node/' . $node->nid);
$this
->assertPattern('@<img[^>]+?' . $node->images['preview'] . '[^>]+?>@', t('Image preview displayed on the page.'));
$this
->assertTrue(file_exists($node->images['preview']), t('Image preview exists.'));
$this
->drupalGet('node/' . $node->nid, array(
'query' => 'size=thumbnail',
));
$this
->assertPattern('@<img[^>]+?' . $node->images['thumbnail'] . '[^>]+?>@', t('Image thumbnail displayed on the page.'));
$this
->assertTrue(file_exists($node->images['thumbnail']), t('Image thumbnail exists.'));
$node->promote = TRUE;
node_save($node);
$this
->drupalGet('node');
$this
->assertPattern('@<img[^>]+?' . $node->images['thumbnail'] . '[^>]+?>@', t('Image thumbnail displayed on the front page teaser.'));
$another_edit = array(
'title' => $edit['title'],
'files[image]' => realpath($this->another_image),
);
$this
->drupalPost('node/' . $node->nid . '/edit', $another_edit, t('Save'));
$another_node = node_load(array(
'title' => $edit['title'],
));
$this
->assertFalse(file_exists($node->images['preview']) || file_exists($node->images['_original']) || file_exists($node->images['thumbnail']), t('Previous image derivative files were deleted.'));
$this
->drupalPost('node/' . $node->nid . '/delete', array(), t('Delete'));
$this
->assertRaw(t('@type %title has been deleted.', array(
'@type' => 'Image',
'%title' => $edit['title'],
)), t('Image node was deleted.'));
$node = node_load(array(
'title' => $edit['title'],
));
$this
->assertFalse($node, t('Image node is not found in database.'));
$this
->assertFalse(file_exists($another_node->images['preview']) || file_exists($another_node->images['_original']) || file_exists($another_node->images['thumbnail']), t('Image file was deleted.'));
}
function testImageNodeValidation() {
$edit = array(
'title' => $this
->randomName(),
'body' => $this
->randomName(),
);
$this
->drupalPost('node/add/image', $edit, t('Save'));
$this
->assertRaw(t('You must upload an image.'), t('Refused node creation without image.'));
$node = node_load(array(
'title' => $edit['title'],
));
$this
->assertFalse($node, t('Image node is not found in database.'));
}
function testImageNodePreview() {
$edit = array(
'title' => $this
->randomName(),
'body' => $this
->randomName(),
'files[image]' => realpath($this->image),
);
$this
->drupalGet('node/add/image');
$this
->drupalPost(NULL, $edit, t('Preview'));
$this
->drupalPost(NULL, NULL, t('Save'));
$node = node_load(array(
'title' => $edit['title'],
));
$this
->assertTrue($node, t('Image node is found in database.'));
$this
->assertTrue(file_exists($node->images['_original']), t('Original image exists.'));
$filename = preg_replace('/_[^\\.]+/', '', basename($node->images['_original']));
$this
->assertTrue($filename == basename($this->image), t('Image file was properly stored.'));
}
function __testImageNodeValidationAsync() {
$edit1 = array(
'title' => $this
->randomName(),
'body' => $this
->randomName(),
'files[image]' => realpath($this->image),
);
$edit2 = array(
'title' => $this
->randomName(),
'body' => $this
->randomName(),
'files[image]' => realpath($this->another_image),
);
$this
->drupalGet('node/add/image');
$this
->drupalPost(NULL, $edit1, t('Preview'));
$this
->drupalGet('node/add/image');
$this
->drupalPost(NULL, $edit2, t('Preview'));
$this
->drupalPost(NULL, $edit1, t('Save'));
$this
->drupalPost('node/add/image', $edit2, t('Save'));
$node = node_load(array(
'title' => $edit1['title'],
));
$filename = preg_replace('/_[^\\.]+/', '', basename($node->images['_original']));
$this
->assertTrue($filename == basename($this->image), t('First image was properly submitted.'));
$node = node_load(array(
'title' => $edit2['title'],
));
$filename = preg_replace('/_[^\\.]+/', '', basename($node->images['_original']));
$this
->assertTrue($filename == basename($this->another_image), t('Second image was properly submitted.'));
}
function testImageDerivativePath() {
$edit = array(
'title' => $this
->randomName(),
'body' => $this
->randomName(),
'files[image]' => realpath($this->image),
);
$this
->drupalPost('node/add/image', $edit, t('Save'));
$this
->assertRaw(t('@type %title has been created.', array(
'@type' => 'Image',
'%title' => $edit['title'],
)), t('Image node was created.'));
$node = node_load(array(
'title' => $edit['title'],
));
$this
->assertTrue($node, t('Image node is found in database.'));
$config_change = array(
'image_default_path' => 'images_alternate',
);
$this
->drupalPost('admin/settings/image', $config_change, t('Save configuration'));
$this
->assertRaw(t('The configuration options have been saved.'), t('Image path was changed.'));
$second_edit = array(
'title' => $this
->randomName(),
'body' => $this
->randomName(),
'files[image]' => realpath($this->another_image),
);
$this
->drupalPost('node/add/image', $second_edit, t('Save'));
$this
->assertRaw(t('@type %title has been created.', array(
'@type' => 'Image',
'%title' => $second_edit['title'],
)), t('Second image node was created.'));
$second_node = node_load(array(
'title' => $second_edit['title'],
));
$this
->assertTrue($second_node, t('Second image node is found in database.'));
$this
->assertTrue(preg_match('/images_alternate/', $second_node->images['_original']), t("New path {$second_node->images['_original']} used for second image."));
file_delete($node->images['preview']);
$this
->assertFalse(file_exists($node->images['preview']), t('First image preview image file deleted.'));
file_delete($node->images['thumbnail']);
$this
->assertFalse(file_exists($node->images['thumbnail']), t('First image thumbnail image file deleted.'));
$another_edit = array(
'rebuild_images' => TRUE,
);
$this
->drupalPost('node/' . $node->nid . '/edit', $another_edit, t('Save'));
$this
->assertRaw(t('@type %title has been updated.', array(
'@type' => 'Image',
'%title' => $edit['title'],
)), t('First image node was updated to rebuild derivatives.'));
$first_node = node_load(array(
'title' => $edit['title'],
));
$this
->assertTrue($node->images['thumbnail'] == $first_node->images['thumbnail'], t("Rebuilt derivatives for first image have same thumbnail path as original node: {$node->images['thumbnail']} == regenerated thumbnail path {$first_node->images['thumbnail']}"));
$this
->assertTrue(file_exists($first_node->images['preview']), t('First image preview file exists.'));
$this
->assertTrue(file_exists($first_node->images['thumbnail']), t('First image thumbnail file exists.'));
$config_change = array(
'image_default_path' => 'images',
);
$this
->drupalPost('admin/settings/image', $config_change, t('Save configuration'));
$this
->assertRaw(t('The configuration options have been saved.'), t('Image path was changed back.'));
}
function testImageNodeDeletion() {
$edit = array(
'title' => $this
->randomName(),
'body' => $this
->randomName(),
'files[image]' => realpath($this->image),
);
$this
->drupalPost('node/add/image', $edit, t('Save'));
$this
->assertRaw(t('@type %title has been created.', array(
'@type' => 'Image',
'%title' => $edit['title'],
)), t('Image node was created.'));
$node = node_load(array(
'title' => $edit['title'],
));
$this
->assertTrue($node, t('Image node is found in database.'));
$this
->assertTrue(db_query("DELETE f FROM {files} f INNER JOIN {image} i WHERE f.fid = i.fid AND i.nid = %d", $node->nid), t('Image file information was deleted.'));
$node = node_load(array(
'title' => $edit['title'],
));
$this
->assertFalse(isset($node->images['_original']), t('Image file information is missing on re-loaded node.'));
$this
->drupalPost('node/' . $node->nid . '/edit', array(), t('Delete'));
$this
->assertRaw(t('Are you sure you want to delete %title?', array(
'%title' => $edit['title'],
)), t('Delete confirmation form is displayed.'));
$this
->drupalPost(NULL, array(), t('Delete'));
$this
->assertRaw(t('@type %title has been deleted.', array(
'@type' => 'Image',
'%title' => $edit['title'],
)), t('Image node was deleted.'));
}
function testImageCreateNodeFrom() {
$edit = array(
'title' => $this
->randomName(),
'body' => $this
->randomName(),
'files[image]' => realpath($this->image),
);
$this
->drupalPost('node/add/image', $edit, t('Save'));
$this
->assertRaw(t('@type %title has been created.', array(
'@type' => 'Image',
'%title' => $edit['title'],
)), t('Image created.'));
$node_post = node_load(array(
'title' => $edit['title'],
));
$this
->assertTrue($node_post, t('Form created image node found in database.'));
file_copy($edit['files[image]'], file_directory_temp());
$node_api = image_create_node_from(file_directory_temp() . '/' . basename($edit['files[image]']), $edit['title'], $edit['body']);
$this
->assertTrue(is_object($node_api) && $node_api->nid, t('API created image node found in database.'));
$node_api = node_load($node_api->nid, NULL, TRUE);
$equality = $node_post->title == $node_api->title;
$this
->assertTrue($equality, t('Image node titles are equal.'));
$equality = $equality && strip_tags($node_post->body) == strip_tags($node_api->body);
$this
->assertTrue($equality, t('Image node body texts are equal.'));
$equality = $equality && filesize($node_post->images['_original']) == filesize($node_api->images['_original']);
$this
->assertTrue($equality, t('Original images are equal.'));
}
}