diff --git a/core/modules/filter/lib/Drupal/filter/FilterFormatStorageController.php b/core/modules/filter/lib/Drupal/filter/FilterFormatStorageController.php index 7ca4d05..1e8bdb2 100644 --- a/core/modules/filter/lib/Drupal/filter/FilterFormatStorageController.php +++ b/core/modules/filter/lib/Drupal/filter/FilterFormatStorageController.php @@ -85,9 +85,9 @@ protected function postSave(EntityInterface $entity, $update) { // Note: user_role_change_permissions() triggers a call chain back into // filter_permission() and lastly filter_formats(), so its cache must be // reset upfront. - if (!empty($entity->roles) && $permission = filter_permission_name($entity)) { + if (($roles = $entity->get('roles')) && $permission = filter_permission_name($entity)) { foreach (user_roles() as $rid => $name) { - $enabled = in_array($rid, $entity->roles, TRUE); + $enabled = in_array($rid, $roles, TRUE); user_role_change_permissions($rid, array($permission => $enabled)); } } diff --git a/core/modules/filter/lib/Drupal/filter/Tests/FilterDefaultConfigTest.php b/core/modules/filter/lib/Drupal/filter/Tests/FilterDefaultConfigTest.php new file mode 100644 index 0000000..fd37fb8 --- /dev/null +++ b/core/modules/filter/lib/Drupal/filter/Tests/FilterDefaultConfigTest.php @@ -0,0 +1,114 @@ + 'Default configuration', + 'description' => 'Tests text format default configuration.', + 'group' => 'Filter', + ); + } + + function setUp() { + parent::setUp(); + $this->enableModules(array('user')); + // filter_permission() calls into url() to output a link in the description. + $this->installSchema('system', 'url_alias'); + } + + /** + * Tests installation of default formats. + */ + function testInstallation() { + // Install filter_test module, which ships with custom default format. + $this->enableModules(array('filter_test')); + + // Verify that the format was installed correctly. + $format = filter_format_load('filter_test'); + $this->assertTrue($format); + $this->assertEqual($format->id(), 'filter_test'); + $this->assertEqual($format->label(), 'Test format'); + $this->assertEqual($format->get('weight'), 2); + + // Verify that format default property values have been added/injected. + $this->assertTrue($format->uuid()); + $this->assertEqual($format->get('cache'), 1); + + // Verify that the loaded format does not contain any roles. + $this->assertEqual($format->get('roles'), NULL); + // Verify that the defined roles in the default config have been processed. + $this->assertEqual(array_keys(filter_get_roles_by_format($format)), array( + DRUPAL_ANONYMOUS_RID, + DRUPAL_AUTHENTICATED_RID, + )); + + // Verify enabled filters. + $filters = $format->get('filters'); + $this->assertEqual($filters['filter_html_escape']['status'], 1); + $this->assertEqual($filters['filter_html_escape']['weight'], -10); + $this->assertEqual($filters['filter_html_escape']['module'], 'filter'); + $this->assertEqual($filters['filter_html_escape']['settings'], array()); + $this->assertEqual($filters['filter_autop']['status'], 1); + $this->assertEqual($filters['filter_autop']['weight'], 0); + $this->assertEqual($filters['filter_autop']['module'], 'filter'); + $this->assertEqual($filters['filter_autop']['settings'], array()); + $this->assertEqual($filters['filter_url']['status'], 1); + $this->assertEqual($filters['filter_url']['weight'], 0); + $this->assertEqual($filters['filter_url']['module'], 'filter'); + $this->assertEqual($filters['filter_url']['settings'], array( + 'filter_url_length' => 72, + )); + + // Verify disabled filters. + $this->assertEqual($filters['filter_html']['status'], 0); + $this->assertEqual($filters['filter_html']['weight'], -10); + $this->assertEqual($filters['filter_html']['module'], 'filter'); + $this->assertEqual($filters['filter_htmlcorrector']['status'], 0); + $this->assertEqual($filters['filter_htmlcorrector']['weight'], 10); + $this->assertEqual($filters['filter_htmlcorrector']['module'], 'filter'); + } + + /** + * Tests that changes to FilterFormat::$roles do not have an effect. + */ + function testUpdateRoles() { + // Install filter_test module, which ships with custom default format. + $this->enableModules(array('filter_test')); + + // Verify role permissions declared in default config. + $format = filter_format_load('filter_test'); + $this->assertEqual(array_keys(filter_get_roles_by_format($format)), array( + DRUPAL_ANONYMOUS_RID, + DRUPAL_AUTHENTICATED_RID, + )); + + // Attempt to change roles. + $format->set('roles', array( + DRUPAL_AUTHENTICATED_RID, + )); + $format->save(); + + // Verify that roles have not been updated. + $format = filter_format_load('filter_test'); + $this->assertEqual(array_keys(filter_get_roles_by_format($format)), array( + DRUPAL_ANONYMOUS_RID, + DRUPAL_AUTHENTICATED_RID, + )); + } + +} diff --git a/core/modules/filter/tests/filter_test/config/filter.format.filter_test.yml b/core/modules/filter/tests/filter_test/config/filter.format.filter_test.yml new file mode 100644 index 0000000..f57eb00 --- /dev/null +++ b/core/modules/filter/tests/filter_test/config/filter.format.filter_test.yml @@ -0,0 +1,13 @@ +format: filter_test +name: 'Test format' +weight: 2 +roles: + - anonymous + - authenticated +filters: + filter_html_escape: + status: '1' + filter_url: + status: '1' + filter_autop: + status: '1' diff --git a/core/modules/system/tests/modules/filter_test/filter_test.info b/core/modules/filter/tests/filter_test/filter_test.info similarity index 100% rename from core/modules/system/tests/modules/filter_test/filter_test.info rename to core/modules/filter/tests/filter_test/filter_test.info diff --git a/core/modules/system/tests/modules/filter_test/filter_test.module b/core/modules/filter/tests/filter_test/filter_test.module similarity index 100% rename from core/modules/system/tests/modules/filter_test/filter_test.module rename to core/modules/filter/tests/filter_test/filter_test.module