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