Skip to content
addthis.test 6.6 KiB
Newer Older
<?php

/**
 * @file
 * Tests for the AddThis-module.
 */

Jani Palsamäki's avatar
Jani Palsamäki committed
class AddThisFunctionalityTestCase extends DrupalWebTestCase {
Jani Palsamäki's avatar
Jani Palsamäki committed
  private $user;

  public function setUp() {
    parent::setUp(AddThis::MODULE_NAME);
Jani Palsamäki's avatar
Jani Palsamäki committed
    $this->createAndLoginUser();
Jani Palsamäki's avatar
Jani Palsamäki committed
  }

  public function getInfo() {
    return array(
Jani Palsamäki's avatar
Jani Palsamäki committed
      'name' => 'AddThis: Functionality tests',
      'description' => 'Functionality tests for the AddThis-module.',
Jani Palsamäki's avatar
Jani Palsamäki committed
  public function testFunctionality() {
Jani Palsamäki's avatar
Jani Palsamäki committed
    $this->addThisShouldBeAbleToBeUsedAsField();
Jani Palsamäki's avatar
Jani Palsamäki committed
    $this->addThisShouldBeAbleToBeUsedAsBlock();

    $this->addThisSystemSettingsShouldBeAbleToBeSaved();
  private function addThisShouldProvideHelp() {
Jani Palsamäki's avatar
Jani Palsamäki committed
    $helpText = module_invoke(AddThis::MODULE_NAME, 'help', 'admin/help#addthis', NULL);
    $this->assertTrue(TestHelper::stringContains($helpText, t('About')), 'AddThis-module should provide help.');
Jani Palsamäki's avatar
Jani Palsamäki committed
  }
Jani Palsamäki's avatar
Jani Palsamäki committed

  private function addThisShouldDefineField() {
Jani Palsamäki's avatar
Jani Palsamäki committed
    $fieldInfo = module_invoke(AddThis::MODULE_NAME, 'field_info');
    $this->assertTrue(is_array($fieldInfo), t('AddThis-module should define a field.'));
Jani Palsamäki's avatar
Jani Palsamäki committed
  }
Jani Palsamäki's avatar
Jani Palsamäki committed

  private function addThisShouldDefineBlock() {
Jani Palsamäki's avatar
Jani Palsamäki committed
    $blockInfo = module_invoke(AddThis::MODULE_NAME, 'block_info');
    $this->assertTrue(is_array($blockInfo), t('AddThis-module should define a block.'));
Jani Palsamäki's avatar
Jani Palsamäki committed

Jani Palsamäki's avatar
Jani Palsamäki committed
  private function addThisShouldBeAbleToBeUsedAsField() {
    $edit = array();
Jani Palsamäki's avatar
Jani Palsamäki committed
    $label = TestHelper::generateRandomLowercaseString();
    $edit["fields[_add_new_field][label]"] = $label;
    $edit["fields[_add_new_field][field_name]"] = $label;
Jani Palsamäki's avatar
Jani Palsamäki committed
    $edit["fields[_add_new_field][type]"] = 'addthis';
    $edit["fields[_add_new_field][widget_type]"] = 'addthis_button';

    $this->drupalPost('admin/structure/types/manage/article/fields', $edit, t('Save'));

    $this->assertText($label, 'AddThis-module should be able to be added as a field.');
    $this->addThisShouldProvideWidgetTypeCompactButton();
    $this->addThisShouldProvideWidgetTypeDisabled();
    $this->addThisShouldProvideWidgetTypeLargeButton();
    $this->addThisShouldProvideWidgetTypeSharecount();
    $this->addThisShouldProvideWidgetTypeToolbox();

    $this->addThisFieldSettingsShouldBeAbleToBeSaved($label);
  private function addThisShouldProvideWidgetTypeCompactButton() {
    $this->assertText('Compact button', 'AddThis-module should provide widget type "Compact button"');
  private function addThisShouldProvideWidgetTypeDisabled() {
    $this->assertText('Disabled', 'AddThis-module should provide widget type "Disabled"');
  private function addThisShouldProvideWidgetTypeLargeButton() {
    $this->assertText('Large button', 'AddThis-module should provide widget type "Large button"');
  private function addThisShouldProvideWidgetTypeSharecount() {
    $this->assertText('Sharecount', 'AddThis-module should provide widget type "Sharecount"');
  private function addThisShouldProvideWidgetTypeToolbox() {
    $this->assertText('Toolbox', 'AddThis-module should provide widget type "Toolbox"');
Jani Palsamäki's avatar
Jani Palsamäki committed
  }

  private function addThisFieldSettingsShouldBeAbleToBeSaved($label) {
    $edit = array();
    $edit["field[settings][addthis_style]"] = AddThis::WIDGET_TYPE_LARGE_BUTTON;

    $this->drupalPost(NULL, $edit, t('Save field settings'));

    $this->assertText(t("Updated field @name field settings.", array('@name' => $label)),
                      'AddThis-module field settings should be able to be saved.');
  }

Jani Palsamäki's avatar
Jani Palsamäki committed
  private function addThisShouldBeAbleToBeUsedAsBlock() {
Jani Palsamäki's avatar
Jani Palsamäki committed
    $this->drupalGet('admin/structure/block');
    $this->assertRaw(t('An AddThis-block.'));

    $this->addThisBlockSettingsShouldBeAbleToBeSaved();
  }

  private function addThisBlockSettingsShouldBeAbleToBeSaved() {
    $edit = array();
    $edit[AddThis::BLOCK_WIDGET_TYPE_KEY] = AddThis::WIDGET_TYPE_COMPACT_BUTTON;

    $this->drupalPost('admin/structure/block/manage/addthis/addthis_block/configure', $edit, t('Save block'));

    $this->assertText(t('The block configuration has been saved.'));
  }

  private function addThisSystemSettingsShouldBeAbleToBeSaved() {
    $edit = array();
Jani Palsamäki's avatar
Jani Palsamäki committed
    $profileId = TestHelper::generateRandomLowercaseString();
    $edit[AddThis::PROFILE_ID_KEY] = $profileId;
    $serviceName = '2linkme';
    $edit["addthis_enabled_services[$serviceName]"] = $serviceName;

    $this->drupalPost('admin/config/system/addthis', $edit, t('Save configuration'));

    $this->assertText(t('The configuration options have been saved.'), 'AddThis system settings should be able to be saved.');

    $this->addThisProfileIdShouldBeAbleToBeSaved($profileId);

    $this->addThisEnabledServicesShouldBeAbleToBeSaved($serviceName);
  }

  private function addThisProfileIdShouldBeAbleToBeSaved($profileId) {
    $this->assertFieldByName(AddThis::PROFILE_ID_KEY, $profileId, 'AddThis profile ID should be able to be saved.');
  }

  private function addThisEnabledServicesShouldBeAbleToBeSaved($serviceName) {
    $this->assertFieldChecked('edit-addthis-enabled-services-' . $serviceName, 'AddThis enabled services should be able to be saved.');
Jani Palsamäki's avatar
Jani Palsamäki committed
  }

  private function createAndLoginUser() {
    $this->user = $this->createAdminUser();
    $this->drupalLogin($this->user);
  }

  private function createAdminUser() {
    return $this->drupalCreateUser(
      array(
        'administer addthis',
        'administer blocks',
        'administer content types',
        'administer nodes'
      )
    );
Jani Palsamäki's avatar
Jani Palsamäki committed
  }
}

class AddThisPermissionsTestCase extends DrupalWebTestCase {

  private $user;

  public function setUp() {
    parent::setUp(AddThis::MODULE_NAME);
    $this->createAndLoginUser();
  }

  public function getInfo() {
    return array(
Jani Palsamäki's avatar
Jani Palsamäki committed
      'name' => 'AddThis: Permission tests',
      'description' => 'Permission tests for the AddThis-module.',
      'group' => 'AddThis',
    );
  }

  public function testUserWithoutAdministerAddThisPermissionShouldNotBeAllowedToAccessAddThisSystemSettings() {
Jani Palsamäki's avatar
Jani Palsamäki committed
    $this->drupalGet('admin/config/system/addthis');
    $this->assertRaw(t('Access denied'));
  }

  private function createAdminUserWithoutAddThisAdministrationPermission() {
Jani Palsamäki's avatar
Jani Palsamäki committed
    return $this->drupalCreateUser(array('administer content types'));
  }

  private function createAndLoginUser() {
    $this->user = $this->createAdminUserWithoutAddThisAdministrationPermission();
    $this->drupalLogin($this->user);
  }
Jani Palsamäki's avatar
Jani Palsamäki committed
}

class TestHelper {
Jani Palsamäki's avatar
Jani Palsamäki committed
  public static function stringContains($string, $contains) {
    return strpos($string, $contains) !== FALSE;
  }
Jani Palsamäki's avatar
Jani Palsamäki committed

  public static function generateRandomLowercaseString() {
    return drupal_strtolower(DrupalWebTestCase::randomName());
  }