| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339 | 
							- <?php
 
- /**
 
-  * @file
 
-  * Tests for field_permissions.module.
 
-  */
 
- /**
 
-  * Tests the Field Permissions module.
 
-  */
 
- class FieldPermissionsTestCase extends DrupalWebTestCase {
 
-   private $admin_user = NULL;
 
-   private $limited_user = NULL;
 
-   private $admin_rid = NULL;
 
-   private $limited_rid = NULL;
 
-   public static function getInfo() {
 
-     return array(
 
-       'name' => 'Field permissions functionality',
 
-       'description' => 'Test field permissions.',
 
-       'group' => 'Field permissions'
 
-     );
 
-   }
 
-   function setUp() {
 
-     parent::setUp('field_ui', 'field_permissions');
 
-     // Create test user.
 
-     $admin_permissions = array('access content', 'administer nodes', 'bypass node access', 'administer content types', 'administer taxonomy', 'administer permissions', 'create page content');
 
-     $this->limited_user = $this->drupalCreateUser($admin_permissions);
 
-     $all_rids = array_keys($this->limited_user->roles);
 
-     sort($all_rids);
 
-     $this->limited_rid = array_pop($all_rids);
 
-     $admin_permissions[] = 'administer field permissions';
 
-     $admin_permissions[] = 'administer users';
 
-     $this->admin_user = $this->drupalCreateUser($admin_permissions);
 
-     $all_rids = array_keys($this->admin_user->roles);
 
-     sort($all_rids);
 
-     $this->admin_rid = array_pop($all_rids);
 
-     $this->drupalLogin($this->limited_user);
 
-   }
 
-   function testPermissionsUI() {
 
-     // This depends on a page node type with a body field, standard install.
 
-     // Could alternatively extend field_ui.test classes, but would be much
 
-     // slower to run. Tradeoffs.
 
-     $field_info = array(
 
-       'admin_path' => 'admin/structure/types/manage/page/fields/body',
 
-       'machine_name' => 'body',
 
-       'add_path' => 'node/add/page',
 
-       'name' => 'Body',
 
-       'form_field' => 'body[und][0][value]',
 
-       'value' => $this->randomName(),
 
-     );
 
-     // Check if we can see the field on the entity creation form.
 
-     $this->drupalGet($field_info['add_path']);
 
-     $this->assertText($field_info['name']);
 
-     // Admin users cannot access field permissions without specifically being
 
-     // granted the permission to do so.
 
-     $this->drupalGet($field_info['admin_path']);
 
-     $this->assertNoText(t('Field visibility and permissions'));
 
-     // Switch to admin user who can see the field permissions UI.
 
-     $this->drupalGet('user/logout');
 
-     $this->drupalLogin($this->admin_user);
 
-     $this->drupalGet($field_info['admin_path']);
 
-     $this->assertText(t('Field visibility and permissions'));
 
-     // == PUBLIC FIELD =========================================================
 
-     $this->assertFieldChecked('edit-field-field-permissions-type-0');
 
-     // Although simpletest could create a node for us, we are doing this directly
 
-     // to ensure we have full control over the process. Given that we work with
 
-     // field permissions.
 
-     $this->drupalGet('user/logout');
 
-     $this->drupalLogin($this->limited_user);
 
-     $node1_values = array(
 
-       'title' => $this->randomName(),
 
-       $field_info['form_field'] => $field_info['value'],
 
-     );
 
-     $this->drupalPost($field_info['add_path'], $node1_values, t('Save'));
 
-     $this->assertText($node1_values['title']);
 
-     $this->assertText($field_info['value']);
 
-     $url = $this->getUrl();
 
-     $nid1 = preg_replace('!^.*node/(\d+)$!', '\1', $url);
 
-     // Switch to admin user to check we can see the body.
 
-     $this->drupalGet('user/logout');
 
-     $this->drupalLogin($this->admin_user);
 
-     $this->drupalGet('node/' . $nid1);
 
-     $this->assertText($node1_values['title']);
 
-     $this->assertText($field_info['value']);
 
-     // And we can edit the title and body.
 
-     $this->drupalGet('node/' . $nid1 . '/edit');
 
-     $this->assertText('Title');
 
-     $this->assertText($node1_values['title']);
 
-     $this->assertText($field_info['name']);
 
-     $this->assertText($field_info['value']);
 
-     // == PRIVATE FIELD ========================================================
 
-     // Switch to admin user to set field to private.
 
-     $edit = array(
 
-       'field[field_permissions][type]' => 1,
 
-     );
 
-     $this->drupalPost($field_info['admin_path'], $edit, t('Save settings'));
 
-     // Now we should not have access to see or edit this field.
 
-     $this->drupalGet('node/' . $nid1);
 
-     $this->assertText($node1_values['title']);
 
-     $this->assertNoText($field_info['value']);
 
-     $this->drupalGet($field_info['add_path']);
 
-     $this->assertText('Title');
 
-     $this->assertText($field_info['name']);
 
-     $this->drupalGet('node/' . $nid1 . '/edit');
 
-     $this->assertText('Title');
 
-     $this->assertNoText($field_info['name']);
 
-     $this->assertNoText($field_info['value']);
 
-     // Grant this user the Drupal core administrator role. This will give them
 
-     // the 'access private fields' permission (tested here), and it also means
 
-     // that when custom field permissions are created later on in this test,
 
-     // the admin user will automatically get those permissions granted also.
 
-     $user_admin_rid = variable_get('user_admin_role', 0);
 
-     $edit = array(
 
-       "roles[$user_admin_rid]" => TRUE,
 
-     );
 
-     $this->drupalPost('user/' . $this->admin_user->uid . '/edit', $edit, t('Save'));
 
-     // Now we should have access to see or submit or edit this field again.
 
-     $this->drupalGet('node/' . $nid1);
 
-     $this->assertText($node1_values['title']);
 
-     $this->assertText($field_info['value']);
 
-     $this->drupalGet($field_info['add_path']);
 
-     $this->assertText('Title');
 
-     $this->assertText($field_info['name']);
 
-     $this->drupalGet('node/' . $nid1 . '/edit');
 
-     $this->assertText('Title');
 
-     $this->assertText($field_info['name']);
 
-     $this->assertText($field_info['value']);
 
-     // == CUSTOM PERMISSIONS ===================================================
 
-     // Introduce body creation permission.
 
-     $edit = array(
 
-       'field[field_permissions][type]' => 2,
 
-     );
 
-     $this->drupalPost($field_info['admin_path'], $edit, t('Save settings'));
 
-     $this->drupalGet($field_info['admin_path']);
 
-     $this->assertRaw(t('Create own value for field %field', array('%field' => $field_info['name'])));
 
-     $this->assertRaw(t('Edit own value for field %field', array('%field' => $field_info['name'])));
 
-     $this->assertRaw(t("Edit anyone's value for field %field", array('%field' => $field_info['name'])));
 
-     $this->assertRaw(t('View own value for field %field', array('%field' => $field_info['name'])));
 
-     $this->assertRaw(t("View anyone's value for field %field", array('%field' => $field_info['name'])));
 
-     // See if we have that exposed on the permissions UI as well now.
 
-     $this->drupalGet('admin/people/permissions');
 
-     $this->assertText(t('Field Permissions'));
 
-     $this->assertRaw(t('Create own value for field %field', array('%field' => $field_info['name'])));
 
-     $this->assertRaw(t('Edit own value for field %field', array('%field' => $field_info['name'])));
 
-     $this->assertRaw(t("Edit anyone's value for field %field", array('%field' => $field_info['name'])));
 
-     $this->assertRaw(t('View own value for field %field', array('%field' => $field_info['name'])));
 
-     $this->assertRaw(t("View anyone's value for field %field", array('%field' => $field_info['name'])));
 
-     // == CREATE ===============================================================
 
-     // The admin user should have been automatically granted the create
 
-     // permission, but the limited user shouldn't have it yet.
 
-     $this->assertUserHasPermission($this->admin_user, 'create ' . $field_info['machine_name'], t('Admin user does have "create @field" permission.', array('@field' => $field_info['machine_name'])));
 
-     $this->assertUserDoesNotHavePermission($this->limited_user, 'create ' . $field_info['machine_name'], t('Limited user does not have "create @field" permission.', array('@field' => $field_info['machine_name'])));
 
-     // Should not see the field on the entity creation form anymore for limited_user.
 
-     $this->drupalGet('user/logout');
 
-     $this->drupalLogin($this->limited_user);
 
-     $this->drupalGet($field_info['add_path']);
 
-     $this->assertNoText($field_info['name']);
 
-     // Grant body creation permission to limited users too.
 
-     $edit = array(
 
-       $this->limited_rid .'[create '. $field_info['machine_name'] .']' => TRUE,
 
-     );
 
-     $this->drupalPost('admin/people/permissions', $edit, t('Save permissions'));
 
-     $this->assertUserHasPermission($this->admin_user, 'create ' . $field_info['machine_name'], t('Admin user does have "create @field" permission.', array('@field' => $field_info['machine_name'])));
 
-     $this->assertUserHasPermission($this->limited_user, 'create ' . $field_info['machine_name'], t('Limited user does have "create @field" permission.', array('@field' => $field_info['machine_name'])));
 
-     // Should see the field again on the entity creation form.
 
-     $this->drupalGet($field_info['add_path']);
 
-     $this->assertText($field_info['name']);
 
-     // Although simpletest could create a node for us, we are doing this directly
 
-     // to ensure we have full control over the process. Given that we work with
 
-     // field permissions.
 
-     $node2_values = array(
 
-       'title' => $this->randomName(),
 
-       $field_info['form_field'] => $field_info['value'],
 
-     );
 
-     $this->drupalPost($field_info['add_path'], $node2_values, t('Save'));
 
-     $this->assertText($node2_values['title']);
 
-     // The body will not yet be visible to this user.
 
-     $this->assertNoText($field_info['value']);
 
-     $url = $this->getUrl();
 
-     $nid2 = preg_replace('!^.*node/(\d+)$!', '\1', $url);
 
-     // Switch to admin user and prove she has access to body.
 
-     $this->drupalGet('user/logout');
 
-     $this->drupalLogin($this->admin_user);
 
-     $this->drupalGet('node/' . $nid2);
 
-     $this->assertText($node2_values['title']);
 
-     $this->assertText($field_info['value']);
 
-     // == VIEW =================================================================
 
-     // Grant body view permission to limited users too.
 
-     $edit = array(
 
-       $this->limited_rid .'[view '. $field_info['machine_name'] .']' => TRUE,
 
-     );
 
-     $this->drupalPost('admin/people/permissions', $edit, t('Save permissions'));
 
-     $this->assertUserHasPermission($this->admin_user, 'view ' . $field_info['machine_name'], t('Admin user does have "view @field" permission.', array('@field' => $field_info['machine_name'])));
 
-     $this->assertUserHasPermission($this->limited_user, 'view ' . $field_info['machine_name'], t('Limited user does have "view @field" permission.', array('@field' => $field_info['machine_name'])));
 
-     // Limited user can now see the field.
 
-     $this->drupalGet('user/logout');
 
-     $this->drupalLogin($this->limited_user);
 
-     $this->drupalGet('node/' . $nid2);
 
-     $this->assertText($node2_values['title']);
 
-     $this->assertText($field_info['value']);
 
-     // == EDIT =================================================================
 
-     // We still don't have access to edit our field.
 
-     $this->drupalGet('node/' . $nid2 . '/edit');
 
-     $this->assertNoText($field_info['value']);
 
-     // Switch to admin user to configure edit permissions.
 
-     $this->drupalGet('user/logout');
 
-     $this->drupalLogin($this->admin_user);
 
-     // Ensure the editing screen now has the body.
 
-     $this->drupalGet('node/' . $nid2 . '/edit');
 
-     $this->assertText($field_info['value']);
 
-     // Grant body editing permission for the limited role.
 
-     $edit = array(
 
-       $this->limited_rid .'[edit '. $field_info['machine_name'] .']' => TRUE,
 
-     );
 
-     $this->drupalPost('admin/people/permissions', $edit, t('Save permissions'));
 
-     $this->assertUserHasPermission($this->admin_user, 'edit ' . $field_info['machine_name'], t('Admin user does have "edit @field" permission.', array('@field' => $field_info['machine_name'])));
 
-     $this->assertUserHasPermission($this->limited_user, 'edit ' . $field_info['machine_name'], t('Limited user does have "edit @field" permission.', array('@field' => $field_info['machine_name'])));
 
-     // Ensure the editing screen still has the body.
 
-     $this->drupalGet('node/' . $nid2 . '/edit');
 
-     $this->assertText($field_info['value']);
 
-     // Switch to limited user to check that we can edit body now.
 
-     $this->drupalGet('user/logout');
 
-     $this->drupalLogin($this->limited_user);
 
-     $this->drupalGet('node/' . $nid2 . '/edit');
 
-     $this->assertText($field_info['value']);
 
-   }
 
-   function testUserFields() {
 
-     // Create a field attached to users and make it appear on the user
 
-     // registration form with (default) custom permissions.
 
-     $this->drupalLogin($this->admin_user);
 
-     $label = 'Field attached to users';
 
-     $edit = array(
 
-       'fields[_add_new_field][label]' => $label,
 
-       'fields[_add_new_field][field_name]' => 'attached_to_users',
 
-       'fields[_add_new_field][type]' => 'text',
 
-       'fields[_add_new_field][widget_type]' => 'text_textfield',
 
-     );
 
-     $this->drupalPost('admin/config/people/accounts/fields',  $edit, t('Save'));
 
-     $this->drupalPost(NULL, array(), t('Save field settings'));
 
-     $edit = array(
 
-       'field[field_permissions][type]' => 2,
 
-       'instance[settings][user_register_form]' => TRUE,
 
-     );
 
-     $this->drupalPost(NULL, $edit, t('Save settings'));
 
-     // Log out, go to the registration form and make sure the field appears
 
-     // there for anonymous users.
 
-     $this->drupalLogout();
 
-     $this->drupalGet('user/register');
 
-     $this->assertText($label);
 
-     // Log in and make sure the user does not have access to edit the field
 
-     // (i.e., there are only default permissions to create it).
 
-     $this->drupalLogin($this->limited_user);
 
-     $this->drupalGet('user/' . $this->limited_user->uid . '/edit');
 
-     $this->assertResponse(200);
 
-     $this->assertNoText($label);
 
-   }
 
-   /**
 
-    * Asserts that a user account has a permission.
 
-    */
 
-   protected function assertUserHasPermission($account, $permission, $message) {
 
-      $this->_assertUserPermissionState($account, $permission, $message, TRUE);
 
-   }
 
-   /**
 
-    * Asserts that a user account does not have a permission.
 
-    */
 
-   protected function assertUserDoesNotHavePermission($account, $permission, $message) {
 
-     $this->_assertUserPermissionState($account, $permission, $message, FALSE);
 
-   }
 
-   /**
 
-    * Helper function for asserting user permissions.
 
-    */
 
-   protected function _assertUserPermissionState($account, $permission, $message, $should_have_permission) {
 
-     // We need to clear static caches since the tests may have recently changed
 
-     // the permissions via the UI (i.e., in a different thread than the one
 
-     // running the tests).
 
-     drupal_static_reset('user_access');
 
-     drupal_static_reset('user_role_permissions');
 
-     // Load the full user account, since we may have been provided an out of
 
-     // date pseudo-account of the kind SimpleTest uses (e.g. as returned by
 
-     // drupalCreateUser()), rather than an up to date object that actually
 
-     // contains the full list of roles this user has been assigned.
 
-     $full_account = user_load($account->uid);
 
-     // Now check the permission.
 
-     $has_permission = user_access($permission, $full_account);
 
-     if ($should_have_permission) {
 
-       $this->assertTrue($has_permission, $message);
 
-     }
 
-     else {
 
-       $this->assertFalse($has_permission, $message);
 
-     }
 
-   }
 
- }
 
 
  |