loginAdminUser(); // Rebuild node access table otherwise ACL's won't work. $this->drupalPost('admin/content/node-settings/rebuild', array(), 'Rebuild permissions'); // Pick a default for group spaces (part of the install process). $edit = array( 'spaces_preset_og' => 'og_public', ); $this->drupalPost('admin/build/spaces', $edit, 'Save configuration'); // Configure organic groups space and set up an organic group. $edit = array( 'name' => 'Group', 'type' => 'group', 'og_content_type_usage' => 'group', ); $this->drupalPost('admin/content/types/add', $edit, 'Save content type'); $this->assertText('The content type Group has been added.'); $edit = array( 'title' => 'Group A', 'og_description' => 'Group A.', 'purl[value]' => 'group-a', ); $this->drupalPost('node/add/group', $edit, 'Save'); $this->assertText('Group Group A has been created.'); // Test whether first-time save actually works. $this->assertEqual('og_public', unserialize(db_result(db_query('SELECT value from {spaces_overrides} WHERE id = 1')))); } /** * Unset users. */ public function tearDown() { unset($this->admin_user); unset($this->simple_user); parent::tearDown(); } /** * Login a user with site building and spaces/features management permissions. */ protected function loginAdminUser() { if (empty($this->admin_user)) { $this->admin_user = $this->drupalCreateUser( array( 'access content', 'administer nodes', 'administer content types', 'administer site configuration', // Necessary for rebuilding node_access permissions. 'access administration pages', 'administer spaces', 'administer organic groups', ) ); } $this->drupalLogin($this->admin_user); } /** * Login a user with editing permissions. */ protected function loginSimpleUser() { if (empty($this->simple_user)) { $this->simple_user = $this->drupalCreateUser( array( 'access user profiles', 'access comments', 'post comments', 'post comments without approval', 'access content', 'create features_test content', 'edit own features_test content', 'delete own features_test content', ) ); } $this->drupalLogin($this->simple_user); } /** * Get node_access entries. */ protected function nodeAccess($nid) { $rows = array(); $result = db_query('select * from {node_access} where nid = %d', $nid); while ($row = db_fetch_array($result)) { $rows[$row['realm']] = $row; } return $rows; } } class SpacesOGTestCRUD extends SpacesOGTestCase { /** * Test info. */ public function getInfo() { return array( 'name' => t('Spaces OG: CRUD'), 'description' => t('Tests Spaces / Organic Groups integration. Requires Purl, Organic groups and Views.') , 'group' => t('Spaces'), ); } /** * OG CRUD and configure tests. */ function testCRUD() { // Test if presets save properly to DB. $realms = array( 'og_admin' => array( 'gid' => 1, 'grant_view' => 1, 'grant_update' => 1, 'grant_delete' => 0, ), 'og_public' => array( 'gid' => 0, 'grant_view' => 1, 'grant_update' => 0, 'grant_delete' => 0, ), 'og_subscriber' => array( 'gid' => 1, 'grant_view' => 1, 'grant_update' => 0, 'grant_delete' => 0, ), ); $presets = array( 'og_controlled' => array( 'og' => array( 'og_selective' => 1, 'og_register' => 1, 'og_directory' => 1, 'og_private' => 0, ), 'node_access' => array( 'og_public', 'og_admin', ), ), 'og_private' => array( 'og' => array( 'og_selective' => 3, 'og_register' => 0, 'og_directory' => 0, 'og_private' => 1, ), 'node_access' => array( 'og_admin', 'og_subscriber', ), ), 'og_public' => array( 'og' => array( 'og_selective' => 0, 'og_register' => 1, 'og_directory' => 1, 'og_private' => 0, ), 'node_access' => array( 'og_public', 'og_admin', ), ), ); foreach ($presets as $preset => $config) { $edit = array( 'spaces_preset_og' => $preset, ); $this->drupalPost('node/1/edit', $edit, 'Save'); // Assert spaces override status. $value = unserialize(db_result(db_query('SELECT value from {spaces_overrides} WHERE id = 1'))); $this->assertEqual($value, $preset); // Assert OG configuration. $og = db_fetch_array(db_query('SELECT og_selective, og_register, og_directory, og_private FROM {og} WHERE nid = 1')); foreach ($config['og'] as $k => $v) { $this->assertEqual($og[$k], $v); } // Review node_access table, this is essentially testing OG behavior, but // a change in this behavior would break our assumptions. foreach ($config['node_access'] as $realm) { $this->assertEqual(2, db_result(db_query('SELECT COUNT(*) FROM {node_access} WHERE nid = 1'))); $access = db_fetch_array(db_query('SELECT * FROM {node_access} WHERE nid = 1 AND realm = "%s"', $realm)); foreach ($realms[$realm] as $k => $v) { $this->assertEqual($access[$k], $v); } } } // Delete the node and verify that there are no remnants. $this->drupalPost('node/1/delete', array(), 'Delete group'); $this->assertText('Group Group A has been deleted.'); $this->assertEqual(0, db_result(db_query('SELECT count(*) FROM {spaces_overrides} WHERE id = 1'))); $this->assertEqual(0, db_result(db_query('SELECT count(*) FROM {purl} WHERE id = 1'))); } } class SpacesOGTestOverrides extends SpacesOGTestCase { /** * Test info. */ public function getInfo() { return array( 'name' => t('Spaces OG: Overrides'), 'description' => t('Tests Spaces / Organic Groups integration. Requires Purl, Organic groups and Views.') , 'group' => t('Spaces'), ); } /** * Test override space configuration. */ function testOverrides() { // Go to override tab and verify settings. $this->drupalGet('group-a/node/1/features/overrides'); $this->assertPattern('/spaces_preset_og(.*?)og_public/'); $this->assertPattern('/spaces_og_selective(.*?)0(.*?)inherited/'); $this->assertPattern('/spaces_og_register(.*?)1(.*?)inherited/'); $this->assertPattern('/spaces_og_directory(.*?)1(.*?)inherited/'); $this->assertPattern('/spaces_og_private(.*?)0(.*?)inherited/'); $this->assertNoText('features_test_setting'); // Save feature setting (amounts to an actual change) and verify the change // on the overrides page. $this->drupalPost('group-a/node/1/features/features_test', array(), 'Save for Group A'); $this->assertText('The configuration options have been saved for Group A.'); $this->drupalGet('group-a/node/1/features/overrides'); $this->assertRaw('features_test_setting'); $this->assertEqual('0', unserialize(db_result(db_query('SELECT value FROM {spaces_overrides} WHERE object_id = "features_test_setting" AND id = 1')))); // Change feature setting, verify again. $this->drupalPost('group-a/node/1/features/features_test', array('features_test_setting' => 1), 'Save for Group A'); $this->drupalGet('group-a/node/1/features/overrides'); $this->assertRaw('features_test_setting'); $this->assertEqual('1', unserialize(db_result(db_query('SELECT value FROM {spaces_overrides} WHERE object_id = "features_test_setting" AND id = 1')))); // Go to admin/build/spaces page and verify that there are no overridden // presets. Then save the modified features_test_setting setting to preset // and check for this change on admin page. $this->drupalGet('admin/build/spaces'); $this->assertNoText('Overridden'); $this->drupalGet('admin/build/spaces/og_public'); $this->assertNoText('features_test_setting'); $edit = array( 'variable[features_test_setting]' => 1, ); $this->drupalPost('group-a/node/1/features/overrides', $edit, 'Save to preset'); $this->assertText('Saved preset Public group.'); $preset = unserialize(db_result(db_query('SELECT value FROM {spaces_presets} WHERE name = "og_public" AND space_type = "og"'))); $this->assertEqual('1', $preset['variable']['features_test_setting']); $this->drupalGet('admin/build/spaces'); $this->assertText('Overridden'); $this->drupalGet('admin/build/spaces/list/og_public/edit'); $this->assertPattern('/features_test_setting(.*?)1/'); } } class SpacesOGTestFeatures extends SpacesOGTestCase { /** * Test info. */ public function getInfo() { return array( 'name' => t('Spaces OG: Features'), 'description' => t('Tests Spaces / Organic Groups integration. Requires Purl, Organic groups and Views.') , 'group' => t('Spaces'), ); } /** * Test Feature enable/disable. */ function testFeatures() { // Verify that feature is off site-wide and off for group. node/add/features-test // should not be available. $this->drupalGet('features'); $elems = $this->xpath('//select[@name="spaces_features[features_test]"]/option[@selected="selected"]'); $this->assert('Disabled' == (string)$elems[0]); $this->drupalGet('node/add'); $this->assertNoText('Features test'); $this->drupalGet('node/add/features-test'); $this->assertResponse(403); $this->drupalGet('group-a/node/1/features'); $elems = $this->xpath('//select[@name="spaces_features[features_test]"]/option[@selected="selected"]'); $this->assert('Disabled' == (string)$elems[0]); $this->drupalGet('group-a/node/add'); $this->assertNoText('Features test'); $this->drupalGet('group-a/node/add/features-test'); $this->assertResponse(403); // Enable features_test feature for site wide space, post a node. // features_test feature should still not be available in group. // @todo: this *should* not work as this post is an in-group content type. // 'group-a/features' will redirect us to 'features'. $this->drupalPost('group-a/features', array('spaces_features[features_test]' => '1'), 'Save configuration'); $this->assertText('The configuration options have been saved.'); $this->drupalGet('node/add'); $this->assertText('Testing: Features'); $this->drupalPost('node/add/features-test', array('title' => 'Post outside of Group'), 'Save'); $this->assertText('Testing: Features Post outside of Group has been created.'); // Turn off site wide features_test feature. $this->drupalPost('features', array('spaces_features[features_test]' => '0'), 'Save configuration'); $this->drupalGet('group-a/node/1/features'); $elems = $this->xpath('//select[@name="spaces_features[features_test]"]/option[@selected="selected"]'); $this->assert('Disabled' == (string)$elems[0]); $this->drupalGet('node/add/features-test'); $this->assertResponse(403); // Turn on features_test feature for group and post a features_test post. $this->drupalPost('group-a/node/1/features', array('spaces_features[features_test]' => '1'), 'Save for Group A'); $elems = $this->xpath('//select[@name="spaces_features[features_test]"]/option[@selected="selected"]'); $this->assert('Enabled' == (string)$elems[0]); $this->drupalGet('group-a/node/add'); $this->assertText('Testing: Features'); $this->drupalPost('group-a/node/add/features-test', array('title' => 'Post in Group space'), 'Save'); $this->assertText('Testing: Features Post in Group space has been created.'); $this->drupalGet('node/add/features-test'); $this->assertResponse(403); } } class SpacesOGTestAccess extends SpacesOGTestCase { /** * Test info. */ public function getInfo() { return array( 'name' => t('Spaces OG: Access'), 'description' => t('Tests Spaces / Organic Groups integration. Requires Purl, Organic groups and Views.') , 'group' => t('Spaces'), ); } /** * Test access control lists. The purpose of this test is to verify that * spaces presets result in proper OG settings. Further, resulting access * grants and denies are tested to catch changes in OG API that potentially * break assumed access walls. */ function testAccess() { /** * Create and verify public Group A ======================================== */ // Enable features_test as group feature. $this->drupalPost('group-a/node/1/features', array('spaces_features[features_test]' => '1'), 'Save for Group A'); $this->pass($output); // Post in group and review access settings and group associations. $this->drupalGet('group-a/node/add/features-test'); $this->assertText('A post of this type is public. All visitors will be able to see it.'); $this->drupalPost('group-a/node/add/features-test', array('title' => 'Public post'), 'Save'); $this->assertText('Testing: Features Public post has been created.'); $this->assertEqual(1, db_result(db_query('SELECT count(*) FROM {og_ancestry} WHERE group_nid = 1 AND nid = 2;'))); $access = $this->nodeAccess(2); $this->assertEqual($access['og_public']['gid'], 0); $this->assertEqual($access['og_public']['grant_view'], 1); $this->assertEqual($access['og_public']['grant_update'], 0); $this->assertEqual($access['og_public']['grant_delete'], 0); $this->assertEqual($access['og_admin']['gid'], 1); $this->assertEqual($access['og_admin']['grant_view'], 1); $this->assertEqual($access['og_admin']['grant_update'], 1); $this->assertEqual($access['og_admin']['grant_delete'], 1); $this->assertEqual($access['og_subscriber']['gid'], 1); $this->assertEqual($access['og_subscriber']['grant_view'], 1); $this->assertEqual($access['og_subscriber']['grant_update'], 0); $this->assertEqual($access['og_subscriber']['grant_delete'], 0); /** * Create and verify protected Group B ===================================== */ // Create group. $edit = array( 'title' => 'Group B', 'og_description' => 'Group B.', 'purl[value]' => 'group-b', 'spaces_preset_og' => 'og_controlled', ); $this->drupalPost('node/add/group', $edit, 'Save'); $this->assertEqual('og_controlled', unserialize(db_result(db_query('SELECT value from {spaces_overrides} WHERE id = 3')))); // Enable features_test as group feature. $this->drupalPost('group-b/node/3/features', array('spaces_features[features_test]' => '1'), 'Save for Group B'); // Post in group and review access settings and group associations. $this->drupalGet('group-b/node/add/features-test'); $this->assertText('A post of this type is public. All visitors will be able to see it.'); $this->drupalPost('group-b/node/add/features-test', array('title' => 'Protected post'), 'Save'); $this->assertText('Testing: Features Protected post has been created.'); $this->assertEqual(1, db_result(db_query('SELECT count(*) FROM {og_ancestry} WHERE group_nid = 3 AND nid = 4;'))); $access = $this->nodeAccess(4); $this->assertEqual($access['og_public']['gid'], 0); $this->assertEqual($access['og_public']['grant_view'], 1); $this->assertEqual($access['og_public']['grant_update'], 0); $this->assertEqual($access['og_public']['grant_delete'], 0); $this->assertEqual($access['og_admin']['gid'], 3); $this->assertEqual($access['og_admin']['grant_view'], 1); $this->assertEqual($access['og_admin']['grant_update'], 1); $this->assertEqual($access['og_admin']['grant_delete'], 1); $this->assertEqual($access['og_subscriber']['gid'], 3); $this->assertEqual($access['og_subscriber']['grant_view'], 1); $this->assertEqual($access['og_subscriber']['grant_update'], 0); $this->assertEqual($access['og_subscriber']['grant_delete'], 0); /** * Create and verify private Group C ======================================= */ // Create group. $edit = array( 'title' => 'Group C', 'og_description' => 'Group C.', 'purl[value]' => 'group-c', 'spaces_preset_og' => 'og_private', ); $this->drupalPost('node/add/group', $edit, 'Save'); $this->assertEqual('og_private', unserialize(db_result(db_query('SELECT value from {spaces_overrides} WHERE id = 5')))); // Enable features_test as group feature. $this->drupalPost('group-c/node/5/features', array('spaces_features[features_test]' => '1'), 'Save for Group C'); // Post in group and review access settings and group associations. $this->drupalGet('group-c/node/add/features-test'); $this->assertText('A post of this type is private. Only members of this group will be able to see it.'); $this->drupalPost('group-c/node/add/features-test', array('title' => 'Private post'), 'Save'); $this->assertText('Testing: Features Private post has been created.'); $this->assertEqual(1, db_result(db_query('SELECT count(*) FROM {og_ancestry} WHERE group_nid = 5 AND nid = 6;'))); // Test ACL for group. $access = $this->nodeAccess(5); $this->assertEqual(isset($access['og_public']), FALSE); $this->assertEqual($access['og_admin']['gid'], 5); $this->assertEqual($access['og_admin']['grant_view'], 1); $this->assertEqual($access['og_admin']['grant_update'], 1); $this->assertEqual($access['og_admin']['grant_delete'], 0); $this->assertEqual($access['og_subscriber']['gid'], 5); $this->assertEqual($access['og_subscriber']['grant_view'], 1); $this->assertEqual($access['og_subscriber']['grant_update'], 0); $this->assertEqual($access['og_subscriber']['grant_delete'], 0); // Test ACL for post in group. $access = $this->nodeAccess(6); $this->assertEqual(isset($access['og_public']), FALSE); $this->assertEqual($access['og_admin']['gid'], 5); $this->assertEqual($access['og_admin']['grant_view'], 1); $this->assertEqual($access['og_admin']['grant_update'], 1); $this->assertEqual($access['og_admin']['grant_delete'], 1); $this->assertEqual($access['og_subscriber']['gid'], 5); $this->assertEqual($access['og_subscriber']['grant_view'], 1); $this->assertEqual($access['og_subscriber']['grant_update'], 0); $this->assertEqual($access['og_subscriber']['grant_delete'], 0); // Make sure there is no 'grant all'. $this->assertEqual(0, db_result(db_query('SELECT COUNT(*) FROM {node_access} WHERE nid = 0 AND grant_view = 1')), 'Global grant_view is absent.'); /** * Test Group A access ===================================================== */ $this->loginSimpleUser(); // Group node accessible. $this->drupalGet('group-a/node/1'); $this->assertResponse(200); // Post in group accessible. $this->drupalGet('group-a/node/2'); $this->assertResponse(200); $this->assertText('Public post'); // Can't add features_test . $this->drupalGet('group-a/node/add/features-test'); $this->assertResponse(403); // Join. $this->drupalPost('group-a/og/subscribe/1', array(), 'Join'); $this->assertText('You are now a member of Group A.'); // Add features_test . $this->drupalGet('group-a/node/add/features-test'); $this->assertResponse(200); $this->drupalPost('group-a/node/add/features-test', array('title' => 'Another public post'), 'Save'); $this->assertText('Testing: Features Another public post has been created.'); /** * Test Group B access ===================================================== */ // Group node accessible. $this->drupalGet('group-b/node/3'); $this->assertResponse(200); // Post in group accessible. $this->drupalGet('group-b/node/4'); $this->assertResponse(200); $this->assertText('Protected post'); // Can't add features_test . $this->drupalGet('group-b/node/add/features-test'); $this->assertResponse(403); // Request membership. $this->drupalPost('group-b/og/subscribe/3', array(), 'Join'); $this->assertText('Membership request to the Group B group awaits approval by an administrator.'); // Grant membership. $this->loginAdminUser(); $this->drupalGet('group-b/og/users/3'); $this->clickLink('approve'); $this->assertText('Membership request approved.'); // Log back in as simple user and post a features_test post. $this->loginSimpleUser(); $this->drupalGet('group-b/node/add/features-test'); $this->assertResponse(200); $this->drupalPost('group-b/node/add/features-test', array('title' => 'Another protected post'), 'Save'); $this->assertText('Testing: Features Another protected post has been created.'); /** * Test Group C access ===================================================== */ $this->loginSimpleUser(); // Group node not accessible. $this->drupalGet('group-c/node/5'); $this->assertResponse(403); $this->assertNoText('Group C'); // Post in group not accessible. $this->drupalGet('group-c/node/6'); $this->assertResponse(403); $this->assertNoText('Private post'); // Can't add features_test . $this->drupalGet('group-c/node/add/features-test'); $this->assertResponse(403); // Can't request membership. $this->drupalGet('group-c/og/subscribe/5'); $this->assertResponse(403); // Add user. $this->loginAdminUser(); $this->drupalPost('group-c/og/users/5/add_user', array('og_names' => $this->simple_user->name), 'Add users'); $this->assertText('1 user added to the group.'); // Log in again, now we should be able to access the group fully. $this->loginSimpleUser(); // Group node accessible. $this->drupalGet('group-c/node/5'); $this->assertResponse(200); $this->assertText('Group C'); // Post in group accessible. $this->drupalGet('group-c/node/6'); $this->assertResponse(200); $this->assertText('Private post'); // Post features_test node. $this->drupalGet('group-c/node/add/features-test'); $this->assertResponse(200); $this->drupalPost('group-c/node/add/features-test', array('title' => 'Another private post'), 'Save'); $this->assertText('Testing: Features Another private post has been created.'); /** * Privacy switch test ===================================================== */ $this->loginAdminUser(); $edit = array( 'spaces_preset_og' => 'og_public', ); $this->drupalPost('group-c/node/5/edit', $edit, 'Save'); $this->assertText('The content access permissions need to be rebuilt.'); $this->drupalPost('admin/content/node-settings/rebuild', array(), 'Rebuild permissions'); $this->drupalPost("group-c/og/unsubscribe/5/{$this->simple_user->uid}", array(), 'Remove'); $this->loginSimpleUser(); $this->drupalGet('group-c/node/5'); $this->assertResponse(200); $this->assertText('Group C'); $this->drupalGet('group-c/node/6'); $this->assertResponse(200); $this->loginAdminUser(); $edit = array( 'spaces_preset_og' => 'og_private', ); $this->drupalPost('group-c/node/5/edit', $edit, 'Save'); $this->assertText('The content access permissions need to be rebuilt.'); $this->drupalPost('admin/content/node-settings/rebuild', array(), 'Rebuild permissions'); $this->loginSimpleUser(); $this->drupalGet('group-c/node/5'); $this->assertResponse(403); $this->drupalGet('group-c/node/6'); $this->assertResponse(403); } } class SpacesOGTestRouter extends SpacesOGTestCase { /** * Test info. */ public function getInfo() { return array( 'name' => t('Spaces OG: Router'), 'description' => t('Tests Spaces / Organic Groups integration. Requires Purl, Organic groups and Views.') , 'group' => t('Spaces'), ); } /** * Test router. */ function testRouter() { // Enable features_test feature site wide. $this->drupalPost('features', array('spaces_features[features_test]' => '1'), 'Save configuration'); // Create another test group. $edit = array( 'title' => 'Group B', 'og_description' => 'Group B.', 'purl[value]' => 'group-b', ); $this->drupalPost('node/add/group', $edit, 'Save'); $this->drupalPost('node/1/features', array('spaces_features[features_test]' => '1'), 'Save for Group A'); // Log in as simple user, join and post a features_test . $this->loginSimpleUser(); $this->drupalPost('group-a/og/subscribe/1', array(), 'Join'); $this->drupalPost('group-a/node/add/features-test', array('title' => 'Test post'), 'Save'); // Router should redirect to group-a/*. foreach (array('node/1', 'node/3', 'group-b/node/1', 'group-b/node/3') as $path) { $this->drupalGet($path); $this->assertTrue(FALSE !== strpos($this->getUrl(), 'group-a')); } // Submit a features_test outside of a group. $this->drupalGet('node/add/features-test'); $this->drupalPost('node/add/features-test', array('title' => 'Not in group (accident)'), 'Save'); $this->assertText('Not in group'); $this->assertNoText('This content type is supposed to be posted within a group but it is not.'); // Log in as admin, make audience settings mandatory. $this->loginAdminUser(); $this->drupalPost('admin/og/og', array('og_audience_required' => '1'), 'Save configuration'); $this->assertText('The configuration options have been saved.'); // Log in as simple user again, I should get an error message now. $this->loginSimpleUser(); $this->drupalGet('node/4/edit'); $this->assertText('This content type is supposed to be posted within a group but it is not. You will not be able to save this node. Please contact a site administrator to fix the issue.'); // Log in as admin, fix error by assigning post to group A. $this->loginAdminUser(); $this->drupalPost('node/4/edit', array('spaces_og_audience' => 1), 'Save'); // Log in as simple user again, verify that post is fixed. $this->loginSimpleUser(); $this->drupalGet('node/4/edit'); $this->assertTrue(FALSE !== strpos($this->getUrl(), 'group-a')); $this->assertNoText('This content type is supposed to be posted within a group but it is not.'); } } class SpacesOGTestAutocomplete extends SpacesOGTestCase { /** * Test info. */ public function getInfo() { return array( 'name' => t('Spaces OG: Autocomplete'), 'description' => t('Tests Spaces / Organic Groups integration. Requires Purl, Organic groups and Views.') , 'group' => t('Spaces'), ); } public function setUp() { parent::setUp(); $vocab = array( 'name' => 'Tags', 'description' => 'Test vocab.', 'multiple' => 1, 'tags' => 1, 'nodes' => array('features_test ' => TRUE), ); taxonomy_save_vocabulary($vocab); $this->simpleUserPerms = array( 'access user profiles', 'access comments', 'post comments', 'post comments without approval', 'access content', 'create features_test content', 'edit own features_test content', 'delete own features_test content', ); } protected function createNamedUser($permissions = NULL, $name = NULL) { // Create a role with the given permission set. if (!($rid = $this->drupalCreateRole($permissions))) { return FALSE; } // Create a user assigned to that role. $edit = array(); $edit['name'] = isset($name) ? $name : $this->randomName(); $edit['mail'] = $edit['name'] . '@example.com'; $edit['roles'] = array($rid => $rid); $edit['pass'] = user_password(); $edit['status'] = 1; $account = user_save('', $edit); $this->assertTrue(!empty($account->uid), t('User created with name %name and pass %pass', array('%name' => $edit['name'], '%pass' => $edit['pass'])), t('User login')); if (empty($account->uid)) { return FALSE; } // Add the raw password so that we can log in as this user. $account->pass_raw = $edit['pass']; return $account; } /** * Test autocomplete. */ function testAutocomplete() { $this->loginAdminUser(); // Create another test group. $edit = array( 'title' => 'Group B', 'og_description' => 'Group B.', 'purl[value]' => 'group-b', ); $this->drupalPost('node/add/group', $edit, 'Save'); // Enable features_test in both groups. $this->drupalPost('group-a/node/1/features', array('spaces_features[features_test]' => '1'), 'Save for Group A'); $this->drupalPost('group-b/node/2/features', array('spaces_features[features_test]' => '1'), 'Save for Group B'); // Log in as admin user and post a features_test post in each group with very different tags. $this->drupalPost('group-a/node/add/features-test', array('title' => 'Fruit post', 'taxonomy[tags][1]' => 'bananas, apples, oranges'), 'Save'); $this->drupalPost('group-b/node/add/features-test', array('title' => 'Veggie post', 'taxonomy[tags][1]' => 'broccoli, artichoke, oregano'), 'Save'); // Log in as simple user, join group-a and test taxonomy autocomplete. $this->loginSimpleUser(); // When a member of just group A, we should only get fruits. $this->drupalPost('group-a/og/subscribe/1', array(), 'Join'); $this->drupalGet('taxonomy/autocomplete/1/b'); $this->assertRaw('bananas'); $this->assertNoRaw('broccoli'); $this->drupalGet('taxonomy/autocomplete/1/bananas, a'); $this->assertRaw('apples'); $this->assertNoRaw('artichoke'); $this->drupalGet('taxonomy/autocomplete/1/bananas, apples, or'); $this->assertRaw('oranges'); $this->assertNoRaw('oregano'); // When a member of both groups, we should get all tags. $this->drupalPost('group-b/og/subscribe/2', array(), 'Join'); $this->drupalGet('taxonomy/autocomplete/1/b'); $this->assertRaw('bananas'); $this->assertRaw('broccoli'); $this->drupalGet('taxonomy/autocomplete/1/bananas, a'); $this->assertRaw('apples'); $this->assertRaw('artichoke'); $this->drupalGet('taxonomy/autocomplete/1/bananas, apples, or'); $this->assertRaw('oranges'); $this->assertRaw('oregano'); // When a member of just group B, we should only get veggies. $this->drupalPost("group-a/og/unsubscribe/1/{$this->simple_user->uid}", array(), 'Leave'); $this->drupalGet('taxonomy/autocomplete/1/b'); $this->assertNoRaw('bananas'); $this->assertRaw('broccoli'); $this->drupalGet('taxonomy/autocomplete/1/bananas, a'); $this->assertNoRaw('apples'); $this->assertRaw('artichoke'); $this->drupalGet('taxonomy/autocomplete/1/bananas, apples, or'); $this->assertNoRaw('oranges'); $this->assertRaw('oregano'); // User autocomplete // Create joe (group B), joan (group B). $joe = $this->createNamedUser($this->simpleUserPerms, 'testjoe'); $this->drupalLogin($joe); $this->drupalPost('group-a/og/subscribe/1', array(), 'Join'); $joan = $this->createNamedUser($this->simpleUserPerms, 'testjoan'); $this->drupalLogin($joan); $this->drupalPost('group-b/og/subscribe/2', array(), 'Join'); $this->loginSimpleUser(); // When a member of just group B, we should only get "testjoan". $this->drupalGet('user/autocomplete/testjo'); $this->assertNoRaw('testjoe'); $this->assertRaw('testjoan'); // When a member of both groups, we should get both users. $this->drupalPost('group-a/og/subscribe/1', array(), 'Join'); $this->drupalGet('user/autocomplete/testjo'); $this->assertRaw('testjoe'); $this->assertRaw('testjoan'); // When a member of just group A, we should only get "testjoe". $this->drupalPost("group-b/og/unsubscribe/2/{$this->simple_user->uid}", array(), 'Leave'); $this->drupalGet('user/autocomplete/testjo'); $this->assertRaw('testjoe'); $this->assertNoRaw('testjoan'); } }