/** * Asserts that a config entity can be imported without changing it. * * @param \Drupal\Core\Config\Entity\ConfigEntityInterface $entity * The config entity to test importing. */ public function assertConfigEntityImport(ConfigEntityInterface $entity) { // Save original config information. $entity_uuid = $entity->uuid(); $entity_type_id = $entity->getEntityTypeId(); $original_data = $entity->toArray(); // Copy everything to sync. $this->copyConfig(\Drupal::service('config.storage'), \Drupal::service('config.storage.sync')); // Delete the configuration from active. Don't worry about side effects of // deleting config like fields cleaning up field storages. The coming import // should recreate everything as necessary. $entity->delete(); $this->configImporter()->reset()->import(); $imported_entity = \Drupal::entityManager()->loadEntityByUuid($entity_type_id, $entity_uuid); $this->assertIdentical($original_data, $imported_entity->toArray()); }
/** * Tests a tracker with a dependency that gets removed. * * @param bool $remove_dependency * Whether to remove the dependency from the tracker when the object * depended on is deleted. * * @dataProvider dependencyTestDataProvider */ public function testTrackerDependency($remove_dependency) { // Set the tracker for the index and save it. The tracker configuration // contains the dependencies it will return – in our case, we use the test // server. $dependency_key = $this->dependency->getConfigDependencyKey(); $dependency_name = $this->dependency->getConfigDependencyName(); $tracker = \Drupal::getContainer()->get('plugin.manager.search_api.tracker')->createInstance('search_api_test_dependencies', array($dependency_key => array($dependency_name))); $this->index->setTracker($tracker); $this->index->save(); // Check the dependencies were calculated correctly. $dependencies = $this->index->getDependencies(); $this->assertContains($dependency_name, $dependencies[$dependency_key], 'Tracker dependency correctly inserted'); // Set our magic state key to let the test plugin know whether the // dependency should be removed or not. See // \Drupal\search_api_test_dependencies\Plugin\search_api\tracker\TestTracker::onDependencyRemoval(). $key = 'search_api_test_dependencies.tracker.remove'; \Drupal::state()->set($key, $remove_dependency); // If the index resets the tracker, it needs to know the ID of the default // tracker. if (!$remove_dependency) { \Drupal::configFactory()->getEditable('search_api.settings')->set('default_tracker', 'default')->save(); } // Delete the tracker's dependency. $this->dependency->delete(); // Reload the index and check it's still there. $this->reloadIndex(); $this->assertInstanceOf('Drupal\\search_api\\IndexInterface', $this->index, 'Index not removed'); // Make sure the dependency has been removed, one way or the other. $dependencies = $this->index->getDependencies(); $dependencies += array($dependency_key => array()); $this->assertNotContains($dependency_name, $dependencies[$dependency_key], 'Tracker dependency removed from index'); // Depending on whether the plugin should have removed the dependency or // not, make sure the right action was taken. $tracker_instance = $this->index->getTrackerInstance(); $tracker_id = $tracker_instance->getPluginId(); $tracker_config = $tracker_instance->getConfiguration(); if ($remove_dependency) { $this->assertEquals('search_api_test_dependencies', $tracker_id, 'Tracker not reset'); $this->assertEmpty($tracker_config, 'Tracker settings adapted'); } else { $this->assertEquals('default', $tracker_id, 'Tracker was reset'); $this->assertEmpty($tracker_config, 'Tracker settings were cleared'); } }