123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873 |
- <?php
- /**
- * @file
- * Tests for the Synonyms field provider module.
- */
- /**
- * Base class for all tests that test field-based Synonyms providers.
- */
- abstract class AbstractSynonymsProviderFieldWebTestCase extends SynonymsWebTestCase {
- /**
- * Setup method.
- */
- public function setUp($modules = array()) {
- if (!$this->behavior_implementation['behavior']) {
- $this->behavior_implementation['behavior'] = 'autocomplete';
- }
- parent::setUp($modules);
- }
- /**
- * Test synonymsExtract() method.
- *
- * @param array $items
- * Array of field items to be saved in tested term
- * @param array $standard
- * Expected return of synonymsExtract() method
- * @param string $message
- * Any custom message to be added to the standard one and passed to
- * SimpleTest assertion method
- */
- protected function assertSynonymsExtract($items, $standard, $message = '') {
- $term = (object) array(
- 'name' => $this->randomName(),
- 'vid' => $this->vocabulary->vid,
- );
- $term->{$this->fields['enabled']['field']['field_name']} = $items;
- taxonomy_term_save($term);
- $synonyms = $this->behavior_implementation['object']->extractSynonyms($term);
- $this->assertTrue(count(array_intersect($standard, $synonyms)) == count($standard), $this->behavior_implementation['class'] . '::extractSynonyms() passed: ' . $message);
- // Cleaning up.
- taxonomy_term_delete($term->tid);
- }
- /**
- * Test mergeEntityAsSynonym method.
- *
- * @param array $items
- * Items array to place into the field on which synonyms provider is based
- * @param object $synonym_entity
- * Parameter will be passed directly to the behavior implementation object
- * @param string $synonym_entity_type
- * Parameter will be passed directly to the behavior implementation object
- * @param array $standard
- * Array that is expected to be returned by the tested method
- * @param string $message
- * Any custom message to be added to the standard one and passed to
- * SimpleTest assertion method
- */
- protected function assertMergeEntityAsSynonym($items, $synonym_entity, $synonym_entity_type, $standard, $message = '') {
- $message = $this->behavior_implementation['class'] . '::mergeEntityAsSynonym() passed: ' . $message;
- $term = (object) array(
- 'name' => $this->randomName(),
- 'vid' => $this->vocabulary->vid,
- );
- $term->{$this->fields['enabled']['field']['field_name']} = $items;
- taxonomy_term_save($term);
- $this->behavior_implementation['object']->mergeEntityAsSynonym($term, $synonym_entity, $synonym_entity_type);
- $merged_items = $term->{$this->fields['enabled']['field']['field_name']}[LANGUAGE_NONE];
- foreach ($standard as $k => $v) {
- if (count(array_intersect($standard[$k], $merged_items[$k])) != count($standard[$k])) {
- $this->fail($message);
- return;
- }
- }
- $this->pass($message);
- taxonomy_term_delete($term->tid);
- }
- /**
- * Test synonymFind method.
- *
- * @param array $meta_data
- * Array of meta data. Each subarray represents a single term and whether it
- * is expected to be included in the return of the method. Should have the
- * following structure:
- * - items: (array) Array of field items. Terms will be automatically
- * created with those items
- * - found_synonyms: (array) Array of synonyms that are expected to be found
- * for the given term, i.e. if "found_synonyms" is empty, it means the
- * term should not be found for the given $condition. If the
- * "found_synonyms" is not empty, then each element of this array should
- * trigger appearance of the term in the results for the given
- * $condition
- * @param QueryConditionInterface $condition
- * Database condition that will be passed to the synonymsFind method
- * @param string $message
- * Any custom message to be added to the standard one and passed to
- * SimpleTest assertion method
- */
- protected function assertSynonymsFind($meta_data, QueryConditionInterface $condition, $message = '') {
- $message = $this->behavior_implementation['class'] . '::synonymsFind() pass: ' . $message;
- $terms = array();
- foreach ($meta_data as $v) {
- $term = (object) array(
- 'name' => $this->randomName(),
- 'vid' => $this->vocabulary->vid,
- $this->fields['enabled']['field']['field_name'] => $v['items'],
- );
- taxonomy_term_save($term);
- $term->found_synonyms = $v['found_synonyms'];
- $terms[] = $term;
- }
- $return = $this->behavior_implementation['object']->synonymsFind($condition);
- $rows = array();
- foreach ($return as $row) {
- $rows[] = $row;
- }
- $success = TRUE;
- $total_rows_standard = 0;
- $total_rows = 0;
- foreach ($terms as $term) {
- foreach ($term->found_synonyms as $found_synonym) {
- $total_rows_standard++;
- $is_found = FALSE;
- $total_rows = 0;
- foreach ($rows as $row) {
- $total_rows++;
- if ($row->entity_id == $term->tid && $row->synonym == $found_synonym) {
- $is_found = TRUE;
- }
- }
- $success = $success && $is_found;
- }
- }
- $success = $success && $total_rows_standard == $total_rows;
- $this->assertTrue($success, $message);
- // Cleaning up.
- foreach ($terms as $term) {
- taxonomy_term_delete($term->tid);
- }
- }
- }
- /**
- * Test TextSynonymsBehavior class.
- */
- class TextSynonymsBehaviorWebTestCase extends AbstractSynonymsProviderFieldWebTestCase {
- /**
- * GetInfo method.
- */
- public static function getInfo() {
- return array(
- 'name' => 'TextSynonymsBehavior',
- 'description' => 'Ensure that the synonyms module extracts synonyms from text and number fields correctly.',
- 'group' => 'Synonyms',
- );
- }
- /**
- * Test synonyms extraction for 'text' field type.
- */
- public function testText() {
- // Testing synonymsExtract().
- $this->assertSynonymsExtract(array(), array(), 'on empty field.');
- $synonym = $this->randomName();
- $this->assertSynonymsExtract(array(
- LANGUAGE_NONE => array(
- 0 => array('value' => $synonym),
- ),
- ), array($synonym), 'on a field that holds one value.');
- // Testing mergeEntityAsSynonym() method.
- $node = (object) array(
- 'title' => $this->randomName(),
- 'type' => 'page',
- );
- node_save($node);
- $this->assertMergeEntityAsSynonym(array(), $node, 'node', array(array('value' => $node->title)), 'on a node entity.');
- // Testing synonymFind() method.
- $this->assertSynonymsFind(array(), db_and()->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, $this->randomName()), 'on empty field.');
- $meta_data = array();
- $meta_data[] = array(
- 'items' => array(),
- 'found_synonyms' => array(),
- );
- $this->assertSynonymsFind($meta_data, db_and()->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, $this->randomName()), 'on a field without values.');
- $meta_data = array();
- $meta_data[] = array(
- 'items' => array(
- LANGUAGE_NONE => array(
- array('value' => $this->randomName()),
- ),
- ),
- 'found_synonyms' => array(),
- );
- $this->assertSynonymsFind($meta_data, db_and()->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, $this->randomName()), 'on a field with a value, but when searching for another string.');
- $meta_data = array();
- $synonym = $this->randomName();
- $meta_data[] = array(
- 'items' => array(
- LANGUAGE_NONE => array(
- array('value' => $synonym),
- ),
- ),
- 'found_synonyms' => array($synonym),
- );
- $this->assertSynonymsFind($meta_data, db_and()->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, $synonym), 'on a field with a single value searching for that string');
- $meta_data = array();
- $synonym = $this->randomName();
- $meta_data[] = array(
- 'items' => array(
- LANGUAGE_NONE => array(
- array('value' => $synonym),
- array('value' => $this->randomName()),
- ),
- ),
- 'found_synonyms' => array($synonym),
- );
- $this->assertSynonymsFind($meta_data, db_and()->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, $synonym), 'on a field with 2 values searching for one of those 2 values');
- $meta_data = array();
- $synonym = $this->randomName();
- $meta_data[] = array(
- 'items' => array(
- LANGUAGE_NONE => array(
- array('value' => $synonym),
- array('value' => $this->randomName()),
- ),
- ),
- 'found_synonyms' => array($synonym),
- );
- $meta_data[] = array(
- 'items' => array(
- LANGUAGE_NONE => array(
- array('value' => $this->randomName()),
- array('value' => $this->randomName()),
- ),
- ),
- 'found_synonyms' => array(),
- );
- $this->assertSynonymsFind($meta_data, db_and()->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, $synonym), 'on 2 fields with 2 values each searching for one of those values');
- $meta_data = array();
- $synonym = $this->randomName();
- $meta_data[] = array(
- 'items' => array(
- LANGUAGE_NONE => array(
- array('value' => $synonym),
- ),
- ),
- 'found_synonyms' => array($synonym),
- );
- $this->assertSynonymsFind($meta_data, db_and()->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, '%' . db_like(drupal_substr($synonym, 1, -1)) . '%', 'LIKE'), 'on a field with a value searching for a string LIKE the %value%');
- $meta_data = array();
- $tag = $this->randomName();
- $synonym1 = $tag . $this->randomName();
- $synonym2 = $tag . $this->randomName();
- $meta_data[] = array(
- 'items' => array(
- LANGUAGE_NONE => array(
- array('value' => $synonym1),
- array('value' => $synonym2),
- ),
- ),
- 'found_synonyms' => array($synonym1, $synonym2),
- );
- $this->assertSynonymsFind($meta_data, db_and()->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, db_like($tag) . '%', 'LIKE'), 'on a field with 2 similar values searching a string like %both values%');
- $meta_data = array();
- $synonym1 = $this->randomName();
- $synonym2 = $this->randomName();
- $meta_data[] = array(
- 'items' => array(
- LANGUAGE_NONE => array(
- array('value' => $synonym1),
- array('value' => $synonym2),
- ),
- ),
- 'found_synonyms' => array($synonym1, $synonym2),
- );
- $this->assertSynonymsFind($meta_data, db_or()->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, $synonym1)->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, $synonym2), 'on a field with 2 values searching for value1 or value2');
- $meta_data = array();
- $synonym = $this->randomName();
- $meta_data[] = array(
- 'items' => array(
- LANGUAGE_NONE => array(
- array('value' => $synonym),
- array('value' => $this->randomName()),
- ),
- ),
- 'found_synonyms' => array($synonym),
- );
- $this->assertSynonymsFind($meta_data, db_and()->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, $synonym)->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, db_like(drupal_substr($synonym, 0, -1)) . '%', 'LIKE'), 'on a field with 2 values searching for value1 and LIKE value1%');
- $meta_data = array();
- $synonym1 = $this->randomName();
- $synonym2 = $this->randomName();
- $meta_data[] = array(
- 'items' => array(
- LANGUAGE_NONE => array(
- array('value' => $synonym1),
- array('value' => $synonym2),
- ),
- ),
- 'found_synonyms' => array($synonym1, $synonym2),
- );
- $condition = db_or();
- $condition->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, $synonym1);
- $condition->condition(db_and()->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, $synonym2)->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, db_like(drupal_substr($synonym2, 0, -1)) . '%', 'LIKE'));
- $this->assertSynonymsFind($meta_data, $condition, 'on a field with 2 values searching for (value1 or (value2 AND value2%))');
- $meta_data = array();
- $synonym1 = $this->randomName() . ' ' . $this->randomName() . ' ' . $this->randomName();
- $synonym2 = str_replace(' ', '-', $synonym1);
- $meta_data[] = array(
- 'items' => array(
- LANGUAGE_NONE => array(
- array('value' => $synonym1),
- array('value' => $synonym2),
- ),
- ),
- 'found_synonyms' => array($synonym1, $synonym2),
- );
- $condition = db_and()
- ->where("REPLACE(" . AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER . ", ' ', '-') = :synonym", array(
- ':synonym' => $synonym2,
- ));
- $this->assertSynonymsFind($meta_data, $condition, "on a field with 2 values, where 2nd value replaces spaces with dashes in the 1st value, searching for REPLACE(column, ' ', '-') = value2");
- }
- }
- /**
- * Test TaxonomySynonymsBehavior class.
- */
- class TaxonomySynonymsBehaviorWebTestCase extends AbstractSynonymsProviderFieldWebTestCase {
- /**
- * Taxonomy vocabulary object terms.
- *
- * Terms of this vocabulary are synonyms of the main vocabulary terms.
- *
- * @var object
- */
- protected $vocabularySource;
- /**
- * GetInfo method.
- */
- public static function getInfo() {
- return array(
- 'name' => 'TaxonomySynonymsBehavior',
- 'description' => 'Ensure that the synonyms module extracts synonyms from taxonomy term reference fields correctly.',
- 'group' => 'Synonyms',
- );
- }
- /**
- * SetUp method.
- */
- public function setUp($modules = array()) {
- $this->fields['enabled']['field'] = array(
- 'field_name' => 'term',
- 'cardinality' => FIELD_CARDINALITY_UNLIMITED,
- 'type' => 'taxonomy_term_reference',
- 'settings' => array(
- 'allowed_values' => array(
- array(
- 'vocabulary' => 'source_vocabulary',
- 'parent' => 0,
- ),
- ),
- ),
- );
- parent::setUp($modules);
- $this->vocabularySource = (object) array(
- 'name' => $this->randomName(),
- 'machine_name' => 'source_vocabulary',
- );
- taxonomy_vocabulary_save($this->vocabularySource);
- }
- /**
- * Test synonyms extraction for 'taxonomy_term_reference' field type.
- */
- public function testTaxonomyTermReference() {
- // Testing synonymsExtract().
- $this->assertSynonymsExtract(array(), array(), 'on empty field.');
- $synonym_term = $this->createSynonymTerm();
- $this->assertSynonymsExtract(array(
- LANGUAGE_NONE => array(
- 0 => array(
- 'tid' => $synonym_term->tid,
- ),
- ),
- ), array($synonym_term->name), 'on a field that holds one value.');
- // Testing mergeEntityAsSynonym() method.
- $synonym_term = $this->createSynonymTerm();
- $this->assertMergeEntityAsSynonym(array(), $synonym_term, 'taxonomy_term', array(array('tid' => $synonym_term->tid)), 'on a term from referenced vocabulary.');
- // Testing synonymFind() method.
- $this->assertSynonymsFind(array(), db_and()->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, $this->randomName()), 'on empty field');
- $meta_data = array();
- $meta_data[] = array(
- 'items' => array(),
- 'found_synonyms' => array(),
- );
- $this->assertSynonymsFind($meta_data, db_and()->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, $this->randomName()), 'on a field without values');
- $meta_data = array();
- $meta_data[] = array(
- 'items' => array(
- LANGUAGE_NONE => array(
- array('tid' => $this->createSynonymTerm()->tid),
- ),
- ),
- 'found_synonyms' => array(),
- );
- $this->assertSynonymsFind($meta_data, db_and()->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, $this->randomName()), 'on a field with a value but searching for another string');
- $meta_data = array();
- $synonym_term = $this->createSynonymTerm();
- $meta_data[] = array(
- 'items' => array(
- LANGUAGE_NONE => array(
- array('tid' => $synonym_term->tid),
- ),
- ),
- 'found_synonyms' => array($synonym_term->name),
- );
- $this->assertSynonymsFind($meta_data, db_and()->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, $synonym_term->name), 'on a field with a single value searching for that string');
- $meta_data = array();
- $synonym_term = $this->createSynonymTerm();
- $meta_data[] = array(
- 'items' => array(
- LANGUAGE_NONE => array(
- array('tid' => $this->createSynonymTerm()->tid),
- array('tid' => $synonym_term->tid),
- ),
- ),
- 'found_synonyms' => array($synonym_term->name),
- );
- $this->assertSynonymsFind($meta_data, db_and()->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, $synonym_term->name), 'on a field with 2 values searching for one of those 2 values');
- $meta_data = array();
- $synonym_term = $this->createSynonymTerm();
- $meta_data[] = array(
- 'items' => array(
- LANGUAGE_NONE => array(
- array('tid' => $synonym_term->tid),
- array('tid' => $this->createSynonymTerm()->tid),
- ),
- ),
- 'found_synonyms' => array($synonym_term->name),
- );
- $meta_data[] = array(
- 'items' => array(
- LANGUAGE_NONE => array(
- array('tid' => $this->createSynonymTerm()->tid),
- array('tid' => $this->createSynonymTerm()->tid),
- ),
- ),
- 'found_synonyms' => array(),
- );
- $this->assertSynonymsFind($meta_data, db_and()->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, $synonym_term->name), 'on 2 fields with 2 values each searching for one of those values');
- $meta_data = array();
- $synonym_term = $this->createSynonymTerm();
- $meta_data[] = array(
- 'items' => array(
- LANGUAGE_NONE => array(
- array('tid' => $synonym_term->tid),
- ),
- ),
- 'found_synonyms' => array($synonym_term->name),
- );
- $this->assertSynonymsFind($meta_data, db_and()->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, '%' . db_like(drupal_substr($synonym_term->name, 1, -1)) . '%', 'LIKE'), 'on a field with a value searching for a string LIKE the %value%');
- $meta_data = array();
- $tag = $this->randomName();
- $synonym_term1 = $this->createSynonymTerm($tag . $this->randomName());
- $synonym_term2 = $this->createSynonymTerm($tag . $this->randomName());
- $meta_data[] = array(
- 'items' => array(
- LANGUAGE_NONE => array(
- array('tid' => $synonym_term1->tid),
- array('tid' => $synonym_term2->tid),
- ),
- ),
- 'found_synonyms' => array($synonym_term1->name, $synonym_term2->name),
- );
- $this->assertSynonymsFind($meta_data, db_and()->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, db_like($tag) . '%', 'LIKE'), 'on a field with 2 similar values searching a string like %both values%');
- $meta_data = array();
- $synonym_term1 = $this->createSynonymTerm();
- $synonym_term2 = $this->createSynonymTerm();
- $meta_data[] = array(
- 'items' => array(
- LANGUAGE_NONE => array(
- array('tid' => $synonym_term1->tid),
- array('tid' => $synonym_term2->tid),
- ),
- ),
- 'found_synonyms' => array($synonym_term1->name, $synonym_term2->name),
- );
- $this->assertSynonymsFind($meta_data, db_or()->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, $synonym_term1->name)->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, $synonym_term2->name), 'on a field with 2 values searching for value1 or value2');
- $meta_data = array();
- $synonym_term = $this->createSynonymTerm();
- $meta_data[] = array(
- 'items' => array(
- LANGUAGE_NONE => array(
- array('tid' => $synonym_term->tid),
- array('tid' => $this->createSynonymTerm()->tid),
- ),
- ),
- 'found_synonyms' => array($synonym_term->name),
- );
- $this->assertSynonymsFind($meta_data, db_and()->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, $synonym_term->name)->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, '%' . db_like(drupal_substr($synonym_term->name, 1, -1)) . '%', 'LIKE'), 'on a field with 2 values searching for value1 and LIKE value1%');
- $meta_data = array();
- $synonym_term1 = $this->createSynonymTerm();
- $synonym_term2 = $this->createSynonymTerm();
- $meta_data[] = array(
- 'items' => array(
- LANGUAGE_NONE => array(
- array('tid' => $synonym_term1->tid),
- array('tid' => $synonym_term2->tid),
- ),
- ),
- 'found_synonyms' => array($synonym_term1->name, $synonym_term2->name),
- );
- $condition = db_or();
- $condition->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, $synonym_term1->name);
- $condition->condition(db_and()
- ->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, $synonym_term2->name)
- ->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, '%' . db_like(drupal_substr($synonym_term2->name, 1 -1)) . '%', 'LIKE'));
- $this->assertSynonymsFind($meta_data, $condition, 'on a field with 2 values searching for (value1 or (value2 AND value2%))');
- $meta_data = array();
- $synonym_term1 = $this->createSynonymTerm($this->randomName() . ' ' . $this->randomName() . ' ' . $this->randomName());
- $synonym_term2 = $this->createSynonymTerm(str_replace(' ', '-', $synonym_term1->name));
- $meta_data[] = array(
- 'items' => array(
- LANGUAGE_NONE => array(
- array('tid' => $synonym_term1->tid),
- array('tid' => $synonym_term2->tid),
- ),
- ),
- 'found_synonyms' => array($synonym_term1->name, $synonym_term2->name),
- );
- $condition = db_and()
- ->where("REPLACE(" . AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER . ", ' ', '-') = :synonym", array(
- ':synonym' => $synonym_term2->name,
- ));
- $this->assertSynonymsFind($meta_data, $condition, "on a field with 2 values, where 2nd value replaces spaces with dashes in the 1st value, searching for REPLACE(column, ' ', '-') = value2");
- }
- /**
- * Supportive function.
- *
- * Create a taxonomy term in the synonyms source vocabulary with the specified
- * name.
- *
- * @param string $name
- * Name of the term to be created. If nothing is supplied a random string
- * is used
- *
- * @return object
- * Fully loaded taxonomy term object of the just created term
- */
- protected function createSynonymTerm($name = NULL) {
- if (is_null($name)) {
- $name = $this->randomName();
- }
- $synonym_term = (object) array(
- 'name' => $name,
- 'vid' => $this->vocabularySource->vid,
- );
- taxonomy_term_save($synonym_term);
- return $synonym_term;
- }
- }
- /**
- * Test EntityReferenceSynonymsBehavior class.
- */
- class EntityReferenceSynonymsBehaviorWebTestCase extends AbstractSynonymsProviderFieldWebTestCase {
- /**
- * GetInfo method.
- */
- public static function getInfo() {
- return array(
- 'name' => 'EntityReferenceSynonymsBehavior',
- 'description' => 'Ensure that the synonyms module extracts synonyms from entity reference fields correctly.',
- 'group' => 'Synonyms',
- );
- }
- /**
- * SetUp method.
- */
- public function setUp($modules = array()) {
- $modules[] = 'entityreference';
- $this->fields['enabled']['field'] = array(
- 'field_name' => 'reference',
- 'cardinality' => FIELD_CARDINALITY_UNLIMITED,
- 'type' => 'entityreference',
- // For the sake of experiment we use entityreference field that references
- // nodes of a Drupal standard type to make things easier.
- 'settings' => array(
- 'target_type' => 'node',
- 'handler' => 'base',
- 'handler_settings' => array(
- 'target_bundles' => array('page' => 'page'),
- 'sort' => array('type' => 'none'),
- ),
- ),
- );
- parent::setUp($modules);
- }
- /**
- * Test synonyms extraction for 'entityreference' field type.
- */
- public function testEntityReference() {
- // Testing synonymsExtract().
- $this->assertSynonymsExtract(array(), array(), 'on empty field.');
- $synonym_entity = $this->createNode();
- $this->assertSynonymsExtract(array(
- LANGUAGE_NONE => array(
- 0 => array(
- 'target_id' => entity_id('node', $synonym_entity),
- ),
- ),
- ), array(entity_label('node', $synonym_entity)), 'on a field that holds one value.');
- // Testing mergeEntityAsSynonym() method.
- $node = $this->createNode();
- $this->assertMergeEntityAsSynonym(array(), $node, 'node', array(array('target_id' => $node->nid)), 'on a node.');
- // Testing synonymFind() method.
- $this->assertSynonymsFind(array(), db_and()->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, $this->randomName()), 'on empty field');
- $meta_data = array();
- $meta_data[] = array(
- 'items' => array(),
- 'found_synonyms' => array(),
- );
- $this->assertSynonymsFind($meta_data, db_and()->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, $this->randomName()), 'on a field without values');
- $meta_data = array();
- $meta_data[] = array(
- 'items' => array(
- LANGUAGE_NONE => array(
- array('target_id' => entity_id('node', $this->createNode())),
- ),
- ),
- 'found_synonyms' => array(),
- );
- $this->assertSynonymsFind($meta_data, db_and()->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, $this->randomName()), 'on a field with a value but searching for another string');
- $meta_data = array();
- $synonym_entity = $this->createNode();
- $meta_data[] = array(
- 'items' => array(
- LANGUAGE_NONE => array(
- array('target_id' => entity_id('node', $synonym_entity)),
- ),
- ),
- 'found_synonyms' => array(entity_label('node', $synonym_entity)),
- );
- $this->assertSynonymsFind($meta_data, db_and()->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, entity_label('node', $synonym_entity)), 'on a field with a single value searching for that string');
- $meta_data = array();
- $synonym_entity = $this->createNode();
- $meta_data[] = array(
- 'items' => array(
- LANGUAGE_NONE => array(
- array('target_id' => entity_id('node', $synonym_entity)),
- array('target_id' => entity_id('node', $this->createNode())),
- ),
- ),
- 'found_synonyms' => array(entity_label('node', $synonym_entity)),
- );
- $this->assertSynonymsFind($meta_data, db_and()->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, entity_label('node', $synonym_entity)), 'on a field with 2 values searching for one of those 2 values');
- $meta_data = array();
- $synonym_entity = $this->createNode();
- $meta_data[] = array(
- 'items' => array(
- LANGUAGE_NONE => array(
- array('target_id' => entity_id('node', $synonym_entity)),
- array('target_id' => entity_id('node', $this->createNode())),
- ),
- ),
- 'found_synonyms' => array(entity_label('node', $synonym_entity)),
- );
- $meta_data[] = array(
- 'items' => array(
- LANGUAGE_NONE => array(
- array('target_id' => entity_id('node', $this->createNode())),
- array('target_id' => entity_id('node', $this->createNode())),
- ),
- ),
- 'found_synonyms' => array(),
- );
- $this->assertSynonymsFind($meta_data, db_and()->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, entity_label('node', $synonym_entity)), 'on 2 fields with 2 values each searching for one of those values');
- $meta_data = array();
- $synonym_entity = $this->createNode();
- $meta_data[] = array(
- 'items' => array(
- LANGUAGE_NONE => array(
- array('target_id' => entity_id('node', $synonym_entity)),
- ),
- ),
- 'found_synonyms' => array(entity_label('node', $synonym_entity)),
- );
- $this->assertSynonymsFind($meta_data, db_and()->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, '%' . db_like(drupal_substr(entity_label('node', $synonym_entity), 1, -1)) . '%', 'LIKE'), 'on a field with a value searching for a string LIKE the %value%');
- $meta_data = array();
- $tag = $this->randomName();
- $synonym_entity1 = $this->createNode($tag . $this->randomName());
- $synonym_entity2 = $this->createNode($tag . $this->randomName());
- $meta_data[] = array(
- 'items' => array(
- LANGUAGE_NONE => array(
- array('target_id' => entity_id('node', $synonym_entity1)),
- array('target_id' => entity_id('node', $synonym_entity2)),
- ),
- ),
- 'found_synonyms' => array(
- entity_label('node', $synonym_entity1),
- entity_label('node', $synonym_entity2),
- ),
- );
- $this->assertSynonymsFind($meta_data, db_and()->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, db_like($tag) . '%', 'LIKE'), 'on a field with 2 similar values searching a string like %both values%');
- $meta_data = array();
- $synonym_entity1 = $this->createNode();
- $synonym_entity2 = $this->createNode();
- $meta_data[] = array(
- 'items' => array(
- LANGUAGE_NONE => array(
- array('target_id' => entity_id('node', $synonym_entity1)),
- array('target_id' => entity_id('node', $synonym_entity2)),
- ),
- ),
- 'found_synonyms' => array(
- entity_label('node', $synonym_entity1),
- entity_label('node', $synonym_entity2),
- ),
- );
- $condition = db_or()
- ->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, entity_label('node', $synonym_entity1))
- ->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, entity_label('node', $synonym_entity2));
- $this->assertSynonymsFind($meta_data, $condition, 'on a field with 2 values searching for value1 or value2');
- $meta_data = array();
- $synonym_entity = $this->createNode();
- $meta_data[] = array(
- 'items' => array(
- LANGUAGE_NONE => array(
- array('target_id' => entity_id('node', $synonym_entity)),
- array('target_id' => entity_id('node', $this->createNode())),
- ),
- ),
- 'found_synonyms' => array(entity_label('node', $synonym_entity)),
- );
- $condition = db_and()
- ->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, entity_label('node', $synonym_entity))
- ->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, '%' . db_like(drupal_substr(entity_label('node', $synonym_entity), 1, -1)) . '%', 'LIKE');
- $this->assertSynonymsFind($meta_data, $condition, 'on a field with 2 values searching for value1 and LIKE value1%');
- $meta_data = array();
- $synonym_entity1 = $this->createNode();
- $synonym_entity2 = $this->createNode();
- $meta_data[] = array(
- 'items' => array(
- LANGUAGE_NONE => array(
- array('target_id' => entity_id('node', $synonym_entity1)),
- array('target_id' => entity_id('node', $synonym_entity2)),
- ),
- ),
- 'found_synonyms' => array(
- entity_label('node', $synonym_entity1),
- entity_label('node', $synonym_entity2),
- ),
- );
- $condition = db_or()
- ->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, entity_label('node', $synonym_entity1))
- ->condition(db_and()->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, entity_label('node', $synonym_entity2))->condition(AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER, '%' . db_like(drupal_substr(entity_label('node', $synonym_entity2), 1, -1)) . '%', 'LIKE'));
- $this->assertSynonymsFind($meta_data, $condition, 'on a field with 2 values searching for (value1 or (value2 AND value2%))');
- $meta_data = array();
- $synonym_entity1 = $this->createNode($this->randomName() . ' ' . $this->randomName() . ' ' . $this->randomName());
- $synonym_entity2 = $this->createNode(str_replace(' ', '-', entity_label('node', $synonym_entity1)));
- $meta_data[] = array(
- 'items' => array(
- LANGUAGE_NONE => array(
- array('target_id' => entity_id('node', $synonym_entity1)),
- array('target_id' => entity_id('node', $synonym_entity2)),
- ),
- ),
- 'found_synonyms' => array(
- entity_label('node', $synonym_entity1),
- entity_label('node', $synonym_entity2),
- ),
- );
- $condition = db_and()
- ->where("REPLACE(" . AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER . ", ' ', '-') = :synonym", array(
- ':synonym' => entity_label('node', $synonym_entity2),
- ));
- $this->assertSynonymsFind($meta_data, $condition, "on a field with 2 values, where 2nd value replaces spaces with dashes in the 1st value, searching for REPLACE(column, ' ', '-') = value2");
- }
- /**
- * Supportive function.
- *
- * Create an entity of necessary entity type (in our test it's node).
- *
- * @param string $label
- * Label to use for the entity that is about to be created
- * @param string $bundle
- * Bundle to use for the entity that is about to be created
- *
- * @return object
- * Fully loaded entity object of the just created entity
- */
- protected function createNode($label = NULL, $bundle = 'page') {
- if (is_null($label)) {
- $label = $this->randomName();
- }
- $entity = (object) array(
- 'type' => $bundle,
- 'title' => $label,
- );
- node_save($entity);
- return $entity;
- }
- }
|