summaryrefslogtreecommitdiff
path: root/modules/profile/profile.test
diff options
context:
space:
mode:
authorDries Buytaert <dries@buytaert.net>2008-04-20 18:24:07 +0000
committerDries Buytaert <dries@buytaert.net>2008-04-20 18:24:07 +0000
commitaf474609e3e80db9ba1d16b9ad2eae89775f51c8 (patch)
treee525479dd6381b94d21943c3d2decf1c749c028c /modules/profile/profile.test
parentfe7b9baff62379f5a0c901d27cbb677345791bd0 (diff)
downloadbrdo-af474609e3e80db9ba1d16b9ad2eae89775f51c8.tar.gz
brdo-af474609e3e80db9ba1d16b9ad2eae89775f51c8.tar.bz2
- Added a test framework to Drupal along with a first batch of tests for
Drupal core! This is an important milestone for the project so enable the module and check it out ... :) Thanks to Rok Žlender, Károly Négyesi, Jimmy Berry, Kevin Bridges, Charlie Gordon, Douglas Hubler, Miglius Alaburda, Andy Kirkham, Dimitri13, Kieran Lal, Moshe Weitzman, and the many other people that helped with testing over the past years and that drove this home. It all works but it is still rough around the edges (i.e. documentation is still being written, the coding style is not 100% yet, a number of tests still fail) but we spent the entire weekend working on it in Paris and made a ton of progress. The best way to help and to get up to speed, is to start writing and contributing some tests ... as well as fixing some of the failures. For those willing to help with improving the test framework, here are some next steps and issues to resolve: - How to best approach unit tests and mock functions? - How to test drupal_mail() and drupal_http_request()? - How to improve the admin UI so we have a nice progress bar? - How best to do code coverage? - See http://g.d.o/node/10099 for more ...
Diffstat (limited to 'modules/profile/profile.test')
-rw-r--r--modules/profile/profile.test975
1 files changed, 975 insertions, 0 deletions
diff --git a/modules/profile/profile.test b/modules/profile/profile.test
new file mode 100644
index 000000000..33fa02e59
--- /dev/null
+++ b/modules/profile/profile.test
@@ -0,0 +1,975 @@
+<?php
+// $Id$
+
+class ProfileTestSingleTestCase extends DrupalWebTestCase {
+ function getInfo() {
+ $modules = (module_list());
+ return array('name' => 'Test single field', 'description' => "Testing profile module with add/edit/delete new fields into profile page" , 'group' => t('Profile'));
+ }
+
+ function _rolesApi($op, $edit) {
+ if ($op == 'delete') {
+ $id = $edit['rid'];
+ db_query('DELETE FROM {role} WHERE rid = %d', $id);
+ db_query('DELETE FROM {permission} WHERE rid = %d', $id);
+
+ // Update the users who have this role set:
+ $result = db_query('SELECT DISTINCT(ur1.uid) FROM {users_roles} ur1 LEFT JOIN {users_roles} ur2 ON ur2.uid = ur1.uid WHERE ur1.rid = %d AND ur2.rid != ur1.rid', $id);
+ $uid = array();
+
+ while ($u = db_fetch_object($result)) {
+ $uid[] = $u->uid;
+ }
+
+ if ($uid) {
+ db_query('DELETE FROM {users_roles} WHERE rid = %d AND uid IN (%s)', $id, implode(', ', $uid));
+ }
+
+ // Users with only the deleted role are put back in the authenticated users pool.
+ db_query('UPDATE {users_roles} SET rid = %d WHERE rid = %d', DRUPAL_AUTHENTICATED_RID, $id);
+
+ }
+ else if ($op == 'add') {
+ if (isset($edit['name'])) {
+ db_query("INSERT INTO {role} (name) VALUES ('%s')", $edit['name']);
+ $result = db_query("SELECT rid FROM {role} WHERE name = '%s'", $edit['name']);
+ $rid = db_result($result);
+ db_query("INSERT INTO {permission} (rid, perm) VALUES (%d, '%s')", $rid, $edit['perm']);
+ return $rid;
+ }
+ else {
+ return 0;
+ }
+ }
+ }
+
+ function testProfileSingle() {
+ $this->drupalModuleEnable('profile');
+ // create test user
+ $edit['name'] = 'Profile '. $this->randomName(5);
+ $edit['perm'] = 'access administration pages, administer site configuration, administer users';
+ $rid = $this->_rolesApi('add', $edit );
+ $name = $this->randomName();
+ $pass = $this->randomName();
+ $mail = "$name@example.com";
+ unset($edit);
+ $edit['roles'] = array($rid => $rid);
+ $user = user_save('', array('name' => $name, 'pass' => $pass, 'init' => $mail, 'mail' => $mail, 'roles' => $edit['roles'], 'status' => 1));
+ //log in
+ $edit = array('name' => $name, 'pass' => $pass);
+ $this->drupalPost('user', $edit, t('Log in'));
+
+ //wartosci
+ $my_category = 'Simpletest';
+ //single line textfield
+ $title = "single_" . $this->randomName(10);
+ $form_name = 'profile_' . $title;
+ $explanation = $this->randomName(50);
+ $edit = array('category' => $my_category,
+ 'title' => $title,
+ 'name' => $form_name,
+ 'explanation' => $explanation,
+ );
+ $this->drupalPost('admin/user/profile/add/textfield', $edit, t('Save field'), 0);
+ $fid = db_result(db_query('SELECT fid FROM {profile_fields} WHERE title = "%s"', $title));
+ $single_field = array('title' => $title, 'form_name' => $form_name, 'explanation' => $explanation);
+
+ // checking simple fields
+ $this->drupalGet("user/". $user->uid. "/edit/$my_category");
+
+ // checking field
+ $this->assertField($form_name , t('Found form named @name', array('@name' => $form_name)));
+ // checking name
+ $this->assertText($title, "Checking title for ". $title);
+ // checking explanation
+ $this->assertText($explanation, "Checking explanation for ". $title);
+
+ // ok, now let put some data
+ unset($edit);
+ $edit = array();
+ $checking = array();
+ $edit[$form_name] = $this->randomName(20);
+ $this->drupalPost("user/". $user->uid. "/edit/$my_category", $edit, t('Save') , 0);
+ $this->drupalGet("user/". $user->uid);
+
+ // checking profile page
+ $this->assertText($edit[$form_name], "Checking ". $edit[$form_name]);
+ $this->assertText($title, "Checking $title");
+ // update field
+ $new_title = $this->randomName(20);
+ $this->drupalPost("admin/user/profile/edit/$fid", array('title' => $new_title), t('Save field') , 0);
+ $this->drupalGet("admin/user/profile");
+ $this->assertText($new_title, "Checking updated field");
+ // deleting field
+ $this->drupalPost("admin/user/profile/delete/$fid", array(), t('Delete'), 0);
+ $this->drupalGet("admin/user/profile");
+ $this->assertNoText($new_title, "Checking deleted field $title");
+
+ // delete test user and roles
+ if ($user->uid > 0) {
+ db_query('DELETE FROM {users} WHERE uid =%d', $user->uid);
+ db_query('DELETE FROM {users_roles} WHERE uid = %d', $user->uid);
+ module_invoke_all('user', 'delete', '', $user);
+ }
+
+ //delete roles
+ $edit['rid'] = $rid;
+ $this->_rolesApi('delete', $edit);
+ }
+
+}
+
+class ProfileTestTextareaTestCase extends DrupalWebTestCase {
+ function getInfo() {
+ $modules = (module_list());
+ return array('name' => 'Test textarea field', 'description' => "Testing profile module with add/edit/delete new fields into profile page" , 'group' => t('Profile'));
+ }
+
+ function _rolesApi($op, $edit) {
+ if ($op == 'delete') {
+ $id = $edit['rid'];
+ db_query('DELETE FROM {role} WHERE rid = %d', $id);
+ db_query('DELETE FROM {permission} WHERE rid = %d', $id);
+
+ // Update the users who have this role set:
+ $result = db_query('SELECT DISTINCT(ur1.uid) FROM {users_roles} ur1 LEFT JOIN {users_roles} ur2 ON ur2.uid = ur1.uid WHERE ur1.rid = %d AND ur2.rid != ur1.rid', $id);
+ $uid = array();
+
+ while ($u = db_fetch_object($result)) {
+ $uid[] = $u->uid;
+ }
+
+ if ($uid) {
+ db_query('DELETE FROM {users_roles} WHERE rid = %d AND uid IN (%s)', $id, implode(', ', $uid));
+ }
+
+ // Users with only the deleted role are put back in the authenticated users pool.
+ db_query('UPDATE {users_roles} SET rid = %d WHERE rid = %d', DRUPAL_AUTHENTICATED_RID, $id);
+
+ }
+ else if ($op == 'add') {
+ if (isset($edit['name'])) {
+ db_query("INSERT INTO {role} (name) VALUES ('%s')", $edit['name']);
+ $result = db_query("SELECT rid FROM {role} WHERE name = '%s'", $edit['name']);
+ $rid = db_result($result);
+ db_query("INSERT INTO {permission} (rid, perm) VALUES (%d, '%s')", $rid, $edit['perm']);
+ return $rid;
+ }
+ else {
+ return 0;
+ }
+ }
+ }
+
+ function testProfileSingle() {
+ $this->drupalModuleEnable('profile');
+ // create test user
+ $edit['name'] = 'Profile '. $this->randomName(5);
+ $edit['perm'] = 'access content, administer users, administer site configuration, access administration pages, access configuration pages, access user profiles';
+ $rid = $this->_rolesApi('add', $edit );
+ $name = $this->randomName();
+ $pass = $this->randomName();
+ $mail = "$name@example.com";
+ unset($edit);
+ $edit['roles'] = array($rid => $rid);
+ $user = user_save('', array('name' => $name, 'pass' => $pass, 'init' => $mail, 'mail' => $mail, 'roles' => $edit['roles'], 'status' => 1));
+ //log in
+ $edit = array('name' => $name, 'pass' => $pass);
+ $this->drupalPost('user', $edit, t('Log in'), 0 );
+
+ //wartosci
+ $my_category = 'Simpletest';
+ //single line textfield
+ $title = "single_" . $this->randomName(10);
+ $form_name = 'profile_' . $title;
+ $explanation = $this->randomName(50);
+ $edit = array('category' => $my_category, 'title' => $title, 'name' => $form_name, 'explanation' => $explanation);
+ $this->drupalPost("admin/user/profile/add/textarea", $edit, t('Save field'), 0);
+ $fid = db_result(db_query('SELECT fid FROM {profile_fields} WHERE title = "%s"', $title));
+ $single_field = array('title' => $title, 'form_name' => $form_name, 'explanation' => $explanation);
+
+ // checking simple fields
+ $this->drupalGet("user/". $user->uid. "/edit/$my_category");
+
+ // checking field
+ $this->assertField($form_name, '');
+ // checking name
+ $this->assertText($title, "Checking title for ". $title);
+ // checking explanation
+ $this->assertText($explanation, "Checking explanation for ". $title);
+
+ // ok, now let put some data
+ unset($edit);
+ $edit = array();
+ $checking = array();
+ $edit[$form_name] = $this->randomName(20);
+ $this->drupalPost("user/". $user->uid. "/edit/$my_category", $edit, t('Save'), 0);
+ $this->drupalGet("user/". $user->uid);
+
+ // checking profile page
+ $this->assertText($edit[$form_name], "Checking ". $edit[$form_name]);
+ $this->assertText($title, "Checking $title");
+ // update field
+ $new_title = $this->randomName(20);
+ $this->drupalPost("admin/user/profile/edit/$fid", array('title' => $new_title), t('Save field'), 0);
+ $this->drupalGet("admin/user/profile");
+ $this->assertText($new_title, "Checking updated field");
+ // deleting field
+ $this->drupalPost("admin/user/profile/delete/$fid", array(), t('Delete'), 0);
+ $this->drupalGet("admin/user/profile");
+ $this->assertNoText($new_title, "Checking deleted field $title");
+
+ // delete test user and roles
+ if ($user->uid > 0) {
+ db_query('DELETE FROM {users} WHERE uid =%d', $user->uid);
+ db_query('DELETE FROM {users_roles} WHERE uid = %d', $user->uid);
+ module_invoke_all('user', 'delete', '', $user);
+ }
+
+ //delete roles
+ $edit['rid'] = $rid;
+ $this->_rolesApi('delete', $edit);
+ }
+}
+
+
+class ProfileTestFreelistTestCase extends DrupalWebTestCase {
+ function getInfo() {
+ $modules = (module_list());
+ return array('name' => 'Test freelist field', 'description' => "Testing profile module with add/edit/delete new fields into profile page" , 'group' => t('Profile'));
+ }
+
+ function _rolesApi($op, $edit) {
+ if ($op == 'delete') {
+ $id = $edit['rid'];
+ db_query('DELETE FROM {role} WHERE rid = %d', $id);
+ db_query('DELETE FROM {permission} WHERE rid = %d', $id);
+
+ // Update the users who have this role set:
+ $result = db_query('SELECT DISTINCT(ur1.uid) FROM {users_roles} ur1 LEFT JOIN {users_roles} ur2 ON ur2.uid = ur1.uid WHERE ur1.rid = %d AND ur2.rid != ur1.rid', $id);
+ $uid = array();
+
+ while ($u = db_fetch_object($result)) {
+ $uid[] = $u->uid;
+ }
+
+ if ($uid) {
+ db_query('DELETE FROM {users_roles} WHERE rid = %d AND uid IN (%s)', $id, implode(', ', $uid));
+ }
+
+ // Users with only the deleted role are put back in the authenticated users pool.
+ db_query('UPDATE {users_roles} SET rid = %d WHERE rid = %d', DRUPAL_AUTHENTICATED_RID, $id);
+
+ }
+ else if ($op == 'add') {
+ if (isset($edit['name'])) {
+ db_query("INSERT INTO {role} (name) VALUES ('%s')", $edit['name']);
+ $result = db_query("SELECT rid FROM {role} WHERE name = '%s'", $edit['name']);
+ $rid = db_result($result);
+ db_query("INSERT INTO {permission} (rid, perm) VALUES (%d, '%s')", $rid, $edit['perm']);
+ return $rid;
+ }
+ else {
+ return 0;
+ }
+ }
+ }
+
+ function testProfileSingle() {
+ $this->drupalModuleEnable('profile');
+ // create test user
+ $edit['name'] = 'Profile '. $this->randomName(5);
+ $edit['perm'] = 'access content, administer users, administer site configuration, access administration pages, access configuration pages, access user profiles';
+ $rid = $this->_rolesApi('add', $edit );
+ $name = $this->randomName();
+ $pass = $this->randomName();
+ $mail = "$name@example.com";
+ unset($edit);
+ $edit['roles'] = array($rid => $rid);
+ $user = user_save('', array('name' => $name, 'pass' => $pass, 'init' => $mail, 'mail' => $mail, 'roles' => $edit['roles'], 'status' => 1));
+ //log in
+ $edit = array('name' => $name, 'pass' => $pass);
+ $this->drupalPost('user', $edit, t('Log in'), 0 );
+
+ //wartosci
+ $my_category = 'Simpletest';
+ //single line textfield
+ $title = "single_" . $this->randomName(10);
+ $form_name = 'profile_' . $title;
+ $explanation = $this->randomName(50);
+ $edit = array('category' => $my_category, 'title' => $title, 'name' => $form_name, 'explanation' => $explanation);
+ $this->drupalPost("admin/user/profile/add/list", $edit, t('Save field'), 0);
+ $fid = db_result(db_query('SELECT fid FROM {profile_fields} WHERE title = "%s"', $title));
+ $single_field = array('title' => $title, 'form_name' => $form_name, 'explanation' => $explanation);
+
+ // checking simple fields
+ $this->drupalGet("user/". $user->uid. "/edit/$my_category");
+
+ // checking field
+ $this->assertField($form_name, '');
+ // checking name
+ $this->assertText($title, "Checking title for ". $title);
+ // checking explanation
+ $this->assertText($explanation, "Checking explanation for ". $title);
+
+ // ok, now let put some data
+ unset($edit);
+ $edit = array();
+ $checking = array();
+ $edit[$form_name] = $this->randomName(20);
+ $this->drupalPost("user/". $user->uid. "/edit/$my_category", $edit, t('Save'), 0);
+ $this->drupalGet("user/". $user->uid);
+
+ // checking profile page
+ $this->assertText($edit[$form_name], "Checking ". $edit[$form_name]);
+ $this->assertText($title, "Checking $title");
+ // update field
+ $new_title = $this->randomName(20);
+ $this->drupalPost("admin/user/profile/edit/$fid", array('title' => $new_title), t('Save field'), 0);
+ $this->drupalGet("admin/user/profile");
+ $this->assertText($new_title, "Checking updated field");
+ // deleting field
+ $this->drupalPost("admin/user/profile/delete/$fid", array(), t('Delete'), 0);
+ $this->drupalGet("admin/user/profile");
+ $this->assertNoText($new_title, "Checking deleted field $title");
+
+ // delete test user and roles
+ if ($user->uid > 0) {
+ db_query('DELETE FROM {users} WHERE uid =%d', $user->uid);
+ db_query('DELETE FROM {users_roles} WHERE uid = %d', $user->uid);
+ module_invoke_all('user', 'delete', '', $user);
+ }
+
+ //delete roles
+ $edit['rid'] = $rid;
+ $this->_rolesApi('delete', $edit);
+ }
+
+}
+
+
+class ProfileTestCheckboxTestCase extends DrupalWebTestCase {
+ function getInfo() {
+ $modules = (module_list());
+ return array('name' => 'Test checkbox field', 'description' => "Testing profile module with add/edit/delete new fields into profile page" , 'group' => t('Profile'));
+ }
+
+ function _rolesApi($op, $edit) {
+ if ($op == 'delete') {
+ $id = $edit['rid'];
+ db_query('DELETE FROM {role} WHERE rid = %d', $id);
+ db_query('DELETE FROM {permission} WHERE rid = %d', $id);
+
+ // Update the users who have this role set:
+ $result = db_query('SELECT DISTINCT(ur1.uid) FROM {users_roles} ur1 LEFT JOIN {users_roles} ur2 ON ur2.uid = ur1.uid WHERE ur1.rid = %d AND ur2.rid != ur1.rid', $id);
+ $uid = array();
+
+ while ($u = db_fetch_object($result)) {
+ $uid[] = $u->uid;
+ }
+
+ if ($uid) {
+ db_query('DELETE FROM {users_roles} WHERE rid = %d AND uid IN (%s)', $id, implode(', ', $uid));
+ }
+
+ // Users with only the deleted role are put back in the authenticated users pool.
+ db_query('UPDATE {users_roles} SET rid = %d WHERE rid = %d', DRUPAL_AUTHENTICATED_RID, $id);
+
+ }
+ else if ($op == 'add') {
+ if (isset($edit['name'])) {
+ db_query("INSERT INTO {role} (name) VALUES ('%s')", $edit['name']);
+ $result = db_query("SELECT rid FROM {role} WHERE name = '%s'", $edit['name']);
+ $rid = db_result($result);
+ db_query("INSERT INTO {permission} (rid, perm) VALUES (%d, '%s')", $rid, $edit['perm']);
+ return $rid;
+ }
+ else {
+ return 0;
+ }
+ }
+ }
+
+ function testProfileCheckbox() {
+ $this->drupalModuleEnable('profile');
+ // create test user
+ $edit['name'] = 'Profile '. $this->randomName(5);
+ $edit['perm'] = 'access content, administer users, administer site configuration, access administration pages, access configuration pages, access user profiles';
+ $rid = $this->_rolesApi('add', $edit );
+ $name = $this->randomName();
+ $pass = $this->randomName();
+ $mail = "$name@example.com";
+ unset($edit);
+ $edit['roles'] = array($rid => $rid);
+ $user = user_save('', array('name' => $name, 'pass' => $pass, 'init' => $mail, 'mail' => $mail, 'roles' => $edit['roles'], 'status' => 1));
+ //log in
+ $edit = array('name' => $name, 'pass' => $pass);
+ $this->drupalPost('user', $edit, t('Log in'), 0);
+
+ //wartosci
+ $my_category = 'Simpletest';
+ //single line textfield
+ $title = "single_" . $this->randomName(10);
+ $form_name = 'profile_' . $title;
+ $explanation = $this->randomName(50);
+ $edit = array('category' => $my_category, 'title' => $title, 'name' => $form_name, 'explanation' => $explanation);
+ $this->drupalPost("admin/user/profile/add/checkbox", $edit, t('Save field'), 0);
+ $fid = db_result(db_query('SELECT fid FROM {profile_fields} WHERE title = "%s"', $title));
+ $single_field = array('title' => $title, 'form_name' => $form_name, 'explanation' => $explanation);
+
+ // checking simple fields
+ $this->drupalGet("user/". $user->uid. "/edit/$my_category");
+
+ // checking field
+ $this->assertField($form_name, false);
+ // checking name
+ $this->assertText($title, "Checking title for ". $title);
+ // checking explanation
+ $this->assertText($explanation, "Checking explanation for ". $title);
+
+ // ok, now let put some data
+ unset($edit);
+ $edit = array();
+ $checking = array();
+ $edit[$form_name] = 1;
+ $this->drupalPost("user/". $user->uid. "/edit/$my_category", $edit, t('Save'), 0);
+ $this->drupalGet("user/". $user->uid);
+ // checking profile page
+ $this->assertText($title, "Checking checkbox");
+ $this->assertText($title, "Checking $title");
+ // update field
+ $new_title = $this->randomName(10);
+ $this->drupalPost("admin/user/profile/edit/$fid", array('title' => $new_title), t('Save field'), 0);
+ $this->drupalGet("admin/user/profile");
+ $this->assertText($new_title, "Checking updated field");
+ // deleting field
+ $this->drupalPost("admin/user/profile/delete/$fid", array(), t('Delete'), 0);
+ $this->drupalGet("admin/user/profile");
+ $this->assertNoText($new_title, "Checking deleted field $title");
+
+ // delete test user and roles
+ if ($user->uid > 0) {
+ db_query('DELETE FROM {users} WHERE uid =%d', $user->uid);
+ db_query('DELETE FROM {users_roles} WHERE uid = %d', $user->uid);
+ module_invoke_all('user', 'delete', '', $user);
+ }
+
+ //delete roles
+ $edit['rid'] = $rid;
+ $this->_rolesApi('delete', $edit);
+ }
+}
+
+class ProfileTestUrlTestCase extends DrupalWebTestCase {
+ function getInfo() {
+ $modules = (module_list());
+ return array('name' => 'Test URL field', 'description' => "Testing profile module with add/edit/delete new fields into profile page" , 'group' => t('Profile'));
+ }
+
+ function _rolesApi($op, $edit) {
+ if ($op == 'delete') {
+ $id = $edit['rid'];
+ db_query('DELETE FROM {role} WHERE rid = %d', $id);
+ db_query('DELETE FROM {permission} WHERE rid = %d', $id);
+
+ // Update the users who have this role set:
+ $result = db_query('SELECT DISTINCT(ur1.uid) FROM {users_roles} ur1 LEFT JOIN {users_roles} ur2 ON ur2.uid = ur1.uid WHERE ur1.rid = %d AND ur2.rid != ur1.rid', $id);
+ $uid = array();
+
+ while ($u = db_fetch_object($result)) {
+ $uid[] = $u->uid;
+ }
+
+ if ($uid) {
+ db_query('DELETE FROM {users_roles} WHERE rid = %d AND uid IN (%s)', $id, implode(', ', $uid));
+ }
+
+ // Users with only the deleted role are put back in the authenticated users pool.
+ db_query('UPDATE {users_roles} SET rid = %d WHERE rid = %d', DRUPAL_AUTHENTICATED_RID, $id);
+
+ }
+ else if ($op == 'add') {
+ if (isset($edit['name'])) {
+ db_query("INSERT INTO {role} (name) VALUES ('%s')", $edit['name']);
+ $result = db_query("SELECT rid FROM {role} WHERE name = '%s'", $edit['name']);
+ $rid = db_result($result);
+ db_query("INSERT INTO {permission} (rid, perm) VALUES (%d, '%s')", $rid, $edit['perm']);
+ return $rid;
+ }
+ else {
+ return 0;
+ }
+ }
+ }
+
+ function testProfileSingle() {
+ variable_set('user_register',1);
+ $this->drupalModuleEnable('profile');
+ // create test user
+ $edit['name'] = 'Profile '. $this->randomName(5);
+ $edit['perm'] = 'access content, administer users, administer site configuration, access administration pages, access configuration pages, access user profiles';
+ $rid = $this->_rolesApi('add', $edit );
+ $name = $this->randomName();
+ $pass = $this->randomName();
+ $mail = "$name@example.com";
+ unset($edit);
+ $edit['roles'] = array($rid => $rid);
+ $user = user_save('', array('name' => $name, 'pass' => $pass, 'init' => $mail, 'mail' => $mail, 'roles' => $edit['roles'], 'status' => 1));
+ //log in
+ $edit = array('name' => $name, 'pass' => $pass);
+ $this->drupalPost('user', $edit, t('Log in'), 0);
+
+ //wartosci
+ $my_category = 'Simpletest';
+ //single line textfield
+ $title = "single_" . $this->randomName(10);
+ $form_name = 'profile_' . $title;
+ $explanation = $this->randomName(50);
+ $edit = array('category' => $my_category, 'title' => $title, 'name' => $form_name, 'explanation' => $explanation);
+ $this->drupalPost("admin/user/profile/add/url", $edit, t('Save field'), 0);
+ $fid = db_result(db_query("SELECT fid FROM {profile_fields} WHERE title = '%s'", $title));
+ $single_field = array('title' => $title, 'form_name' => $form_name, 'explanation' => $explanation);
+
+ // checking simple fields
+ $this->drupalGet("user/". $user->uid. "/edit/$my_category");
+
+ // checking field
+ $this->assertField($form_name, '');
+ // checking name
+ $this->assertText($title, "Checking title for ". $title);
+ // checking explanation
+ $this->assertText($explanation, "Checking explanation for ". $title);
+
+ // ok, now let put some data
+ unset($edit);
+ $edit = array();
+ $checking = array();
+ $edit[$form_name] = 'http://www.' . $this->randomName(10). '.org';
+ $this->drupalPost("user/". $user->uid. "/edit/$my_category", $edit, t('Save'), 0);
+ $this->drupalGet("user/". $user->uid);
+
+ // checking profile page
+ $this->assertText($edit[$form_name], "Checking ". $edit[$form_name]);
+ $this->assertText($title, "Checking $title");
+ // update field
+ $new_title = $this->randomName(20);
+ $this->drupalPost("admin/user/profile/edit/$fid", array('title' => $new_title), t('Save field'), 0);
+ $this->drupalGet("admin/user/profile");
+ $this->assertText($new_title, "Checking updated field");
+ // deleting field
+ $this->drupalPost("admin/user/profile/delete/$fid", array(), t('Delete'), 0);
+ $this->drupalGet("admin/user/profile");
+ $this->assertNoText($new_title, "Checking deleted field $title");
+
+ // delete test user and roles
+ if ($user->uid > 0) {
+ db_query('DELETE FROM {users} WHERE uid =%d', $user->uid);
+ db_query('DELETE FROM {users_roles} WHERE uid = %d', $user->uid);
+ module_invoke_all('user', 'delete', '', $user);
+ }
+
+ //delete roles
+ $edit['rid'] = $rid;
+ $this->_rolesApi('delete', $edit);
+
+ }
+}
+
+class ProfileTestSelectionTestCase extends DrupalWebTestCase {
+ function getInfo() {
+ $modules = (module_list());
+ return array('name' => 'Test selection field', 'description' => "Testing profile module with add/edit/delete new fields into profile page" , 'group' => t('Profile'));
+ }
+
+ function _rolesApi($op, $edit) {
+ if ($op == 'delete') {
+ $id = $edit['rid'];
+ db_query('DELETE FROM {role} WHERE rid = %d', $id);
+ db_query('DELETE FROM {permission} WHERE rid = %d', $id);
+
+ // Update the users who have this role set:
+ $result = db_query('SELECT DISTINCT(ur1.uid) FROM {users_roles} ur1 LEFT JOIN {users_roles} ur2 ON ur2.uid = ur1.uid WHERE ur1.rid = %d AND ur2.rid != ur1.rid', $id);
+ $uid = array();
+
+ while ($u = db_fetch_object($result)) {
+ $uid[] = $u->uid;
+ }
+
+ if ($uid) {
+ db_query('DELETE FROM {users_roles} WHERE rid = %d AND uid IN (%s)', $id, implode(', ', $uid));
+ }
+
+ // Users with only the deleted role are put back in the authenticated users pool.
+ db_query('UPDATE {users_roles} SET rid = %d WHERE rid = %d', DRUPAL_AUTHENTICATED_RID, $id);
+
+ }
+ else if ($op == 'add') {
+ if (isset($edit['name'])) {
+ db_query("INSERT INTO {role} (name) VALUES ('%s')", $edit['name']);
+ $result = db_query("SELECT rid FROM {role} WHERE name = '%s'", $edit['name']);
+ $rid = db_result($result);
+ db_query("INSERT INTO {permission} (rid, perm) VALUES (%d, '%s')", $rid, $edit['perm']);
+ return $rid;
+ }
+ else {
+ return 0;
+ }
+ }
+ }
+
+ function testProfileSingle() {
+ $this->drupalModuleEnable('profile');
+ // create test user
+ $edit['name'] = 'Profile '. $this->randomName(5);
+ $edit['perm'] = 'access content, administer users, administer site configuration, access administration pages, access configuration pages, access user profiles';
+ $rid = $this->_rolesApi('add', $edit );
+ $name = $this->randomName();
+ $pass = $this->randomName();
+ $mail = "$name@example.com";
+ unset($edit);
+ $edit['roles'] = array($rid => $rid);
+ $user = user_save('', array('name' => $name, 'pass' => $pass, 'init' => $mail, 'mail' => $mail, 'roles' => $edit['roles'], 'status' => 1));
+ //log in
+ $edit = array('name' => $name, 'pass' => $pass);
+ $this->drupalPost('user', $edit, t('Log in'), 0);
+
+ //wartosci
+ $my_category = 'Simpletest';
+ //single line textfield
+ $title = "single_" . $this->randomName(10);
+ $form_name = 'profile_' . $title;
+ $explanation = $this->randomName(50);
+ $options = "";
+ for($i = 0; $i < 3; $i++)
+ $options .= $this->randomName(8) . "\n";
+ $edit = array('category' => $my_category, 'title' => $title, 'name' => $form_name, 'explanation' => $explanation, 'options' => $options);
+ $this->drupalPost("admin/user/profile/add/selection", $edit, t('Save field'), 0);
+ $fid = db_result(db_query("SELECT fid FROM {profile_fields} WHERE title = '%s'", $title));
+ $single_field = array('title' => $title, 'form_name' => $form_name, 'explanation' => $explanation);
+
+ // checking simple fields
+ $this->drupalGet("user/". $user->uid. "/edit/$my_category");
+ // checking name
+ $this->assertText($title, "Checking title for ". $title);
+ // checking explanation
+ $this->assertText($explanation, "Checking explanation for ". $title);
+ // can we choose something which doesn't come from the list ?
+ //$this->assertFalse($this->setField('edit['.$form_name .']', $this->randomName(10)));
+ // or can we choose each of our options
+ $op_tab = explode("\n", $options,3);
+ //foreach($op_tab as $option)
+ //$this->assertTrue($this->setField($form_name, $option));
+
+
+ // ok, now let put some data
+ unset($edit);
+ $edit = array();
+ $checking = array();
+ $element = rand(0,2);
+ $key = $form_name;
+ $edit[$key] = rtrim($op_tab[$element]);
+ $this->drupalPost("user/". $user->uid. "/edit/$my_category", $edit, t('Save'), 0);
+ $this->drupalGet("user/". $user->uid);
+
+ // checking profile page
+ $this->assertText($edit[$form_name], "Checking ". $edit[$form_name]);
+ $this->assertText($title, "Checking $title");
+ // update field
+ $new_title = $this->randomName(20);
+ $this->drupalPost("admin/user/profile/edit/$fid", array('title' => $new_title), t('Save field'), 0);
+ $this->drupalGet("admin/user/profile");
+ $this->assertText($new_title, "Checking updated field");
+ // deleting field
+ $this->drupalPost("admin/user/profile/delete/$fid", array(), t('Delete'), 0);
+ $this->drupalGet("admin/user/profile");
+ $this->assertNoText($new_title, "Checking deleted field $title");
+
+ // delete test user and roles
+ if ($user->uid > 0) {
+ db_query('DELETE FROM {users} WHERE uid =%d', $user->uid);
+ db_query('DELETE FROM {users_roles} WHERE uid = %d', $user->uid);
+ module_invoke_all('user', 'delete', '', $user);
+ }
+
+ //delete roles
+ $edit['rid'] = $rid;
+ $this->_rolesApi('delete', $edit);
+
+ }
+
+}
+
+
+class ProfileTestDateTestCase extends DrupalWebTestCase {
+ function getInfo() {
+ $modules = (module_list());
+ return array('name' => 'Test date field', 'description' => "Testing profile module with add/edit/delete new fields into profile page" , 'group' => t('Profile'));
+ }
+
+ function _rolesApi($op, $edit) {
+ if ($op == 'delete') {
+ $id = $edit['rid'];
+ db_query('DELETE FROM {role} WHERE rid = %d', $id);
+ db_query('DELETE FROM {permission} WHERE rid = %d', $id);
+
+ // Update the users who have this role set:
+ $result = db_query('SELECT DISTINCT(ur1.uid) FROM {users_roles} ur1 LEFT JOIN {users_roles} ur2 ON ur2.uid = ur1.uid WHERE ur1.rid = %d AND ur2.rid != ur1.rid', $id);
+ $uid = array();
+
+ while ($u = db_fetch_object($result)) {
+ $uid[] = $u->uid;
+ }
+
+ if ($uid) {
+ db_query('DELETE FROM {users_roles} WHERE rid = %d AND uid IN (%s)', $id, implode(', ', $uid));
+ }
+
+ // Users with only the deleted role are put back in the authenticated users pool.
+ db_query('UPDATE {users_roles} SET rid = %d WHERE rid = %d', DRUPAL_AUTHENTICATED_RID, $id);
+
+ }
+ else if ($op == 'add') {
+ if (isset($edit['name'])) {
+ db_query("INSERT INTO {role} (name) VALUES ('%s')", $edit['name']);
+ $result = db_query("SELECT rid FROM {role} WHERE name = '%s'", $edit['name']);
+ $rid = db_result($result);
+ db_query("INSERT INTO {permission} (rid, perm) VALUES (%d, '%s')", $rid, $edit['perm']);
+ return $rid;
+ }
+ else {
+ return 0;
+ }
+ }
+ }
+
+ function testProfileSingle() {
+ $this->drupalModuleEnable('profile');
+ // create test user
+ $edit['name'] = 'Profile '. $this->randomName(5);
+ $edit['perm'] = 'access content, administer users, administer site configuration, access administration pages, access configuration pages, access user profiles';
+ $rid = $this->_rolesApi('add', $edit );
+ $name = $this->randomName();
+ $pass = $this->randomName();
+ $mail = "$name@example.com";
+ unset($edit);
+ $edit['roles'] = array($rid => $rid);
+ $user = user_save('', array('name' => $name, 'pass' => $pass, 'init' => $mail, 'mail' => $mail, 'roles' => $edit['roles'], 'status' => 1));
+ //log in
+ $edit = array('name' => $name, 'pass' => $pass);
+ $this->drupalPost('user', $edit, t('Log in'), 0);
+
+ //wartosci
+ $my_category = 'Simpletest';
+ //single line textfield
+ $title = "single_" . $this->randomName(10);
+ $form_name = 'profile_' . $title;
+ $explanation = $this->randomName(50);
+ /* $options = "";
+ for($i = 0; $i < 3; $i++)
+ $options .= $this->randomName(8) . "\n";*/
+ $edit = array('category' => $my_category, 'title' => $title, 'name' => $form_name, 'explanation' => $explanation);
+ $this->drupalPost("admin/user/profile/add/date", $edit, t('Save field'), 0);
+ $fid = db_result(db_query("SELECT fid FROM {profile_fields} WHERE title = '%s'", $title));
+ $single_field = array('title' => $title, 'form_name' => $form_name, 'explanation' => $explanation);
+
+ // checking simple fields
+ $this->drupalGet("user/". $user->uid. "/edit/$my_category");
+ // checking name
+ $this->assertText($title, "Checking title for ". $title);
+ // checking explanation
+ $this->assertText($explanation, "Checking explanation for ". $title);
+ // checking days/month/years
+ //foreach(array('year', 'month', 'day') as $field)
+ //$this->assertFalse($this->setField('edit['.$form_name .']['. $field .']', $this->randomName(4)), 'Checking data field ['.$field.']');
+ // ok, now let put some data
+ // date 9-01-1983
+ unset($edit);
+ foreach(array('year' => 1983, 'month' => 'Jan', 'day' => 9) as $field => $v) {
+ $key = $form_name . '[' . $field . ']';
+ $edit[$key] = $v;
+ }
+
+ list($format) = explode(' - ', variable_get('date_format_short', 'm/d/Y'), 2);
+
+ $replace = array('d' => sprintf('%02d', 9),
+ 'j' => 9,
+ 'm' => sprintf('%02d', '1'),
+ 'M' => map_month(1),
+ 'Y' => 1983);
+ $data = strtr($format, $replace);
+ $this->drupalPost("user/". $user->uid. "/edit/$my_category", $edit, t('Save'), 0);
+ $this->drupalGet("user/". $user->uid);
+
+ // checking profile page
+ $this->assertText($data, "Checking date $data");
+ $this->assertText($title, "Checking $title");
+ // update field
+ $new_title = $this->randomName(20);
+ $this->drupalPost("admin/user/profile/edit/$fid", array('title' => $new_title), t('Save field'), 0);
+ $this->drupalGet("admin/user/profile");
+ $this->assertText($new_title, "Checking updated field");
+ // deleting field
+ $this->drupalPost("admin/user/profile/delete/$fid", array(), t('Delete'), 0);
+ $this->drupalGet("admin/user/profile");
+ $this->assertNoText($new_title, "Checking deleted field $title");
+
+ // delete test user and roles
+ if ($user->uid > 0) {
+ db_query('DELETE FROM {users} WHERE uid =%d', $user->uid);
+ db_query('DELETE FROM {users_roles} WHERE uid = %d', $user->uid);
+ module_invoke_all('user', 'delete', '', $user);
+ }
+
+ //delete roles
+ $edit['rid'] = $rid;
+ $this->_rolesApi('delete', $edit);
+
+ }
+
+}
+
+
+class ProfileTest2TestCase extends DrupalWebTestCase {
+ function getInfo() {
+ $modules = (module_list());
+ return array('name' => 'Test other fields', 'description' => "Testing weight, title page, required" , 'group' => t('Profile'));
+ }
+
+ function _rolesApi($op, $edit) {
+ if ($op == 'delete') {
+ $id = $edit['rid'];
+ db_query('DELETE FROM {role} WHERE rid = %d', $id);
+ db_query('DELETE FROM {permission} WHERE rid = %d', $id);
+
+ // Update the users who have this role set:
+ $result = db_query('SELECT DISTINCT(ur1.uid) FROM {users_roles} ur1 LEFT JOIN {users_roles} ur2 ON ur2.uid = ur1.uid WHERE ur1.rid = %d AND ur2.rid != ur1.rid', $id);
+ $uid = array();
+
+ while ($u = db_fetch_object($result)) {
+ $uid[] = $u->uid;
+ }
+
+ if ($uid) {
+ db_query('DELETE FROM {users_roles} WHERE rid = %d AND uid IN (%s)', $id, implode(', ', $uid));
+ }
+
+ // Users with only the deleted role are put back in the authenticated users pool.
+ db_query('UPDATE {users_roles} SET rid = %d WHERE rid = %d', DRUPAL_AUTHENTICATED_RID, $id);
+
+ }
+ else if ($op == 'add') {
+ if (isset($edit['name'])) {
+ db_query("INSERT INTO {role} (name) VALUES ('%s')", $edit['name']);
+ $result = db_query("SELECT rid FROM {role} WHERE name = '%s'", $edit['name']);
+ $rid = db_result($result);
+ db_query("INSERT INTO {permission} (rid, perm) VALUES (%d, '%s')", $rid, $edit['perm']);
+ return $rid;
+ }
+ else {
+ return 0;
+ }
+ }
+
+ }
+
+ function testProfileOtherFields() {
+ $this->drupalModuleEnable('profile');
+ // create test user
+ $edit['name'] = 'Profile '. $this->randomName(5);
+ $edit['perm'] = 'access content, administer users, access user profiles, administer site configuration, access administration pages, access configuration pages, access user profiles';
+ $rid = $this->_rolesApi('add', $edit );
+ $name = $this->randomName();
+ $pass = $this->randomName();
+ $mail = "$name@example.com";
+ unset($edit);
+ $edit['roles'] = array($rid => $rid);
+ $user = user_save('', array('name' => $name, 'pass' => $pass, 'init' => $mail, 'mail' => $mail, 'roles' => $edit['roles'], 'status' => 1));
+ //log in
+ $edit = array('name' => $name, 'pass' => $pass);
+ $this->drupalPost('user', $edit, t('Log in'), 0);
+ //wartosci
+ $my_category = $this->randomName(10);
+ //single line textfield
+ $title = "first_" . $this->randomName(10);
+ $form_name = 'profile_' . $title;
+ // weight
+ $weight = 3;
+ $edit = array('category' => $my_category, 'title' => $title, 'name' => $form_name, 'weight' => $weight, 'required' => 1);
+ $this->drupalPost("admin/user/profile/add/textfield", $edit, t('Save field'), 0);
+ $fid = db_result(db_query('SELECT fid FROM {profile_fields} WHERE title = "%s"', $title));
+ $sfield1 = array('fid'=> $fid, 'title' => $title);
+ //second one line textfield
+ $title = "second_" . $this->randomName(10);
+ $form_name = 'profile_' . $title;
+ // weight
+ $weight = -2;
+ $edit = array('category' => $my_category, 'title' => $title, 'name' => $form_name, 'weight' => $weight, 'register' => 1, 'required' => 1);
+ $this->drupalPost("admin/user/profile/add/textfield", $edit, t('Save field'), 0);
+ $fid = db_result(db_query('SELECT fid FROM {profile_fields} WHERE title = "%s"', $title));
+ $sfield2 = array('fid'=> $fid, 'title' => $title);
+ // checking
+ $this->drupalGet("user/". $user->uid. "/edit/$my_category");
+ $content = $this->drupalGetContent();
+ $pos1 = strpos($content, $sfield1['title']);
+ $pos2 = strpos($content, $sfield2['title']);
+ $this->assertTrue($pos2 < $pos1, 'Checking weight field');
+ $delete_fields = array();
+ $delete_fields[] = $sfield1['fid'];
+ $delete_fields[] = $sfield2['fid'];
+ // check if this field is visible in registration form
+ // logout
+ $this->drupalGet("logout");
+ $this->drupalGet("user/register");
+ $this->assertNoText($sfield1['title'], 'Field is not visible in registration form');
+ $this->assertText($sfield2['title'], 'Field is visible in registration form');
+ // try to register
+ $fname = $this->randomName(5, 'simpletest_');
+ $fmail = "$fname@drupaltest.example.com";
+ $edit = array('name' => $fname,
+ 'mail' => $fmail);
+ $this->drupalPost('user/register', $edit, t('Create new account'), 0);
+ //$key = t('The field %field is required.', array('%field' => $title));
+ //$this->assertText($key, 'Checking error message');
+ //log in
+ $edit = array('name' => $name, 'pass' => $pass);
+ $this->drupalPost('user', $edit, t('Log in'), 0);
+ // TITLE
+ //selection
+ $title = $this->randomName(10);
+ $form_name = 'profile_' . $title;
+ $page_title = $this->randomName(5) . " %value";
+ $options = "";
+ for($i = 0; $i < 3; $i++)
+ $options .= $this->randomName(8) . "\n";
+ $edit = array('category' => $my_category, 'title' => $title, 'name' => $form_name, 'page' => $page_title, 'options' => $options);
+ $this->drupalPost("admin/user/profile/add/selection", $edit, t('Save field'), 0);
+ $fid = db_result(db_query('SELECT fid FROM {profile_fields} WHERE title = "%s"', $title));
+ $element = rand(0,2);
+ $op_tab = explode("\n", $options,3);
+ $choice = rtrim($op_tab[$element]);
+ // checking
+ $this->drupalGet("profile/". $form_name. "/$choice");
+ $title = str_replace("%value", $choice, $page_title);
+
+ $this->assertTitle($title. ' | '. variable_get('site_name', 'Drupal'), "Checking title $title");
+ $this->assertText($title, "Checking $title in content");
+ $delete_fields[] = $fid;
+
+ foreach($delete_fields as $delfid) {
+ $this->drupalPost("admin/user/profile/delete/".$delfid, array(), t('Delete'), 0 );
+ }
+ // delete test user and roles
+ if ($user->uid > 0) {
+ db_query('DELETE FROM {users} WHERE uid =' .
+ ' %d', $user->uid);
+ db_query('DELETE FROM {users_roles} WHERE uid = %d', $user->uid);
+ module_invoke_all('user', 'delete', '', $user);
+ }
+ //delete roles
+ $edit['rid'] = $rid;
+ $this->_rolesApi('delete', $edit);
+
+ }
+}
+
+?>