- Added a test framework to Drupal along with a first batch of tests for
Drupal core! This is an important milestone for the project so enable
the module and check it out ... :)
Thanks to Rok Žlender, Károly Négyesi, Jimmy Berry, Kevin Bridges, Charlie
Gordon, Douglas Hubler, Miglius Alaburda, Andy Kirkham, Dimitri13, Kieran
Lal, Moshe Weitzman, and the many other people that helped with testing
over the past years and that drove this home.
It all works but it is still rough around the edges (i.e. documentation
is still being written, the coding style is not 100% yet, a number of
tests still fail) but we spent the entire weekend working on it in Paris
and made a ton of progress. The best way to help and to get up to speed,
is to start writing and contributing some tests ... as well as fixing
some of the failures.
For those willing to help with improving the test framework, here are
some next steps and issues to resolve:
- How to best approach unit tests and mock functions?
- How to test drupal_mail() and drupal_http_request()?
- How to improve the admin UI so we have a nice progress bar?
- How best to do code coverage?
- See http://g.d.o/node/10099 for more ...
2008-04-20 18:24:07 +00:00
<?php
2009-04-26 16:30:28 +00:00
/**
* @file
2011-02-04 18:42:22 +00:00
* Tests for block.module.
2009-04-26 16:30:28 +00:00
*/
- Added a test framework to Drupal along with a first batch of tests for
Drupal core! This is an important milestone for the project so enable
the module and check it out ... :)
Thanks to Rok Žlender, Károly Négyesi, Jimmy Berry, Kevin Bridges, Charlie
Gordon, Douglas Hubler, Miglius Alaburda, Andy Kirkham, Dimitri13, Kieran
Lal, Moshe Weitzman, and the many other people that helped with testing
over the past years and that drove this home.
It all works but it is still rough around the edges (i.e. documentation
is still being written, the coding style is not 100% yet, a number of
tests still fail) but we spent the entire weekend working on it in Paris
and made a ton of progress. The best way to help and to get up to speed,
is to start writing and contributing some tests ... as well as fixing
some of the failures.
For those willing to help with improving the test framework, here are
some next steps and issues to resolve:
- How to best approach unit tests and mock functions?
- How to test drupal_mail() and drupal_http_request()?
- How to improve the admin UI so we have a nice progress bar?
- How best to do code coverage?
- See http://g.d.o/node/10099 for more ...
2008-04-20 18:24:07 +00:00
class BlockTestCase extends DrupalWebTestCase {
2008-12-16 23:57:33 +00:00
protected $regions;
2010-04-22 22:08:43 +00:00
protected $admin_user;
2008-12-16 23:57:33 +00:00
2009-03-31 01:49:55 +00:00
public static function getInfo() {
- Added a test framework to Drupal along with a first batch of tests for
Drupal core! This is an important milestone for the project so enable
the module and check it out ... :)
Thanks to Rok Žlender, Károly Négyesi, Jimmy Berry, Kevin Bridges, Charlie
Gordon, Douglas Hubler, Miglius Alaburda, Andy Kirkham, Dimitri13, Kieran
Lal, Moshe Weitzman, and the many other people that helped with testing
over the past years and that drove this home.
It all works but it is still rough around the edges (i.e. documentation
is still being written, the coding style is not 100% yet, a number of
tests still fail) but we spent the entire weekend working on it in Paris
and made a ton of progress. The best way to help and to get up to speed,
is to start writing and contributing some tests ... as well as fixing
some of the failures.
For those willing to help with improving the test framework, here are
some next steps and issues to resolve:
- How to best approach unit tests and mock functions?
- How to test drupal_mail() and drupal_http_request()?
- How to improve the admin UI so we have a nice progress bar?
- How best to do code coverage?
- See http://g.d.o/node/10099 for more ...
2008-04-20 18:24:07 +00:00
return array(
2009-07-13 21:51:42 +00:00
'name' => 'Block functionality',
'description' => 'Add, edit and delete custom block. Configure and move a module-defined block.',
'group' => 'Block',
- Added a test framework to Drupal along with a first batch of tests for
Drupal core! This is an important milestone for the project so enable
the module and check it out ... :)
Thanks to Rok Žlender, Károly Négyesi, Jimmy Berry, Kevin Bridges, Charlie
Gordon, Douglas Hubler, Miglius Alaburda, Andy Kirkham, Dimitri13, Kieran
Lal, Moshe Weitzman, and the many other people that helped with testing
over the past years and that drove this home.
It all works but it is still rough around the edges (i.e. documentation
is still being written, the coding style is not 100% yet, a number of
tests still fail) but we spent the entire weekend working on it in Paris
and made a ton of progress. The best way to help and to get up to speed,
is to start writing and contributing some tests ... as well as fixing
some of the failures.
For those willing to help with improving the test framework, here are
some next steps and issues to resolve:
- How to best approach unit tests and mock functions?
- How to test drupal_mail() and drupal_http_request()?
- How to improve the admin UI so we have a nice progress bar?
- How best to do code coverage?
- See http://g.d.o/node/10099 for more ...
2008-04-20 18:24:07 +00:00
);
}
function setUp() {
parent::setUp();
2010-03-06 19:40:21 +00:00
// Create and log in an administrative user having access to the Full HTML
// text format.
2010-11-29 06:38:52 +00:00
$full_html_format = filter_format_load('full_html');
2010-04-22 22:08:43 +00:00
$this->admin_user = $this->drupalCreateUser(array(
2010-03-05 13:32:10 +00:00
'administer blocks',
2010-03-06 19:40:21 +00:00
filter_permission_name($full_html_format),
2010-03-05 13:32:10 +00:00
'access administration pages',
));
2010-04-22 22:08:43 +00:00
$this->drupalLogin($this->admin_user);
2008-12-16 23:57:33 +00:00
2008-12-30 16:43:20 +00:00
// Define the existing regions
2008-12-16 23:57:33 +00:00
$this->regions = array();
2010-07-08 03:41:27 +00:00
$this->regions[] = 'header';
$this->regions[] = 'sidebar_first';
$this->regions[] = 'content';
$this->regions[] = 'sidebar_second';
$this->regions[] = 'footer';
- Added a test framework to Drupal along with a first batch of tests for
Drupal core! This is an important milestone for the project so enable
the module and check it out ... :)
Thanks to Rok Žlender, Károly Négyesi, Jimmy Berry, Kevin Bridges, Charlie
Gordon, Douglas Hubler, Miglius Alaburda, Andy Kirkham, Dimitri13, Kieran
Lal, Moshe Weitzman, and the many other people that helped with testing
over the past years and that drove this home.
It all works but it is still rough around the edges (i.e. documentation
is still being written, the coding style is not 100% yet, a number of
tests still fail) but we spent the entire weekend working on it in Paris
and made a ton of progress. The best way to help and to get up to speed,
is to start writing and contributing some tests ... as well as fixing
some of the failures.
For those willing to help with improving the test framework, here are
some next steps and issues to resolve:
- How to best approach unit tests and mock functions?
- How to test drupal_mail() and drupal_http_request()?
- How to improve the admin UI so we have a nice progress bar?
- How best to do code coverage?
- See http://g.d.o/node/10099 for more ...
2008-04-20 18:24:07 +00:00
}
/**
2009-08-28 19:44:05 +00:00
* Test creating custom block, moving it to a specific region and then deleting it.
- Added a test framework to Drupal along with a first batch of tests for
Drupal core! This is an important milestone for the project so enable
the module and check it out ... :)
Thanks to Rok Žlender, Károly Négyesi, Jimmy Berry, Kevin Bridges, Charlie
Gordon, Douglas Hubler, Miglius Alaburda, Andy Kirkham, Dimitri13, Kieran
Lal, Moshe Weitzman, and the many other people that helped with testing
over the past years and that drove this home.
It all works but it is still rough around the edges (i.e. documentation
is still being written, the coding style is not 100% yet, a number of
tests still fail) but we spent the entire weekend working on it in Paris
and made a ton of progress. The best way to help and to get up to speed,
is to start writing and contributing some tests ... as well as fixing
some of the failures.
For those willing to help with improving the test framework, here are
some next steps and issues to resolve:
- How to best approach unit tests and mock functions?
- How to test drupal_mail() and drupal_http_request()?
- How to improve the admin UI so we have a nice progress bar?
- How best to do code coverage?
- See http://g.d.o/node/10099 for more ...
2008-04-20 18:24:07 +00:00
*/
2009-08-28 19:44:05 +00:00
function testCustomBlock() {
2010-03-12 05:14:14 +00:00
// Confirm that the add block link appears on block overview pages.
$this->drupalGet('admin/structure/block');
2010-08-05 23:53:39 +00:00
$this->assertRaw(l('Add block', 'admin/structure/block/add'), t('Add block link is present on block overview page for default theme.'));
2010-03-12 05:14:14 +00:00
$this->drupalGet('admin/structure/block/list/seven');
2010-08-05 23:53:39 +00:00
$this->assertRaw(l('Add block', 'admin/structure/block/list/seven/add'), t('Add block link is present on block overview page for non-default theme.'));
2010-03-12 05:14:14 +00:00
2010-03-09 03:48:59 +00:00
// Confirm that hidden regions are not shown as options for block placement
// when adding a new block.
theme_enable(array('stark'));
$themes = list_themes();
$this->drupalGet('admin/structure/block/add');
foreach ($themes as $key => $theme) {
if ($theme->status) {
foreach ($theme->info['regions_hidden'] as $hidden_region) {
2010-03-31 20:05:06 +00:00
$elements = $this->xpath('//select[@id=:id]//option[@value=:value]', array(':id' => 'edit-regions-' . $key, ':value' => $hidden_region));
2010-08-05 23:53:39 +00:00
$this->assertFalse(isset($elements[0]), t('The hidden region @region is not available for @theme.', array('@region' => $hidden_region, '@theme' => $key)));
2010-03-09 03:48:59 +00:00
}
}
}
2009-08-28 19:44:05 +00:00
// Add a new custom block by filling out the input form on the admin/structure/block/add page.
$custom_block = array();
$custom_block['info'] = $this->randomName(8);
$custom_block['title'] = $this->randomName(8);
2010-03-07 23:14:20 +00:00
$custom_block['body[value]'] = $this->randomName(32);
2009-08-28 19:44:05 +00:00
$this->drupalPost('admin/structure/block/add', $custom_block, t('Save block'));
- Added a test framework to Drupal along with a first batch of tests for
Drupal core! This is an important milestone for the project so enable
the module and check it out ... :)
Thanks to Rok Žlender, Károly Négyesi, Jimmy Berry, Kevin Bridges, Charlie
Gordon, Douglas Hubler, Miglius Alaburda, Andy Kirkham, Dimitri13, Kieran
Lal, Moshe Weitzman, and the many other people that helped with testing
over the past years and that drove this home.
It all works but it is still rough around the edges (i.e. documentation
is still being written, the coding style is not 100% yet, a number of
tests still fail) but we spent the entire weekend working on it in Paris
and made a ton of progress. The best way to help and to get up to speed,
is to start writing and contributing some tests ... as well as fixing
some of the failures.
For those willing to help with improving the test framework, here are
some next steps and issues to resolve:
- How to best approach unit tests and mock functions?
- How to test drupal_mail() and drupal_http_request()?
- How to improve the admin UI so we have a nice progress bar?
- How best to do code coverage?
- See http://g.d.o/node/10099 for more ...
2008-04-20 18:24:07 +00:00
2009-08-28 19:44:05 +00:00
// Confirm that the custom block has been created, and then query the created bid.
2010-08-05 23:53:39 +00:00
$this->assertText(t('The block has been created.'), t('Custom block successfully created.'));
2009-08-28 19:44:05 +00:00
$bid = db_query("SELECT bid FROM {block_custom} WHERE info = :info", array(':info' => $custom_block['info']))->fetchField();
- Added a test framework to Drupal along with a first batch of tests for
Drupal core! This is an important milestone for the project so enable
the module and check it out ... :)
Thanks to Rok Žlender, Károly Négyesi, Jimmy Berry, Kevin Bridges, Charlie
Gordon, Douglas Hubler, Miglius Alaburda, Andy Kirkham, Dimitri13, Kieran
Lal, Moshe Weitzman, and the many other people that helped with testing
over the past years and that drove this home.
It all works but it is still rough around the edges (i.e. documentation
is still being written, the coding style is not 100% yet, a number of
tests still fail) but we spent the entire weekend working on it in Paris
and made a ton of progress. The best way to help and to get up to speed,
is to start writing and contributing some tests ... as well as fixing
some of the failures.
For those willing to help with improving the test framework, here are
some next steps and issues to resolve:
- How to best approach unit tests and mock functions?
- How to test drupal_mail() and drupal_http_request()?
- How to improve the admin UI so we have a nice progress bar?
- How best to do code coverage?
- See http://g.d.o/node/10099 for more ...
2008-04-20 18:24:07 +00:00
2010-11-22 08:11:49 +00:00
// Check to see if the custom block was created by checking that it's in the database.
2010-08-05 23:53:39 +00:00
$this->assertNotNull($bid, t('Custom block found in database'));
- Added a test framework to Drupal along with a first batch of tests for
Drupal core! This is an important milestone for the project so enable
the module and check it out ... :)
Thanks to Rok Žlender, Károly Négyesi, Jimmy Berry, Kevin Bridges, Charlie
Gordon, Douglas Hubler, Miglius Alaburda, Andy Kirkham, Dimitri13, Kieran
Lal, Moshe Weitzman, and the many other people that helped with testing
over the past years and that drove this home.
It all works but it is still rough around the edges (i.e. documentation
is still being written, the coding style is not 100% yet, a number of
tests still fail) but we spent the entire weekend working on it in Paris
and made a ton of progress. The best way to help and to get up to speed,
is to start writing and contributing some tests ... as well as fixing
some of the failures.
For those willing to help with improving the test framework, here are
some next steps and issues to resolve:
- How to best approach unit tests and mock functions?
- How to test drupal_mail() and drupal_http_request()?
- How to improve the admin UI so we have a nice progress bar?
- How best to do code coverage?
- See http://g.d.o/node/10099 for more ...
2008-04-20 18:24:07 +00:00
2010-11-22 08:11:49 +00:00
// Check that block_block_view() returns the correct title and content.
$data = block_block_view($bid);
$format = db_query("SELECT format FROM {block_custom} WHERE bid = :bid", array(':bid' => $bid))->fetchField();
2010-11-23 16:12:15 +00:00
$this->assertTrue(array_key_exists('subject', $data) && empty($data['subject']), t('block_block_view() provides an empty block subject, since custom blocks do not have default titles.'));
$this->assertEqual(check_markup($custom_block['body[value]'], $format), $data['content'], t('block_block_view() provides correct block content.'));
2010-11-22 08:11:49 +00:00
2011-09-07 10:44:59 +00:00
// Check whether the block can be moved to all available regions.
2009-08-28 19:44:05 +00:00
$custom_block['module'] = 'block';
$custom_block['delta'] = $bid;
2008-12-16 23:57:33 +00:00
foreach ($this->regions as $region) {
2009-08-28 19:44:05 +00:00
$this->moveBlockToRegion($custom_block, $region);
2008-12-16 23:57:33 +00:00
}
- Added a test framework to Drupal along with a first batch of tests for
Drupal core! This is an important milestone for the project so enable
the module and check it out ... :)
Thanks to Rok Žlender, Károly Négyesi, Jimmy Berry, Kevin Bridges, Charlie
Gordon, Douglas Hubler, Miglius Alaburda, Andy Kirkham, Dimitri13, Kieran
Lal, Moshe Weitzman, and the many other people that helped with testing
over the past years and that drove this home.
It all works but it is still rough around the edges (i.e. documentation
is still being written, the coding style is not 100% yet, a number of
tests still fail) but we spent the entire weekend working on it in Paris
and made a ton of progress. The best way to help and to get up to speed,
is to start writing and contributing some tests ... as well as fixing
some of the failures.
For those willing to help with improving the test framework, here are
some next steps and issues to resolve:
- How to best approach unit tests and mock functions?
- How to test drupal_mail() and drupal_http_request()?
- How to improve the admin UI so we have a nice progress bar?
- How best to do code coverage?
- See http://g.d.o/node/10099 for more ...
2008-04-20 18:24:07 +00:00
2009-10-16 23:48:38 +00:00
// Verify presence of configure and delete links for custom block.
2009-10-14 02:13:15 +00:00
$this->drupalGet('admin/structure/block');
2010-10-21 19:31:39 +00:00
$this->assertLinkByHref('admin/structure/block/manage/block/' . $bid . '/configure', 0, t('Custom block configure link found.'));
$this->assertLinkByHref('admin/structure/block/manage/block/' . $bid . '/delete', 0, t('Custom block delete link found.'));
2009-10-16 23:48:38 +00:00
2010-03-09 12:09:52 +00:00
// Set visibility only for authenticated users, to verify delete functionality.
$edit = array();
$edit['roles[2]'] = TRUE;
$this->drupalPost('admin/structure/block/manage/block/' . $bid . '/configure', $edit, t('Save block'));
2009-10-16 23:48:38 +00:00
// Delete the created custom block & verify that it's been deleted and no longer appearing on the page.
2009-02-11 03:38:46 +00:00
$this->clickLink(t('delete'));
2009-10-16 23:48:38 +00:00
$this->drupalPost('admin/structure/block/manage/block/' . $bid . '/delete', array(), t('Delete'));
2010-08-05 23:53:39 +00:00
$this->assertRaw(t('The block %title has been removed.', array('%title' => $custom_block['info'])), t('Custom block successfully deleted.'));
$this->assertNoText(t($custom_block['title']), t('Custom block no longer appears on page.'));
2010-03-09 12:09:52 +00:00
$count = db_query("SELECT 1 FROM {block_role} WHERE module = :module AND delta = :delta", array(':module' => $custom_block['module'], ':delta' => $custom_block['delta']))->fetchField();
2010-08-05 23:53:39 +00:00
$this->assertFalse($count, t('Table block_role being cleaned.'));
- Added a test framework to Drupal along with a first batch of tests for
Drupal core! This is an important milestone for the project so enable
the module and check it out ... :)
Thanks to Rok Žlender, Károly Négyesi, Jimmy Berry, Kevin Bridges, Charlie
Gordon, Douglas Hubler, Miglius Alaburda, Andy Kirkham, Dimitri13, Kieran
Lal, Moshe Weitzman, and the many other people that helped with testing
over the past years and that drove this home.
It all works but it is still rough around the edges (i.e. documentation
is still being written, the coding style is not 100% yet, a number of
tests still fail) but we spent the entire weekend working on it in Paris
and made a ton of progress. The best way to help and to get up to speed,
is to start writing and contributing some tests ... as well as fixing
some of the failures.
For those willing to help with improving the test framework, here are
some next steps and issues to resolve:
- How to best approach unit tests and mock functions?
- How to test drupal_mail() and drupal_http_request()?
- How to improve the admin UI so we have a nice progress bar?
- How best to do code coverage?
- See http://g.d.o/node/10099 for more ...
2008-04-20 18:24:07 +00:00
}
2008-11-07 05:58:51 +00:00
/**
2009-08-28 19:44:05 +00:00
* Test creating custom block using Full HTML.
2008-11-07 05:58:51 +00:00
*/
2009-08-28 19:44:05 +00:00
function testCustomBlockFormat() {
// Add a new custom block by filling out the input form on the admin/structure/block/add page.
$custom_block = array();
$custom_block['info'] = $this->randomName(8);
$custom_block['title'] = $this->randomName(8);
2010-03-07 23:14:20 +00:00
$custom_block['body[value]'] = '<h1>Full HTML</h1>';
2010-11-29 06:38:52 +00:00
$full_html_format = filter_format_load('full_html');
$custom_block['body[format]'] = $full_html_format->format;
2009-08-28 19:44:05 +00:00
$this->drupalPost('admin/structure/block/add', $custom_block, t('Save block'));
// Set the created custom block to a specific region.
$bid = db_query("SELECT bid FROM {block_custom} WHERE info = :info", array(':info' => $custom_block['info']))->fetchField();
2008-11-07 05:58:51 +00:00
$edit = array();
2010-08-30 00:22:03 +00:00
$edit['blocks[block_' . $bid . '][region]'] = $this->regions[1];
2009-07-20 18:51:36 +00:00
$this->drupalPost('admin/structure/block', $edit, t('Save blocks'));
2008-11-07 05:58:51 +00:00
2009-08-28 19:44:05 +00:00
// Confirm that the custom block is being displayed using configured text format.
2009-10-14 02:13:15 +00:00
$this->drupalGet('node');
2010-08-05 23:53:39 +00:00
$this->assertRaw('<h1>Full HTML</h1>', t('Custom block successfully being displayed using Full HTML.'));
2009-05-24 07:13:12 +00:00
// Confirm that a user without access to Full HTML can not see the body field,
// but can still submit the form without errors.
$block_admin = $this->drupalCreateUser(array('administer blocks'));
$this->drupalLogin($block_admin);
2009-10-16 23:48:38 +00:00
$this->drupalGet('admin/structure/block/manage/block/' . $bid . '/configure');
2010-08-05 23:53:39 +00:00
$this->assertFieldByXPath("//textarea[@name='body[value]' and @disabled='disabled']", t('This field has been disabled because you do not have sufficient permissions to edit it.'), t('Body field contains denied message'));
2009-10-16 23:48:38 +00:00
$this->drupalPost('admin/structure/block/manage/block/' . $bid . '/configure', array(), t('Save block'));
2010-01-09 23:03:22 +00:00
$this->assertNoText(t('Ensure that each block description is unique.'));
2009-05-24 07:13:12 +00:00
2009-08-28 19:44:05 +00:00
// Confirm that the custom block is still being displayed using configured text format.
2009-10-14 02:13:15 +00:00
$this->drupalGet('node');
2010-08-05 23:53:39 +00:00
$this->assertRaw('<h1>Full HTML</h1>', t('Custom block successfully being displayed using Full HTML.'));
2008-11-07 05:58:51 +00:00
}
2009-06-08 09:23:55 +00:00
/**
* Test block visibility.
*/
function testBlockVisibility() {
$block = array();
2009-11-10 17:27:54 +00:00
2009-08-26 10:53:45 +00:00
// Create a random title for the block
$title = $this->randomName(8);
2009-11-10 17:27:54 +00:00
2009-08-26 10:53:45 +00:00
// Create the custom block
2009-08-28 19:44:05 +00:00
$custom_block = array();
$custom_block['info'] = $this->randomName(8);
$custom_block['title'] = $title;
2010-03-07 23:14:20 +00:00
$custom_block['body[value]'] = $this->randomName(32);
2009-08-28 19:44:05 +00:00
$this->drupalPost('admin/structure/block/add', $custom_block, t('Save block'));
2009-11-10 17:27:54 +00:00
2009-08-28 19:44:05 +00:00
$bid = db_query("SELECT bid FROM {block_custom} WHERE info = :info", array(':info' => $custom_block['info']))->fetchField();
2009-08-26 10:53:45 +00:00
$block['module'] = 'block';
$block['delta'] = $bid;
$block['title'] = $title;
2009-06-08 09:23:55 +00:00
// Set the block to be hidden on any user path, and to be shown only to
// authenticated users.
$edit = array();
$edit['pages'] = 'user*';
$edit['roles[2]'] = TRUE;
2009-10-16 23:48:38 +00:00
$this->drupalPost('admin/structure/block/manage/' . $block['module'] . '/' . $block['delta'] . '/configure', $edit, t('Save block'));
2009-06-08 09:23:55 +00:00
2009-08-03 03:04:34 +00:00
// Move block to the first sidebar.
2009-06-08 09:23:55 +00:00
$this->moveBlockToRegion($block, $this->regions[1]);
$this->drupalGet('');
2010-08-05 23:53:39 +00:00
$this->assertText($title, t('Block was displayed on the front page.'));
2009-06-08 09:23:55 +00:00
2009-08-26 10:53:45 +00:00
$this->drupalGet('user');
2010-08-05 23:53:39 +00:00
$this->assertNoText($title, t('Block was not displayed according to block visibility rules.'));
2009-06-08 09:23:55 +00:00
2010-04-22 22:08:43 +00:00
$this->drupalGet('USER/' . $this->admin_user->uid);
2010-08-05 23:53:39 +00:00
$this->assertNoText($title, t('Block was not displayed according to block visibility rules regardless of path case.'));
2010-04-22 22:08:43 +00:00
2009-06-08 09:23:55 +00:00
// Confirm that the block is not displayed to anonymous users.
2011-08-26 09:09:24 +00:00
$this->drupalLogout();
$this->drupalGet('');
$this->assertNoText($title, t('Block was not displayed to anonymous users.'));
2011-10-06 07:01:47 +00:00
// Confirm that an empty block is not displayed.
$this->assertNoRaw('block-system-help', t('Empty block not displayed.'));
2011-08-26 09:09:24 +00:00
}
/**
2011-09-24 20:15:40 +00:00
* Test block visibility when using "pages" restriction but leaving
2011-08-26 09:09:24 +00:00
* "pages" textarea empty
*/
function testBlockVisibilityListedEmpty() {
$block = array();
// Create a random title for the block
$title = $this->randomName(8);
// Create the custom block
$custom_block = array();
$custom_block['info'] = $this->randomName(8);
$custom_block['title'] = $title;
$custom_block['body[value]'] = $this->randomName(32);
$this->drupalPost('admin/structure/block/add', $custom_block, t('Save block'));
$bid = db_query("SELECT bid FROM {block_custom} WHERE info = :info", array(':info' => $custom_block['info']))->fetchField();
$block['module'] = 'block';
$block['delta'] = $bid;
$block['title'] = $title;
// Move block to the first sidebar.
$this->moveBlockToRegion($block, $this->regions[1]);
// Set the block to be hidden on any user path, and to be shown only to
// authenticated users.
$edit = array();
$edit['visibility'] = BLOCK_VISIBILITY_LISTED;
$this->drupalPost('admin/structure/block/manage/' . $block['module'] . '/' . $block['delta'] . '/configure', $edit, t('Save block'));
$this->drupalGet('');
$this->assertNoText($title, t('Block was not displayed according to block visibility rules.'));
$this->drupalGet('user');
$this->assertNoText($title, t('Block was not displayed according to block visibility rules regardless of path case.'));
// Confirm that the block is not displayed to anonymous users.
2009-06-08 09:23:55 +00:00
$this->drupalLogout();
$this->drupalGet('');
2010-08-05 23:53:39 +00:00
$this->assertNoText($title, t('Block was not displayed to anonymous users.'));
2009-06-08 09:23:55 +00:00
}
2010-11-22 06:12:39 +00:00
/**
* Test user customization of block visibility.
*/
function testBlockVisibilityPerUser() {
$block = array();
// Create a random title for the block.
$title = $this->randomName(8);
// Create our custom test block.
$custom_block = array();
$custom_block['info'] = $this->randomName(8);
$custom_block['title'] = $title;
$custom_block['body[value]'] = $this->randomName(32);
$this->drupalPost('admin/structure/block/add', $custom_block, t('Save block'));
$bid = db_query("SELECT bid FROM {block_custom} WHERE info = :info", array(':info' => $custom_block['info']))->fetchField();
$block['module'] = 'block';
$block['delta'] = $bid;
$block['title'] = $title;
// Move block to the first sidebar.
$this->moveBlockToRegion($block, $this->regions[1]);
// Set the block to be customizable per user, visible by default.
$edit = array();
$edit['custom'] = BLOCK_CUSTOM_ENABLED;
$this->drupalPost('admin/structure/block/manage/' . $block['module'] . '/' . $block['delta'] . '/configure', $edit, t('Save block'));
// Disable block visibility for the admin user.
$edit = array();
$edit['block[' . $block['module'] . '][' . $block['delta'] . ']'] = FALSE;
$this->drupalPost('user/' . $this->admin_user->uid . '/edit', $edit, t('Save'));
$this->drupalGet('');
$this->assertNoText($block['title'], t('Block was not displayed according to per user block visibility setting.'));
// Set the block to be customizable per user, hidden by default.
$edit = array();
$edit['custom'] = BLOCK_CUSTOM_DISABLED;
$this->drupalPost('admin/structure/block/manage/' . $block['module'] . '/' . $block['delta'] . '/configure', $edit, t('Save block'));
// Enable block visibility for the admin user.
$edit = array();
$edit['block[' . $block['module'] . '][' . $block['delta'] . ']'] = TRUE;
$this->drupalPost('user/' . $this->admin_user->uid . '/edit', $edit, t('Save'));
$this->drupalGet('');
$this->assertText($block['title'], t('Block was displayed according to per user block visibility setting.'));
}
- Added a test framework to Drupal along with a first batch of tests for
Drupal core! This is an important milestone for the project so enable
the module and check it out ... :)
Thanks to Rok Žlender, Károly Négyesi, Jimmy Berry, Kevin Bridges, Charlie
Gordon, Douglas Hubler, Miglius Alaburda, Andy Kirkham, Dimitri13, Kieran
Lal, Moshe Weitzman, and the many other people that helped with testing
over the past years and that drove this home.
It all works but it is still rough around the edges (i.e. documentation
is still being written, the coding style is not 100% yet, a number of
tests still fail) but we spent the entire weekend working on it in Paris
and made a ton of progress. The best way to help and to get up to speed,
is to start writing and contributing some tests ... as well as fixing
some of the failures.
For those willing to help with improving the test framework, here are
some next steps and issues to resolve:
- How to best approach unit tests and mock functions?
- How to test drupal_mail() and drupal_http_request()?
- How to improve the admin UI so we have a nice progress bar?
- How best to do code coverage?
- See http://g.d.o/node/10099 for more ...
2008-04-20 18:24:07 +00:00
/**
* Test configuring and moving a module-define block to specific regions.
*/
function testBlock() {
// Select the Navigation block to be configured and moved.
$block = array();
2009-03-20 19:18:11 +00:00
$block['module'] = 'system';
$block['delta'] = 'management';
- Added a test framework to Drupal along with a first batch of tests for
Drupal core! This is an important milestone for the project so enable
the module and check it out ... :)
Thanks to Rok Žlender, Károly Négyesi, Jimmy Berry, Kevin Bridges, Charlie
Gordon, Douglas Hubler, Miglius Alaburda, Andy Kirkham, Dimitri13, Kieran
Lal, Moshe Weitzman, and the many other people that helped with testing
over the past years and that drove this home.
It all works but it is still rough around the edges (i.e. documentation
is still being written, the coding style is not 100% yet, a number of
tests still fail) but we spent the entire weekend working on it in Paris
and made a ton of progress. The best way to help and to get up to speed,
is to start writing and contributing some tests ... as well as fixing
some of the failures.
For those willing to help with improving the test framework, here are
some next steps and issues to resolve:
- How to best approach unit tests and mock functions?
- How to test drupal_mail() and drupal_http_request()?
- How to improve the admin UI so we have a nice progress bar?
- How best to do code coverage?
- See http://g.d.o/node/10099 for more ...
2008-04-20 18:24:07 +00:00
$block['title'] = $this->randomName(8);
// Set block title to confirm that interface works and override any custom titles.
2009-10-16 23:48:38 +00:00
$this->drupalPost('admin/structure/block/manage/' . $block['module'] . '/' . $block['delta'] . '/configure', array('title' => $block['title']), t('Save block'));
2010-08-05 23:53:39 +00:00
$this->assertText(t('The block configuration has been saved.'), t('Block title set.'));
2009-05-28 11:31:20 +00:00
$bid = db_query("SELECT bid FROM {block} WHERE module = :module AND delta = :delta", array(
':module' => $block['module'],
':delta' => $block['delta'],
))->fetchField();
- Added a test framework to Drupal along with a first batch of tests for
Drupal core! This is an important milestone for the project so enable
the module and check it out ... :)
Thanks to Rok Žlender, Károly Négyesi, Jimmy Berry, Kevin Bridges, Charlie
Gordon, Douglas Hubler, Miglius Alaburda, Andy Kirkham, Dimitri13, Kieran
Lal, Moshe Weitzman, and the many other people that helped with testing
over the past years and that drove this home.
It all works but it is still rough around the edges (i.e. documentation
is still being written, the coding style is not 100% yet, a number of
tests still fail) but we spent the entire weekend working on it in Paris
and made a ton of progress. The best way to help and to get up to speed,
is to start writing and contributing some tests ... as well as fixing
some of the failures.
For those willing to help with improving the test framework, here are
some next steps and issues to resolve:
- How to best approach unit tests and mock functions?
- How to test drupal_mail() and drupal_http_request()?
- How to improve the admin UI so we have a nice progress bar?
- How best to do code coverage?
- See http://g.d.o/node/10099 for more ...
2008-04-20 18:24:07 +00:00
// Check to see if the block was created by checking that it's in the database.
2010-08-05 23:53:39 +00:00
$this->assertNotNull($bid, t('Block found in database'));
- Added a test framework to Drupal along with a first batch of tests for
Drupal core! This is an important milestone for the project so enable
the module and check it out ... :)
Thanks to Rok Žlender, Károly Négyesi, Jimmy Berry, Kevin Bridges, Charlie
Gordon, Douglas Hubler, Miglius Alaburda, Andy Kirkham, Dimitri13, Kieran
Lal, Moshe Weitzman, and the many other people that helped with testing
over the past years and that drove this home.
It all works but it is still rough around the edges (i.e. documentation
is still being written, the coding style is not 100% yet, a number of
tests still fail) but we spent the entire weekend working on it in Paris
and made a ton of progress. The best way to help and to get up to speed,
is to start writing and contributing some tests ... as well as fixing
some of the failures.
For those willing to help with improving the test framework, here are
some next steps and issues to resolve:
- How to best approach unit tests and mock functions?
- How to test drupal_mail() and drupal_http_request()?
- How to improve the admin UI so we have a nice progress bar?
- How best to do code coverage?
- See http://g.d.o/node/10099 for more ...
2008-04-20 18:24:07 +00:00
2011-09-07 10:44:59 +00:00
// Check whether the block can be moved to all available regions.
2008-12-16 23:57:33 +00:00
foreach ($this->regions as $region) {
$this->moveBlockToRegion($block, $region);
}
- Added a test framework to Drupal along with a first batch of tests for
Drupal core! This is an important milestone for the project so enable
the module and check it out ... :)
Thanks to Rok Žlender, Károly Négyesi, Jimmy Berry, Kevin Bridges, Charlie
Gordon, Douglas Hubler, Miglius Alaburda, Andy Kirkham, Dimitri13, Kieran
Lal, Moshe Weitzman, and the many other people that helped with testing
over the past years and that drove this home.
It all works but it is still rough around the edges (i.e. documentation
is still being written, the coding style is not 100% yet, a number of
tests still fail) but we spent the entire weekend working on it in Paris
and made a ton of progress. The best way to help and to get up to speed,
is to start writing and contributing some tests ... as well as fixing
some of the failures.
For those willing to help with improving the test framework, here are
some next steps and issues to resolve:
- How to best approach unit tests and mock functions?
- How to test drupal_mail() and drupal_http_request()?
- How to improve the admin UI so we have a nice progress bar?
- How best to do code coverage?
- See http://g.d.o/node/10099 for more ...
2008-04-20 18:24:07 +00:00
// Set the block to the disabled region.
$edit = array();
2010-08-30 00:22:03 +00:00
$edit['blocks[' . $block['module'] . '_' . $block['delta'] . '][region]'] = '-1';
2009-07-20 18:51:36 +00:00
$this->drupalPost('admin/structure/block', $edit, t('Save blocks'));
- Added a test framework to Drupal along with a first batch of tests for
Drupal core! This is an important milestone for the project so enable
the module and check it out ... :)
Thanks to Rok Žlender, Károly Négyesi, Jimmy Berry, Kevin Bridges, Charlie
Gordon, Douglas Hubler, Miglius Alaburda, Andy Kirkham, Dimitri13, Kieran
Lal, Moshe Weitzman, and the many other people that helped with testing
over the past years and that drove this home.
It all works but it is still rough around the edges (i.e. documentation
is still being written, the coding style is not 100% yet, a number of
tests still fail) but we spent the entire weekend working on it in Paris
and made a ton of progress. The best way to help and to get up to speed,
is to start writing and contributing some tests ... as well as fixing
some of the failures.
For those willing to help with improving the test framework, here are
some next steps and issues to resolve:
- How to best approach unit tests and mock functions?
- How to test drupal_mail() and drupal_http_request()?
- How to improve the admin UI so we have a nice progress bar?
- How best to do code coverage?
- See http://g.d.o/node/10099 for more ...
2008-04-20 18:24:07 +00:00
// Confirm that the block was moved to the proper region.
2010-08-05 23:53:39 +00:00
$this->assertText(t('The block settings have been updated.'), t('Block successfully move to disabled region.'));
$this->assertNoText(t($block['title']), t('Block no longer appears on page.'));
- Added a test framework to Drupal along with a first batch of tests for
Drupal core! This is an important milestone for the project so enable
the module and check it out ... :)
Thanks to Rok Žlender, Károly Négyesi, Jimmy Berry, Kevin Bridges, Charlie
Gordon, Douglas Hubler, Miglius Alaburda, Andy Kirkham, Dimitri13, Kieran
Lal, Moshe Weitzman, and the many other people that helped with testing
over the past years and that drove this home.
It all works but it is still rough around the edges (i.e. documentation
is still being written, the coding style is not 100% yet, a number of
tests still fail) but we spent the entire weekend working on it in Paris
and made a ton of progress. The best way to help and to get up to speed,
is to start writing and contributing some tests ... as well as fixing
some of the failures.
For those willing to help with improving the test framework, here are
some next steps and issues to resolve:
- How to best approach unit tests and mock functions?
- How to test drupal_mail() and drupal_http_request()?
- How to improve the admin UI so we have a nice progress bar?
- How best to do code coverage?
- See http://g.d.o/node/10099 for more ...
2008-04-20 18:24:07 +00:00
2011-09-07 10:44:59 +00:00
// Confirm that the region's xpath is not available.
2010-03-31 20:05:06 +00:00
$xpath = $this->buildXPathQuery('//div[@id=:id]/*', array(':id' => 'block-block-' . $bid));
2010-08-05 23:53:39 +00:00
$this->assertNoFieldByXPath($xpath, FALSE, t('Custom block found in no regions.'));
2008-12-16 23:57:33 +00:00
- Added a test framework to Drupal along with a first batch of tests for
Drupal core! This is an important milestone for the project so enable
the module and check it out ... :)
Thanks to Rok Žlender, Károly Négyesi, Jimmy Berry, Kevin Bridges, Charlie
Gordon, Douglas Hubler, Miglius Alaburda, Andy Kirkham, Dimitri13, Kieran
Lal, Moshe Weitzman, and the many other people that helped with testing
over the past years and that drove this home.
It all works but it is still rough around the edges (i.e. documentation
is still being written, the coding style is not 100% yet, a number of
tests still fail) but we spent the entire weekend working on it in Paris
and made a ton of progress. The best way to help and to get up to speed,
is to start writing and contributing some tests ... as well as fixing
some of the failures.
For those willing to help with improving the test framework, here are
some next steps and issues to resolve:
- How to best approach unit tests and mock functions?
- How to test drupal_mail() and drupal_http_request()?
- How to improve the admin UI so we have a nice progress bar?
- How best to do code coverage?
- See http://g.d.o/node/10099 for more ...
2008-04-20 18:24:07 +00:00
// For convenience of developers, put the navigation block back.
$edit = array();
2010-08-30 00:22:03 +00:00
$edit['blocks[' . $block['module'] . '_' . $block['delta'] . '][region]'] = $this->regions[1];
2009-07-20 18:51:36 +00:00
$this->drupalPost('admin/structure/block', $edit, t('Save blocks'));
2010-08-05 23:53:39 +00:00
$this->assertText(t('The block settings have been updated.'), t('Block successfully move to first sidebar region.'));
- Added a test framework to Drupal along with a first batch of tests for
Drupal core! This is an important milestone for the project so enable
the module and check it out ... :)
Thanks to Rok Žlender, Károly Négyesi, Jimmy Berry, Kevin Bridges, Charlie
Gordon, Douglas Hubler, Miglius Alaburda, Andy Kirkham, Dimitri13, Kieran
Lal, Moshe Weitzman, and the many other people that helped with testing
over the past years and that drove this home.
It all works but it is still rough around the edges (i.e. documentation
is still being written, the coding style is not 100% yet, a number of
tests still fail) but we spent the entire weekend working on it in Paris
and made a ton of progress. The best way to help and to get up to speed,
is to start writing and contributing some tests ... as well as fixing
some of the failures.
For those willing to help with improving the test framework, here are
some next steps and issues to resolve:
- How to best approach unit tests and mock functions?
- How to test drupal_mail() and drupal_http_request()?
- How to improve the admin UI so we have a nice progress bar?
- How best to do code coverage?
- See http://g.d.o/node/10099 for more ...
2008-04-20 18:24:07 +00:00
2009-10-16 23:48:38 +00:00
$this->drupalPost('admin/structure/block/manage/' . $block['module'] . '/' . $block['delta'] . '/configure', array('title' => 'Navigation'), t('Save block'));
2010-08-05 23:53:39 +00:00
$this->assertText(t('The block configuration has been saved.'), t('Block title set.'));
- Added a test framework to Drupal along with a first batch of tests for
Drupal core! This is an important milestone for the project so enable
the module and check it out ... :)
Thanks to Rok Žlender, Károly Négyesi, Jimmy Berry, Kevin Bridges, Charlie
Gordon, Douglas Hubler, Miglius Alaburda, Andy Kirkham, Dimitri13, Kieran
Lal, Moshe Weitzman, and the many other people that helped with testing
over the past years and that drove this home.
It all works but it is still rough around the edges (i.e. documentation
is still being written, the coding style is not 100% yet, a number of
tests still fail) but we spent the entire weekend working on it in Paris
and made a ton of progress. The best way to help and to get up to speed,
is to start writing and contributing some tests ... as well as fixing
some of the failures.
For those willing to help with improving the test framework, here are
some next steps and issues to resolve:
- How to best approach unit tests and mock functions?
- How to test drupal_mail() and drupal_http_request()?
- How to improve the admin UI so we have a nice progress bar?
- How best to do code coverage?
- See http://g.d.o/node/10099 for more ...
2008-04-20 18:24:07 +00:00
}
2008-09-14 20:37:28 +00:00
2008-12-16 23:57:33 +00:00
function moveBlockToRegion($block, $region) {
// Set the created block to a specific region.
$edit = array();
2010-08-30 00:22:03 +00:00
$edit['blocks[' . $block['module'] . '_' . $block['delta'] . '][region]'] = $region;
2009-07-20 18:51:36 +00:00
$this->drupalPost('admin/structure/block', $edit, t('Save blocks'));
2008-12-16 23:57:33 +00:00
// Confirm that the block was moved to the proper region.
2010-08-05 23:53:39 +00:00
$this->assertText(t('The block settings have been updated.'), t('Block successfully moved to %region_name region.', array( '%region_name' => $region)));
2008-12-16 23:57:33 +00:00
// Confirm that the block is being displayed.
2009-10-14 02:13:15 +00:00
$this->drupalGet('node');
2010-08-05 23:53:39 +00:00
$this->assertText(t($block['title']), t('Block successfully being displayed on the page.'));
2008-12-16 23:57:33 +00:00
2009-08-28 19:44:05 +00:00
// Confirm that the custom block was found at the proper region.
2010-03-31 20:05:06 +00:00
$xpath = $this->buildXPathQuery('//div[@class=:region-class]//div[@id=:block-id]/*', array(
2010-07-08 03:41:27 +00:00
':region-class' => 'region region-' . str_replace('_', '-', $region),
2010-03-31 20:05:06 +00:00
':block-id' => 'block-' . $block['module'] . '-' . $block['delta'],
));
2010-10-25 15:51:21 +00:00
$this->assertFieldByXPath($xpath, NULL, t('Custom block found in %region_name region.', array('%region_name' => $region)));
2008-12-16 23:57:33 +00:00
}
2010-06-15 16:19:28 +00:00
/**
* Test _block_rehash().
*/
function testBlockRehash() {
module_enable(array('block_test'));
2010-08-05 23:53:39 +00:00
$this->assertTrue(module_exists('block_test'), t('Test block module enabled.'));
2010-06-15 16:19:28 +00:00
// Our new block should be inserted in the database when we visit the
// block management page.
$this->drupalGet('admin/structure/block');
// Our test block's caching should default to DRUPAL_CACHE_PER_ROLE.
$current_caching = db_query("SELECT cache FROM {block} WHERE module = 'block_test' AND delta = 'test_cache'")->fetchField();
2010-08-05 23:53:39 +00:00
$this->assertEqual($current_caching, DRUPAL_CACHE_PER_ROLE, t('Test block cache mode defaults to DRUPAL_CACHE_PER_ROLE.'));
2010-06-15 16:19:28 +00:00
// Disable caching for this block.
variable_set('block_test_caching', DRUPAL_NO_CACHE);
// Flushing all caches should call _block_rehash().
drupal_flush_all_caches();
// Verify that the database is updated with the new caching mode.
$current_caching = db_query("SELECT cache FROM {block} WHERE module = 'block_test' AND delta = 'test_cache'")->fetchField();
2010-08-05 23:53:39 +00:00
$this->assertEqual($current_caching, DRUPAL_NO_CACHE, t("Test block's database entry updated to DRUPAL_NO_CACHE."));
2010-06-15 16:19:28 +00:00
}
2008-09-14 20:37:28 +00:00
}
class NonDefaultBlockAdmin extends DrupalWebTestCase {
2009-03-31 01:49:55 +00:00
public static function getInfo() {
2008-09-14 20:37:28 +00:00
return array(
2009-07-13 21:51:42 +00:00
'name' => 'Non default theme admin',
'description' => 'Check the administer page for non default theme.',
'group' => 'Block',
2008-09-14 20:37:28 +00:00
);
}
/**
* Test non-default theme admin.
*/
2009-01-07 21:41:13 +00:00
function testNonDefaultBlockAdmin() {
2009-12-01 22:30:31 +00:00
$admin_user = $this->drupalCreateUser(array('administer blocks', 'administer themes'));
2008-09-14 20:37:28 +00:00
$this->drupalLogin($admin_user);
2009-12-01 00:39:35 +00:00
theme_enable(array('stark'));
2009-07-20 18:51:36 +00:00
$this->drupalGet('admin/structure/block/list/stark');
2008-09-14 20:37:28 +00:00
}
- Added a test framework to Drupal along with a first batch of tests for
Drupal core! This is an important milestone for the project so enable
the module and check it out ... :)
Thanks to Rok Žlender, Károly Négyesi, Jimmy Berry, Kevin Bridges, Charlie
Gordon, Douglas Hubler, Miglius Alaburda, Andy Kirkham, Dimitri13, Kieran
Lal, Moshe Weitzman, and the many other people that helped with testing
over the past years and that drove this home.
It all works but it is still rough around the edges (i.e. documentation
is still being written, the coding style is not 100% yet, a number of
tests still fail) but we spent the entire weekend working on it in Paris
and made a ton of progress. The best way to help and to get up to speed,
is to start writing and contributing some tests ... as well as fixing
some of the failures.
For those willing to help with improving the test framework, here are
some next steps and issues to resolve:
- How to best approach unit tests and mock functions?
- How to test drupal_mail() and drupal_http_request()?
- How to improve the admin UI so we have a nice progress bar?
- How best to do code coverage?
- See http://g.d.o/node/10099 for more ...
2008-04-20 18:24:07 +00:00
}
2009-05-31 06:31:00 +00:00
2009-05-31 07:46:54 +00:00
/**
* Test blocks correctly initialized when picking a new default theme.
*/
class NewDefaultThemeBlocks extends DrupalWebTestCase {
public static function getInfo() {
return array(
2009-07-13 21:51:42 +00:00
'name' => 'New default theme blocks',
'description' => 'Checks that the new default theme gets blocks.',
'group' => 'Block',
2009-05-31 07:46:54 +00:00
);
}
2009-11-10 17:27:54 +00:00
2009-05-31 07:46:54 +00:00
/**
2010-08-08 19:35:49 +00:00
* Check the enabled Bartik blocks are correctly copied over.
2009-05-31 07:46:54 +00:00
*/
function testNewDefaultThemeBlocks() {
// Create administrative user.
2009-12-01 22:30:31 +00:00
$admin_user = $this->drupalCreateUser(array('administer themes'));
2009-05-31 07:46:54 +00:00
$this->drupalLogin($admin_user);
// Ensure no other theme's blocks are in the block table yet.
2010-07-08 03:41:27 +00:00
$themes = array();
2011-12-13 03:29:45 +00:00
$themes['default'] = variable_get('theme_default', 'stark');
2010-07-08 03:41:27 +00:00
if ($admin_theme = variable_get('admin_theme')) {
$themes['admin'] = $admin_theme;
}
$count = db_query_range('SELECT 1 FROM {block} WHERE theme NOT IN (:themes)', 0, 1, array(':themes' => $themes))->fetchField();
2010-08-05 23:53:39 +00:00
$this->assertFalse($count, t('Only the default theme and the admin theme have blocks.'));
2009-05-31 07:46:54 +00:00
// Populate list of all blocks for matching against new theme.
$blocks = array();
2010-07-08 03:41:27 +00:00
$result = db_query('SELECT * FROM {block} WHERE theme = :theme', array(':theme' => $themes['default']));
2009-05-31 07:46:54 +00:00
foreach ($result as $block) {
// $block->theme and $block->bid will not match, so remove them.
unset($block->theme, $block->bid);
$blocks[$block->module][$block->delta] = $block;
}
// Turn on the Stark theme and ensure that it contains all of the blocks
2010-07-08 03:41:27 +00:00
// the default theme had.
2009-12-01 00:39:35 +00:00
theme_enable(array('stark'));
variable_set('theme_default', 'stark');
2010-07-08 03:41:27 +00:00
$result = db_query('SELECT * FROM {block} WHERE theme = :theme', array(':theme' => 'stark'));
2009-05-31 07:46:54 +00:00
foreach ($result as $block) {
unset($block->theme, $block->bid);
2010-08-05 23:53:39 +00:00
$this->assertEqual($blocks[$block->module][$block->delta], $block, t('Block %name matched', array('%name' => $block->module . '-' . $block->delta)));
2009-05-31 07:46:54 +00:00
}
}
}
2009-05-31 06:31:00 +00:00
/**
* Test the block system with admin themes.
*/
class BlockAdminThemeTestCase extends DrupalWebTestCase {
public static function getInfo() {
return array(
2009-07-13 21:51:42 +00:00
'name' => 'Admin theme block admin accessibility',
2011-04-15 01:57:06 +00:00
'description' => "Check whether the block administer page for a disabled theme accessible if and only if it's the admin theme.",
2009-07-13 21:51:42 +00:00
'group' => 'Block',
2009-05-31 06:31:00 +00:00
);
}
2009-11-10 17:27:54 +00:00
2009-05-31 06:31:00 +00:00
/**
* Check for the accessibility of the admin theme on the block admin page.
*/
function testAdminTheme() {
// Create administrative user.
2009-12-01 22:30:31 +00:00
$admin_user = $this->drupalCreateUser(array('administer blocks', 'administer themes'));
2009-05-31 06:31:00 +00:00
$this->drupalLogin($admin_user);
// Ensure that access to block admin page is denied when theme is disabled.
2009-07-20 18:51:36 +00:00
$this->drupalGet('admin/structure/block/list/stark');
2010-08-05 23:53:39 +00:00
$this->assertResponse(403, t('The block admin page for a disabled theme can not be accessed'));
2009-05-31 06:31:00 +00:00
// Enable admin theme and confirm that tab is accessible.
$edit['admin_theme'] = 'stark';
2009-07-31 11:20:43 +00:00
$this->drupalPost('admin/appearance', $edit, t('Save configuration'));
2009-07-20 18:51:36 +00:00
$this->drupalGet('admin/structure/block/list/stark');
2010-08-05 23:53:39 +00:00
$this->assertResponse(200, t('The block admin page for the admin theme can be accessed'));
2009-05-31 06:31:00 +00:00
}
}
2010-02-28 07:46:44 +00:00
/**
* Test block caching.
*/
class BlockCacheTestCase extends DrupalWebTestCase {
protected $admin_user;
protected $normal_user;
protected $normal_user_alt;
public static function getInfo() {
return array(
'name' => 'Block caching',
'description' => 'Test block caching.',
'group' => 'Block',
);
}
function setUp() {
parent::setUp('block_test');
// Create an admin user, log in and enable test blocks.
$this->admin_user = $this->drupalCreateUser(array('administer blocks', 'access administration pages'));
$this->drupalLogin($this->admin_user);
// Create additional users to test caching modes.
$this->normal_user = $this->drupalCreateUser();
$this->normal_user_alt = $this->drupalCreateUser();
// Sync the roles, since drupalCreateUser() creates separate roles for
// the same permission sets.
user_save($this->normal_user_alt, array('roles' => $this->normal_user->roles));
$this->normal_user_alt->roles = $this->normal_user->roles;
// Enable our test block.
2010-08-30 00:22:03 +00:00
$edit['blocks[block_test_test_cache][region]'] = 'sidebar_first';
2010-02-28 07:46:44 +00:00
$this->drupalPost('admin/structure/block', $edit, t('Save blocks'));
}
/**
* Test DRUPAL_CACHE_PER_ROLE.
*/
function testCachePerRole() {
$this->setCacheMode(DRUPAL_CACHE_PER_ROLE);
// Enable our test block. Set some content for it to display.
$current_content = $this->randomName();
variable_set('block_test_content', $current_content);
$this->drupalLogin($this->normal_user);
$this->drupalGet('');
2010-08-05 23:53:39 +00:00
$this->assertText($current_content, t('Block content displays.'));
2010-02-28 07:46:44 +00:00
// Change the content, but the cached copy should still be served.
$old_content = $current_content;
$current_content = $this->randomName();
variable_set('block_test_content', $current_content);
$this->drupalGet('');
2010-08-05 23:53:39 +00:00
$this->assertText($old_content, t('Block is served from the cache.'));
2010-02-28 07:46:44 +00:00
// Clear the cache and verify that the stale data is no longer there.
cache_clear_all();
$this->drupalGet('');
2010-08-05 23:53:39 +00:00
$this->assertNoText($old_content, t('Block cache clear removes stale cache data.'));
$this->assertText($current_content, t('Fresh block content is displayed after clearing the cache.'));
2010-02-28 07:46:44 +00:00
// Test whether the cached data is served for the correct users.
$old_content = $current_content;
$current_content = $this->randomName();
variable_set('block_test_content', $current_content);
$this->drupalLogout();
$this->drupalGet('');
2010-08-05 23:53:39 +00:00
$this->assertNoText($old_content, t('Anonymous user does not see content cached per-role for normal user.'));
2010-02-28 07:46:44 +00:00
$this->drupalLogin($this->normal_user_alt);
$this->drupalGet('');
2010-08-05 23:53:39 +00:00
$this->assertText($old_content, t('User with the same roles sees per-role cached content.'));
2010-02-28 07:46:44 +00:00
$this->drupalLogin($this->admin_user);
$this->drupalGet('');
2010-08-05 23:53:39 +00:00
$this->assertNoText($old_content, t('Admin user does not see content cached per-role for normal user.'));
2010-02-28 07:46:44 +00:00
$this->drupalLogin($this->normal_user);
$this->drupalGet('');
2010-08-05 23:53:39 +00:00
$this->assertText($old_content, t('Block is served from the per-role cache.'));
2010-02-28 07:46:44 +00:00
}
/**
* Test DRUPAL_CACHE_GLOBAL.
*/
function testCacheGlobal() {
$this->setCacheMode(DRUPAL_CACHE_GLOBAL);
$current_content = $this->randomName();
variable_set('block_test_content', $current_content);
$this->drupalGet('');
2010-08-05 23:53:39 +00:00
$this->assertText($current_content, t('Block content displays.'));
2010-02-28 07:46:44 +00:00
$old_content = $current_content;
$current_content = $this->randomName();
variable_set('block_test_content', $current_content);
$this->drupalLogout();
$this->drupalGet('user');
2010-08-05 23:53:39 +00:00
$this->assertText($old_content, t('Block content served from global cache.'));
2010-02-28 07:46:44 +00:00
}
/**
* Test DRUPAL_NO_CACHE.
*/
function testNoCache() {
$this->setCacheMode(DRUPAL_NO_CACHE);
$current_content = $this->randomName();
variable_set('block_test_content', $current_content);
// If DRUPAL_NO_CACHE has no effect, the next request would be cached.
$this->drupalGet('');
2010-08-05 23:53:39 +00:00
$this->assertText($current_content, t('Block content displays.'));
2010-02-28 07:46:44 +00:00
// A cached copy should not be served.
$current_content = $this->randomName();
variable_set('block_test_content', $current_content);
$this->drupalGet('');
2010-08-05 23:53:39 +00:00
$this->assertText($current_content, t('DRUPAL_NO_CACHE prevents blocks from being cached.'));
2010-02-28 07:46:44 +00:00
}
/**
* Test DRUPAL_CACHE_PER_USER.
*/
function testCachePerUser() {
$this->setCacheMode(DRUPAL_CACHE_PER_USER);
$current_content = $this->randomName();
variable_set('block_test_content', $current_content);
$this->drupalLogin($this->normal_user);
$this->drupalGet('');
2010-08-05 23:53:39 +00:00
$this->assertText($current_content, t('Block content displays.'));
2010-02-28 07:46:44 +00:00
$old_content = $current_content;
$current_content = $this->randomName();
variable_set('block_test_content', $current_content);
$this->drupalGet('');
2010-08-05 23:53:39 +00:00
$this->assertText($old_content, t('Block is served from per-user cache.'));
2010-02-28 07:46:44 +00:00
$this->drupalLogin($this->normal_user_alt);
$this->drupalGet('');
2010-08-05 23:53:39 +00:00
$this->assertText($current_content, t('Per-user block cache is not served for other users.'));
2010-02-28 07:46:44 +00:00
$this->drupalLogin($this->normal_user);
$this->drupalGet('');
2010-08-05 23:53:39 +00:00
$this->assertText($old_content, t('Per-user block cache is persistent.'));
2010-02-28 07:46:44 +00:00
}
/**
* Test DRUPAL_CACHE_PER_PAGE.
*/
function testCachePerPage() {
$this->setCacheMode(DRUPAL_CACHE_PER_PAGE);
$current_content = $this->randomName();
variable_set('block_test_content', $current_content);
$this->drupalGet('node');
2010-08-05 23:53:39 +00:00
$this->assertText($current_content, t('Block content displays on the node page.'));
2010-02-28 07:46:44 +00:00
$old_content = $current_content;
$current_content = $this->randomName();
variable_set('block_test_content', $current_content);
$this->drupalGet('user');
2010-08-05 23:53:39 +00:00
$this->assertNoText($old_content, t('Block content cached for the node page does not show up for the user page.'));
2010-02-28 07:46:44 +00:00
$this->drupalGet('node');
2010-08-05 23:53:39 +00:00
$this->assertText($old_content, t('Block content cached for the node page.'));
2010-02-28 07:46:44 +00:00
}
/**
* Private helper method to set the test block's cache mode.
*/
private function setCacheMode($cache_mode) {
db_update('block')
->fields(array('cache' => $cache_mode))
->condition('module', 'block_test')
->execute();
$current_mode = db_query("SELECT cache FROM {block} WHERE module = 'block_test'")->fetchField();
if ($current_mode != $cache_mode) {
2010-08-05 23:53:39 +00:00
$this->fail(t('Unable to set cache mode to %mode. Current mode: %current_mode', array('%mode' => $cache_mode, '%current_mode' => $current_mode)));
2010-02-28 07:46:44 +00:00
}
}
}
2010-04-26 14:10:40 +00:00
/**
* Test block HTML id validity.
*/
class BlockHTMLIdTestCase extends DrupalWebTestCase {
public static function getInfo() {
return array(
'name' => 'Block HTML id',
'description' => 'Test block HTML id validity.',
'group' => 'Block',
);
}
function setUp() {
parent::setUp('block_test');
// Create an admin user, log in and enable test blocks.
$this->admin_user = $this->drupalCreateUser(array('administer blocks', 'access administration pages'));
$this->drupalLogin($this->admin_user);
// Enable our test block.
2010-08-30 00:22:03 +00:00
$edit['blocks[block_test_test_html_id][region]'] = 'sidebar_first';
2010-04-26 14:10:40 +00:00
$this->drupalPost('admin/structure/block', $edit, t('Save blocks'));
// Make sure the block has some content so it will appear
$current_content = $this->randomName();
variable_set('block_test_content', $current_content);
}
/**
* Test valid HTML id.
*/
function testHTMLId() {
$this->drupalGet('');
2010-08-05 23:53:39 +00:00
$this->assertRaw('block-block-test-test-html-id', t('HTML id for test block is valid.'));
2010-04-26 14:10:40 +00:00
}
}
2011-05-22 00:10:25 +00:00
/**
* Unit tests for template_preprocess_block().
*/
class BlockTemplateSuggestionsUnitTest extends DrupalUnitTestCase {
public static function getInfo() {
return array(
'name' => 'Block template suggestions',
'description' => 'Test the template_preprocess_block() function.',
'group' => 'Block',
);
}
/**
* Test if template_preprocess_block() handles the suggestions right.
*/
function testBlockThemeHookSuggestions() {
// Define block delta with underscore to be preprocessed
$block1 = new stdClass();
$block1->module = 'block';
$block1->delta = 'underscore_test';
$block1->region = 'footer';
$variables1 = array();
$variables1['elements']['#block'] = $block1;
$variables1['elements']['#children'] = '';
template_preprocess_block($variables1);
$this->assertEqual($variables1['theme_hook_suggestions'], array('block__footer', 'block__block', 'block__block__underscore_test'), t('Found expected block suggestions for delta with underscore'));
// Define block delta with hyphens to be preprocessed. Hyphens should be
// replaced with underscores.
$block2 = new stdClass();
$block2->module = 'block';
$block2->delta = 'hyphen-test';
$block2->region = 'footer';
$variables2 = array();
$variables2['elements']['#block'] = $block2;
$variables2['elements']['#children'] = '';
2011-09-24 20:15:40 +00:00
// Test adding a class to the block content.
$variables2['content_attributes_array']['class'][] = 'test-class';
2011-05-22 00:10:25 +00:00
template_preprocess_block($variables2);
$this->assertEqual($variables2['theme_hook_suggestions'], array('block__footer', 'block__block', 'block__block__hyphen_test'), t('Hyphens (-) in block delta were replaced by underscore (_)'));
2011-09-24 20:15:40 +00:00
// Test that the default class and added class are available.
$this->assertEqual($variables2['content_attributes_array']['class'], array('test-class', 'content'), t('Default .content class added to block content_attributes_array'));
2011-05-22 00:10:25 +00:00
}
}
2011-11-03 13:07:07 +00:00
/**
* Tests that hidden regions do not inherit blocks when a theme is enabled.
*/
class BlockHiddenRegionTestCase extends DrupalWebTestCase {
public static function getInfo() {
return array(
'name' => 'Blocks not in hidden region',
'description' => 'Checks that a newly enabled theme does not inherit blocks to its hidden regions.',
'group' => 'Block',
);
}
2011-12-03 23:43:50 +00:00
function setUp() {
parent::setUp(array('block_test'));
}
2011-11-03 13:07:07 +00:00
/**
* Tests that hidden regions do not inherit blocks when a theme is enabled.
*/
function testBlockNotInHiddenRegion() {
// Create administrative user.
$admin_user = $this->drupalCreateUser(array('administer blocks', 'administer themes', 'search content'));
$this->drupalLogin($admin_user);
// Enable "block_test_theme" and set it as the default theme.
$theme = 'block_test_theme';
theme_enable(array($theme));
variable_set('theme_default', $theme);
menu_rebuild();
// Ensure that "block_test_theme" is set as the default theme.
$this->drupalGet('admin/structure/block');
$this->assertText('Block test theme(' . t('active tab') . ')', t('Default local task on blocks admin page is the block test theme.'));
// Ensure that the search form block is displayed.
$this->drupalGet('');
$this->assertText('Search', t('Block was displayed on the front page.'));
}
}