View source
<?php
class ContentTaxonomyTestCase extends ContentCrudTestCase {
function setUp() {
$args = func_get_args();
$modules = array_merge(array(
"optionwidgets",
"content_taxonomy",
"content_taxonomy_options",
"content_taxonomy_autocomplete",
), $args);
call_user_func_array(array(
'parent',
'setUp',
), $modules);
$this
->loginWithPermissions();
$this
->acquireContentTypes(2);
}
function createTerms($count = 1) {
$edit['name'] = $this
->randomName(200);
$edit['hierarchy'] = 2;
$edit['multiple'] = 1;
$edit['required'] = 0;
$edit['relations'] = 0;
$edit['tags'] = 1;
taxonomy_save_vocabulary($edit);
$vid = $edit['vid'];
for ($i = 0; $i < $count; $i++) {
$termname = $this
->randomName(20);
$data = array(
'name' => $termname,
'vid' => $vid,
);
taxonomy_save_term($data);
$terms[] = taxonomy_get_term($data['tid']);
}
return $terms;
}
function assertNodeMultiValues($node, $field_name, $terms_in = array(), $terms_out = array()) {
$tids = array();
if (is_array($node->{$field_name})) {
foreach ($node->{$field_name} as $key => $value) {
$tids[$value['value']] = $value['value'];
}
}
foreach ($terms_in as $term) {
$this
->assertTrue(in_array($term->tid, $tids), 'Term correctly in node field');
}
foreach ($terms_out as $term) {
$this
->assertTrue(!in_array($term->tid, $tids), 'Term correctly in node field');
}
}
}
class ContentTaxonomyTest extends ContentTaxonomyTestCase {
function getInfo() {
return array(
'name' => t('Content Taxonomy - Saving'),
'description' => t('Tests basic saving'),
'group' => t('Content Taxonomy'),
);
}
function setUp() {
parent::setUp();
}
function testContentTaxonomySaving() {
$type = $this->content_types[0];
$type_url = str_replace('_', '-', $type->type);
$terms = $this
->createTerms(4);
$settings = array(
'type' => 'content_taxonomy',
'widget_type' => 'content_taxonomy_options',
'vid' => $terms[0]->vid,
'parent' => 0,
'parent_php_code' => '',
'show_depth' => 0,
'save_term_node' => FALSE,
'depth' => NULL,
'hide_taxonomy_fields' => TRUE,
);
$field = $this
->createField($settings, 0);
$field_name = $field['field_name'];
$this
->drupalGET('node/add/' . $type_url);
$this
->assertRaw($field_name, 'Field found on content type form');
$this
->assertRaw($terms[0]->name, 'Option value found on content type form');
$this
->assertRaw($terms[1]->name, 'Option value found on content type form');
$this
->assertRaw($terms[2]->name, 'Option value found on content type form');
$this
->assertRaw($terms[3]->name, 'Option value found on content type form');
$edit = array();
$edit['title'] = $this
->randomName(20);
$edit['body'] = $this
->randomName(20);
$edit[$field_name . '[value]'] = $terms[0]->tid;
$this
->drupalPost('node/add/' . $type_url, $edit, 'Save');
$node = node_load(array(
'title' => $edit['title'],
));
$in_term_node = db_result(db_query("SELECT tid FROM {term_node} WHERE nid = %d", $node->nid));
$this
->assertFalse($in_term_node, "Terms not in term_node table");
$this
->assertEqual($node->{$field_name}[0]['value'], $terms[0]->tid, 'Terms saved');
$this
->drupalGet('node/' . $node->nid);
$this
->assertText($terms[0]->name, 'Terms displayed');
$this
->assertNoText($terms[1]->name, 'Term not displayed');
$edit = array();
$edit[$field_name . '[value]'] = $terms[1]->tid;
$this
->drupalPost('node/' . $node->nid . '/edit', $edit, 'Save');
$node = node_load($node->nid, NULL, TRUE);
$in_term_node = db_result(db_query("SELECT tid FROM {term_node} WHERE nid = %d", $node->nid));
$this
->assertFalse($in_term_node, "Terms not in term_node table");
$this
->assertIdentical($node->{$field_name}[0]['value'], $terms[1]->tid, 'Terms updated');
$this
->drupalGet('node/' . $node->nid);
$this
->assertText($terms[1]->name, 'Terms displayed');
$this
->assertNoText($terms[0]->name, 'Term not displayed');
$edit = array();
$edit[$field_name . '[value]'] = '';
$this
->drupalPost('node/' . $node->nid . '/edit', $edit, 'Save');
$node = node_load($node->nid, NULL, TRUE);
$in_term_node = db_result(db_query("SELECT tid FROM {term_node} WHERE nid = %d", $node->nid));
$this
->assertFalse($in_term_node, "Terms not in term_node table");
$this
->assertIdentical($node->{$field_name}[0]['value'], NULL, 'Terms deleted');
$this
->drupalGet('node/' . $node->nid);
$this
->assertNoText($terms[0]->name, 'Terms not displayed');
$this
->assertNoText($terms[1]->name, 'Terms not displayed');
$settings['multiple'] = TRUE;
$field = $this
->createField($settings, 0);
$field_name = $field['field_name'];
$this
->drupalGET('node/add/' . $type_url);
$this
->assertRaw($field_name, 'Field found on content type form');
$this
->assertRaw($terms[0]->name, 'Option value found on content type form');
$this
->assertRaw($terms[1]->name, 'Option value found on content type form');
$this
->assertRaw($terms[2]->name, 'Option value found on content type form');
$this
->assertRaw($terms[3]->name, 'Option value found on content type form');
$edit[$field_name . '[value][' . $terms[0]->tid . ']'] = $terms[0]->tid;
$edit[$field_name . '[value][' . $terms[1]->tid . ']'] = $terms[1]->tid;
$this
->drupalPost('node/' . $node->nid . '/edit', $edit, 'Save');
$node = node_load($node->nid, NULL, TRUE);
$in_term_node = db_result(db_query("SELECT tid FROM {term_node} WHERE nid = %d", $node->nid));
$this
->assertFalse($in_term_node, "Terms not in term_node table");
$tids = array();
foreach ($node->{$field_name} as $key => $value) {
$tids[$value['value']] = $value['value'];
}
if (!in_array($terms[0]->tid, $tids) || !in_array($terms[1]->tid, $tids)) {
$this
->fail("Terms saved");
}
$this
->drupalGet('node/' . $node->nid);
$this
->assertText($terms[0]->name, 'Terms displayed');
$this
->assertText($terms[1]->name, 'Terms displayed');
$this
->assertNoText($terms[2]->name, 'Term not displayed');
$edit = array();
$edit[$field_name . '[value][' . $terms[0]->tid . ']'] = FALSE;
$edit[$field_name . '[value][' . $terms[1]->tid . ']'] = $terms[1]->tid;
$edit[$field_name . '[value][' . $terms[2]->tid . ']'] = $terms[2]->tid;
$this
->drupalPost('node/' . $node->nid . '/edit', $edit, 'Save');
$node = node_load($node->nid, NULL, TRUE);
$in_term_node = db_result(db_query("SELECT tid FROM {term_node} WHERE nid = %d", $node->nid));
$this
->assertFalse($in_term_node, "Terms not in term_node table");
$tids = array();
foreach ($node->{$field_name} as $key => $value) {
$tids[$value['value']] = $value['value'];
}
if (!in_array($terms[2]->tid, $tids) || !in_array($terms[1]->tid, $tids)) {
$this
->fail("Terms updated");
}
if (in_array($terms[0]->tid, $tids)) {
$this
->fail("Terms updated");
}
$this
->drupalGet('node/' . $node->nid);
$this
->assertText($terms[1]->name, 'Terms displayed');
$this
->assertText($terms[2]->name, 'Terms displayed');
$this
->assertNoText($terms[0]->name, 'Term1 not displayed');
$edit = array();
$edit[$field_name . '[value][' . $terms[1]->tid . ']'] = FALSE;
$edit[$field_name . '[value][' . $terms[2]->tid . ']'] = FALSE;
$this
->drupalPost('node/' . $node->nid . '/edit', $edit, 'Save');
$node = node_load($node->nid, NULL, TRUE);
$in_term_node = db_result(db_query("SELECT tid FROM {term_node} WHERE nid = %d", $node->nid));
$this
->assertFalse($in_term_node, "Terms not in term_node table");
$tids = array();
foreach ($node->{$field_name} as $key => $value) {
$tids[$value['value']] = $value['value'];
}
if (in_array($terms[2]->tid, $tids) || in_array($terms[1]->tid, $tids) || in_array($terms[0]->tid, $tids)) {
$this
->fail("Terms deleted");
}
$this
->drupalGet('node/' . $node->nid);
$this
->assertNoText($terms[1]->name, 'Terms not displayed');
$this
->assertNoText($terms[2]->name, 'Terms not displayed');
$this
->assertNoText($terms[0]->name, 'Terms not displayed');
$ct = $this->content_types[1];
$ct_url = str_replace('_', '-', $ct->type);
$settings['save_term_node'] = TRUE;
$settings['multiple'] = FALSE;
$field = $this
->createField($settings, 1);
$field_name = $field['field_name'];
$this
->drupalGET('node/add/' . $ct_url);
$this
->assertRaw($field_name, 'Field found on content type form');
$this
->assertRaw($terms[0]->name, 'Option value found on content type form');
$this
->assertRaw($terms[1]->name, 'Option value found on content type form');
$this
->assertRaw($terms[2]->name, 'Option value found on content type form');
$this
->assertRaw($terms[3]->name, 'Option value found on content type form');
$edit = array();
$edit['title'] = $this
->randomName(20);
$edit['body'] = $this
->randomName(20);
$edit[$field_name . '[value]'] = $terms[0]->tid;
$this
->drupalPost('node/add/' . $ct_url, $edit, 'Save');
$node = node_load(array(
'title' => $edit['title'],
));
$in_term_node = db_result(db_query("SELECT tid FROM {term_node} WHERE nid = %d", $node->nid));
$this
->assertEqual($in_term_node, $terms[0]->tid, "Terms saved in term_node table");
$this
->assertEqual($node->{$field_name}[0]['value'], $terms[0]->tid, 'Terms saved');
$this
->drupalGet('node/' . $node->nid);
$this
->assertText($terms[0]->name, 'Terms displayed');
$this
->assertNoText($terms[1]->name, 'Term not displayed');
$edit = array();
$edit[$field_name . '[value]'] = $terms[1]->tid;
$this
->drupalPost('node/' . $node->nid . '/edit', $edit, 'Save');
$node = node_load($node->nid, NULL, TRUE);
$in_term_node = db_result(db_query("SELECT tid FROM {term_node} WHERE nid = %d", $node->nid));
$this
->assertEqual($in_term_node, $terms[1]->tid, "Terms updated in term_node table");
$this
->assertEqual($node->{$field_name}[0]['value'], $terms[1]->tid, 'Terms updated');
$this
->drupalGet('node/' . $node->nid);
$this
->assertText($terms[1]->name, 'Terms displayed');
$this
->assertNoText($terms[0]->name, 'Term not displayed');
$edit = array();
$edit[$field_name . '[value]'] = '';
$this
->drupalPost('node/' . $node->nid . '/edit', $edit, 'Save');
$node = node_load($node->nid, NULL, TRUE);
$in_term_node = db_result(db_query("SELECT tid FROM {term_node} WHERE nid = %d", $node->nid));
$this
->assertFalse($in_term_node, "Terms deleted from term_node table");
$this
->assertIdentical($node->{$field_name}[0]['value'], NULL, 'Terms deleted');
$this
->drupalGet('node/' . $node->nid);
$this
->assertNoText($terms[0]->name, 'Terms not displayed');
$this
->assertNoText($terms[1]->name, 'Terms not displayed');
$settings['multiple'] = TRUE;
$field = $this
->createField($settings, 1);
$field_name = $field['field_name'];
$this
->drupalGET('node/add/' . $ct_url);
$this
->assertRaw($field_name, 'Field found on content type form');
$this
->assertRaw($terms[0]->name, 'Option value found on content type form');
$this
->assertRaw($terms[1]->name, 'Option value found on content type form');
$this
->assertRaw($terms[2]->name, 'Option value found on content type form');
$this
->assertRaw($terms[3]->name, 'Option value found on content type form');
$edit[$field_name . '[value][' . $terms[0]->tid . ']'] = $terms[0]->tid;
$edit[$field_name . '[value][' . $terms[1]->tid . ']'] = $terms[1]->tid;
$this
->drupalPost('node/' . $node->nid . '/edit', $edit, 'Save');
$node = node_load($node->nid, NULL, TRUE);
$in_term_node1 = db_result(db_query("SELECT tid FROM {term_node} WHERE nid = %d AND tid = %d", $node->nid, $terms[0]->tid));
$this
->assertEqual($in_term_node1, $terms[0]->tid, "Terms updated in term_node table");
$in_term_node2 = db_result(db_query("SELECT tid FROM {term_node} WHERE nid = %d AND tid = %d", $node->nid, $terms[1]->tid));
$this
->assertEqual($in_term_node2, $terms[1]->tid, "Terms updated in term_node table");
$this
->assertNodeMultiValues($node, $field_name, array(
$terms[0],
$terms[1],
));
$this
->drupalGet('node/' . $node->nid);
$this
->assertText($terms[0]->name, 'Terms displayed');
$this
->assertText($terms[1]->name, 'Terms displayed');
$this
->assertNoText($terms[2]->name, 'Term not displayed');
$edit = array();
$edit[$field_name . '[value][' . $terms[0]->tid . ']'] = FALSE;
$edit[$field_name . '[value][' . $terms[1]->tid . ']'] = $terms[1]->tid;
$edit[$field_name . '[value][' . $terms[2]->tid . ']'] = $terms[2]->tid;
$this
->drupalPost('node/' . $node->nid . '/edit', $edit, 'Save');
$node = node_load($node->nid, NULL, TRUE);
$in_term_node = db_result(db_query("SELECT tid FROM {term_node} WHERE nid = %d AND tid = %d", $node->nid, $terms[0]->tid));
$this
->assertFalse($in_term_node, "Term deleted term_node table");
$in_term_node3 = db_result(db_query("SELECT tid FROM {term_node} WHERE nid = %d AND tid = %d", $node->nid, $terms[2]->tid));
$this
->assertEqual($in_term_node3, $terms[2]->tid, "Terms updated in term_node table");
$in_term_node2 = db_result(db_query("SELECT tid FROM {term_node} WHERE nid = %d AND tid = %d", $node->nid, $terms[1]->tid));
$this
->assertEqual($in_term_node2, $terms[1]->tid, "Terms updated in term_node table");
$this
->assertNodeMultiValues($node, $field_name, array(
$terms[1],
$terms[2],
), array(
$terms[0],
));
$this
->drupalGet('node/' . $node->nid);
$this
->assertText($terms[1]->name, 'Terms displayed');
$this
->assertText($terms[2]->name, 'Terms displayed');
$this
->assertNoText($terms[0]->name, 'Term1 not displayed');
$edit = array();
$edit[$field_name . '[value][' . $terms[1]->tid . ']'] = FALSE;
$edit[$field_name . '[value][' . $terms[2]->tid . ']'] = FALSE;
$this
->drupalPost('node/' . $node->nid . '/edit', $edit, 'Save');
$node = node_load($node->nid, NULL, TRUE);
$in_term_node1 = db_result(db_query("SELECT tid FROM {term_node} WHERE nid = %d AND tid = %d", $node->nid, $terms[0]->tid));
$this
->assertFalse($in_term_node1, "Term deleted term_node table");
$in_term_node2 = db_result(db_query("SELECT tid FROM {term_node} WHERE nid = %d AND tid = %d", $node->nid, $terms[1]->tid));
$this
->assertFalse($in_term_node2, "Term deleted term_node table");
$in_term_node3 = db_result(db_query("SELECT tid FROM {term_node} WHERE nid = %d AND tid = %d", $node->nid, $terms[2]->tid));
$this
->assertFalse($in_term_node3, "Term deleted term_node table");
$this
->assertNodeMultiValues($node, $field_name, array(), array(
$terms[0],
$terms[1],
$terms[2],
));
$this
->drupalGet('node/' . $node->nid);
$this
->assertNoText($terms[1]->name, 'Terms not displayed');
$this
->assertNoText($terms[2]->name, 'Terms not displayed');
$this
->assertNoText($terms[0]->name, 'Terms not displayed');
}
}
class ContentTaxonomyAutocompleteTest extends ContentTaxonomyTestCase {
function getInfo() {
return array(
'name' => t('Content Taxonomy - Autocomplete'),
'description' => t('Tests freetagging widget'),
'group' => t('Content Taxonomy'),
);
}
function setUp() {
parent::setUp("diff");
}
function testAutocomplete() {
$type = $this->content_types[1];
$type_url = str_replace('_', '-', $type->type);
$terms = $this
->createTerms(4);
$settings = array(
'type' => 'content_taxonomy',
'widget_type' => 'content_taxonomy_autocomplete',
'vid' => $terms[0]->vid,
'parent' => 0,
'parent_php_code' => '',
'show_depth' => 0,
'save_term_node' => FALSE,
'depth' => NULL,
'hide_taxonomy_fields' => TRUE,
);
$field = $this
->createField($settings, 1);
$field_name = $field['field_name'];
$edit = array();
$edit['title'] = $this
->randomName(20);
$edit['body'] = $this
->randomName(20);
$edit[$field_name . '[value]'] = $terms[0]->name;
$this
->drupalPost('node/add/' . $type_url, $edit, 'Save');
$node = node_load(array(
'title' => $edit['title'],
));
$this
->assertEqual($node->{$field_name}[0]['value'], $terms[0]->tid, 'Terms saved');
$this
->drupalGet('node/' . $node->nid);
$this
->assertText($terms[0]->name, 'Terms displayed');
$this
->assertNoText($terms[1]->name, 'Term not displayed');
$edit = array();
$edit[$field_name . '[value]'] = $terms[1]->name;
$this
->drupalPost('node/' . $node->nid . '/edit', $edit, 'Save');
$node = node_load($node->nid, NULL, TRUE);
$this
->assertIdentical($node->{$field_name}[0]['value'], $terms[1]->tid, 'Terms updated');
$this
->drupalGet('node/' . $node->nid);
$this
->assertText($terms[1]->name, 'Terms displayed');
$this
->assertNoText($terms[0]->name, 'Term not displayed');
$edit = array();
$edit[$field_name . '[value]'] = $terms[1]->name . ", " . $terms[0]->name;
$this
->drupalPost('node/' . $node->nid . '/edit', $edit, 'Save');
$this
->assertText('You can provide only one value', 'Validated');
$edit[$field_name . '[value]'] = $terms[1]->name;
$this
->drupalPost('node/' . $node->nid . '/edit', $edit, 'Save');
$node = node_load($node->nid, NULL, TRUE);
$this
->assertIdentical($node->{$field_name}[0]['value'], $terms[1]->tid, 'Terms updated');
$this
->drupalGet('node/' . $node->nid);
$this
->assertText($terms[1]->name, 'Terms displayed');
$this
->assertNoText($terms[0]->name, 'Term not displayed');
$edit = array();
$new_term_name = 'test';
$edit['title'] = $this
->randomName(20);
$edit['body'] = $this
->randomName(20);
$edit[$field_name . '[value]'] = $new_term_name;
$this
->drupalPost('node/add/' . $type_url, $edit, 'Save');
$new_term_tid = db_result(db_query("SELECT tid FROM {term_data} WHERE name = '%s' AND vid = %d", $new_term_name, $settings['vid']));
$this
->assertTrue($new_term_tid > 0, "New term added to vocabulary");
$node = node_load(array(
'title' => $edit['title'],
));
$this
->assertEqual($node->{$field_name}[0]['value'], $new_term_tid, 'Terms saved');
$this
->drupalGet('node/' . $node->nid);
$this
->assertText($new_term_name, 'Terms displayed');
$type = $this->content_types[0];
$type_url = str_replace('_', '-', $type->type);
$settings = array(
'type' => 'content_taxonomy',
'widget_type' => 'content_taxonomy_autocomplete',
'vid' => $terms[0]->vid,
'parent' => 0,
'parent_php_code' => '',
'show_depth' => 0,
'save_term_node' => FALSE,
'depth' => NULL,
'hide_taxonomy_fields' => TRUE,
'multiple' => TRUE,
);
$field = $this
->createField($settings, 0);
$field_name = $field['field_name'];
$edit = array();
$edit['title'] = $this
->randomName(20);
$edit['body'] = $this
->randomName(20);
$edit[$field_name . '[value]'] = $terms[0]->name;
$this
->drupalPost('node/add/' . $type_url, $edit, 'Save');
$node = node_load(array(
'title' => $edit['title'],
));
$this
->assertNodeMultiValues($node, $field_name, array(
$terms[0],
));
$this
->drupalGet('node/' . $node->nid);
$this
->assertText($terms[0]->name, 'Terms displayed');
$this
->assertNoText($terms[1]->name, 'Term not displayed');
$edit = array();
$edit[$field_name . '[value]'] = $terms[1]->name;
$this
->drupalPost('node/' . $node->nid . '/edit', $edit, 'Save');
$node = node_load($node->nid, NULL, TRUE);
$this
->assertNodeMultiValues($node, $field_name, array(
$terms[1],
), array(
$terms[0],
));
$this
->drupalGet('node/' . $node->nid);
$this
->assertText($terms[1]->name, 'Terms displayed');
$this
->assertNoText($terms[0]->name, 'Term not displayed');
$edit = array();
$edit[$field_name . '[value]'] = $terms[1]->name . ", " . $terms[0]->name;
$this
->drupalPost('node/' . $node->nid . '/edit', $edit, 'Save');
$node = node_load($node->nid, NULL, TRUE);
$this
->assertNodeMultiValues($node, $field_name, array(
$terms[0],
$terms[1],
));
$this
->drupalGet('node/' . $node->nid);
$this
->assertText($terms[1]->name, 'Terms displayed');
$this
->assertText($terms[0]->name, 'Terms displayed');
$edit = array();
$edit['title'] = $this
->randomName(20);
$edit['body'] = $this
->randomName(20);
$edit[$field_name . '[value]'] = $terms[0]->name;
$this
->drupalPost('node/add/' . $type_url, $edit, 'Preview');
$this
->drupalPost('node/add/' . $type_url, $edit, 'Save');
$node = node_load(array(
'title' => $edit['title'],
));
$this
->assertNodeMultiValues($node, $field_name, array(
$terms[0],
));
$this
->drupalGet('node/' . $node->nid);
$this
->assertText($terms[0]->name, 'Terms displayed');
$new_term_name = 'test2';
$edit = array();
$edit['title'] = $this
->randomName(20);
$edit['body'] = $this
->randomName(20);
$edit[$field_name . '[value]'] = $new_term_name;
$this
->drupalPost('node/add/' . $type_url, $edit, 'Preview');
$new_term_tid = db_result(db_query("SELECT tid FROM {term_data} WHERE name = '%s' AND vid = %d", $new_term_name, $settings['vid']));
$this
->assertTrue($new_term_tid > 0, "Term in added to vocabulary");
$this
->drupalPost('node/add/' . $type_url, $edit, 'Save');
$node = node_load(array(
'title' => $edit['title'],
));
$this
->assertNodeMultiValues($node, $field_name, array(
taxonomy_get_term($new_term_tid),
));
$this
->drupalGet('node/' . $node->nid);
$this
->assertText($new_term_name, 'Terms displayed');
$edit = array();
$edit['title'] = $this
->randomName(20);
$edit['body'] = $this
->randomName(20);
$edit[$field_name . '[value]'] = $terms[0]->name;
$this
->drupalPost('node/add/' . $type_url, $edit, 'Save');
$node = node_load(array(
'title' => $edit['title'],
));
$edit = array();
$edit['title'] = $node->title;
$edit['body'] = str_replace('<!--break-->', '', $node->body);
$edit[$field_name . '[value]'] = $terms[0]->name;
$this
->drupalPost('node/' . $node->nid . '/edit', $edit, 'Preview changes');
$this
->assertText('No visible changes', 'No visible changes');
$this
->assertRaw($terms[0]->name, 'Term in field');
$settings['required'] = TRUE;
$field = $this
->createField($settings, 0);
$field_name = $field['field_name'];
$edit = array();
$edit['title'] = $this
->randomName(20);
$edit['body'] = $this
->randomName(20);
$edit[$field_name . '[value]'] = '';
$this
->drupalPost('node/add/' . $type_url, $edit, 'Save');
$this
->assertText($field_name . ' field is required', 'Validated required field');
$edit[$field_name . '[value]'] = $terms[1]->name;
$this
->drupalPost('node/add/' . $type_url, $edit, 'Save');
$this
->assertNoText($field_name . ' field is required', 'Validation for required field successfully passed');
$node = node_load(array(
'title' => $edit['title'],
));
$this
->assertNodeMultiValues($node, $field_name, array(
$terms[1],
));
$this
->drupalGet('node/' . $node->nid);
$this
->assertText($terms[1]->name, 'Terms displayed');
}
}
class ContentTaxonomyAutocompletePermissionsTest extends ContentTaxonomyTestCase {
function getInfo() {
return array(
'name' => t('Content Taxonomy - Autocomplete with Permissions'),
'description' => t('Tests freetagging widget with content permissions'),
'group' => t('Content Taxonomy'),
);
}
function setUp() {
parent::setUp("content_permissions");
}
function testAutocomplete() {
$type = $this->content_types[1];
$type_url = str_replace('_', '-', $type->type);
$terms = $this
->createTerms(4);
$settings = array(
'type' => 'content_taxonomy',
'widget_type' => 'content_taxonomy_autocomplete',
'vid' => $terms[0]->vid,
'parent' => 0,
'parent_php_code' => '',
'show_depth' => 0,
'save_term_node' => FALSE,
'depth' => NULL,
'hide_taxonomy_fields' => TRUE,
);
$field = $this
->createField($settings, 1);
$field_name = $field['field_name'];
$permissions = array(
'edit ' . $field_name,
'view ' . $field_name,
);
$rids = db_query("SELECT rid FROM {role}");
while ($obj = db_fetch_object($rids)) {
db_query("INSERT INTO {permission} (rid, perm) VALUES (%d, '%s')", $obj->rid, implode(', ', $permissions));
}
$edit = array();
$edit['title'] = $this
->randomName(20);
$edit['body'] = $this
->randomName(20);
$edit[$field_name . '[value]'] = $terms[0]->name;
$this
->drupalPost('node/add/' . $type_url, $edit, 'Save');
$node = node_load(array(
'title' => $edit['title'],
));
$this
->assertEqual($node->{$field_name}[0]['value'], $terms[0]->tid, 'Terms saved');
$this
->drupalGet('node/' . $node->nid);
$this
->assertText($terms[0]->name, 'Terms displayed');
$this
->assertNoText($terms[1]->name, 'Term not displayed');
$permissions_old = array(
'edit ' . $field_name,
'view ' . $field_name,
);
$permissions_new = array(
'view ' . $field_name,
);
$rids = db_query("SELECT rid FROM {role}");
while ($obj = db_fetch_object($rids)) {
db_query("DELETE FROM {permission WHERE rid = %d AND perm = '%s'", $obj->rid, implode(', ', $permissions_old));
db_query("INSERT INTO {permission} (rid, perm) VALUES (%d, '%s')", $obj->rid, implode(', ', $permissions_new));
}
$edit = array();
$this
->drupalPost('node/' . $node->nid . '/edit', $edit, 'Save');
$this
->drupalGet('node/' . $node->nid . '/edit');
$this
->assertNoRaw($field_name, "Field hidden");
$node = node_load($node->nid, NULL, TRUE);
$this
->assertIdentical($node->{$field_name}[0]['value'], $terms[0]->tid, 'Terms saved');
$this
->drupalGet('node/' . $node->nid);
$this
->assertText($terms[0]->name, 'Terms displayed');
}
}