Merge pull request #803 from pratik-joshi/CRM-11310
[civicrm-core.git] / tools / scripts / mk-drupal-test-site
CommitLineData
6a488035
TO
1#!/bin/bash
2set -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
18SITE_URL="$1"
19DB_NAME="$2"
20DB_USER="$DB_NAME"
21DB_PASS=$(makepasswd --chars=12)
22DB_HOST=localhost
23DRUPAL_ROOT="$3"
24CIVI_ROOT="$4"
25FACL_USERS="www-data $(whoami)"
26
27SITE_KEY=$(makepasswd --chars=16)
28ADMIN_USER="admin"
29ADMIN_PASS=$(makepasswd --chars=12)
30
31if [ -z "$CIVI_ROOT" -o ! -d "$CIVI_ROOT/bin" ]; then
32 echo "Failed to locate civi root: $CIVI_ROOT"
33 exit 1
34fi
35
36if [ -z "$DB_NAME" ]; then
37 echo "Missing database name"
38 exit 2
39fi
40
41## Create database
42echo "DROP DATABASE IF EXISTS $DB_NAME" | mysql
43echo "CREATE DATABASE $DB_NAME" | mysql
44echo "GRANT ALL ON ${DB_NAME}.* TO '${DB_USER}'@'localhost' IDENTIFIED BY '${DB_PASS}'" | mysql
45echo "GRANT SUPER ON *.* TO '${DB_USER}'@'localhost'" | mysql
46
47## Create Drupal site
48pushd "$DRUPAL_ROOT"
49if [ -d "sites/$SITE_URL" ]; then
50 chmod u+w "sites/$SITE_URL"
51 rm -rf "sites/$SITE_URL"
52fi
53drush 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"
58chmod u+w "sites/$SITE_URL"
59
60## Allow shell and WWW users to both manipulate "files" directory
61if 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
65fi
66
67## Create Drupal-CiviCRM dirs and config
68for 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
72done
73
74ln -s "$CIVI_ROOT" "sites/$SITE_URL/modules/"
75
76cat "$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
dfd90a3a
TO
92echo >> "sites/$SITE_URL/civicrm.settings.php"
93echo "define('CIVICRM_MAIL_LOG', '/dev/null');" >> "sites/$SITE_URL/civicrm.settings.php"
6a488035
TO
94popd
95
96## Create CiviCRM config
97cat > "$CIVI_ROOT/bin/setup.conf" << EOF
98 SVNROOT="$CIVI_ROOT"
99 SCHEMA=schema/Schema.xml
100 DBNAME="$DB_NAME"
101 DBUSER="$DB_USER"
102 DBPASS="$DB_PASS"
103 DBARGS=""
104 PHP5PATH=
105 DBLOAD=
106 # DBADD=
107EOF
108
109cat > "$CIVI_ROOT/tests/phpunit/CiviTest/civicrm.settings.local.php" << EOF
110<?php
111define('CIVICRM_DSN', "mysql://${DB_USER}:${DB_PASS}@${DB_HOST}/${DB_NAME}");
112define('CIVICRM_TEMPLATE_COMPILEDIR', '${DRUPAL_ROOT}/sites/${SITE_URL}/files/civicrm/templates_c');
113define('DONT_DOCUMENT_TEST_CONFIG', TRUE);
114EOF
115
116cat > "$CIVI_ROOT/tests/phpunit/CiviTest/CiviSeleniumSettings.php" << EOF
117<?php
118class CiviSeleniumSettings {
119 var \$publicSandbox = false;
120 var \$browser = '*firefox';
121 var \$sandboxURL = 'http://${SITE_URL}';
122 var \$sandboxPATH = '';
123 var \$username = 'demo';
124 var \$password = 'demo';
125 var \$adminUsername = '${ADMIN_USER}';
126 var \$adminPassword = '${ADMIN_PASS}';
dc13c338
TO
127 var \$adminApiKey = 'apikey${ADMIN_PASS}';
128 var \$siteKey = '${SITE_KEY}';
6a488035
TO
129 var \$UFemail = 'noreply@civicrm.org';
130 function __construct() {
131 \$this->fullSandboxPath = \$this->sandboxURL . \$this->sandboxPATH;
132 }
133}
134
135EOF
136
137pushd "$CIVI_ROOT"
138./bin/setup.sh
139popd
140
141pushd "$DRUPAL_ROOT"
142drush -l "${SITE_URL}" -y pm-enable civicrm
143drush -l "${SITE_URL}" -y pm-enable civicrm_webtest
144drush -l "${SITE_URL}" -y user-create --password=demo --mail='demo@example.com' demo
145drush -l "${SITE_URL}" -y user-add-role civicrm_webtest_user demo
dc13c338 146drush -l "${SITE_URL}" -y -u "$ADMIN_USER" civicrm-api contact.create id=user_contact_id api_key="apikey$ADMIN_PASS"
6a488035 147popd