Bachir Soussi Chiadmi 1bc61b12ad first import
2015-04-08 11:40:19 +02:00

166 lines
4.9 KiB
Plaintext

<?php
class BoxesTestCase extends DrupalWebTestCase {
protected $profile = 'testing';
/**
* Implementation of getInfo().
*/
public static function getInfo() {
return array(
'name' => t('Boxes functionality'),
'description' => t('Add and delete custom boxes.'),
'group' => t('Boxes'),
);
}
/**
* Implementation of setUp().
*/
function setUp() {
parent::setUp(array('comment', 'ctools', 'block', 'boxes'));
// Create and login user
$admin_user = $this->drupalCreateUser(array('administer blocks', 'administer boxes'));
$this->drupalLogin($admin_user);
}
/**
* Test creating and deleting a box.
*/
function testBoxes() {
// Add a new box by filling out the input form on the admin/build/block/add page.
$box = array();
$box['description'] = $this->randomName(8);
$box['title'] = $this->randomName(8);
$box['body[value]'] = $this->randomName(32);
$box['delta'] = strtolower($this->randomName(16));
$this->drupalPost('admin/structure/block/box-add/simple', $box, t('Save'));
// Confirm that the box has been created, and then query the created bid.
$this->assertText(
t('@description has been created.', array('@description' => $box['description'])),
t('Box successfully created.'));
$delta = db_query("select delta from {box} where delta = :delta", array('delta' => $box['delta']))->fetchField();
$this->assertNotNull($delta, t('box found in database'));
// Delete the created box & verify that it's been deleted and no longer appearing on the page.
$this->drupalPost('admin/structure/block/manage/boxes/' . $delta . '/delete/', array(), t('Delete'));
// TODO check confirmation message ...of course we'd need to show one first.
$delta = db_query("select delta from {box} where delta = :delta", array('delta' => $box['delta']))->fetchField();
$this->assertFalse($delta, t('box not found in database'));
}
}
class BoxesAjaxTestCase extends DrupalWebTestCase {
/**
* Parse JSON that was generated by drupal_to_js
*
* Because of peculiarities of drupal_to_js we need to prepare our json
* for parsing.
*/
function parseJSON() {
// Step one; undo the "HTML escaping" that drupal does.
$json = str_replace(array('\x3c', '\x3e', '\x26'), array("<", ">", "&"), $this->content);
// Step two; handle our escaped single quotes with extreme care,
$json = str_replace(array("\'"), array("\x27"), $json);
// Step three; parse!
$json = json_decode($json);
// JSON_ERROR_NONE == 0 in PHP 5.3
$error = function_exists('json_last_error')
? json_last_error()
: $json == NULL? 1 : 0;
if ($error === 0) {
$this->pass("Parsed JSON response");
}
else {
$this->fail("Failed to parse JSON response");
}
return $json;
}
/**
* Load a block via the context ajax callback and set the payload as the
* content for simpletest.
*/
function ajaxLoadBoxesBlock($delta, $path = 'node') {
$this->drupalGet($path, array('query' => array('boxes_delta' => $delta)));
$response = $this->parseJSON();
$block = NULL;
foreach ($response as $command) {
if (($command->command == 'insert') && ($command->method == 'replaceWith')) {
$block = $command->data;
break;
}
}
if ($block) {
$this->pass("Loaded block");
// Replace contents of the reponse with the decoded JSON
$this->content = $block;
}
else {
$this->fail('Failed to load block');
}
}
}
class BoxesBasicAjaxTestCase extends BoxesAjaxTestCase {
/**
* Implementation of getInfo().
*/
public static function getInfo() {
return array(
'name' => t('Boxes Ajax functionality'),
'description' => t('Add a custom boxes with AJAX.'),
'group' => t('Boxes'),
);
}
/**
* Implementation of setUp().
*/
function setUp() {
parent::setUp('ctools', 'context', 'boxes');
// Create and login user
$admin_user = $this->drupalCreateUser(array('administer blocks', 'administer boxes'));
$this->drupalLogin($admin_user);
}
/**
* Test creating and deleting a box.
*/
function testAjaxBoxes() {
$this->ajaxLoadBoxesBlock('boxes_add__simple');
$this->assertText(t('Add custom box'), 'Found box add form');
$edit = array(
'description' => $this->randomName(),
'title' => $this->randomName(),
'body[value]' => $this->randomName(32),
);
$this->drupalPost(NULL, $edit, t('Save'), array('query' => array('boxes_delta' => 'boxes_add__simple')));
$response = $this->parseJSON();
$delta = NULL;
foreach ($response as $command) {
if ($command->command == 'getBlock') {
$delta = $command->delta;
break;
}
}
if (!$delta) {
$this->fail('AJAX block submission failed');
}
$this->ajaxLoadBoxesBlock($delta);
$this->assertText($edit['title'], 'Found box');
}
}