forked from drush-ops/drush
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpmUpdateStatusTest.php
182 lines (160 loc) · 6.27 KB
/
pmUpdateStatusTest.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
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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
<?php
/**
* @file
* Prepare a codebase with modules in several update status and test pm-updatestatus.
*/
namespace Unish;
/**
* @group slow
* @group pm
*/
class pmUpdateStatus extends CommandUnishTestCase {
/**
* Setup the test environment.
*
* Here we assume that any Drupal core version parses data from Drupal's
* update service the same way. We focus on testing drush functionality.
*
* Several drupal core versions are already tested by pmUpdateCode.
*
* We choose to setup a Drupal 7 environment for convenience:
* - It has modules in each maintenance status
* and they're not willing to change in short
* - Drupal 8 still has not enough variety to cover the tests
*/
function setUp() {
$sites = $this->setUpDrupal(1, TRUE, "7.30");
$options = array(
'root' => $this->webroot(),
'uri' => key($sites),
'yes' => NULL,
'cache' => NULL,
'skip' => NULL, // No FirePHP
'strict' => 0,
);
// Prepare a list of modules with several update statuses.
$modules_dl = array();
$modules_en = array();
// Update available but not a security one. Cross fingers they never release a security update.
$modules_dl[] = 'bad_judgement-1.0-rc38';
$modules_en[] = 'bad_judgement';
// Old devel release with a security update available.
$modules_dl[] = 'devel-7.x-1.0-rc1';
$modules_en[] = 'devel';
// Installed version not supported.
$modules_dl[] = 'cck-2.x-dev';
$modules_en[] = 'cck';
// Up to date.
$modules_dl[] = 'ctools';
$modules_en[] = 'ctools';
// Download and enable the modules. Additionally download a module from git, so it has no version information.
$this->drush('pm-download', $modules_dl, $options);
$this->drush('pm-download', array('zen'), $options + array('package-handler' => 'git_drupalorg'));
$modules_en[] = 'zen';
// self::EXIT_ERROR because of bad_judgement.
$this->drush('pm-enable', $modules_en, $options, NULL, NULL, self::EXIT_ERROR);
}
/**
* Test several update statuses via drupal backend.
*/
function testUpdateStatusDrupal() {
$this->doTest('drupal');
}
/**
* Test several update statuses via drush backend.
*/
function testUpdateStatusDrush() {
$this->doTest('drush');
}
function doTest($update_backend) {
// Test several projects with a variety of statuses.
$options = array(
'root' => $this->webroot(),
'uri' => key($this->getSites()),
'verbose' => NULL,
'backend' => NULL,
'update-backend' => $update_backend,
);
$this->drush('pm-updatestatus', array(), $options);
$parsed = $this->parse_backend_output($this->getOutput());
$data = $parsed['object'];
$expected = array(
'drupal' => 'SECURITY UPDATE available',
'bad_judgement' => 'Update available',
'ctools' => 'Up to date',
'devel' => 'SECURITY UPDATE available',
'cck' => 'Installed version not supported',
'zen' => 'Project was not packaged by drupal.org but obtained from git. You need to enable git_deploy module',
);
foreach ($expected as $module => $status_msg) {
$this->assertArrayHasKey($module, $data, "$module module present in pm-updatestatus output");
$this->assertEquals($data[$module]['status_msg'], $status_msg, "$module status is '$status_msg'");
}
// Test statuses when asked for specific projects and versions.
$args = array(
'bad_judgement-1.0-rc38',
'ctools-0.0',
'devel-1.5',
'foo',
);
$this->drush('pm-updatestatus', $args, $options);
$parsed = $this->parse_backend_output($this->getOutput());
$data = $parsed['object'];
$expected = array(
'bad_judgement' => 'Specified version already installed',
'ctools' => 'Specified version not found',
'devel' => 'Specified version available',
'foo' => 'Specified project not found',
);
foreach ($expected as $module => $status_msg) {
$this->assertArrayHasKey($module, $data, "$module module present in pm-updatestatus output");
$this->assertEquals($data[$module]['status_msg'], $status_msg, "$module status is '$status_msg'");
}
// We don't expect any output for other projects than the provided ones.
$not_expected = array(
'drupal',
'cck',
'zen',
);
foreach ($not_expected as $module) {
$this->assertArrayNotHasKey($module, $data, "$module module not present in pm-updatestatus output");
}
// Test --security-only.
$this->drush('pm-updatestatus', array(), $options + array('security-only' => NULL));
$parsed = $this->parse_backend_output($this->getOutput());
$data = $parsed['object'];
$expected = array(
'drupal' => 'SECURITY UPDATE available',
'devel' => 'SECURITY UPDATE available',
);
foreach ($expected as $module => $status_msg) {
$this->assertArrayHasKey($module, $data, "$module module present in pm-updatestatus output");
$this->assertEquals($data[$module]['status_msg'], $status_msg, "$module status is '$status_msg'");
}
// We don't expect any output for projects without security updates.
$not_expected = array(
'bad_judgement',
'ctools',
'cck',
'zen',
);
foreach ($not_expected as $module) {
$this->assertArrayNotHasKey($module, $data, "$module module not present in pm-updatestatus output");
}
// Test --check-disabled.
$dis_options = array(
'root' => $this->webroot(),
'uri' => key($this->getSites()),
'yes' => NULL,
);
$this->drush('pm-disable', array('devel'), $dis_options);
$this->drush('pm-updatestatus', array(), $options + array('check-disabled' => 1));
$parsed = $this->parse_backend_output($this->getOutput());
$data = $parsed['object'];
$this->assertArrayHasKey('devel', $data, "devel module present in pm-updatestatus output");
$this->drush('pm-updatestatus', array(), $options + array('check-disabled' => 0));
$parsed = $this->parse_backend_output($this->getOutput());
$data = $parsed['object'];
$this->assertArrayNotHasKey('devel', $data, "devel module not present in pm-updatestatus output");
}
}