Commit | Line | Data |
---|---|---|
6a488035 TO |
1 | #!/bin/bash |
2 | set -ex | |
3 | ||
4 | ## Setup a Drupal site with CiviCRM configured for unit-testing. | |
5 | ## If a site already exists, destroy and recreate it. | |
6 | ## Usage: mk-drupal-test-site <domain.name> <db_name> </path/to/drupal> </path/to/civi> | |
7 | ||
8 | ## Pre-requisites: | |
9 | ## - MySQL admin credentials in ~/.my.cnf | |
10 | ## - Apache vhost with mod_rewrite, etc | |
11 | ## - DNS or /etc/hosts entries for "url" | |
12 | ## - Drupal source tree | |
13 | ## - CiviCRM source tree (outside the drupal root) | |
14 | ## - makepasswd | |
15 | ## - drush | |
16 | ## - (strongly recommended) filesystem with "acl" support | |
17 | ||
18 | SITE_URL="$1" | |
19 | DB_NAME="$2" | |
20 | DB_USER="$DB_NAME" | |
21 | DB_PASS=$(makepasswd --chars=12) | |
22 | DB_HOST=localhost | |
23 | DRUPAL_ROOT="$3" | |
24 | CIVI_ROOT="$4" | |
25 | FACL_USERS="www-data $(whoami)" | |
26 | ||
27 | SITE_KEY=$(makepasswd --chars=16) | |
28 | ADMIN_USER="admin" | |
29 | ADMIN_PASS=$(makepasswd --chars=12) | |
30 | ||
31 | if [ -z "$CIVI_ROOT" -o ! -d "$CIVI_ROOT/bin" ]; then | |
32 | echo "Failed to locate civi root: $CIVI_ROOT" | |
33 | exit 1 | |
34 | fi | |
35 | ||
36 | if [ -z "$DB_NAME" ]; then | |
37 | echo "Missing database name" | |
38 | exit 2 | |
39 | fi | |
40 | ||
41 | ## Create database | |
42 | echo "DROP DATABASE IF EXISTS $DB_NAME" | mysql | |
43 | echo "CREATE DATABASE $DB_NAME" | mysql | |
44 | echo "GRANT ALL ON ${DB_NAME}.* TO '${DB_USER}'@'localhost' IDENTIFIED BY '${DB_PASS}'" | mysql | |
45 | echo "GRANT SUPER ON *.* TO '${DB_USER}'@'localhost'" | mysql | |
46 | ||
47 | ## Create Drupal site | |
48 | pushd "$DRUPAL_ROOT" | |
49 | if [ -d "sites/$SITE_URL" ]; then | |
50 | chmod u+w "sites/$SITE_URL" | |
51 | rm -rf "sites/$SITE_URL" | |
52 | fi | |
53 | drush site-install -y \ | |
54 | --db-url="mysql://${DB_USER}:${DB_PASS}@${DB_HOST}/${DB_NAME}" \ | |
55 | --account-name="$ADMIN_USER" \ | |
56 | --account-pass="$ADMIN_PASS" \ | |
57 | --sites-subdir="$SITE_URL" | |
58 | chmod u+w "sites/$SITE_URL" | |
59 | ||
60 | ## Allow shell and WWW users to both manipulate "files" directory | |
61 | if which setfacl; then | |
62 | for FACL_USER in $FACL_USERS ; do | |
63 | find "$DRUPAL_ROOT/sites/${SITE_URL}/files" -type d | xargs setfacl -m u:${FACL_USER}:rwx -m d:u:${FACL_USER}:rwx | |
64 | done | |
65 | fi | |
66 | ||
67 | ## Create Drupal-CiviCRM dirs and config | |
68 | for SUBDIR in modules files files/civicrm files/civicrm/templates_c ; do | |
69 | if [ ! -d "sites/${SITE_URL}/${SUBDIR}" ]; then | |
70 | mkdir "sites/${SITE_URL}/${SUBDIR}" | |
71 | fi | |
72 | done | |
73 | ||
74 | ln -s "$CIVI_ROOT" "sites/$SITE_URL/modules/" | |
75 | ||
76 | cat "$CIVI_ROOT/templates/CRM/common/civicrm.settings.php.tpl" \ | |
77 | | sed "s;%%baseURL%%;http://${SITE_URL};" \ | |
78 | | sed "s;%%cms%%;Drupal;" \ | |
79 | | sed "s;%%CMSdbHost%%;${DB_HOST};" \ | |
80 | | sed "s;%%CMSdbName%%;${DB_NAME};" \ | |
81 | | sed "s;%%CMSdbPass%%;${DB_PASS};" \ | |
82 | | sed "s;%%CMSdbUser%%;${DB_USER};" \ | |
83 | | sed "s;%%crmRoot%%;${DRUPAL_ROOT}/sites/${SITE_URL}/modules/civicrm;" \ | |
84 | | sed "s;%%dbHost%%;${DB_HOST};" \ | |
85 | | sed "s;%%dbName%%;${DB_NAME};" \ | |
86 | | sed "s;%%dbPass%%;${DB_PASS};" \ | |
87 | | sed "s;%%dbUser%%;${DB_USER};" \ | |
88 | | sed "s;%%siteKey%%;${SITE_KEY};" \ | |
89 | | sed "s;%%templateCompileDir%%;${DRUPAL_ROOT}/sites/${SITE_URL}/files/civicrm/templates_c;" \ | |
90 | > "sites/$SITE_URL/civicrm.settings.php" | |
91 | ||
92 | popd | |
93 | ||
94 | ## Create CiviCRM config | |
95 | cat > "$CIVI_ROOT/bin/setup.conf" << EOF | |
96 | SVNROOT="$CIVI_ROOT" | |
97 | SCHEMA=schema/Schema.xml | |
98 | DBNAME="$DB_NAME" | |
99 | DBUSER="$DB_USER" | |
100 | DBPASS="$DB_PASS" | |
101 | DBARGS="" | |
102 | PHP5PATH= | |
103 | DBLOAD= | |
104 | # DBADD= | |
105 | EOF | |
106 | ||
107 | cat > "$CIVI_ROOT/tests/phpunit/CiviTest/civicrm.settings.local.php" << EOF | |
108 | <?php | |
109 | define('CIVICRM_DSN', "mysql://${DB_USER}:${DB_PASS}@${DB_HOST}/${DB_NAME}"); | |
110 | define('CIVICRM_TEMPLATE_COMPILEDIR', '${DRUPAL_ROOT}/sites/${SITE_URL}/files/civicrm/templates_c'); | |
111 | define('DONT_DOCUMENT_TEST_CONFIG', TRUE); | |
112 | EOF | |
113 | ||
114 | cat > "$CIVI_ROOT/tests/phpunit/CiviTest/CiviSeleniumSettings.php" << EOF | |
115 | <?php | |
116 | class CiviSeleniumSettings { | |
117 | var \$publicSandbox = false; | |
118 | var \$browser = '*firefox'; | |
119 | var \$sandboxURL = 'http://${SITE_URL}'; | |
120 | var \$sandboxPATH = ''; | |
121 | var \$username = 'demo'; | |
122 | var \$password = 'demo'; | |
123 | var \$adminUsername = '${ADMIN_USER}'; | |
124 | var \$adminPassword = '${ADMIN_PASS}'; | |
125 | var \$UFemail = 'noreply@civicrm.org'; | |
126 | function __construct() { | |
127 | \$this->fullSandboxPath = \$this->sandboxURL . \$this->sandboxPATH; | |
128 | } | |
129 | } | |
130 | ||
131 | EOF | |
132 | ||
133 | pushd "$CIVI_ROOT" | |
134 | ./bin/setup.sh | |
135 | popd | |
136 | ||
137 | pushd "$DRUPAL_ROOT" | |
138 | drush -l "${SITE_URL}" -y pm-enable civicrm | |
139 | drush -l "${SITE_URL}" -y pm-enable civicrm_webtest | |
140 | drush -l "${SITE_URL}" -y user-create --password=demo --mail='demo@example.com' demo | |
141 | drush -l "${SITE_URL}" -y user-add-role civicrm_webtest_user demo | |
142 | popd |