authenticatedUser = $this->drupalCreateUser(); $this->adminUser = $this->drupalCreateUser(array( 'administer blocks', 'administer search', 'access administration pages', )); } /** * Instantiates the adapter plugin associated with the searcher. * * The following tests are executed: * - DrupalTestCase::assertTrue(): Asserts that FALSE is not returned by * facetapi_adapter_load(). * * @param string $searcher * The machine readable name of the searcher. * * @return FacetapiAdapter * The adapter object, FALSE if the object can't be loaded. * * @see facetapi_adapter_load(). */ public function loadAdapter($searcher) { $adapter = facetapi_adapter_load('facetapi_test'); $value = ($adapter instanceof FacetapiAdapter); $this->assertTrue($value, t('FacetapiAdapter object loaded via facetapi_adapter_load().')); return $adapter; } /** * Enables a facet in the block realm, adds it to the "sidebar_first" region. * * The following tests are executed: * - DrupalTestCase::getPath(): Retrieves path to the administrative * settings page for the block realm. * - DrupalTestCase::getPost(): Enables the facet in the block realm. * - DrupalTestCase::assertRaw(): Ensures the configuration options were * successful by testing for the confirmation message. * - DrupalTestCase::assertTrue(): Double checks that the facet is enabled * via the facetapi_facet_enabled() API function. * - DrupalTestCase::getPost(): Activates the facet block in the * "sidebar_first" region. * - DrupalTestCase::getPath(): Retrieves path to the search page. * - DrupalTestCase::assertRaw(): Tests if the block is displayed by * looking for it's title. * * @param string $facet_name * The machine readable name of the facet. * @param string $label * The title of the block whose existence is being tested. * @param string $realm_name * The machine readable name of the realm. */ public function enableFacet($facet_name, $label, $realm_name = 'block') { $path = 'admin/config/search/facetapi_test/facets/' . $realm_name; // Posts the form, ensures it was successfully submitted. $values = array('enabled_facets[' . $facet_name . ']' => $facet_name); $this->drupalGet($path); $this->drupalPost($path, $values, t('Save configuration')); $this->assertRaw(t('The configuration options have been saved.'), t('Facet form successfully submitted.')); // We have to clear the static cache otherwise this test won't work. This is // OK because the script execution persists when the form is submitted by // the test unlike a real form post where the page has to reload. drupal_static('facetapi_get_searcher_settings', array(), TRUE); drupal_static('facetapi_get_enabled_facets', array(), TRUE); // Tests the status of the enabled facet. $value = facetapi_facet_enabled('facetapi_test', $realm_name, $facet_name); $this->assertTrue($value, t('Facet enabled via the interface.')); // Adds realm to block if we are testing the block realm. if ('block' == $realm_name) { // Generates the "key" by generating and hashing the delta. module_load_include('inc', 'facetapi', 'facetapi.block'); $detla = facetapi_build_delta('facetapi_test', $realm_name, $facet_name); $key = 'facetapi_' . facetapi_hash_delta($detla); // Enables the facet in the "sidebar_first" region. $edit = array('blocks[' . $key . '][region]' => 'sidebar_first'); $this->drupalPost('admin/structure/block', $edit, t('Save blocks')); // Visits search page, raw value mimics return from default theme function. $this->drupalGet('facetapi_test/search'); $raw = t('Filter by @title:', array('@title' => drupal_strtolower($label))); $this->assertRaw($raw, t('Facet block displayed on search page.')); } } } class FacetapiAdapterTestCase extends FacetapiTestCase { public static function getInfo() { return array( 'name' => 'Adapter functionality', 'description' => 'Tests the adapter system.', 'group' => 'Facet API', ); } public function testValidAdapter() { // Tests loading of a valid adapter plugin, sets a semaphore to see if // singleton pattern is implemented. $adapter1 = $this->loadAdapter('facetapi_test'); $adapter1->semaphore = 'test'; $adapter2 = $this->loadAdapter('facetapi_test'); $value = (isset($adapter2->semaphore) && 'test' == $adapter2->semaphore); $this->assertTrue($value, t('Singleton pattern implemented by facetapi_adapter_load().')); } public function testInvalidAdapter() { $adapter = facetapi_adapter_load('bad_adapter'); $this->assertFalse($adapter, t('Loading an invalid adapter returns FALSE.')); } public function testSetParams() { // Sets dummy parameters. $adapter = facetapi_adapter_load('facetapi_test'); $url = drupal_parse_url('http://example.com/index.php?q=test&page=1&f[0]=bundle:page'); $adapter->setParams($url['query']); // Ensures that the "q" and "page" variables are stripped. $params = $adapter->getUrlProcessor()->getParams(); $this->assertTrue(!isset($params['q']), t('The "q" variable is stripped by FacetapiAdapter::setParams().')); $this->assertTrue(!isset($params['page']), t('The "page" variable is stripped by FacetapiAdapter::setParams().')); // Tests that the "bundle:page" variable is set. $value = (isset($params['f'][0]) && 'bundle:page' == $params['f'][0]); $this->assertTrue($value, t('Facet value captured via FacetapiAdapter::setParams().')); } } class FacetapiAdminInterfaceTestCase extends FacetapiTestCase { protected $authenticatedUser; protected $adminUser; public static function getInfo() { return array( 'name' => 'Administrative UI', 'description' => 'Tests the UI for Facet API administrative pages.', 'group' => 'Facet API', ); } public function testFormAccess() { $this->drupalLogin($this->authenticatedUser); $this->drupalGet('admin/config/search/facetapi_test/facet'); $this->assertResponse(403, t('The "administer search" permission is required to access the realm settings form.')); // @todo Randomize facet / realm combination? $this->drupalGet('admin/config/search/facetapi/facetapi_test/block/enabled/edit'); $this->assertResponse(403, t('The "administer search" permission is required to access the facet settings form.')); $this->drupalGet('admin/config/search/facetapi/facetapi_test/block/enabled/dependencies'); $this->assertResponse(403, t('The "administer search" permission is required to access the facet dependencies form.')); $this->drupalGet('admin/config/search/facetapi/facetapi_test/block/enabled/export'); $this->assertResponse(403, t('The "administer search" permission is required to access the facet export form.')); } public function testRealmSettingsForms() { $this->drupalLogin($this->adminUser); // Looks for placeholder text in main settings form. $this->drupalGet('admin/config/search/facetapi_test'); $this->assertRaw(FACETAPI_TEST_FORM_TEXT, t('Facet API test setting form exists.')); // Searches for "block" link in description. $description = t( 'The Blocks realm displays each facet in a separate block. Users are able to refine their searches in a drill-down fashion.', array('@block-page' => url('admin/structure/block', array('query' => array('destination' => 'admin/config/search/facetapi_test/facets/block')))) ); $this->drupalGet('admin/config/search/facetapi_test/facets/block'); $this->assertRaw($description, t('Facet API test facet form exists.')); } public function testEnableFacet() { $this->drupalLogin($this->adminUser); $this->enableFacet('enabled', t('Enabled facet')); } public function testEnableFacetWithColon() { // @todo Implement API to enable facets. // @see http://drupal.org/node/1208326 $this->drupalLogin($this->adminUser); $this->enableFacet('colon:test', t('Colon test')); } } class FacetapiSearchPageInterfaceTestCase extends FacetapiTestCase { protected $authenticatedUser; protected $adminUser; public static function getInfo() { return array( 'name' => 'Search page UI', 'description' => 'Tests the UI for search pages.', 'group' => 'Facet API', ); } public function testFormAccess() { // @todo Implement API to enable facets. // @see http://drupal.org/node/1208326 $this->drupalLogin($this->adminUser); $this->enableFacet('enabled', t('Enabled facet')); $this->drupalLogin($this->authenticatedUser); // @todo Randomize keys. // Tests breadcrumb trail when search keys are in the path. $path = 'facetapi_test/search/testkeys'; $options = array('query' => array('f' => array(0 => 'enabled:testone'))); $this->drupalGet($path, $options); $this->clickLink('testkeys'); $this->assertUrl($path); // Tests breadcrumb trail when search keys are in the query string. $path = 'facetapi_test/search'; $options = array('query' => array('keys' => 'testkeys', 'f' => array(0 => 'enabled:testone'))); $this->drupalGet($path, $options); $this->clickLink('testkeys'); $this->assertUrl($path, array('query' => array('keys' => 'testkeys'))); } }