| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719 |
- <?php
- /**
- * @file
- * Tests for the Facet API module.
- */
- /**
- * Base class for all Facet API test cases.
- */
- class FacetapiTestCase extends DrupalWebTestCase {
- /**
- * Overrides DrupalWebTestCase::setUp().
- *
- * Enables the "block" and "facetapi_test" modules, creates an administrative
- * user with permissions to configure the Faceted Search interface.
- */
- public function setUp() {
- $modules = func_get_args();
- $modules[] = 'block';
- $modules[] = 'facetapi_test';
- forward_static_call_array('parent::setUp', $modules);
- $this->authenticatedUser = $this->drupalCreateUser();
- $this->adminUser = $this->drupalCreateUser(array(
- 'administer blocks',
- 'administer search',
- 'access administration pages',
- ));
- }
- /**
- * Overrides DrupalWebTestCase::drupalPost()
- *
- * Clears static variables on settings submission. 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.
- */
- public function drupalPost($path, $edit, $submit, array $options = array(), array $headers = array(), $form_html_id = NULL, $extra_post = NULL) {
- parent::drupalPost($path, $edit, $submit, $options, $headers, $form_html_id, $extra_post);
- if (t('Save configuration') == $submit) {
- drupal_static('facetapi_get_searcher_settings', array(), TRUE);
- drupal_static('facetapi_get_enabled_facets', array(), TRUE);
- }
- }
- /**
- * Returns adapter, realm, and facet objects and base admin path.
- *
- * Useful with the list() function.
- *
- * @return array
- * An array containing:
- * - The facet definition as retrned by facetapi_facet_load().
- * - The realm definition as retrned by facetapi_realm_load().
- * - The FacetapiAdapter object as returned by facetapi_adapter_load().
- * - The base admin path for facet settings forms.
- */
- public function facetapiLoadObjects($facet_name = 'enabled', $realm_name = 'nodisplay', $searcher = 'facetapi_test') {
- return array(
- facetapi_facet_load($facet_name, $searcher),
- facetapi_realm_load($realm_name),
- facetapi_adapter_load($searcher),
- "admin/config/search/facetapi/$searcher/$realm_name/$facet_name",
- );
- }
- /**
- * Enables a facet via the UI.
- */
- public function facetapiEnableFacet($facet_name = 'enabled', $realm_name = 'block', $searcher = 'facetapi_test') {
- // Capture current user, switch to admin user if necessary.
- $account = $this->loggedInUser;
- if ($account != $this->adminUser) {
- $this->drupalLogin($this->adminUser);
- }
- // Posts the form, ensures it was successfully submitted.
- $path = 'admin/config/search/facetapi_test/facets/' . $realm_name;
- $values = array('enabled_facets[' . $facet_name . ']' => $facet_name);
- $this->drupalPost($path, $values, t('Save configuration'));
- $this->assertRaw(t('The configuration options have been saved.'), t('Facet form successfully submitted.'), 'Facet API');
- // Test that the facet was successfully enabled.
- $value = facetapi_facet_enabled($searcher, $realm_name, $facet_name);
- $this->assertTrue($value, t('Facet enabled via the interface.'), 'Facet API');
- // Log back in as original user if necessary.
- if ($account != $this->adminUser) {
- if ($account) {
- $this->drupalLogin($account);
- }
- else {
- $this->drupalLogout();
- }
- }
- }
- /**
- * Enables a facet block via the UI.
- */
- public function facetapiEnableFacetBlock($facet_name = 'enabled', $realm_name = 'block', $searcher = 'facetapi_test') {
- // Capture current user, switch to admin user if necessary.
- $account = $this->loggedInUser;
- if ($account != $this->adminUser) {
- $this->drupalLogin($this->adminUser);
- }
- // Generates the "key" via the facetapi_hash_delta() function.
- module_load_include('inc', 'facetapi', 'facetapi.block');
- $detla = facetapi_build_delta($searcher, $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'));
- // Log back in as original user if necessary.
- if ($account != $this->adminUser) {
- if ($account) {
- $this->drupalLogin($account);
- }
- else {
- $this->drupalLogout();
- }
- }
- }
- /**
- * Sets debug message flagging which issue was just tested.
- *
- * @param string $issue
- * The URL to the issue on Drupal.org.
- */
- public function facetapiIssueMessage($issue) {
- $href = check_plain($issue);
- $link = '<a href="' . $href . '">' . $href . '</a>';
- $this->pass(t('Tested issue !link', array('!link' => $link)), 'Debug');
- }
- }
- /**
- * Test cases for operations taken through the admin UI.
- */
- 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',
- );
- }
- /**
- * Tests access to callbacks.
- *
- * @todo Test invalid adapters, realms, facets. Test multiple realms.
- */
- public function testFormAccess() {
- $paths = array(
- 'admin/config/search/facetapi_test/facets' => t('realm settings'),
- 'admin/config/search/facetapi/facetapi_test/block/enabled/edit' => t('display settings'),
- 'admin/config/search/facetapi/facetapi_test/block/enabled/dependencies' => t('dependency settings'),
- 'admin/config/search/facetapi/facetapi_test/block/enabled/filters' => t('filter settings'),
- 'admin/config/search/facetapi/facetapi_test/block/enabled/export' => t('export settings'),
- 'admin/config/search/facetapi/facetapi_test/block/enabled/revert' => t('revert settings')
- );
- // Test wheter unprivileged user is denied access to forms.
- $this->drupalLogin($this->authenticatedUser);
- foreach ($paths as $path => $form_name) {
- $this->drupalGet($path);
- $this->assertResponse(403, t('Unprivileged user does not have access to the @form-name form.', array('@form-name' => $form_name)), 'Facet API');
- }
- // Common message for privileged access checks.
- $privileged_message = t('Privileged user with "@permission" permission is granted access to the @form-name form.');
- // Test whether privileged user is granted access for forms.
- // NOTE: $this->adminUser has "administer search" permission.
- $this->drupalLogin($this->adminUser);
- foreach ($paths as $path => $form_name) {
- $this->drupalGet($path);
- $args = array('@permission' => 'administer search', '@form-name' => $form_name);
- $this->assertResponse(200, t($privileged_message, $args));
- }
- // Tests whether privileged user is granted access for forms.
- // Create another user with the "administer facets" permission, test whether
- $facet_admin_user = $this->drupalCreateUser(array('administer facets'));
- $this->drupalLogin($facet_admin_user);
- foreach ($paths as $path => $form_name) {
- $this->drupalGet($path);
- $args = array('@permission' => 'administer facets', '@form-name' => $form_name);
- $this->assertResponse(200, t($privileged_message, $args));
- }
- }
- /**
- * Tests enabling a facet via the UI.
- */
- public function testEnableFacet() {
- list($facet) = $this->facetapiLoadObjects();
- // Enable the "enabled" facet and block via UI.
- $this->drupalLogin($this->adminUser);
- $this->facetapiEnableFacet();
- $this->facetapiEnableFacetBlock();
- // Test that block is positioned on the search page.
- $this->drupalLogin($this->authenticatedUser);
- $this->drupalGet('facetapi_test/search');
- $raw = t('Filter by @title:', array('@title' => drupal_strtolower($facet['label'])));
- $this->assertRaw($raw, t('Facet block displayed on search page.'), 'Facet API');
- }
- /**
- * Tests display form redirects.
- */
- public function testDisplayFormRedirect() {
- list($facet, $realm, $adapter, $base_path) = $this->facetapiLoadObjects();
- $path = "$base_path/edit";
- $button_text = t('Save and go back to realm settings');
- $this->drupalLogin($this->adminUser);
- $this->drupalPost($path, array(), $button_text);
- $this->assertRaw($realm['label'], t('Form is redirected to realm settings form when the "@button-text" button is submitted.', array('@button-text' => $button_text)));
- }
- /**
- * Tests that an admin can selet a valid widget.
- *
- * In addition to checking that a valid widget can be selected, it also tests
- * that an invalid widget cannot be selected by choosing one that does not
- * support the "term" query type.
- */
- public function testWidgetSelect() {
- $this->drupalLogin($this->adminUser);
- list($facet, $realm, $adapter, $base_path) = $this->facetapiLoadObjects();
- $path = "$base_path/edit";
- // Ensure that a valid widget can be selected.
- $this->drupalGet($path);
- $values = array('widget' => 'facetapi_checkbox_links');
- $this->drupalPost($path, $values, t('Save configuration'));
- $settings = $adapter->getFacetSettings($facet, $realm);
- $this->assertEqual($settings->settings['widget'], 'facetapi_checkbox_links', t('The facetapi_checkbox_links widget was successfully selected.'), 'Facet API');
- // Ensure that an invalid widget cannot be selected.
- $this->drupalGet($path);
- $values = array('widget' => 'facetapi_nonterm');
- $this->drupalPost($path, $values, t('Save configuration'));
- $validation_message = t('The widget does not support the %type query type', array('%type' => 'term'));
- $this->assertRaw($validation_message, t('An invalid widget cannot be selected.'), 'Facet API');
- $settings = $adapter->getFacetSettings($facet, $realm);
- $this->assertNotEqual($settings->settings['widget'], 'facetapi_nonterm', t('An invalid widget does not get saved.'), 'Facet API');
- }
- }
- 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() {
- // Enable facet and position block.
- $this->drupalLogin($this->adminUser);
- $this->facetapiEnableFacet();
- $this->facetapiEnableFacetBlock();
- // Logs in as a normal user.
- $this->drupalLogin($this->authenticatedUser);
- // 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')));
- }
- }
- class FacetapiBugFixTestCase extends FacetapiTestCase {
- protected $authenticatedUser;
- protected $adminUser;
- public static function getInfo() {
- return array(
- 'name' => 'Bug Fixes',
- 'description' => 'Tests fixed bugs to prevent regressions.',
- 'group' => 'Facet API',
- );
- }
- /**
- * Tests bug fixed at http://drupal.org/node/1209490.
- */
- public function testEnableFacetWithColon() {
- $this->facetapiEnableFacet('colon:test');
- $this->facetapiIssueMessage('http://drupal.org/node/1209490');
- }
- /**
- * Tests bug fixed at http://drupal.org/node/1443340.
- */
- public function testValidDefaults() {
- list($facet, $realm, $adapter, $base_path) = $this->facetapiLoadObjects('defaults');
- $this->drupalLogin($this->adminUser);
- $path = "$base_path/edit";
- $values = array('widget' => 'facetapi_nonterm');
- $this->drupalGet($path);
- $this->drupalPost($path, $values, t('Save configuration'));
- $settings = $adapter->getFacetSettingsGlobal($facet);
- $message = t('Defaults settings not hard coded to "term" and FACETAPI_OPERATOR_AND.');
- $this->assertEqual($settings->settings['query_type'], 'nonterm', $message, 'Facet API');
- $this->facetapiIssueMessage('http://drupal.org/node/1443340');
- }
- }
- /**
- * Test cases for low level API functions.
- */
- class FacetapiApiFunctions extends FacetapiTestCase {
- protected $authenticatedUser;
- protected $adminUser;
- public static function getInfo() {
- return array(
- 'name' => 'API Functions',
- 'description' => 'Tests low level API functions.',
- 'group' => 'Facet API',
- );
- }
- /**
- * Tests the facetapi_facet_enabled() function.
- *
- * @see facetapi_facet_enabled()
- */
- public function testFacetEnabled() {
- list($facet, $realm, $adapter) = $this->facetapiLoadObjects();
- // Ensure the facet is disabled, which it is by default.
- $enabled = facetapi_facet_enabled('facetapi_test', 'nodisplay', 'enabled');
- $this->assertFalse($enabled, t('Facet flagged as disabled by facetapi_facet_enabled().'), 'Facet API');
- // Enable the facet, ensure the API function flags it as enabled.
- facetapi_save_facet_enabled($adapter, $realm, $facet);
- $enabled = facetapi_facet_enabled('facetapi_test', 'nodisplay', 'enabled');
- $this->assertTrue($enabled, t('Facet flagged as enabled by facetapi_facet_enabled().'), 'Facet API');
- }
- /**
- * Tests facetapi_save_facet_status() API functions.
- *
- * @see facetapi_save_facet_status()
- * @see facetapi_save_facet_enabled()
- * @see facetapi_save_facet_disabled()
- */
- public function testSaveFacetStatus() {
- list($facet, $realm, $adapter) = $this->facetapiLoadObjects();
- facetapi_save_facet_enabled($adapter, $realm, $facet);
- $enabled = facetapi_facet_enabled('facetapi_test', 'nodisplay', 'enabled');
- $this->assertTrue($enabled, t('Facet enabled by facetapi_save_facet_enabled().'), 'Facet API');
- facetapi_save_facet_disabled($adapter, $realm, $facet);
- $enabled = facetapi_facet_enabled('facetapi_test', 'nodisplay', 'enabled');
- $this->assertFalse($enabled, t('Facet disabled by facetapi_save_facet_disabled().'), 'Facet API');
- }
- /**
- * Tests facetapi_set_facet_status() API functions.
- *
- * @see facetapi_set_facet_status()
- * @see facetapi_set_facet_enabled()
- * @see facetapi_set_facet_disabled()
- */
- public function testSetFacetStatus() {
- list($facet, $realm, $adapter) = $this->facetapiLoadObjects();
- // Facet disabled by default, tests temporarily overriding status. Although
- // the setting is disabled, status should be TRUE.
- facetapi_set_facet_enabled('facetapi_test', 'nodisplay', 'enabled');
- $enabled = facetapi_facet_enabled('facetapi_test', 'nodisplay', 'enabled');
- $this->assertTrue($enabled, t('Facet temporarily enabled by facetapi_set_facet_disabled().'), 'Facet API');
- // Saves facet as enabled, tests temporarily overriding status. Although the
- // setting is enabled, status should be FALSE.
- facetapi_save_facet_enabled($adapter, $realm, $facet);
- facetapi_set_facet_disabled('facetapi_test', 'nodisplay', 'enabled');
- $enabled = facetapi_facet_enabled('facetapi_test', 'nodisplay', 'enabled');
- $this->assertFalse($enabled, t('Facet temporarily disabled by facetapi_set_facet_disabled().'), 'Facet API');
- }
- /**
- * Tests the facetapi_translate_string() functionality.
- *
- * The Facet API Test module is not set as the translator module, so we do it
- * by setting the variable in this function. This prevetns it from interfering
- * with other tests.
- *
- * @see facetapi_translate_string().
- */
- public function testTranslateString() {
- // Sets Facet API Test as the translator module.
- variable_set('facetapi:translator_module', 'facetapi_test');
- $translated = facetapi_translate_string('name', 'untranslated');
- $array = unserialize($translated);
- $this->assertEqual($array['return'], 'translated', t('String translated by facetapi_translate_string().'), 'Facet API');
- }
- /**
- * Tests the facetapi_*_active_searcher() functions.
- *
- * @see facetapi_add_active_searcher().
- * @see facetapi_is_active_searcher().
- */
- public function testActiveSearcher() {
- // Searcher is not active by default, test that context is FALSE.
- $active = facetapi_is_active_searcher('facetapi_test');
- $this->assertFalse($active, t('Searcher correctly identified as inactive.'), 'Facet API');
- // Sets active searcher, test that context is TRUE.
- facetapi_add_active_searcher('facetapi_test');
- $active = facetapi_is_active_searcher('facetapi_test');
- $this->assertTrue($active, t('Searcher correctly identified as active.'), 'Facet API');
- }
- /**
- * Tests the requirements system for property existence.
- *
- * @see facetapi_check_requirements()
- * @see facetapi_requirement_property_set()
- * @see facetapi_requirement_realm_property_set()
- * @see facetapi_requirement_facet_property_set()
- */
- public function testPropertySetRequirements() {
- list($facet, $realm, $adapter) = $this->facetapiLoadObjects();
- $requirements = array(
- 'facetapi_requirement_facet_property_set' => array('label' => TRUE),
- );
- $passed = facetapi_check_requirements($requirements, $realm, $facet);
- $this->assertTrue($passed, t('Requirements pass when an existing facet property is required to be set.'), 'Facet API');
- $requirements = array(
- 'facetapi_requirement_facet_property_set' => array('label' => FALSE),
- );
- $passed = facetapi_check_requirements($requirements, $realm, $facet);
- $this->assertFalse($passed, t('Requirements fail when an existing facet property is required to not be set.'), 'Facet API');
- $requirements = array(
- 'facetapi_requirement_facet_property_set' => array('nonsense' => FALSE),
- );
- $passed = facetapi_check_requirements($requirements, $realm, $facet);
- $this->assertTrue($passed, t('Requirements pass when a non-existent facet property is required not to be set.'), 'Facet API');
- $requirements = array(
- 'facetapi_requirement_facet_property_set' => array('nonsense' => TRUE),
- );
- $passed = facetapi_check_requirements($requirements, $realm, $facet);
- $this->assertFalse($passed, t('Requirements fail when a facet property that is not set is required.'), 'Facet API');
- $requirements = array(
- 'facetapi_requirement_realm_property_set' => array('label' => TRUE),
- );
- $passed = facetapi_check_requirements($requirements, $realm, $facet);
- $this->assertTrue($passed, t('Requirements pass when an existing realm property is required to be set.'), 'Facet API');
- $requirements = array(
- 'facetapi_requirement_realm_property_set' => array('label' => FALSE),
- );
- $passed = facetapi_check_requirements($requirements, $realm, $facet);
- $this->assertFalse($passed, t('Requirements fail when an existing realm property is required to not be set.'), 'Facet API');
- $requirements = array(
- 'facetapi_requirement_realm_property_set' => array('nonsense' => FALSE),
- );
- $passed = facetapi_check_requirements($requirements, $realm, $facet);
- $this->assertTrue($passed, t('Requirements pass when a non-existent realm property is required not to be set.'), 'Facet API');
- $requirements = array(
- 'facetapi_requirement_realm_property_set' => array('nonsense' => TRUE),
- );
- $passed = facetapi_check_requirements($requirements, $realm, $facet);
- $this->assertFalse($passed, t('Requirements fail when a realm property that is not set is required.'), 'Facet API');
- }
- /**
- * Tests the requirements system for property equality.
- *
- * @see facetapi_check_requirements()
- * @see facetapi_requirement_property()
- * @see facetapi_requirement_realm_property()
- * @see facetapi_requirement_facet_property()
- */
- public function testPropertyRequirements() {
- list($facet, $realm, $adapter) = $this->facetapiLoadObjects();
- $requirements = array(
- 'facetapi_requirement_facet_property' => array('label' => t('Enabled facet')),
- );
- $passed = facetapi_check_requirements($requirements, $realm, $facet);
- $this->assertTrue($passed, t('Requirements pass when a testing whether a facet property equals the same value.'), 'Facet API');
- $requirements = array(
- 'facetapi_requirement_facet_property' => array('label' => 'Does not match'),
- );
- $passed = facetapi_check_requirements($requirements, $realm, $facet);
- $this->assertFalse($passed, t('Requirements fail when a testing whether a facet property equals a different value.'), 'Facet API');
- $requirements = array(
- 'facetapi_requirement_realm_property' => array('label' => t('No display')),
- );
- $passed = facetapi_check_requirements($requirements, $realm, $facet);
- $this->assertTrue($passed, t('Requirements pass when a testing whether a realm property equals the same value.'), 'Facet API');
- $requirements = array(
- 'facetapi_requirement_realm_property' => array('label' => 'Does not match'),
- );
- $passed = facetapi_check_requirements($requirements, $realm, $facet);
- $this->assertFalse($passed, t('Requirements fail when a testing whether a realm property equals a different value.'), 'Facet API');
- }
- /**
- * Tests the requirements system for hierarchies.
- *
- * @see facetapi_check_requirements()
- * @see facetapi_requirement_facet_property_set()
- * @see facetapi_requirement_facet_hierarchical()
- */
- public function testHierarchicalRequirements() {
- list($e_facet, $realm, $adapter) = $this->facetapiLoadObjects();
- $h_facet = facetapi_facet_load('hierarchical', 'facetapi_test');
- // Tests facetapi_requirement_facet_hierarchical(). Builds the requirements
- // array for the TRUE and FALSE checks.
- $requirements_t = array('facetapi_requirement_facet_hierarchical' => TRUE);
- $requirements_f = array('facetapi_requirement_facet_hierarchical' => FALSE);
- $passed = facetapi_check_requirements($requirements_t, $realm, $h_facet);
- $this->assertTrue($passed, t('Requirements pass when checking if a hierarchical facet is hierarchical.'), 'Facet API');
- $passed = facetapi_check_requirements($requirements_f, $realm, $h_facet);
- $this->assertFalse($passed, t('Requirements fail when checking if a hierarchical facet is not hierarchical.'), 'Facet API');
- $passed = facetapi_check_requirements($requirements_f, $realm, $e_facet);
- $this->assertTrue($passed, t('Requirements pass when checking if a non-hierarchical facet is not hierarchical.'), 'Facet API');
- $passed = facetapi_check_requirements($requirements_t, $realm, $e_facet);
- $this->assertFalse($passed, t('Requirements fail when checking if a non-hierarchical facet is hierarchical.'), 'Facet API');
- }
- /**
- * Tests the facetapi_access_callback() access callback.
- *
- * @see facetapi_access_callback().
- */
- public function testAccessCallback() {
- // The $this->adminUser has the "administer search" permission.
- $this->drupalLogin($this->adminUser);
- $access = facetapi_access_callback($this->loggedInUser);
- $this->assertTrue($access, t('The facetapi_access_callback() function returns TRUE for users with the "administer search" permission.'), 'Facet API');
- // Create another user with the "administer facets" permission.
- $facet_admin_user = $this->drupalCreateUser(array('administer facets'));
- $this->drupalLogin($facet_admin_user);
- $access = facetapi_access_callback($this->loggedInUser);
- $this->assertTrue($access, t('The facetapi_access_callback() function returns TRUE for users with the "administer facets" permission.'), 'Facet API');
- // Users without either permission should be denied access.
- $this->drupalLogin($this->authenticatedUser);
- $access = facetapi_access_callback($this->loggedInUser);
- $this->assertFalse($access, t('The facetapi_access_callback() function returns FALSE for users with neither the "administer search" nor "administer facets" permissions.'), 'Facet API');
- }
- /**
- * Tests the loading of the adapter.
- *
- * Performs three tests:
- * - A valid adapter can be loaded.
- * - An invalid adapter returns FALSE.
- * - Only one instance per searcher is loaded.
- */
- public function testAdapterLoad() {
- // Loads a valid adapter.
- $adapter1 = facetapi_adapter_load('facetapi_test');
- $value = ($adapter1 instanceof FacetapiAdapter);
- $this->assertTrue($value, t('FacetapiAdapter object loaded via facetapi_adapter_load().'), 'Facet API');
- // Loads an invalid adapter.
- $adapter_bad = facetapi_adapter_load('nonsense');
- $this->assertFalse($adapter_bad, t('FacetapiAdapter object loaded via facetapi_adapter_load().'), 'Facet API');
- // Sets a semaphore to see if singleton pattern is implemented.\
- $adapter1->semaphore = 'test';
- $adapter2 = facetapi_adapter_load('facetapi_test');
- $value = (isset($adapter2->semaphore) && 'test' == $adapter2->semaphore);
- $this->assertTrue($value, t('Singleton pattern implemented by facetapi_adapter_load().'), 'Facet API');
- }
- /**
- * Test active item processing via the url processor plugin.
- *
- * @see FacetapiUrlProcessorStandard
- * @see FacetapiUrlProcessorStandard::fetchParams()
- * @see FacetapiUrlProcessorStandard::normalizeParams()
- * @see FacetapiUrlProcessorStandard::setParams()
- * @see FacetapiUrlProcessorStandard::getParams()
- * @see FacetapiAdapter::initUrlProcessor()
- * @see FacetapiAdapter::setParams()
- * @see FacetapiAdapter::processActiveItems()
- * @see FacetapiAdapter::getAllActiveItems()
- */
- public function testUrlProcessorDataProcessing() {
- list($facet, $realm, $adapter) = $this->facetapiLoadObjects();
- facetapi_save_facet_enabled($adapter, $realm, $facet);
- // Capture real $_GET.
- $get = $_GET;
- // Fake the query string.
- $_GET = array(
- 'q' => array(),
- 'page' => 1,
- 'f' => array('enabled:testone', 'disabled:testfour', 'enabled:testthree'),
- );
- // Ensure that the adapter loads the URL processor plugin.
- $url_processor = $adapter->getUrlProcessor();
- $passed = ($url_processor instanceof FacetapiUrlProcessorStandard);
- $this->assertTrue($passed, t('An instance of FacetapiUrlProcessorStandard is returned by the adapter.'), 'Facet API');
- // Test fetching params.
- $fetched = $url_processor->fetchParams();
- $this->assertEqual($fetched, $_GET, t('Parameters fetched from $_GET by FacetapiUrlProcessorStandard::fetchParams().'), 'Facet API');
- // Test normalizing fetched params.
- $normalized = $url_processor->normalizeParams($fetched);
- $this->assertTrue(!isset($normalized['q']), t('The "q" variable is stripped by FacetapiUrlProcessorStandard::normalizeParams().'), 'Facet API');
- $this->assertTrue(!isset($normalized['page']), t('The "page" variable is stripped by FacetapiUrlProcessorStandard::normalizeParams().'), 'Facet API');
- // Test setting and getting params.
- $url_processor->setParams($normalized);
- $params = $url_processor->getParams();
- $this->assertEqual($normalized, $params, t('Parameters are able to be set and retrieved by getter and setter methods of FacetapiUrlProcessorStandard.'), 'Facet API');
- // Test processing of active items.
- $adapter->initUrlProcessor();
- $active_items = $adapter->getAllActiveItems();
- $true = isset($active_items['enabled:testone']);
- $this->assertTrue($true, t('Value for enabled facet extracted as an active item.'), 'Facet API');
- $false = isset($active_items['disabled:testfour']);
- $this->assertFalse($false, t('Value for disabled facet not extracted as an active item.'), 'Facet API');
- // Test re-processing of active items.
- $facet_d = facetapi_facet_load('disabled', 'facetapi_test');
- facetapi_save_facet_enabled($adapter, $realm, $facet_d);
- $adapter->initUrlProcessor();
- $active_items = $adapter->getAllActiveItems();
- $true = isset($active_items['disabled:testfour']);
- $this->assertTrue($true, t('Reprocessed value for enabled facet extracted as an active item.'), 'Facet API');
- // Reset real $_GET.
- $_GET = $get;
- }
- /**
- * Test query string building via the url processor plugin.
- *
- * @see FacetapiUrlProcessor::getQueryString()
- */
- public function testUrlProcessorQueryString() {
- list($facet, $realm, $adapter) = $this->facetapiLoadObjects();
- facetapi_save_facet_enabled($adapter, $realm, $facet);
- // Send params with facet data.
- $params = array(
- 'f' => array('enabled:testone', 'enabled:testthree'),
- );
- $adapter->setParams($params);
- $url_processor = $adapter->getUrlProcessor();
- // Tests activating an additional facet item.
- $qstring = $url_processor->getQueryString($facet, array('testtwo'), 0);
- $expected = array('f' => array('enabled:testone', 'enabled:testthree', 'enabled:testtwo'));
- $this->assertEqual($qstring, $expected, t('Facet item is appended to the query string when activated.'), 'Facet API');
- // Tests deactivating an additional facet item.
- $qstring = $url_processor->getQueryString($facet, array('testone'), 1);
- $expected = array('f' => array('enabled:testthree'));
- $this->assertEqual($qstring, $expected, t('Facet item is removed from the query string when deactivated.'), 'Facet API');
- }
- }
|