Spike PHPCoverage Details: taxonomy.test

Line #FrequencySource Line
1 <?php
2 // $Id: taxonomy.test,v 1.10 2008/04/04 14:19:33 rokZlender Exp $
3 
4 class TaxonomyVocabularyFunctionsTestCase extends DrupalTestCase {
5   function getInfo() {
61    return array('name' => 'Vocabulary functions', 'description' => "Create/Edit/Delete a vocabulary and assert that all fields were properly saved" , 'group' => 'Taxonomy');
7   }
8 
9   function testVocabularyFunctions() {
10     //preparing data
11     $vid = 0;
12     $name = $this->randomName(200);
13     $description = $this->randomName(200);
14     $help = $this->randomName(200);
15     $hierarchy = rand(0,2); // Hierarchy 0,1,2
16     $multiple = rand(0,1); // multiple 0,1
17     $required = rand(0,1); // required 0,1
18     $relations = rand(0,1);
19     $tags = rand(0,1);
20     $weight = rand(-9,9);
21     $module = 'taxonomy';
22     $nodesList = array_keys(node_get_types());
23     $maxNodes = rand(1, count($nodesList));
24     $nodes = array();
25     for($i = 0; $i < $maxNodes; $i++) {
26       $nodes[$nodesList[$i]] = $nodesList[$i];
27       $nodesBak[$nodesList[$i]] = $nodesList[$i];
28     }
29     $_t = array('vid', 'name', 'description', 'help', 'relations', 'hierarchy', 'multiple',
30       'required', 'tags', 'module', 'weight', 'nodes');
31     $edit = array();
32     foreach($_t as $key )
33       $edit[$key] = $$key;
34 
35     // exec save function
36     taxonomy_save_vocabulary($edit);
37     //after save we use $nodesBak
38     ksort($nodesBak);
39     $edit['nodes'] = $nodesBak;
40     $vocabularies = taxonomy_get_vocabularies();
41     foreach($vocabularies as $voc) {
42       if ($voc->name == $name) {
43         $vid = $voc->vid;
44         break;
45       }
46     }
47     $edit['vid'] = $vid;
48     // get data using function
49     $getEdit = taxonomy_vocabulary_load($vid);
50     foreach($getEdit as $key => $value ) {
51       $this->assertEqual($value, $edit[$key],"Checking value of $key");
52     }
53 
54     // delete vocabulary
55     // to avoid exception messages we create array with empty fields
56     $deleteArray = array();
57     foreach($getEdit as $key => $v)
58       $deleteArray[$key] = 0;
59     $deleteArray['vid'] = $vid;
60     taxonomy_save_vocabulary($deleteArray);
61     // checking if we deleted voc.
62     $vocabularies = taxonomy_get_vocabularies();
63     $vid = 0;
64     foreach($vocabularies as $voc) {
65       if ($voc->name == $name) {
66         $vid = $voc->vid;
67         break;
68       }
69     }
70     $this->assertEqual($vid, 0, "Deleted vocabulary ($vid)");
71 
72   }
73 }
74 
75 
76 class TaxonomyTermFunctionsTestCase extends DrupalTestCase {
77   function getInfo() {
781    return array('name' => 'Term functions', 'description' => "Testing save/update/delete terms" , 'group' => 'Taxonomy');
79   }
80 
81   function testTermsFunctions() {
82     //preparing data
83     // vocabulary, hierarchy -> disabled, related terms = on;
84     $edit = array();
85     $_t = array('vid', 'name', 'description', 'help', 'relations', 'hierarchy', 'multiple',
86         'required', 'tags', 'module', 'weight', 'nodes');
87     foreach($_t as $key ) {
88       $edit[$key] = 0;
89     }
90     $name = $this->randomName(20);
91     $relation = 1;
92     $edit['name'] = $name;
93     taxonomy_save_vocabulary($edit);
94 
95     // create term
96     $termname = $this->randomName(20);
97     $termdesc = $this->randomName(200);
98     $termweight = rand(-9, 9);
99     $randSyn = rand(0, 9);
100     $synonyms = array();
101     for($i = 0; $i < $randSyn; $i++) {
102       $synonyms[] = $this->randomName(20);
103     }
104     $termsyn = implode("\n", $synonyms);
105     $data = array('name' => $termname, 'description' => $termdesc, 'weight' => $termweight, 'synonyms' => $termsyn, 'vid' => $edit['vid'], 'tid' => 0, 'relations' => 0);
106     taxonomy_save_term($data);
107 
108     // retrieve term and check all fields
109     $_tArray = taxonomy_get_term_by_name($termname);
110     $getTerm = $_tArray[0];
111     $checkField = array('name', 'description', 'weight', 'vid');
112     foreach($checkField as $v) {
113       $this->assertEqual($data[$v], $getTerm->$v, "Checking value of the term ($v)");
114     }
115     $getSynonyms = taxonomy_get_synonyms($getTerm->tid);
116     $this->assertEqual(sort($synonyms), sort($getSynonyms), 'Checking synonyms');
117 
118     // creating related terms
119     $relations = array();
120     $staryTid = $getTerm->tid;
121     $relations[] = $staryTid;
122     $termname = $this->randomName(20);
123     $data = array('name' => $termname, 'description' => '', 'weight' => 0, 'synonyms' => 0, 'vid' => $edit['vid'], 'tid' => 0, 'relations' => array($staryTid));
124     taxonomy_save_term($data);
125     $_tArray = taxonomy_get_term_by_name($termname);
126     $getTerm = $_tArray[0];
127     $relations[] = $getTerm->tid;
128 
129     // Creating another term related to 2 terms above;
130     $termname = $this->randomName(20);
131     $data = array('name' => $termname, 'description' => '', 'weight' => 0, 'synonyms' => 0, 'vid' => $edit['vid'], 'tid' => 0, 'relations' => array($staryTid, $getTerm->tid));
132     taxonomy_save_term($data);
133     $_tArray = taxonomy_get_term_by_name($termname);
134     $getTerm = $_tArray[0];
135 
136     // check related terms
137     $related = taxonomy_get_related($getTerm->tid);
138     foreach($relations as $rTid) {
139       $this->assertTrue(array_key_exists($rTid, $related), "Checking relations ($rTid)");
140     }
141 
142     // delete vocabulary
143     $edit['name'] = 0;
144     taxonomy_save_vocabulary($edit);
145   }
146 
147   function testTermsFunctionsSingleHierarchy() {
148     //preparing data
149     // vocabulary hierarchy->single
150     $edit = array();
151     $_t = array('vid', 'name', 'description', 'help', 'relations', 'hierarchy', 'multiple',
152         'required', 'tags', 'module', 'weight', 'nodes');
153     foreach($_t as $key ) {
154       $edit[$key] = 0;
155     }
156 
157     // create vocab
158     $name = $this->randomName(20);
159     $edit['hierarchy'] = 1;
160     $edit['name'] = $name;
161     taxonomy_save_vocabulary($edit);
162 
163     // create 1st term
164     $termname = $this->randomName(20);
165     $data = array('name' => $termname, 'description' => '', 'weight' => 0, 'synonyms' => '', 'vid' => $edit['vid'], 'tid' => 0, 'relations' => 0);
166     taxonomy_save_term($data);
167     $_tArray = taxonomy_get_term_by_name($termname);
168     $parent = $_tArray[0];
169 
170     // create 2nd term as a child
171     $termname = $this->randomName(20);
172     $data = array('name' => $termname, 'description' => '', 'weight' => 0, 'synonyms' => '', 'vid' => $edit['vid'], 'tid' => 0, 'relations' => 0, 'parent' => array($parent->tid));
173     taxonomy_save_term($data);
174     $_tArray = taxonomy_get_term_by_name($termname);
175     $children = $_tArray[0];
176 
177     // check hierarchy
178     $getChildren = taxonomy_get_children($parent->tid);
179     $getParent = taxonomy_get_parents($children->tid);
180     $this->assertEqual($parent,$getParent[$parent->tid], 'Checking parents');
181     $this->assertEqual($children,$getChildren[$children->tid], 'Checking children');
182 
183     // delete vocabulary
184     $edit['name'] = 0;
185     taxonomy_save_vocabulary($edit);
186   }
187 
188   function testTermsFunctionsMultipleHierarchy() {
189     //preparing data
190     // vocabulary hierarchy->single
191     $edit = array();
192     $_t = array('vid', 'name', 'description', 'help', 'relations', 'hierarchy', 'multiple',
193         'required', 'tags', 'module', 'weight', 'nodes');
194     foreach($_t as $key )
195       $edit[$key] = 0;
196 
197     $name = $this->randomName(20);
198     $edit['hierarchy'] = 1;
199     $edit['name'] = $name;
200     taxonomy_save_vocabulary($edit);
201 
202     // create 1st term
203     $parent = array();
204     $termname = $this->randomName(20);
205     $data = array('name' => $termname, 'description' => '', 'weight' => 0, 'synonyms' => '', 'vid' => $edit['vid'], 'tid' => 0, 'relations' => 0);
206     taxonomy_save_term($data);
207     $_tArray = taxonomy_get_term_by_name($termname);
208     $parent[] = $_tArray[0]->tid;
209 
210     // create 2nd term
211     $termname = $this->randomName(20);
212     $data = array('name' => $termname, 'description' => '', 'weight' => 0, 'synonyms' => '', 'vid' => $edit['vid'], 'tid' => 0, 'relations' => 0);
213     taxonomy_save_term($data);
214     $_tArray = taxonomy_get_term_by_name($termname);
215     $parent[] = $_tArray[0]->tid;
216 
217     // create 3rd term as a child
218     $termname = $this->randomName(20);
219     $data = array('name' => $termname, 'description' => '', 'weight' => 0, 'synonyms' => '', 'vid' => $edit['vid'], 'tid' => 0, 'relations' => 0, 'parent' => array($parent));
220     taxonomy_save_term($data);
221     $_tArray = taxonomy_get_term_by_name($termname);
222     $children = $_tArray[0];
223 
224     $getParent = taxonomy_get_parents($children->tid);
225     foreach($parent as $p) {
226       $this->assertTrue(array_key_exists($p, $getParent), "Checking parents ($p)");
227       //$this->assertEqual($parent,$getParent[$parent->tid], 'Checking parents');
228     }
229 
230     // delete vocabulary
231     $edit['name'] = 0;
232     taxonomy_save_vocabulary($edit);
233   }
234 
235 }
236 
237 class TaxonomyTestNodeApiTestCase extends DrupalTestCase {
238   function getInfo() {
2391    return array('name' => 'Taxonomy nodeapi', 'description' => "Save & edit a node and assert that taxonomy terms are saved/loaded properly." , 'group' => 'Taxonomy');
240   }
241 
242   function testTaxonomyNode() {
243 
244     //preparing data
245     // vocabulary hierarchy->single, multiple -> on
246     $edit = array();
247     $_t = array('vid', 'name', 'description', 'help', 'relations', 'hierarchy', 'multiple',
248         'required', 'tags', 'module', 'weight', 'nodes');
249     foreach($_t as $key) {
250       $edit[$key] = 0;
251     }
252 
253     $name = $this->randomName(20);
254     $edit['hierarchy'] = 1;
255     $edit['multiple'] = 1;
256     $edit['name'] = $name;
257     $edit['nodes'] = array('article' => 'article');
258     taxonomy_save_vocabulary($edit);
259     $vid = $edit['vid']; // we need to persist vid after $edit is unset()
260 
261     $parent = array();
262     $patternArray = array();
263 
264     // create 1st term
265     $termname = $this->randomName(20);
266     $data = array('name' => $termname, 'description' => '', 'weight' => 0, 'synonyms' => '', 'vid' => $vid, 'tid' => 0, 'relations' => 0);
267     taxonomy_save_term($data);
268     $_tArray = taxonomy_get_term_by_name($termname);
269     $parent[$_tArray[0]->tid] = $_tArray[0]->tid;
270     $patternArray['term name 1'] = $termname;
271 
272     // create 2nd term
273     $termname = $this->randomName(20);
274     $data = array('name' => $termname, 'description' => '', 'weight' => 0, 'synonyms' => '', 'vid' => $vid, 'tid' => 0, 'relations' => 0);
275     taxonomy_save_term($data);
276     $_tArray = taxonomy_get_term_by_name($termname);
277     $parent[$_tArray[0]->tid] = $_tArray[0]->tid;
278     $patternArray['term name 2'] = $termname;
279 
280     // create test user and login
281     $perm = array('access content', 'create article content', 'edit own article content', 'delete own article content');
282     $account = $this->drupalCreateUser($perm);
283     $this->drupalLogin($account);
284 
285     // why is this printing out the user profile page?
286     // go to node/add/article
287     // try to create article
288     $title = $this->randomName();
289     $body = $this->randomName(100);
290     $edit = array('title' => $title, 'body' => $body, "taxonomy[$vid][]" => $parent);
291 
292     $this->drupalPost('node/add/article', $edit, t('Save'));
293 
294     $patternArray['body text'] = $body;
295     $patternArray['title'] = $title;
296 
297 //    $node = array2object(node_load(array('title' => $title)));
298     $node = node_load(array('title' => $title));
299 
300     $this->drupalGet("node/$node->nid");
301     foreach($patternArray as $name => $termPattern) {
302       $this->assertText($termPattern, "Checking $name");
303     }
304 
305     // checking database fields
306     $result = db_query('SELECT tid FROM {term_node} WHERE nid = %d', $node->nid);
307     while ($nodeRow = db_fetch_array($result)) {
308       $this->assertTrue(in_array($nodeRow['tid'], $parent), 'Checking database record');
309     }
310 
311     // ok, lets create new terms, and change this node
312     //pop array
313     array_pop($parent);
314 
315     // create 1st term
316     $termname = $this->randomName(20);
317     $data = array('name' => $termname, 'description' => '', 'weight' => 0, 'synonyms' => '', 'vid' => $vid, 'tid' => 0, 'relations' => 0);
318     taxonomy_save_term($data);
319     $_tArray = taxonomy_get_term_by_name($termname);
320     $parent[] = $_tArray[0]->tid;
321     $patternArray['term name 2'] = $termname;
322 
323     // create 2nd term
324     $termname = $this->randomName(20);
325     $data = array('name' => $termname, 'description' => '', 'weight' => 0, 'synonyms' => '', 'vid' => $vid, 'tid' => 0, 'relations' => 0);
326     taxonomy_save_term($data);
327     $_tArray = taxonomy_get_term_by_name($termname);
328     $parent[] = $_tArray[0]->tid;
329     $patternArray['term name 3'] = $termname;
330 
331     $edit = array('title' => $title, 'body' => $body, "taxonomy[$vid][]" => $parent);
332 
333     $this->drupalPost('node/'. $node->nid .'/edit', $edit, t('Save'));
334 
335     // TODO Do a MUCH better check here of the information msg
336     $patternArray['information message'] = 'been updated';
337     foreach($patternArray as $name => $termPattern) {
338       $this->assertText($termPattern, "Checking $name");
339     }
340 
341     // checking database fields
342     $node = node_load(array('title' => $title));
343     $result = db_query('SELECT tid FROM {term_node} WHERE vid = %d', $node->vid);
344     while ($nodeRow = db_fetch_array($result)) {
345       $this->assertTrue(in_array($nodeRow['tid'], $parent), 'Checking database field');
346     }
347 
348     // delete node through browser
349     $this->drupalPost('node/'. $node->nid .'/delete', array(), t('Delete'));
350     // checking after delete
351     $this->drupalGet("node/".$node->nid);
352     $this->assertNoText($termname, "Checking if node exists");
353     // checking database fields
354     $num_rows = db_result(db_query('SELECT COUNT(*) FROM {term_node} WHERE nid = %d', $node->nid));
355     $this->assertEqual($num_rows, 0, 'Checking database field after deletion');
356 
357     // delete vocabulary
358     // to avoid exception messages create array with empty fields
359     $edit = array();
360     foreach($_t as $key ) {
361       $edit[$key] = 0;
362     }
363     $edit['name'] = 0;
364     $edit['vid'] = $vid;
365     taxonomy_save_vocabulary($edit);
366   }
367 
368 }
369 
370 
371 ?>