| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692 |
- <?php
- abstract class DrupalSolrOfflineWebTestCase extends DrupalWebTestCase {
- function _nestedCompare($a1, $a2) {
- if (count($a1) != count($a2)) {
- //$extra1 = array_diff_key($a1, $a2);
- //$extra2 = array_diff_key($a2, $a1);
- //$extra = '';
- //if ($extra1) {
- // $extra .= ' Extra keys in $a1: ' . implode(', ', array_keys($extra1));
- //}
- //if ($extra2) {
- // $extra .= ' Extra keys in $a2: ' . implode(', ', array_keys($extra2));
- //}
- //debug('count($a1) != count($a2) :' . $extra);
- return FALSE;
- }
- foreach ($a1 as $k => $v) {
- if (!isset($a2[$k])) {
- //debug("\$a2[$k] is not set");
- return FALSE;
- }
- if (is_array($a1[$k]) && is_array($a2[$k])) {
- if (!$this->_nestedCompare($a1[$k], $a2[$k])) {
- //debug("_nestedCompare(\$a1[$k], \$a2[$k]) is false");
- return FALSE;
- }
- }
- elseif ($a1[$k] !== $a2[$k]) {
- //debug("\$a1[$k] !== \$a2[$k] : " . var_export($a1[$k], TRUE) . " " . var_export($a2[$k], TRUE));
- return FALSE;
- }
- }
- return TRUE;
- }
- }
- /**
- * @file
- * Unit test class that provides tests for base functionality of the Apachesolr
- * Module without having the need of a Solr Server
- */
- class DrupalSolrOfflineEnvironmentWebTestCase extends DrupalSolrOfflineWebTestCase {
- /**
- * A global basic user who can search.
- */
- var $basic_user;
- /**
- * A global administrative user who can administer search.
- */
- var $admin_user;
- public static function getInfo() {
- return array(
- 'name' => 'Solr Search Environments',
- 'description' => 'Tests search environments functionality of the Solr module',
- 'group' => 'ApacheSolr',
- );
- }
- /**
- * Implementation of setUp().
- */
- function setUp() {
- parent::setUp('apachesolr', 'search', 'apachesolr_search', 'apachesolr_test');
- // Create a basic user, which is subject to moderation.
- $permissions = array(
- 'access content',
- 'search content',
- );
- $basic_user = $this->drupalCreateUser($permissions);
- // Create an admin user that can bypass revision moderation.
- $permissions = array(
- 'access content',
- 'search content',
- 'administer nodes',
- 'administer search',
- );
- $admin_user = $this->drupalCreateUser($permissions);
- // Assign users to their test suite-wide properties.
- $this->basic_user = $basic_user;
- $this->admin_user = $admin_user;
- }
- /**
- * Asserts that the module was installed and that a notice appears that the server is offline
- */
- function testServerOffline() {
- // Load the default server.
- $env_id = apachesolr_default_environment();
- $environment = apachesolr_environment_load($env_id);
- $environment['url'] = 'http://localhost/solr/core_that_should_not_exist';
- apachesolr_environment_save($environment);
- $status = apachesolr_server_status($environment['url']);
- $this->assertFalse($status, t('A false URL could not be loaded and is offline'));
- $this->drupalLogin($this->admin_user);
- $this->drupalGet('admin/config/search/apachesolr');
- $text = t('The server seems to be unavailable. Please verify the server settings');
- $this->assertText($text, t('When checking the status of the server it gives the correct message to inform the user that the server is not reachable'));
- }
- /**
- * Asserts that the module was installed and that a notice appears that the server is offline
- */
- function testIndexFileIncluded() {
- $env_id = apachesolr_default_environment();
- $environment = apachesolr_environment_load($env_id);
- $environment['url'] = 'http://localhost/solr/core_that_should_not_exist';
- apachesolr_environment_save($environment);
- $paths = array(
- 'user',
- 'node',
- 'admin/config/search/apachesolr',
- 'admin/config/search/apachesolr/search-pages',
- 'admin/config/search/apachesolr/search-pages/core_search/edit',
- 'admin/structure/block/manage/apachesolr_search/mlt-001/configure',
- 'admin/config/search/apachesolr/settings/solr/bias',
- 'admin/config/search/apachesolr/settings/solr/index',
- 'admin/config/search/apachesolr/settings/solr/edit',
- 'admin/reports/apachesolr',
- 'admin/reports/apachesolr/conf',
- 'search/site',
- );
- $this->drupalLogin($this->admin_user);
- foreach ($paths as $path) {
- $this->drupalGet($path);
- $text = 'apachesolr.index.inc was included';
- $this->assertNoText($text, t('Apachesolr.index.inc was not included'));
- }
- }
- /**
- * Asserts that we can edit a search environment
- */
- function testEditSearchEnvironment() {
- $this->drupalLogin($this->admin_user);
- $this->drupalGet('admin/config/search/apachesolr/settings');
- $this->clickLink(t('Edit'));
- $this->assertText(t('Example: http://localhost:8983/solr'), t('Edit page was successfully loaded'));
- $edit = array('name' => 'new description foo bar', 'url' => 'http://localhost:8983/solr/core_does_not_exists');
- $this->drupalPost($this->getUrl(), $edit, t('Save'));
- $this->assertResponse(200);
- $this->drupalGet('admin/config/search/apachesolr/settings');
- $this->assertText(t('new description foo bar'), t('Search environment description was successfully edited'));
- $this->assertText('http://localhost:8983/solr/core_does_not_exists', t('Search environment url was successfully edited'));
- }
- /**
- * Asserts that we can use various url forms for the search environment
- */
- function testEditSearchEnvironmentURLs() {
- // Set the various url schemes that will be tested
- $urls = array(
- 'http://user@localhost:8983/solr/core_does_not_exists',
- 'http://user:pass@localhost:8983/solr/core_does_not_exists',
- 'http://user:pass@localhost/solr/core_does_not_exists',
- 'https://localhost:8983/solr/core_does_not_exists'
- );
- $this->drupalLogin($this->admin_user);
- foreach ($urls as $url) {
- $this->drupalGet('admin/config/search/apachesolr/settings');
- $this->clickLink(t('Edit'));
- $this->assertText(t('Example: http://localhost:8983/solr'), t('Edit page was successfully loaded'));
- $edit = array('url' => $url);
- $this->drupalPost($this->getUrl(), $edit, t('Save'));
- $this->assertResponse(200);
- $this->drupalGet('admin/config/search/apachesolr/settings');
- $this->assertText($url, t('Search environment url was successfully set to !url', array('!url' => $url)));
- }
- }
- /**
- * Asserts that we can clone a search environment
- */
- function testCloneSearchEnvironment() {
- $this->drupalLogin($this->admin_user);
- $this->drupalGet('admin/config/search/apachesolr/settings');
- $this->assertText(t('Clone'), t('Clone button is available'));
- $this->drupalGet('admin/config/search/apachesolr/settings/solr/clone');
- $this->assertText(t('Are you sure you want to clone search environment localhost server'), t('Clone confirmation page was successfully loaded'));
- $this->drupalPost($this->getUrl(), array(), t('Clone'));
- $this->assertResponse(200);
- $this->drupalGet('admin/config/search/apachesolr/settings');
- $this->assertText(t('localhost server [cloned]'), t('Search Environment was successfully cloned'));
- // Check if the bundles and configurations are exactly the same
- // after we clear the caches.
- apachesolr_environments_clear_cache();
- $envs = apachesolr_load_all_environments();
- $this->assertEqual(count($envs), 2, 'Now we have 2 environments');
- $orig_env = $envs['solr'];
- unset($envs['solr']);
- $cloned_env = array_pop($envs);
- $this->assertTrue($this->_nestedCompare($orig_env['index_bundles'], $cloned_env['index_bundles']));
- $this->assertTrue($this->_nestedCompare($orig_env['conf'], $cloned_env['conf']));
- }
- /**
- * Asserts that we can edit a search environment
- */
- function testCreateNewSearchEnvironment() {
- // Create a new environment
- $this->drupalLogin($this->admin_user);
- $this->drupalGet('admin/config/search/apachesolr/settings');
- $this->assertText(t('Add search environment'), t('Create new environment link is available'));
- $this->clickLink(t('Add search environment'));
- $this->assertText(t('Make this Solr search environment the default'), t('Environment creation page successfully added'));
- $edit = array('url' => 'http://localhost:8983/solr', 'name' => 'my test description', 'env_id' => 'solr_test');
- $this->drupalPost($this->getUrl(), $edit, t('Save'));
- $this->assertResponse(200);
- $this->drupalGet('admin/config/search/apachesolr/settings');
- $this->assertText(t('my test description'), t('Search Environment was successfully created'));
- // Make this new search environment the default
- $this->drupalGet('admin/config/search/apachesolr/settings');
- // Click on the second environment edit link
- $this->clickLink(t('Edit'), 1);
- $this->assertText(t('Example: http://localhost:8983/solr'), t('Edit page was successfully loaded'));
- $edit = array('make_default' => 1, 'conf[apachesolr_read_only]' => APACHESOLR_READ_ONLY);
- $this->drupalPost($this->getUrl(), $edit, t('Save'));
- $this->assertResponse(200);
- $this->drupalGet('admin/config/search/apachesolr/settings');
- $this->assertText(t('my test description (Default)'), t('New Search environment was successfully changed to default environment'));
- // Clear our cache.
- apachesolr_environments_clear_cache();
- $mode = apachesolr_environment_variable_get('solr_test', 'apachesolr_read_only', APACHESOLR_READ_WRITE);
- $this->assertEqual($mode, APACHESOLR_READ_ONLY, 'Environment successfully changed to read only');
- }
- }
- /**
- * @file
- * Unit test class that provides tests for base functionality of the Apachesolr
- * Module without having the need of a Solr Server
- */
- class DrupalSolrOfflineSearchPagesWebTestCase extends DrupalSolrOfflineWebTestCase {
- /**
- * A global basic user who can search.
- */
- var $basic_user;
- /**
- * A global administrative user who can administer search.
- */
- var $admin_user;
- public static function getInfo() {
- return array(
- 'name' => 'Solr Search Pages',
- 'description' => 'Tests search pages functionality of the Solr module',
- 'group' => 'ApacheSolr',
- );
- }
- /**
- * Implementation of setUp().
- */
- function setUp() {
- parent::setUp('apachesolr', 'apachesolr_search', 'search', 'apachesolr_test');
- // Create a basic user, which is subject to moderation.
- $permissions = array(
- 'access content',
- 'search content',
- );
- $basic_user = $this->drupalCreateUser($permissions);
- // Create an admin user that can bypass revision moderation.
- $permissions = array(
- 'access content',
- 'search content',
- 'administer nodes',
- 'administer search',
- );
- $admin_user = $this->drupalCreateUser($permissions);
- // Assign users to their test suite-wide properties.
- $this->basic_user = $basic_user;
- $this->admin_user = $admin_user;
- // Make sure our environment does not exists
- $env_id = apachesolr_default_environment(NULL, TRUE);
- $environment = apachesolr_environment_load($env_id, TRUE);
- $environment['url'] = 'http://localhost/solr/core_that_should_not_exist';
- apachesolr_environment_save($environment);
- // Reset all caches
- apachesolr_load_all_environments(TRUE);
- }
- /**
- * Asserts that we can edit a search environment
- */
- function testCheckCoreSearchPage() {
- // Create a new environment
- $this->drupalLogin($this->admin_user);
- $this->drupalGet('admin/config/search/apachesolr/search-pages');
- $this->assertText(t('Core Search'), t('Core Search page is available'));
- }
- /**
- * Asserts that we can edit a search environment
- */
- function testEditSearchPage() {
- $this->drupalLogin($this->admin_user);
- $this->drupalGet('admin/config/search/apachesolr/search-pages');
- $this->clickLink(t('Edit'));
- $this->assertText(t('The human-readable name of the search page configuration'), t('Edit page was successfully loaded'));
- $edit = array(
- 'label' => 'Test Search Page',
- 'description' => 'Test Description',
- 'page_title' => 'Test Title',
- 'search_path' => 'search/searchdifferentpath',
- );
- $this->drupalPost($this->getUrl(), $edit, t('Save'));
- $this->assertResponse(200);
- // Make sure the menu is recognized
- drupal_static_reset('apachesolr_search_load_all_search_pages');
- menu_cache_clear_all();
- menu_rebuild();
- $this->drupalGet('admin/config/search/apachesolr/search-pages');
- $this->assertText(t('Test Search Page'), t('Search page was successfully edited'));
- $this->assertText('search/searchdifferentpath', t('Search path was updated'));
- $this->drupalGet('search/searchdifferentpath');
- $this->assertText(t('Search is temporarily unavailable. If the problem persists, please contact the site administrator.'), t('Search path was successfully created and is accessible'));
- }
- /**
- * Asserts that we can clone a search page
- */
- function testCloneSearchPage() {
- $this->drupalLogin($this->admin_user);
- $this->drupalGet('admin/config/search/apachesolr/search-pages');
- $this->assertText(t('Clone'), t('Clone button is available'));
- $this->drupalGet('admin/config/search/apachesolr/search-pages/core_search/clone');
- $this->assertText(t('Are you sure you want to clone search page Core Search?'), t('Clone confirmation page was successfully loaded'));
- $this->drupalPost($this->getUrl(), array(), t('Clone'));
- $this->assertResponse(200);
- drupal_static_reset('apachesolr_search_load_all_search_pages');
- $this->drupalGet('admin/config/search/apachesolr/search-pages');
- $this->assertText(t('Core Search [cloned]'), 'Search page was successfully cloned');
- }
- /**
- * Asserts that we can edit a search environment
- */
- function testNewAndRemoveSearchPage() {
- // Create a new search page
- $this->drupalLogin($this->admin_user);
- $this->drupalGet('admin/config/search/apachesolr/search-pages');
- $this->assertText(t('Add search page'), t('Create new search page link is available'));
- $this->clickLink(t('Add search page'));
- $this->assertText(t('The human-readable name of the search page configuration.'), t('Search page creation page successfully added'));
- $edit = array(
- 'page_id' => 'solr_testingsuite',
- 'env_id' => 'solr',
- 'label' => 'Test Search Page',
- 'description' => 'Test Description',
- 'page_title' => 'Test Title',
- 'search_path' => 'search/searchdifferentpath',
- );
- $this->drupalPost($this->getUrl(), $edit, t('Save'));
- $this->assertResponse(200);
- // Make sure the menu is recognized
- drupal_static_reset('apachesolr_search_load_all_search_pages');
- menu_cache_clear_all();
- menu_rebuild();
- $this->drupalGet('admin/config/search/apachesolr/search-pages');
- $this->assertText(t('Test Search Page'), t('Search Page was successfully created'));
- // Remove the same environment
- $this->clickLink(t('Delete'));
- $this->assertText(t('search page configuration will be deleted.This action cannot be undone.'), t('Delete confirmation page was successfully loaded'));
- $this->drupalPost($this->getUrl(), array(), t('Delete'));
- $this->assertResponse(200);
- drupal_static_reset('apachesolr_search_load_all_search_pages');
- $this->drupalGet('admin/config/search/apachesolr/search-pages');
- $this->assertNoText(t('Test Search Page'), t('Search Environment was successfully deleted'));
- apachesolr_environment_save(array('env_id' => 'DummySolr', 'service_class' => 'DummySolr', 'name' => 'dummy server', 'url' => 'http://localhost:8983/solr'));
- $solr = new DummySolr($url = NULL, $env_id = 'DummySolr');
- $params = array(
- 'rows' => 5,
- );
- $results = apachesolr_search_run('apachesolr_test', $params, '', '', 0, $solr);
- $query = apachesolr_current_query('DummySolr');
- $this->assertEqual($query->getParam('rows'), 5, 'Passed in rows param overrode default');
- }
- }
- class DrupalSolrNodeTestCase extends DrupalWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'Solr Node add, deletion, indexing and document building tests',
- 'description' => 'Tests if we can successfully add and delete nodes',
- 'group' => 'ApacheSolr',
- );
- }
- /**
- * Implementation of setUp().
- */
- function setUp() {
- parent::setUp('apachesolr', 'apachesolr_search', 'search', 'apachesolr_test');
- }
- function testApacheSolrNodeAddDelete() {
- // Login as basic user to perform initial content creation.
- // Create an admin user that can bypass revision moderation.
- $permissions = array(
- 'access content',
- 'search content',
- 'administer nodes',
- 'administer search',
- 'access content overview',
- 'bypass node access',
- );
- $admin_user = $this->drupalCreateUser($permissions);
- $this->drupalLogin($admin_user);
- // enable our bundles to be indexed, and clear caches
- apachesolr_index_set_bundles('solr', 'node', array('page', 'article'));
- entity_info_cache_clear();
- apachesolr_environments_clear_cache();
- // Define types of node bundles that we want to index
- $types = array('page', 'article');
- foreach ($types as $type) {
- $edit = array();
- // Create a node of the type $type.
- $edit['uid'] = $admin_user->uid;
- $edit['type'] = $type;
- $edit['title'] = $this->randomName(16);
- $node = $this->drupalCreateNode($edit);
- $this->assertTrue(is_object($node) && isset($node->nid), t('Article type @type has been created.', array('@type' => $type)));
- // Check that the node has been created.
- $node = $this->drupalGetNodeByTitle($edit['title']);
- $this->assertTrue($node, t('Created article @type found in database.', array('@type' => $type)));
- // Check that the node has status 1
- $indexer_table = apachesolr_get_indexer_table('node');
- $query = db_select($indexer_table, 'aien')
- ->condition('entity_id', $node->nid)
- ->fields('aien', array('entity_id', 'status'));
- $db_node = $query->execute()->fetchObject();
- $this->assertEqual($db_node->status, 1, t('Node @entity_id has status 1', array('@entity_id' => $db_node->entity_id)));
- // Delete the node
- $this->drupalPost('node/' . $node->nid . '/delete', array(), t('Delete'));
- // check if the entity delete does its work. It should have set the
- // status to 0 so it will be deleted when solr comes online
- $indexer_table = apachesolr_get_indexer_table('node');
- $nodes_in_tracking_table = db_select($indexer_table, 'aien')
- ->condition('entity_id', $node->nid)
- ->countQuery()
- ->execute()
- ->fetchField();
- if ($nodes_in_tracking_table > 0) {
- $db_node = db_select($indexer_table, 'aien')
- ->condition('entity_id', $node->nid)
- ->fields('aien', array('entity_id', 'status'))
- ->execute()
- ->fetchObject();
- $this->assertEqual($db_node->status, 0, t('Node @entity_id has status 0', array('@entity_id' => $db_node->entity_id)));
- }
- else {
- // Check that all of the nodes (should only have 1) have status 0, it
- // is set as 0 because it is pending to be deleted
- $this->assertEqual($nodes_in_tracking_table, 0, t('No more nodes in the tracking table'));
- }
- // Check that all the nodes have been deleted.
- $count = db_select('node', 'n')
- ->condition('n.nid', $node->nid)
- ->countQuery()
- ->execute()
- ->fetchField();
- $this->assertEqual($count, 0, t('No more nodes left in the node table.'));
- }
- }
- function testApacheSolrNodeReindex() {
- // Login as basic user to perform initial content creation.
- // Create an admin user that can bypass revision moderation.
- $permissions = array(
- 'access content',
- 'search content',
- 'administer nodes',
- 'administer search',
- 'access content overview',
- 'bypass node access',
- );
- $admin_user = $this->drupalCreateUser($permissions);
- $this->drupalLogin($admin_user);
- // enable our bundles to be indexed, and clear caches
- apachesolr_index_set_bundles('solr', 'node', array('page', 'article'));
- entity_info_cache_clear();
- apachesolr_environments_clear_cache();
- // Define types of node bundles that we want to index
- $types = array('page', 'article');
- // Create 20 nodes (10 times 2)
- foreach ($types as $type) {
- for ($i = 0; $i < 5; $i++) {
- $edit = array();
- // Create a node of the type $type.
- $edit['uid'] = $admin_user->uid;
- $edit['type'] = $type;
- $edit['title'] = $this->randomName(16);
- $node = $this->drupalCreateNode($edit);
- }
- }
- // Set a static timestamp
- $timestamp = 1382019301;
- $env_id = apachesolr_default_environment();
- // Clear the last timestamp so we know that our nodes have to be indexed.
- apachesolr_environment_variable_set($env_id, 'apachesolr_index_last', array());
- // Set apachesolr_index_entities_node.changed to the same value
- // (REQUEST_TIME).
- $table = apachesolr_get_indexer_table('node');
- db_update($table)
- ->fields(array('changed' => $timestamp, 'status' => 1))
- ->execute();
- // Fake that we actually indexed before
- apachesolr_set_last_index_position($env_id, 'node', $timestamp + 1, 10);
-
- // Set the changed date to after our previous index cycle
- db_update($table)
- ->fields(array('changed' => $timestamp + 10, 'status' => 1))
- ->condition('entity_id', 9, '<=')
- ->execute();
- // Get the next 5 entities to index.
- $set = apachesolr_index_get_entities_to_index($env_id, 'node', 5);
- $count = count($set);
- $this->assertEqual($count, 5, t('We found 5 entities to index.'));
- // Mark the last item from that 5 as last indexed.
- $last_row = end($set);
- apachesolr_set_last_index_position($env_id, 'node', $last_row->changed, $last_row->entity_id);
- // Get the next batch of 5 and this should be 4 items.
- $set = apachesolr_index_get_entities_to_index($env_id, 'node', 4);
- $count = count($set);
- $this->assertEqual($count, 4, t('We found 4 entities to index.'));
- // Mark the last item from that 4 as last indexed.
- $last_row = end($set);
- apachesolr_set_last_index_position($env_id, 'node', $last_row->changed, $last_row->entity_id);
- // Get the next batch of 5 and this should be 0 items
- $set = apachesolr_index_get_entities_to_index($env_id, 'node', 5);
- $count = count($set);
- $this->assertEqual($count, 0, t('We found 0 entities to index.'));
- }
- function testNodeToDocument() {
- // enable our bundles to be indexed, and clear caches
- apachesolr_index_set_bundles('solr', 'node', array('article'));
- entity_info_cache_clear();
- apachesolr_environments_clear_cache();
- $edit = array();
- // Create a node of the type article.
- $type = 'article';
- $edit['uid'] = 1;
- $edit['type'] = $type;
- $edit['title'] = $this->randomName(16);
- $edit['body'][LANGUAGE_NONE][0]['value'] = 'some other ORDINARY_TEXT ';
- // Make sure the format allows all tags.
- $edit['body'][LANGUAGE_NONE][0]['format'] = 'full_html';
- $tags_to_index = _apachesolr_tags_to_index();
- // Tags that are not boosted normally.
- $other_tags = array('div' => 'tags_inline', 'span' => 'tags_inline');
- $all_tags = $tags_to_index + $other_tags;
- $tag_content = array();
- foreach ($all_tags as $tag_name => $field_name) {
- $tag_content[$tag_name] = strtoupper($tag_name) . '_TAG_CONTENT';
- if ($tag_name == 'a') {
- $edit['body'][LANGUAGE_NONE][0]['value'] .= "<{$tag_name} href=\"http://example.com\">{$tag_content[$tag_name]}</{$tag_name}> other filler ";
- }
- else {
- $edit['body'][LANGUAGE_NONE][0]['value'] .= "<{$tag_name}>{$tag_content[$tag_name]}</{$tag_name}> dummy text ";
- }
- }
- $node = $this->drupalCreateNode($edit);
- $this->assertTrue(is_object($node) && isset($node->nid), t('Article type @type has been created.', array('@type' => $type)));
- $item = new stdClass();
- $item->entity_id = $node->nid;
- $item->entity_type = 'node';
- $item->bundle = $node->type;
- $env_id = apachesolr_default_environment();
- $docs = apachesolr_index_entity_to_documents($item, $env_id);
- $this->assertEqual(count($docs), 1, 'Only one document from one node');
- $document = end($docs);
- $this->assertTrue(strpos($document->content,'ORDINARY_TEXT') !== FALSE, "Found in content field expected: ORDINARY_TEXT");
- foreach ($tags_to_index as $tag_name => $field_name) {
- $this->assertTrue(strpos($document->content, $tag_content[$tag_name]) !== FALSE, "Found in content field expected: {$tag_content[$tag_name]}");
- $this->assertTrue(!empty($document->{$field_name}) && strpos($document->{$field_name}, $tag_content[$tag_name]) !== FALSE, "Found in {$field_name} field expected: {$tag_content[$tag_name]}");
- $this->assertTrue(empty($document->{$field_name}) || strpos($document->{$field_name},'ORDINARY_TEXT') === FALSE, "NOT Found in {$field_name}: ORDINARY_TEXT");
- }
- foreach ($other_tags as $tag_name => $field_name) {
- $this->assertTrue(strpos($document->content, $tag_content[$tag_name]) !== FALSE, "Found in content field expected: {$tag_content[$tag_name]}");
- $this->assertTrue(empty($document->{$field_name}) || strpos($document->{$field_name}, $tag_content[$tag_name]) === FALSE, "NOT found in {$field_name}: {$tag_content[$tag_name]}");
- }
- }
- }
- class DrupalSolrOfflineUnitTestCase extends DrupalUnitTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'Solr Base Framework Tests Unit Test',
- 'description' => 'Unit test functionality of the Solr module',
- 'group' => 'ApacheSolr',
- );
- }
- protected function setUp() {
- parent::setUp();
- require_once dirname(dirname(realpath(__FILE__))) . '/apachesolr.module';
- $this->script_content = <<<EOF
- <p>GOOD_CONTENT</p>
- <script type="text/javascript" >
- $(document).ready(function(){
- $('.accordion_teachers').accordion({ collapsible:true, autoHeight:false });
- });
- </script>
- EOF;
- $this->embed_content = <<<EOF
- <p>GOOD_CONTENT</p>
- <object width="425" height="349"><param name="movie" value="http://www.youtube.com/v/8Vmnq5dBF7Y?version=3&hl=en_US"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/8Vmnq5dBF7Y?version=3&hl=en_US" type="application/x-shockwave-flash" width="425" height="349" allowscriptaccess="always" allowfullscreen="true"></embed></object>
- OTHER_CONTENT
- EOF;
- $this->iframe_content = <<<EOF
- <iframe width="425" height="349" src="http://www.youtube.com/embed/8Vmnq5dBF7Y" frameborder="0" allowfullscreen></iframe>
- <p><a href="#">GOOD_CONTENT</a></p><iframe></iframe>
- EOF;
- $this->comment_content = <<<EOF
- <p><em>GOOD_CONTENT</em></p><!-- COMMENT -->
- OTHER_CONTENT
- EOF;
- }
- /**
- * Test ordering of parsed filter positions.
- *
- * Regression test for http://drupal.org/node/891962
- */
- function testContentFilters() {
- $cleaned = apachesolr_clean_text($this->script_content);
- $this->assertFalse(strpos($cleaned, 'script'), 'Script tags removed');
- $this->assertFalse(strpos($cleaned, 'accordion_teachers'), 'Script tags conent removed');
- $this->assertTrue(strpos(trim($cleaned), 'GOOD_CONTENT') === 0, 'Real content retained');
- $cleaned = apachesolr_clean_text($this->embed_content);
- $this->assertFalse(strpos($cleaned, 'object'), 'object tags removed');
- $this->assertFalse(strpos($cleaned, 'embed'), 'embed tags removed');
- $this->assertFalse(strpos($cleaned, '8Vmnq5dBF7Y'), 'object tags conent removed');
- $this->assertFalse(strpos($cleaned, 'shockwave-flash'), 'embed tags conent removed');
- $this->assertTrue(strpos(trim($cleaned), 'GOOD_CONTENT') === 0, 'Real content retained');
- $this->assertTrue(strpos($cleaned, 'OTHER_CONTENT') > 0, 'Other content retained');
- $cleaned = apachesolr_clean_text($this->iframe_content);
- $this->assertFalse(strpos($cleaned, 'iframe'), 'iframe tags removed');
- $this->assertFalse(strpos($cleaned, '8Vmnq5dBF7Y'), 'iframe tags conent removed');
- $this->assertTrue(strpos(trim($cleaned), 'GOOD_CONTENT') === 0, 'Real content retained');
- $cleaned = apachesolr_clean_text($this->comment_content);
- $this->assertFalse(strpos($cleaned, 'COMMENT'), 'html comment content removed ');
- $this->assertTrue(strpos(trim($cleaned), 'GOOD_CONTENT') === 0, 'Real content retained');
- }
- }
|