forked from drush-ops/drush
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsqlSyncTest.php
116 lines (103 loc) · 3.8 KB
/
sqlSyncTest.php
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
<?php
/**
* @file
* For now we only test sql-sync in simulated mode.
*
* Future: Using two copies of Drupal, we could test
* overwriting one site with another.
*/
namespace Unish;
/**
* @group slow
* @group commands
* @group sql
*/
class sqlSyncTest extends CommandUnishTestCase {
/**
* Covers the following responsibilities.
* - A user created on the source site is copied to the destination site.
* - The email address of the copied user is sanitized on the destination site.
*
* General handling of site aliases will be in sitealiasTest.php.
*/
public function testLocalSqlSync() {
if ($this->db_driver() == 'sqlite') {
$this->markTestSkipped('SQL Sync does not apply to SQLite.');
return;
}
$sites = $this->setUpDrupal(2, TRUE);
return $this->localSqlSync();
}
/**
* Do the same test as above, but use Drupal 6 sites instead of Drupal 7.
*/
public function testLocalSqlSyncD6() {
if (UNISH_DRUPAL_MAJOR_VERSION != 6) {
$this->markTestSkipped('This test class is designed for Drupal 6.');
return;
}
chdir(UNISH_TMP); // Avoids perm denied Windows error.
$this->setUpBeforeClass();
$sites = $this->setUpDrupal(2, TRUE, '6');
return $this->localSqlSync();
}
public function localSqlSync() {
// Create a user in the staging site
$name = 'joe.user';
$mail = "joe.user@myhome.com";
$options = array(
'root' => $this->webroot(),
'uri' => 'stage',
'yes' => NULL,
);
$this->drush('user-create', array($name), $options + array('password' => 'password', 'mail' => $mail));
// Copy stage to dev with --sanitize.
$sync_options = array(
'sanitize' => NULL,
'yes' => NULL,
// @todo test wildcards expansion from within sql-sync.
// 'skip-tables-list' => 'role_permiss*',
);
$this->drush('sql-sync', array('@stage', '@dev'), $sync_options);
// Confirm that the sample user has the correct email address on the staging site
$this->drush('user-information', array($name), $options + array('pipe' => NULL));
$output = $this->getOutput();
$row = str_getcsv($output);
$uid = $row[1];
$this->assertEquals($mail, $row[2], 'email address is unchanged on source site.');
$this->assertEquals($name, $row[0]);
$options = array(
'root' => $this->webroot(),
'uri' => 'dev',
'yes' => NULL,
);
// Confirm that the sample user's email address has been sanitized on the dev site
$this->drush('user-information', array($name), $options + array('pipe' => NULL));
$output = $this->getOutput();
$row = str_getcsv($output);
$uid = $row[1];
$this->assertEquals("user+$uid@localhost.localdomain", $row[2], 'email address was sanitized on destination site.');
$this->assertEquals($name, $row[0]);
// @todo Confirm that the role_permissions table no longer exists in dev site (i.e. wildcard expansion works in sql-sync).
// $this->drush('sql-query', array('SELECT * FROM role_permission'), $options, NULL, NULL, self::EXIT_ERROR);
// Copy stage to dev with --sanitize and a fixed sanitized email
$sync_options = array(
'sanitize' => NULL,
'yes' => NULL,
'sanitize-email' => 'user@mysite.org',
);
$this->drush('sql-sync', array('@stage', '@dev'), $sync_options);
$options = array(
'root' => $this->webroot(),
'uri' => 'dev',
'yes' => NULL,
);
// Confirm that the sample user's email address has been sanitized on the dev site
$this->drush('user-information', array($name), $options + array('pipe' => NULL));
$output = $this->getOutput();
$row = str_getcsv($output);
$uid = $row[1];
$this->assertEquals("user@mysite.org", $row[2], 'email address was sanitized (fixed email) on destination site.');
$this->assertEquals($name, $row[0]);
}
}