summaryrefslogtreecommitdiff
path: root/modules/taxonomy/taxonomy.test
diff options
context:
space:
mode:
Diffstat (limited to 'modules/taxonomy/taxonomy.test')
-rw-r--r--modules/taxonomy/taxonomy.test394
1 files changed, 394 insertions, 0 deletions
diff --git a/modules/taxonomy/taxonomy.test b/modules/taxonomy/taxonomy.test
new file mode 100644
index 000000000..65314b5e8
--- /dev/null
+++ b/modules/taxonomy/taxonomy.test
@@ -0,0 +1,394 @@
+<?php
+// $Id$
+
+class TaxonomyVocabularyFunctionsTestCase extends DrupalWebTestCase {
+ /**
+ * Implementation of getInfo().
+ */
+ function getInfo() {
+ return array(
+ 'name' => t('Vocabulary functions'),
+ 'description' => t('Create/Edit/Delete vocabulary and assert that all fields were properly saved.'),
+ 'group' => t('Taxonomy')
+ );
+ }
+
+ /**
+ * Create/Edit/Delete vocabulary and assert that all fields were properly saved.
+ */
+ function testVocabularyFunctions() {
+ //preparing data
+ $vid = 0;
+ $name = $this->randomName(200);
+ $description = $this->randomName(200);
+ $help = $this->randomName(200);
+ $hierarchy = rand(0,2); // Hierarchy 0,1,2
+ $multiple = rand(0,1); // multiple 0,1
+ $required = rand(0,1); // required 0,1
+ $relations = rand(0,1);
+ $tags = rand(0,1);
+ $weight = rand(-9,9);
+ $module = 'taxonomy';
+ $nodesList = array_keys(node_get_types());
+ $maxNodes = rand(1, count($nodesList));
+ $nodes = array();
+ for($i = 0; $i < $maxNodes; $i++) {
+ $nodes[$nodesList[$i]] = $nodesList[$i];
+ $nodesBak[$nodesList[$i]] = $nodesList[$i];
+ }
+ $_t = array('vid', 'name', 'description', 'help', 'relations', 'hierarchy', 'multiple',
+ 'required', 'tags', 'module', 'weight', 'nodes');
+ $edit = array();
+ foreach($_t as $key)
+ $edit[$key] = $$key;
+
+ // Exec save function.
+ taxonomy_save_vocabulary($edit);
+ // After save we use $nodesBak.
+ ksort($nodesBak);
+ $edit['nodes'] = $nodesBak;
+ $vocabularies = taxonomy_get_vocabularies();
+ foreach($vocabularies as $voc) {
+ if ($voc->name == $name) {
+ $vid = $voc->vid;
+ break;
+ }
+ }
+ $edit['vid'] = $vid;
+ // Get data using function.
+ $getEdit = taxonomy_vocabulary_load($vid);
+ foreach($getEdit as $key => $value ) {
+ $this->assertEqual($value, $edit[$key], t('Checking value of @key.', array('@key' => $key)));
+ }
+
+ // Delete vocabulary to avoid exception messages we create array with empty fields.
+ $deleteArray = array();
+ foreach($getEdit as $key => $v) {
+ $deleteArray[$key] = 0;
+ }
+ $deleteArray['vid'] = $vid;
+ taxonomy_save_vocabulary($deleteArray);
+ // Checking if we deleted voc.
+ $vocabularies = taxonomy_get_vocabularies();
+ $vid = 0;
+ foreach($vocabularies as $voc) {
+ if ($voc->name == $name) {
+ $vid = $voc->vid;
+ break;
+ }
+ }
+ $this->assertEqual($vid, 0, t('Deleted vocabulary (@vid)', array('@vid' => $vid)));
+ }
+}
+
+
+class TaxonomyTermFunctionsTestCase extends DrupalWebTestCase {
+ /**
+ * Implementation of getInfo().
+ */
+ function getInfo() {
+ return array(
+ 'name' => t('Term functions'),
+ 'description' => t('Testing save/update/delete terms.'),
+ 'group' => t('Taxonomy')
+ );
+ }
+
+ /**
+ * Test term related functions.
+ */
+ function testTermsFunctions() {
+ // Preparing data: vocabulary, hierarchy -> disabled, related terms = on.
+ $edit = array();
+ $_t = array('vid', 'name', 'description', 'help', 'relations', 'hierarchy', 'multiple',
+ 'required', 'tags', 'module', 'weight', 'nodes');
+ foreach($_t as $key ) {
+ $edit[$key] = 0;
+ }
+ $name = $this->randomName(20);
+ $relation = 1;
+ $edit['name'] = $name;
+ taxonomy_save_vocabulary($edit);
+
+ // Create term.
+ $termname = $this->randomName(20);
+ $termdesc = $this->randomName(200);
+ $termweight = rand(-9, 9);
+ $randSyn = rand(0, 9);
+ $synonyms = array();
+ for($i = 0; $i < $randSyn; $i++) {
+ $synonyms[] = $this->randomName(20);
+ }
+ $termsyn = implode("\n", $synonyms);
+ $data = array('name' => $termname, 'description' => $termdesc, 'weight' => $termweight, 'synonyms' => $termsyn, 'vid' => $edit['vid'], 'tid' => 0, 'relations' => 0);
+ taxonomy_save_term($data);
+
+ // Retrieve term and check all fields.
+ $_tArray = taxonomy_get_term_by_name($termname);
+ $getTerm = $_tArray[0];
+ $checkField = array('name', 'description', 'weight', 'vid');
+ foreach($checkField as $v) {
+ $this->assertEqual($data[$v], $getTerm->$v, t('Checking value of the term (@v).', array('@v' => $v)));
+ }
+ $getSynonyms = taxonomy_get_synonyms($getTerm->tid);
+ $this->assertEqual(sort($synonyms), sort($getSynonyms), 'Checking synonyms');
+
+ // Creating related terms.
+ $relations = array();
+ $staryTid = $getTerm->tid;
+ $relations[] = $staryTid;
+ $termname = $this->randomName(20);
+ $data = array('name' => $termname, 'description' => '', 'weight' => 0, 'synonyms' => 0, 'vid' => $edit['vid'], 'tid' => 0, 'relations' => array($staryTid));
+ taxonomy_save_term($data);
+ $_tArray = taxonomy_get_term_by_name($termname);
+ $getTerm = $_tArray[0];
+ $relations[] = $getTerm->tid;
+
+ // Creating another term related to 2 terms above.
+ $termname = $this->randomName(20);
+ $data = array('name' => $termname, 'description' => '', 'weight' => 0, 'synonyms' => 0, 'vid' => $edit['vid'], 'tid' => 0, 'relations' => array($staryTid, $getTerm->tid));
+ taxonomy_save_term($data);
+ $_tArray = taxonomy_get_term_by_name($termname);
+ $getTerm = $_tArray[0];
+
+ // Check related terms.
+ $related = taxonomy_get_related($getTerm->tid);
+ foreach($relations as $rTid) {
+ $this->assertTrue(array_key_exists($rTid, $related), t('Checking relations (@rTid).', array('@rTid' => $rTid)));
+ }
+
+ // Delete vocabulary.
+ $edit['name'] = 0;
+ taxonomy_save_vocabulary($edit);
+ }
+
+ /**
+ * Test single hierarchy terms.
+ */
+ function testTermsFunctionsSingleHierarchy() {
+ // Preparing data: vocabulary hierarchy->single.
+ $edit = array();
+ $_t = array('vid', 'name', 'description', 'help', 'relations', 'hierarchy', 'multiple',
+ 'required', 'tags', 'module', 'weight', 'nodes');
+ foreach($_t as $key ) {
+ $edit[$key] = 0;
+ }
+
+ // Create vocab.
+ $name = $this->randomName(20);
+ $edit['hierarchy'] = 1;
+ $edit['name'] = $name;
+ taxonomy_save_vocabulary($edit);
+
+ // Create 1st term.
+ $termname = $this->randomName(20);
+ $data = array('name' => $termname, 'description' => '', 'weight' => 0, 'synonyms' => '', 'vid' => $edit['vid'], 'tid' => 0, 'relations' => 0);
+ taxonomy_save_term($data);
+ $_tArray = taxonomy_get_term_by_name($termname);
+ $parent = $_tArray[0];
+
+ // Create 2nd term as a child.
+ $termname = $this->randomName(20);
+ $data = array('name' => $termname, 'description' => '', 'weight' => 0, 'synonyms' => '', 'vid' => $edit['vid'], 'tid' => 0, 'relations' => 0, 'parent' => array($parent->tid));
+ taxonomy_save_term($data);
+ $_tArray = taxonomy_get_term_by_name($termname);
+ $children = $_tArray[0];
+
+ // Check hierarchy.
+ $getChildren = taxonomy_get_children($parent->tid);
+ $getParent = taxonomy_get_parents($children->tid);
+ $this->assertEqual($parent,$getParent[$parent->tid], t('Checking parents.'));
+ $this->assertEqual($children,$getChildren[$children->tid], t('Checking children.'));
+
+ // Delete vocabulary.
+ $edit['name'] = 0;
+ taxonomy_save_vocabulary($edit);
+ }
+
+ /**
+ * Test multiple hierarchy terms.
+ */
+ function testTermsFunctionsMultipleHierarchy() {
+ // Preparing data: vocabulary hierarchy->single.
+ $edit = array();
+ $_t = array('vid', 'name', 'description', 'help', 'relations', 'hierarchy', 'multiple',
+ 'required', 'tags', 'module', 'weight', 'nodes');
+ foreach($_t as $key )
+ $edit[$key] = 0;
+
+ $name = $this->randomName(20);
+ $edit['hierarchy'] = 1;
+ $edit['name'] = $name;
+ taxonomy_save_vocabulary($edit);
+
+ // Create 1st term.
+ $parent = array();
+ $termname = $this->randomName(20);
+ $data = array('name' => $termname, 'description' => '', 'weight' => 0, 'synonyms' => '', 'vid' => $edit['vid'], 'tid' => 0, 'relations' => 0);
+ taxonomy_save_term($data);
+ $_tArray = taxonomy_get_term_by_name($termname);
+ $parent[] = $_tArray[0]->tid;
+
+ // Create 2nd term.
+ $termname = $this->randomName(20);
+ $data = array('name' => $termname, 'description' => '', 'weight' => 0, 'synonyms' => '', 'vid' => $edit['vid'], 'tid' => 0, 'relations' => 0);
+ taxonomy_save_term($data);
+ $_tArray = taxonomy_get_term_by_name($termname);
+ $parent[] = $_tArray[0]->tid;
+
+ // Create 3rd term as a child.
+ $termname = $this->randomName(20);
+ $data = array('name' => $termname, 'description' => '', 'weight' => 0, 'synonyms' => '', 'vid' => $edit['vid'], 'tid' => 0, 'relations' => 0, 'parent' => array($parent));
+ taxonomy_save_term($data);
+ $_tArray = taxonomy_get_term_by_name($termname);
+ $children = $_tArray[0];
+
+ $getParent = taxonomy_get_parents($children->tid);
+ foreach($parent as $p) {
+ $this->assertTrue(array_key_exists($p, $getParent), t('Checking parents (@p)', array('@p' => $p)));
+ //$this->assertEqual($parent,$getParent[$parent->tid], 'Checking parents');
+ }
+
+ // Delete vocabulary.
+ $edit['name'] = 0;
+ taxonomy_save_vocabulary($edit);
+ }
+
+}
+
+class TaxonomyTestNodeApiTestCase extends DrupalWebTestCase {
+ /**
+ * Implementation of getInfo().
+ */
+ function getInfo() {
+ return array(
+ 'name' => t('Taxonomy nodeapi'),
+ 'description' => t('Save & edit a node and assert that taxonomy terms are saved/loaded properly.'),
+ 'group' => t('Taxonomy')
+ );
+ }
+
+ /*
+ * Save & edit a node and assert that taxonomy terms are saved/loaded properly.
+ */
+ function testTaxonomyNode() {
+ // Preparing data: vocabulary hierarchy->single, multiple -> on.
+ $edit = array();
+ $_t = array('vid', 'name', 'description', 'help', 'relations', 'hierarchy', 'multiple',
+ 'required', 'tags', 'module', 'weight', 'nodes');
+ foreach($_t as $key) {
+ $edit[$key] = 0;
+ }
+
+ $name = $this->randomName(20);
+ $edit['hierarchy'] = 1;
+ $edit['multiple'] = 1;
+ $edit['name'] = $name;
+ $edit['nodes'] = array('article' => 'article');
+ taxonomy_save_vocabulary($edit);
+ $vid = $edit['vid']; // We need to persist vid after $edit is unset().
+
+ $parent = array();
+ $patternArray = array();
+
+ // Create 1st term.
+ $termname = $this->randomName(20);
+ $data = array('name' => $termname, 'description' => '', 'weight' => 0, 'synonyms' => '', 'vid' => $vid, 'tid' => 0, 'relations' => 0);
+ taxonomy_save_term($data);
+ $_tArray = taxonomy_get_term_by_name($termname);
+ $parent[$_tArray[0]->tid] = $_tArray[0]->tid;
+ $patternArray['term name 1'] = $termname;
+
+ // Create 2nd term.
+ $termname = $this->randomName(20);
+ $data = array('name' => $termname, 'description' => '', 'weight' => 0, 'synonyms' => '', 'vid' => $vid, 'tid' => 0, 'relations' => 0);
+ taxonomy_save_term($data);
+ $_tArray = taxonomy_get_term_by_name($termname);
+ $parent[$_tArray[0]->tid] = $_tArray[0]->tid;
+ $patternArray['term name 2'] = $termname;
+
+ // Create test user and login.
+ $perm = array('access content', 'create article content', 'edit own article content', 'delete own article content');
+ $account = $this->drupalCreateUser($perm);
+ $this->drupalLogin($account);
+
+ // Why is this printing out the user profile page?
+ // Go to node/add/article.
+ // Try to create article.
+ $title = $this->randomName();
+ $body = $this->randomName(100);
+ $edit = array('title' => $title, 'body' => $body, "taxonomy[$vid][]" => $parent);
+
+ $this->drupalPost('node/add/article', $edit, t('Save'));
+
+ $patternArray['body text'] = $body;
+ $patternArray['title'] = $title;
+
+ $node = node_load(array('title' => $title));
+
+ $this->drupalGet("node/$node->nid");
+ foreach($patternArray as $name => $termPattern) {
+ $this->assertText($termPattern, "Checking $name");
+ }
+
+ // Checking database fields.
+ $result = db_query('SELECT tid FROM {term_node} WHERE nid = %d', $node->nid);
+ while ($nodeRow = db_fetch_array($result)) {
+ $this->assertTrue(in_array($nodeRow['tid'], $parent), 'Checking database record');
+ }
+
+ // Ok, lets create new terms, and change this node.
+ array_pop($parent);
+
+ // create 1st term
+ $termname = $this->randomName(20);
+ $data = array('name' => $termname, 'description' => '', 'weight' => 0, 'synonyms' => '', 'vid' => $vid, 'tid' => 0, 'relations' => 0);
+ taxonomy_save_term($data);
+ $_tArray = taxonomy_get_term_by_name($termname);
+ $parent[] = $_tArray[0]->tid;
+ $patternArray['term name 2'] = $termname;
+
+ // create 2nd term
+ $termname = $this->randomName(20);
+ $data = array('name' => $termname, 'description' => '', 'weight' => 0, 'synonyms' => '', 'vid' => $vid, 'tid' => 0, 'relations' => 0);
+ taxonomy_save_term($data);
+ $_tArray = taxonomy_get_term_by_name($termname);
+ $parent[] = $_tArray[0]->tid;
+ $patternArray['term name 3'] = $termname;
+
+ $edit = array('title' => $title, 'body' => $body, "taxonomy[$vid][]" => $parent);
+
+ $this->drupalPost('node/'. $node->nid .'/edit', $edit, t('Save'));
+
+ // TODO Do a MUCH better check here of the information msg.
+ $patternArray['information message'] = 'been updated';
+ foreach($patternArray as $name => $termPattern) {
+ $this->assertText($termPattern, t('Checking @name.', array('@name' => $name)));
+ }
+
+ // Checking database fields.
+ $node = node_load(array('title' => $title));
+ $result = db_query('SELECT tid FROM {term_node} WHERE vid = %d', $node->vid);
+ while ($nodeRow = db_fetch_array($result)) {
+ $this->assertTrue(in_array($nodeRow['tid'], $parent), t('Checking database field.'));
+ }
+
+ // Delete node through browser.
+ $this->drupalPost('node/'. $node->nid .'/delete', array(), t('Delete'));
+ // Checking after delete.
+ $this->drupalGet("node/".$node->nid);
+ $this->assertNoText($termname, t('Checking if node exists'));
+ // Checking database fields.
+ $num_rows = db_result(db_query('SELECT COUNT(*) FROM {term_node} WHERE nid = %d', $node->nid));
+ $this->assertEqual($num_rows, 0, t('Checking database field after deletion'));
+
+ // Delete vocabulary to avoid exception messages create array with empty fields.
+ $edit = array();
+ foreach($_t as $key ) {
+ $edit[$key] = 0;
+ }
+ $edit['name'] = 0;
+ $edit['vid'] = $vid;
+ taxonomy_save_vocabulary($edit);
+ }
+}