View source
<?php
require_once drupal_get_path('module', 'merci') . '/tests/merci_testcase.php';
class MerciUserTestCase extends MerciTestCase {
public $bucket1;
public $bucket2;
public $bucket3;
public $resource;
public $resource2;
public $merci_user;
public $merci_role;
public static function getInfo() {
return array(
'name' => 'MERCI user level testing',
'description' => 'Verify user level functionality.',
'group' => 'Merci',
);
}
function setUp() {
parent::setUp();
$this->bucket1 = $this
->merciCreateItem('bucket');
$this->bucket2 = $this
->merciCreateItem('bucket');
$this->bucket3 = $this
->merciCreateItem('bucket');
$this->resource = $this
->merciCreateItem('resource');
$this->resource2 = $this
->merciCreateItem('resource');
$this->merci_role = $this
->drupalCreateRole(array(
'view revisions',
'revert revisions',
'create confirmed reservations',
'edit own bucket content',
'delete own bucket content',
'edit own resource content',
'delete own resource content',
'create reservations',
));
$this->merci_user = $this
->drupalCreateUser(array(
'view revisions',
'revert revisions',
'create confirmed reservations',
'edit own bucket content',
'delete own bucket content',
'edit own resource content',
'delete own resource content',
'create reservations',
));
$edit = array(
'roles' => $this->merci_user->roles + array(
$this->merci_role => $this->merci_role,
),
);
user_save($this->merci_user, $edit);
$edit = array(
'roles' => $this->admin_user->roles + array(
$this->merci_role => $this->merci_role,
),
);
user_save($this->admin_user, $edit);
}
function _testMerciStaffModule() {
$this
->drupalLogin($this->admin_user);
$bucketstaff = $this
->merciCreateItem('bucket', 'bucketstaff');
$staff_user = $this
->drupalCreateUser(array(
'view revisions',
'revert revisions',
'create confirmed reservations',
'edit own bucket content',
'delete own bucket content',
'edit own bucketstaff content',
'delete own bucketstaff content',
'edit own resource content',
'delete own resource content',
'create reservations',
'manage reservations',
'administer nodes',
));
$this
->drupalLogin($staff_user);
$today = date('Y-m-d');
$node = $bucketstaff;
$edit = array(
'title' => $this
->randomName(),
'field_merci_date[0][value][date]' => $today,
'field_merci_date[0][value][time]' => '09:15',
'field_merci_date[0][value2][date]' => $today,
'field_merci_date[0][value2][time]' => '11:15',
'merci_reservation_items[choice_1][merci_item_nid]' => $node->type,
);
$first = $this
->merciCreateNode('merci-reservation', $edit);
$this
->assertText(t("@title has been created", array(
'@title' => $edit['title'],
)));
$edit = array(
'name' => $this->merci_user->name,
);
$second = $this
->merciUpdateNode($first->nid, $edit);
$name = node_get_types('name', $type);
$this
->assertText(t("You do not have permission to reserve @title.", array(
'@title' => $name,
)));
$edit = array(
'name' => $this->merci_user->name,
'override' => 1,
);
$second = $this
->merciUpdateNode($first->nid, $edit);
$this
->assertText(t("@title has been updated", array(
'@title' => $second->title,
)));
$edit = array(
'name' => $this->merci_user->name,
'merci_reservation_status' => 5,
);
$second = $this
->merciUpdateNode($first->nid, $edit);
$this
->assertText(t("@title has been updated", array(
'@title' => $second->title,
)));
}
function _testMerciStatus() {
}
function _testMerciMaxHoursPerReservation() {
}
function _testMerciAllowOvernight() {
}
function testMerciHoursOfOperation() {
$this
->drupalLogin($this->admin_user);
$settings = array(
'merci_default_reservation_status' => '2',
'merci_max_days_advance_reservation' => '0',
'merci_saturday_is_weekend' => '1',
'merci_sunday_is_weekend' => '1',
'merci_hours_mon' => '09:00-17:00',
'merci_hours_tue' => '09:00-17:00',
'merci_hours_wed' => '09:00-17:00',
'merci_hours_thu' => '09:00-17:00',
'merci_hours_fri' => '09:00-17:00',
'merci_hours_sat' => '09:00-17:00',
'merci_hours_sun' => '09:00-17:00',
'merci_hours_admin' => '07:00-22:00',
'merci_closed_dates' => '12-25',
'merci_lock' => FALSE,
);
$this
->merciCreateConfig($settings);
$this
->drupalLogin($this->merci_user);
$today = date('Y-m-d');
$day = strtolower(date('D'));
$fancy_day = date('l');
$node = $this->bucket1;
$edit = array(
'title' => $this
->randomName(),
'field_merci_date[0][value][date]' => $today,
'field_merci_date[0][value][time]' => '08:15',
'field_merci_date[0][value2][date]' => $today,
'field_merci_date[0][value2][time]' => '11:15',
'merci_reservation_items[choice_1][merci_item_nid]' => $node->type,
);
$first = $this
->merciCreateNode('merci-reservation', $edit, FALSE);
$this
->assertText(t("Reservations cannot start at a time before 9:00."));
$node = $this->bucket1;
$edit = array(
'title' => $this
->randomName(),
'field_merci_date[0][value][date]' => $today,
'field_merci_date[0][value][time]' => '16:15',
'field_merci_date[0][value2][date]' => $today,
'field_merci_date[0][value2][time]' => '23:15',
'merci_reservation_items[choice_1][merci_item_nid]' => $node->type,
);
$first = $this
->merciCreateNode('merci-reservation', $edit, FALSE);
$this
->assertText(t("Reservations cannot end at a time after 17:00."));
$this
->drupalLogin($this->admin_user);
$settings = array(
'merci_default_reservation_status' => '2',
'merci_max_days_advance_reservation' => '0',
'merci_saturday_is_weekend' => '1',
'merci_sunday_is_weekend' => '1',
'merci_hours_mon' => '09:00-17:00',
'merci_hours_tue' => '09:00-17:00',
'merci_hours_wed' => '09:00-17:00',
'merci_hours_thu' => '09:00-17:00',
'merci_hours_fri' => '09:00-17:00',
'merci_hours_sat' => '09:00-17:00',
'merci_hours_sun' => '09:00-17:00',
'merci_hours_admin' => '07:00-22:00',
'merci_closed_dates' => '12-25',
'merci_lock' => FALSE,
);
unset($settings['merci_hours_' . $day]);
$form_state['values'] = $settings;
module_load_include('inc', 'merci', 'includes/merci.admin');
merci_admin_settings_submit($form, &$form_state);
$this
->drupalLogin($this->merci_user);
$node = $this->bucket1;
$edit = array(
'title' => $this
->randomName(),
'field_merci_date[0][value][date]' => $today,
'field_merci_date[0][value][time]' => '09:15',
'field_merci_date[0][value2][date]' => $today,
'field_merci_date[0][value2][time]' => '10:15',
'merci_reservation_items[choice_1][merci_item_nid]' => $node->type,
);
$first = $this
->merciCreateNode('merci-reservation', $edit, FALSE);
$this
->assertRaw(t("Reservations cannot start on a %day.", array(
'%day' => $fancy_day,
)));
$this
->assertRaw(t("Reservations cannot end on a %day.", array(
'%day' => $fancy_day,
)));
}
function testMerciClosedDays() {
$this
->drupalLogin($this->merci_user);
$closed = variable_get('merci_closed_dates', '12-25');
$today = '2010-' . $closed;
$node = $this->bucket1;
$edit = array(
'title' => $this
->randomName(),
'field_merci_date[0][value][date]' => $today,
'field_merci_date[0][value][time]' => '09:15',
'field_merci_date[0][value2][date]' => $today,
'field_merci_date[0][value2][time]' => '11:15',
'merci_reservation_items[choice_1][merci_item_nid]' => $node->type,
);
$first = $this
->merciCreateNode('merci-reservation', $edit, FALSE);
$this
->assertText(t("Sorry, but we are closed on December 25th for a holiday or special event."));
}
function testMerciMaxDays() {
$this
->drupalLogin($this->merci_user);
$max_days = 2;
variable_set("merci_max_days_advance_reservation", $max_days);
$max_days++;
$later = date('Y-m-d', time() + $max_days * 24 * 3600);
$today = date('Y-m-d');
$node = $this->bucket1;
$edit = array(
'title' => $this
->randomName(),
'field_merci_date[0][value][date]' => $later,
'field_merci_date[0][value][time]' => '09:15',
'field_merci_date[0][value2][date]' => $later,
'field_merci_date[0][value2][time]' => '11:15',
'merci_reservation_items[choice_1][merci_item_nid]' => $node->type,
);
$first = $this
->merciCreateNode('merci-reservation', $edit, FALSE);
$this
->assertText(t("You cannot make a Reservation more than 2 days in advance."));
variable_set("merci_max_days_advance_reservation", 0);
}
function testMerciBucketAvailability() {
$this
->drupalLogin($this->merci_user);
$node = $this->bucket1;
$edit = array(
'title' => $this
->randomName(),
'field_merci_date[0][value][date]' => '2011-01-05',
'field_merci_date[0][value][time]' => '09:15',
'field_merci_date[0][value2][date]' => '2011-01-05',
'field_merci_date[0][value2][time]' => '11:15',
'merci_reservation_items[choice_1][merci_item_nid]' => $node->type,
);
$first = $this
->merciCreateNode('merci-reservation', $edit);
$this
->assertText(t("@title has been created", array(
'@title' => $edit['title'],
)));
$this
->drupalLogin($this->admin_user);
$edit = array(
'merci_reservation_items[1][merci_item_nid]' => $node->nid,
);
$title = $first->title;
$first = $this
->merciUpdateNode($first->nid, $edit);
$this
->assertText(t("@title has been updated.", array(
'@title' => $title,
)));
$this
->drupalLogin($this->merci_user);
$node = $this->bucket2;
$edit = array(
'title' => $this
->randomName(),
'field_merci_date[0][value][date]' => '2011-01-05',
'field_merci_date[0][value][time]' => '09:15',
'field_merci_date[0][value2][date]' => '2011-01-05',
'field_merci_date[0][value2][time]' => '11:15',
'merci_reservation_items[choice_1][merci_item_nid]' => $node->type,
);
$second = $this
->merciCreateNode('merci-reservation', $edit);
$this
->assertText(t("@title has been created", array(
'@title' => $edit['title'],
)));
$node = $this->bucket3;
$edit = array(
'title' => $this
->randomName(),
'field_merci_date[0][value][date]' => '2011-01-05',
'field_merci_date[0][value][time]' => '09:15',
'field_merci_date[0][value2][date]' => '2011-01-05',
'field_merci_date[0][value2][time]' => '11:15',
'merci_reservation_items[choice_1][merci_item_nid]' => $node->type,
);
$third = $this
->merciCreateNode('merci-reservation', $edit);
$this
->assertText(t("@title has been created", array(
'@title' => $edit['title'],
)));
$node = $this->bucket3;
$edit = array(
'title' => $this
->randomName(),
'field_merci_date[0][value][date]' => '2011-01-05',
'field_merci_date[0][value][time]' => '09:15',
'field_merci_date[0][value2][date]' => '2011-01-05',
'field_merci_date[0][value2][time]' => '10:15',
'merci_reservation_items[choice_1][merci_item_nid]' => $node->type,
);
$fail = $this
->merciCreateNode('merci-reservation', $edit, FALSE);
$this
->assertText(t("conflict with one or more existing reservations"));
$node = $this->bucket3;
$edit = array(
'title' => $this
->randomName(),
'field_merci_date[0][value][date]' => '2011-01-06',
'field_merci_date[0][value][time]' => '09:15',
'field_merci_date[0][value2][date]' => '2011-01-06',
'field_merci_date[0][value2][time]' => '10:15',
'merci_reservation_items[choice_1][merci_item_nid]' => $node->type,
);
$fourth = $this
->merciCreateNode('merci-reservation', $edit);
$this
->assertText(t("@title has been created", array(
'@title' => $edit['title'],
)));
$edit = array(
'field_merci_date[0][value][date]' => '2011-01-05',
'field_merci_date[0][value][time]' => '09:15',
'field_merci_date[0][value2][date]' => '2011-01-05',
'field_merci_date[0][value2][time]' => '10:00',
);
$title = $second->title;
$second = $this
->merciUpdateNode($second->nid, $edit);
$this
->assertText(t("@title has been updated.", array(
'@title' => $title,
)));
$edit = array(
'field_merci_date[0][value][date]' => '2011-01-05',
'field_merci_date[0][value][time]' => '10:15',
'field_merci_date[0][value2][date]' => '2011-01-05',
'field_merci_date[0][value2][time]' => '11:15',
);
$title = $third->title;
$third = $this
->merciUpdateNode($third->nid, $edit);
$this
->assertText(t("@title has been updated.", array(
'@title' => $title,
)));
$node = $this->bucket3;
$edit = array(
'title' => $this
->randomName(),
'field_merci_date[0][value][date]' => '2011-01-05',
'field_merci_date[0][value][time]' => '09:15',
'field_merci_date[0][value2][date]' => '2011-01-05',
'field_merci_date[0][value2][time]' => '10:15',
'merci_reservation_items[choice_1][merci_item_nid]' => $node->type,
);
$pass = $this
->merciCreateNode('merci-reservation', $edit);
$this
->assertText(t("@title has been created", array(
'@title' => $edit['title'],
)));
$this
->drupalLogin($this->admin_user);
$edit = array(
'merci_reservation_status' => 5,
);
$title = $pass->title;
$pass = $this
->merciUpdateNode($pass->nid, $edit);
$this
->assertText(t("@title has been updated.", array(
'@title' => $title,
)));
$this
->drupalLogin($this->merci_user);
$node = $this->bucket3;
$edit = array(
'title' => $this
->randomName(),
'field_merci_date[0][value][date]' => '2011-01-05',
'field_merci_date[0][value][time]' => '09:15',
'field_merci_date[0][value2][date]' => '2011-01-05',
'field_merci_date[0][value2][time]' => '10:15',
'merci_reservation_items[choice_1][merci_item_nid]' => $node->type,
);
$pass = $this
->merciCreateNode('merci-reservation', $edit);
$this
->assertText(t("@title has been created", array(
'@title' => $edit['title'],
)));
}
function testMerciResourceAvailability() {
$this
->drupalLogin($this->merci_user);
$node = $this->resource;
$edit = array(
'title' => $this
->randomName(),
'field_merci_date[0][value][date]' => '2011-01-05',
'field_merci_date[0][value][time]' => '09:15',
'field_merci_date[0][value2][date]' => '2011-01-05',
'field_merci_date[0][value2][time]' => '11:15',
'merci_reservation_items[choice_1][merci_item_nid]' => $node->nid,
);
$third = $this
->merciCreateNode('merci-reservation', $edit);
$this
->assertText(t("@title has been created", array(
'@title' => $edit['title'],
)));
$title = $edit['title'];
$edit = array(
'field_merci_date[0][value][date]' => '2011-01-05',
'field_merci_date[0][value][time]' => '09:15',
'field_merci_date[0][value2][date]' => '2011-01-05',
'field_merci_date[0][value2][time]' => '11:15',
);
$fourth = $this
->merciUpdateNode($third->nid, $edit);
$this
->assertText(t("@title has been updated", array(
'@title' => $title,
)));
$node = $this->resource;
$edit = array(
'title' => $this
->randomName(),
'field_merci_date[0][value][date]' => '2011-01-05',
'field_merci_date[0][value][time]' => '09:15',
'field_merci_date[0][value2][date]' => '2011-01-05',
'field_merci_date[0][value2][time]' => '10:15',
'merci_reservation_items[choice_1][merci_item_nid]' => $node->nid,
);
$fail = $this
->merciCreateNode('merci-reservation', $edit, FALSE);
$this
->assertText(t("conflict with one or more existing reservations"));
}
function testMerciCheckedOutCase() {
$today = date('Y-m-d', time() + 3600 * 24);
$this
->drupalLogin($this->merci_user);
$node = $this->bucket1;
$edit = array(
'title' => $this
->randomName(),
'field_merci_date[0][value][date]' => $today,
'field_merci_date[0][value][time]' => '09:15',
'field_merci_date[0][value2][date]' => $today,
'field_merci_date[0][value2][time]' => '10:15',
'merci_reservation_items[choice_1][merci_item_nid]' => $node->type,
);
$first = $this
->merciCreateNode('merci-reservation', $edit);
$this
->assertText(t("@title has been created", array(
'@title' => $edit['title'],
)));
$staff_user = $this
->drupalCreateUser(array(
'view revisions',
'revert revisions',
'create confirmed reservations',
'edit own bucket content',
'delete own bucket content',
'edit own resource content',
'delete own resource content',
'create reservations',
'manage reservations',
'administer nodes',
));
$this
->drupalLogin($staff_user);
$edit = array(
'merci_reservation_items[1][merci_item_nid]' => $node->nid,
'merci_reservation_status' => MERCI_STATUS_CHECKED_OUT,
);
$fourth = $this
->merciUpdateNode($first->nid, $edit);
$this
->assertText(t("@title has been updated", array(
'@title' => $first->title,
)));
$checked_out = merci_get_reservation_count($node->type);
$this
->assertEqual($checked_out, 1, "Check return of merci_get_reservation_count");
$edit = array(
'merci_reservation_status' => MERCI_STATUS_CHECKED_IN,
);
$fourth = $this
->merciUpdateNode($first->nid, $edit);
$this
->assertText(t("@title has been updated", array(
'@title' => $first->title,
)));
$checked_out = merci_get_reservation_count($node->type);
$this
->assertEqual($checked_out, 0, "Check return of merci_get_reservation_count");
$edit = array(
'merci_reservation_items[1][merci_item_nid]' => $node->nid,
'merci_reservation_status' => MERCI_STATUS_CHECKED_OUT,
);
$fourth = $this
->merciUpdateNode($first->nid, $edit);
$this
->assertText(t("@title has been updated", array(
'@title' => $first->title,
)));
$checked_out = merci_get_reservation_count($node->type);
$this
->assertEqual($checked_out, 1, "Check return of merci_get_reservation_count");
node_delete($fourth->nid);
$checked_out = merci_get_reservation_count($node->type);
$this
->assertEqual($checked_out, 0, "Check return of merci_get_reservation_count");
}
}