annotate sites/all/modules/features/tests/features.test @ 9:830c812b520f

added smtp module
author root <root@paio.local>
date Mon, 28 Oct 2013 15:34:27 +0000
parents ce11bbd8f642
children
rev   line source
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 }