danielebarchiesi@4
|
1 <?php
|
danielebarchiesi@4
|
2
|
danielebarchiesi@4
|
3 /**
|
danielebarchiesi@4
|
4 * User permission component tests for Features
|
danielebarchiesi@4
|
5 */
|
danielebarchiesi@4
|
6 class FeaturesUserTestCase extends DrupalWebTestCase {
|
danielebarchiesi@4
|
7 protected $profile = 'testing';
|
danielebarchiesi@4
|
8
|
danielebarchiesi@4
|
9 /**
|
danielebarchiesi@4
|
10 * Test info.
|
danielebarchiesi@4
|
11 */
|
danielebarchiesi@4
|
12 public static function getInfo() {
|
danielebarchiesi@4
|
13 return array(
|
danielebarchiesi@4
|
14 'name' => t('Component tests'),
|
danielebarchiesi@4
|
15 'description' => t('Run tests for components of Features.') ,
|
danielebarchiesi@4
|
16 'group' => t('Features'),
|
danielebarchiesi@4
|
17 );
|
danielebarchiesi@4
|
18 }
|
danielebarchiesi@4
|
19
|
danielebarchiesi@4
|
20 /**
|
danielebarchiesi@4
|
21 * Set up test.
|
danielebarchiesi@4
|
22 */
|
danielebarchiesi@4
|
23 public function setUp() {
|
danielebarchiesi@4
|
24 parent::setUp(array(
|
danielebarchiesi@4
|
25 'field',
|
danielebarchiesi@4
|
26 'filter',
|
danielebarchiesi@4
|
27 'image',
|
danielebarchiesi@4
|
28 'taxonomy',
|
danielebarchiesi@4
|
29 'views',
|
danielebarchiesi@4
|
30 'features',
|
danielebarchiesi@4
|
31 'features_test'
|
danielebarchiesi@4
|
32 ));
|
danielebarchiesi@4
|
33
|
danielebarchiesi@4
|
34 // Run a features rebuild to ensure our feature is fully installed.
|
danielebarchiesi@4
|
35 features_rebuild();
|
danielebarchiesi@4
|
36
|
danielebarchiesi@4
|
37 $admin_user = $this->drupalCreateUser(array('administer features'));
|
danielebarchiesi@4
|
38 $this->drupalLogin($admin_user);
|
danielebarchiesi@4
|
39 }
|
danielebarchiesi@4
|
40
|
danielebarchiesi@4
|
41 /**
|
danielebarchiesi@4
|
42 * Run test.
|
danielebarchiesi@4
|
43 */
|
danielebarchiesi@4
|
44 public function test() {
|
danielebarchiesi@4
|
45 module_load_include('inc', 'features', 'features.export');
|
danielebarchiesi@4
|
46
|
danielebarchiesi@4
|
47 $components = array_filter(array(
|
danielebarchiesi@4
|
48 'field_instance' => 'field',
|
danielebarchiesi@4
|
49 'filter' => 'filter',
|
danielebarchiesi@4
|
50 'image' => 'image',
|
danielebarchiesi@4
|
51 'node' => 'node',
|
danielebarchiesi@4
|
52 'user_permission' => 'user',
|
danielebarchiesi@4
|
53 'views_view' => 'views',
|
danielebarchiesi@4
|
54 ), 'module_exists');
|
danielebarchiesi@4
|
55
|
danielebarchiesi@4
|
56 foreach (array_keys($components) as $component) {
|
danielebarchiesi@4
|
57 $callback = "_test_{$component}";
|
danielebarchiesi@4
|
58
|
danielebarchiesi@4
|
59 // Ensure that the component/default is properly available.
|
danielebarchiesi@4
|
60 $object = $this->$callback('load');
|
danielebarchiesi@4
|
61 $this->assertTrue(!empty($object), t('@component present.', array('@component' => $component)));
|
danielebarchiesi@4
|
62
|
danielebarchiesi@4
|
63 // Ensure that the component is defaulted.
|
danielebarchiesi@4
|
64 $states = features_get_component_states(array('features_test'), FALSE, TRUE);
|
danielebarchiesi@4
|
65 $this->assertTrue($states['features_test'][$component] === FEATURES_DEFAULT, t('@component state: Default.', array('@component' => $component)));
|
danielebarchiesi@4
|
66
|
danielebarchiesi@4
|
67 // Override component and test that Features detects the override.
|
danielebarchiesi@4
|
68 $this->$callback('override', $this);
|
danielebarchiesi@4
|
69 $states = features_get_component_states(array('features_test'), FALSE, TRUE);
|
danielebarchiesi@4
|
70 $this->assertTrue($states['features_test'][$component] === FEATURES_OVERRIDDEN, t('@component state: Overridden.', array('@component' => $component)));
|
danielebarchiesi@4
|
71 }
|
danielebarchiesi@4
|
72
|
danielebarchiesi@4
|
73 // Revert component and ensure that component has reverted.
|
danielebarchiesi@4
|
74 // Do this in separate loops so we only have to run
|
danielebarchiesi@4
|
75 // drupal_flush_all_caches() once.
|
danielebarchiesi@4
|
76 foreach (array_keys($components) as $component) {
|
danielebarchiesi@4
|
77 features_revert(array('features_test' => array($component)));
|
danielebarchiesi@4
|
78 }
|
danielebarchiesi@4
|
79 drupal_flush_all_caches();
|
danielebarchiesi@4
|
80 foreach (array_keys($components) as $component) {
|
danielebarchiesi@4
|
81 // Reload so things like Views can clear it's cache
|
danielebarchiesi@4
|
82 $this->$callback('load');
|
danielebarchiesi@4
|
83 $states = features_get_component_states(array('features_test'), FALSE, TRUE);
|
danielebarchiesi@4
|
84 $this->assertTrue($states['features_test'][$component] === FEATURES_DEFAULT, t('@component reverted.', array('@component' => $component)));
|
danielebarchiesi@4
|
85 }
|
danielebarchiesi@4
|
86 }
|
danielebarchiesi@4
|
87
|
danielebarchiesi@4
|
88 protected function _test_field_instance($op = 'load') {
|
danielebarchiesi@4
|
89 switch ($op) {
|
danielebarchiesi@4
|
90 case 'load':
|
danielebarchiesi@4
|
91 return field_info_instance('node', 'field_features_test', 'features_test');
|
danielebarchiesi@4
|
92 case 'override':
|
danielebarchiesi@4
|
93 $field_instance = field_info_instance('node', 'field_features_test', 'features_test');
|
danielebarchiesi@4
|
94 $field_instance['label'] = 'Foo bar';
|
danielebarchiesi@4
|
95 field_update_instance($field_instance);
|
danielebarchiesi@4
|
96 break;
|
danielebarchiesi@4
|
97 }
|
danielebarchiesi@4
|
98 }
|
danielebarchiesi@4
|
99
|
danielebarchiesi@4
|
100 protected function _test_filter($op = 'load') {
|
danielebarchiesi@4
|
101 // So... relying on our own API functions to test is pretty lame.
|
danielebarchiesi@4
|
102 // But these modules don't have APIs either. So might as well use
|
danielebarchiesi@4
|
103 // the ones we've written for them...
|
danielebarchiesi@4
|
104 features_include();
|
danielebarchiesi@4
|
105 switch ($op) {
|
danielebarchiesi@4
|
106 case 'load':
|
danielebarchiesi@4
|
107 return features_filter_format_load('features_test');
|
danielebarchiesi@4
|
108 case 'override':
|
danielebarchiesi@4
|
109 $format = features_filter_format_load('features_test');
|
danielebarchiesi@4
|
110 unset($format->filters['filter_url']);
|
danielebarchiesi@4
|
111 filter_format_save($format);
|
danielebarchiesi@4
|
112 break;
|
danielebarchiesi@4
|
113 }
|
danielebarchiesi@4
|
114 }
|
danielebarchiesi@4
|
115
|
danielebarchiesi@4
|
116 protected function _test_image($op = 'load') {
|
danielebarchiesi@4
|
117 switch ($op) {
|
danielebarchiesi@4
|
118 case 'load':
|
danielebarchiesi@4
|
119 return image_style_load('features_test');
|
danielebarchiesi@4
|
120 case 'override':
|
danielebarchiesi@4
|
121 $style = image_style_load('features_test');
|
danielebarchiesi@4
|
122 $style = image_style_save($style);
|
danielebarchiesi@4
|
123 foreach ($style['effects'] as $effect) {
|
danielebarchiesi@4
|
124 $effect['data']['width'] = '120';
|
danielebarchiesi@4
|
125 image_effect_save($effect);
|
danielebarchiesi@4
|
126 }
|
danielebarchiesi@4
|
127 break;
|
danielebarchiesi@4
|
128 }
|
danielebarchiesi@4
|
129 }
|
danielebarchiesi@4
|
130
|
danielebarchiesi@4
|
131 protected function _test_node($op = 'load') {
|
danielebarchiesi@4
|
132 switch ($op) {
|
danielebarchiesi@4
|
133 case 'load':
|
danielebarchiesi@4
|
134 return node_type_get_type('features_test');
|
danielebarchiesi@4
|
135 case 'override':
|
danielebarchiesi@4
|
136 $type = node_type_get_type('features_test');
|
danielebarchiesi@4
|
137 $type->description = 'Foo bar baz.';
|
danielebarchiesi@4
|
138 $type->modified = TRUE;
|
danielebarchiesi@4
|
139 node_type_save($type);
|
danielebarchiesi@4
|
140 break;
|
danielebarchiesi@4
|
141 }
|
danielebarchiesi@4
|
142 }
|
danielebarchiesi@4
|
143
|
danielebarchiesi@4
|
144 protected function _test_views_view($op = 'load') {
|
danielebarchiesi@4
|
145 switch ($op) {
|
danielebarchiesi@4
|
146 case 'load':
|
danielebarchiesi@4
|
147 return views_get_view('features_test', TRUE);
|
danielebarchiesi@4
|
148 case 'override':
|
danielebarchiesi@4
|
149 $view = views_get_view('features_test', TRUE);
|
danielebarchiesi@4
|
150 $view->set_display('default');
|
danielebarchiesi@4
|
151 $view->display_handler->override_option('title', 'Foo bar');
|
danielebarchiesi@4
|
152 $view->save();
|
danielebarchiesi@4
|
153 // Clear the load cache from above
|
danielebarchiesi@4
|
154 views_get_view('features_test', TRUE);
|
danielebarchiesi@4
|
155 break;
|
danielebarchiesi@4
|
156 }
|
danielebarchiesi@4
|
157 }
|
danielebarchiesi@4
|
158
|
danielebarchiesi@4
|
159 protected function _test_user_permission($op = 'load') {
|
danielebarchiesi@4
|
160 switch ($op) {
|
danielebarchiesi@4
|
161 case 'load':
|
danielebarchiesi@4
|
162 $permissions = user_role_permissions(array(DRUPAL_AUTHENTICATED_RID => 'authenticated user'));
|
danielebarchiesi@4
|
163 return !empty($permissions[DRUPAL_AUTHENTICATED_RID]['create features_test content']);
|
danielebarchiesi@4
|
164 case 'override':
|
danielebarchiesi@4
|
165 user_role_change_permissions(DRUPAL_AUTHENTICATED_RID, array('create features_test content' => 0));
|
danielebarchiesi@4
|
166 break;
|
danielebarchiesi@4
|
167 }
|
danielebarchiesi@4
|
168 }
|
danielebarchiesi@4
|
169 }
|
danielebarchiesi@4
|
170
|
danielebarchiesi@4
|
171 /**
|
danielebarchiesi@4
|
172 * Tests enabling of feature modules.
|
danielebarchiesi@4
|
173 */
|
danielebarchiesi@4
|
174 class FeaturesEnableTestCase extends DrupalWebTestCase {
|
danielebarchiesi@4
|
175 protected $profile = 'testing';
|
danielebarchiesi@4
|
176
|
danielebarchiesi@4
|
177 /**
|
danielebarchiesi@4
|
178 * Test info.
|
danielebarchiesi@4
|
179 */
|
danielebarchiesi@4
|
180 public static function getInfo() {
|
danielebarchiesi@4
|
181 return array(
|
danielebarchiesi@4
|
182 'name' => t('Features enable tests'),
|
danielebarchiesi@4
|
183 'description' => t('Run tests for enabling of features.') ,
|
danielebarchiesi@4
|
184 'group' => t('Features'),
|
danielebarchiesi@4
|
185 );
|
danielebarchiesi@4
|
186 }
|
danielebarchiesi@4
|
187
|
danielebarchiesi@4
|
188
|
danielebarchiesi@4
|
189 /**
|
danielebarchiesi@4
|
190 * Run test for features_get_components on enable.
|
danielebarchiesi@4
|
191 */
|
danielebarchiesi@4
|
192 public function testFeaturesGetComponents() {
|
danielebarchiesi@4
|
193
|
danielebarchiesi@4
|
194 // Testing that features_get_components returns correct after enable.
|
danielebarchiesi@4
|
195 $modules = array(
|
danielebarchiesi@4
|
196 'features',
|
danielebarchiesi@4
|
197 'taxonomy',
|
danielebarchiesi@4
|
198 'features_test',
|
danielebarchiesi@4
|
199 );
|
danielebarchiesi@4
|
200
|
danielebarchiesi@4
|
201 // Make sure features_get_components is cached if features already enabled.
|
danielebarchiesi@4
|
202 if (!module_exists('features')) {
|
danielebarchiesi@4
|
203 drupal_load('module', 'features');
|
danielebarchiesi@4
|
204 }
|
danielebarchiesi@4
|
205 features_get_components();
|
danielebarchiesi@4
|
206
|
danielebarchiesi@4
|
207 module_enable($modules);
|
danielebarchiesi@4
|
208
|
danielebarchiesi@4
|
209 // Make sure correct information for enabled modules is now cached.
|
danielebarchiesi@4
|
210 $components = features_get_components();
|
danielebarchiesi@4
|
211 $taxonomy_component_info = taxonomy_features_api();
|
danielebarchiesi@4
|
212 $this->assertTrue(!empty($components['taxonomy']) && $components['taxonomy'] == $taxonomy_component_info['taxonomy'], 'features_get_components returns correct taxonomy information on enable');
|
danielebarchiesi@4
|
213
|
danielebarchiesi@4
|
214 features_rebuild();
|
danielebarchiesi@4
|
215 $this->assertNotNull(taxonomy_vocabulary_machine_name_load('taxonomy_features_test'), 'Taxonomy vocabulary correctly enabled on enable.');
|
danielebarchiesi@4
|
216 }
|
danielebarchiesi@4
|
217 }
|
danielebarchiesi@4
|
218
|
danielebarchiesi@4
|
219
|
danielebarchiesi@4
|
220 /**
|
danielebarchiesi@4
|
221 * Tests intergration of ctools for features.
|
danielebarchiesi@4
|
222 */
|
danielebarchiesi@4
|
223 class FeaturesCtoolsIntegrationTest extends DrupalWebTestCase {
|
danielebarchiesi@4
|
224 protected $profile = 'testing';
|
danielebarchiesi@4
|
225
|
danielebarchiesi@4
|
226 /**
|
danielebarchiesi@4
|
227 * Test info.
|
danielebarchiesi@4
|
228 */
|
danielebarchiesi@4
|
229 public static function getInfo() {
|
danielebarchiesi@4
|
230 return array(
|
danielebarchiesi@4
|
231 'name' => t('Features Chaos Tools integration'),
|
danielebarchiesi@4
|
232 'description' => t('Run tests for ctool integration of features.') ,
|
danielebarchiesi@4
|
233 'group' => t('Features'),
|
danielebarchiesi@4
|
234 );
|
danielebarchiesi@4
|
235 }
|
danielebarchiesi@4
|
236
|
danielebarchiesi@4
|
237 /**
|
danielebarchiesi@4
|
238 * Set up test.
|
danielebarchiesi@4
|
239 */
|
danielebarchiesi@4
|
240 public function setUp() {
|
danielebarchiesi@4
|
241 parent::setUp(array(
|
danielebarchiesi@4
|
242 'features',
|
danielebarchiesi@4
|
243 'ctools',
|
danielebarchiesi@4
|
244 ));
|
danielebarchiesi@4
|
245 }
|
danielebarchiesi@4
|
246
|
danielebarchiesi@4
|
247 /**
|
danielebarchiesi@4
|
248 * Run test.
|
danielebarchiesi@4
|
249 */
|
danielebarchiesi@4
|
250 public function testModuleEnable() {
|
danielebarchiesi@4
|
251 $try = array(
|
danielebarchiesi@4
|
252 'strongarm',
|
danielebarchiesi@4
|
253 'views',
|
danielebarchiesi@4
|
254 );
|
danielebarchiesi@4
|
255
|
danielebarchiesi@4
|
256 // Trigger the first includes and the static to be set.
|
danielebarchiesi@4
|
257 features_include();
|
danielebarchiesi@4
|
258 $function_ends = array(
|
danielebarchiesi@4
|
259 'features_export',
|
danielebarchiesi@4
|
260 'features_export_options',
|
danielebarchiesi@4
|
261 'features_export_render',
|
danielebarchiesi@4
|
262 'features_revert',
|
danielebarchiesi@4
|
263 );
|
danielebarchiesi@4
|
264 foreach ($try as $module) {
|
danielebarchiesi@4
|
265 $function = $module . '_features_api';
|
danielebarchiesi@4
|
266 $this->assertFalse(function_exists($function), 'Chaos tools functions for ' . $module . ' do not exist while it is disabled.');
|
danielebarchiesi@4
|
267 // Module enable will trigger declaring the new functions.
|
danielebarchiesi@4
|
268 module_enable(array($module));
|
danielebarchiesi@4
|
269 }
|
danielebarchiesi@4
|
270
|
danielebarchiesi@4
|
271 // CTools hooks only created when there is an actual feature exportable
|
danielebarchiesi@4
|
272 // enabled.
|
danielebarchiesi@4
|
273 module_enable(array('features_test'));
|
danielebarchiesi@4
|
274
|
danielebarchiesi@4
|
275 foreach ($try as $module) {
|
danielebarchiesi@4
|
276 if (module_exists($module)) {
|
danielebarchiesi@4
|
277 $function_exists = function_exists($function);
|
danielebarchiesi@4
|
278 if ($function_exists) {
|
danielebarchiesi@4
|
279 foreach ($function() as $component_type => $component_info) {
|
danielebarchiesi@4
|
280 foreach ($function_ends as $function_end) {
|
danielebarchiesi@4
|
281 $function_exists = $function_exists && function_exists($component_type . '_' . $function_end);
|
danielebarchiesi@4
|
282 }
|
danielebarchiesi@4
|
283 }
|
danielebarchiesi@4
|
284 }
|
danielebarchiesi@4
|
285 $this->assertTrue($function_exists, 'Chaos tools functions for ' . $module . ' exist when it is enabled.');
|
danielebarchiesi@4
|
286 }
|
danielebarchiesi@4
|
287 }
|
danielebarchiesi@4
|
288 }
|
danielebarchiesi@4
|
289 }
|