View source  
  <?php
namespace Drupal\multiversion\Tests;
use Drupal\Core\Entity\Query\QueryInterface;
use Drupal\simpletest\WebTestBase;
class UninstallTest extends WebTestBase {
  protected $strictConfigSchema = FALSE;
  
  protected $entityTypes = [
    'node' => [
      'type' => 'article',
      'title' => 'foo',
    ],
    
    'menu_link_content' => [
      'menu_name' => 'menu_test',
      'bundle' => 'menu_link_content',
      'link' => [
        [
          'uri' => 'user-path:/',
        ],
      ],
    ],
    'shortcut' => [
      'shortcut_set' => 'default',
      'title' => 'Llama',
      'weight' => 0,
      'link' => [
        [
          'uri' => 'internal:/admin',
        ],
      ],
    ],
  ];
  
  public static $modules = [
    'workspaces',
    'multiversion',
    'key_value',
    'serialization',
    'conflict',
    'node',
    'comment',
    'menu_link_content',
    'block_content',
    'taxonomy',
    'shortcut',
  ];
  
  protected function setUp() {
    parent::setUp();
    $this->container
      ->get('multiversion.manager')
      ->enableEntityTypes();
    $this
      ->drupalCreateContentType([
      'type' => 'article',
      'name' => 'Article',
    ]);
    $this
      ->drupalLogin($this->rootUser);
  }
  public function testDisableWithExistingContent() {
    $entity_type_manager = $this->container
      ->get('entity_type.manager');
    foreach ($this->entityTypes as $entity_type_id => $values) {
      $storage = $entity_type_manager
        ->getStorage($entity_type_id);
      $count = 2;
      for ($i = 0; $i < $count; $i++) {
        $storage
          ->create($values)
          ->save();
      }
      $count_before[$entity_type_id] = $count;
    }
    
    $manager = $this->container
      ->get('multiversion.manager');
    
    $manager
      ->disableEntityTypes();
    
    $storage = $entity_type_manager
      ->getStorage('workspace');
    $entities = $storage
      ->loadMultiple();
    $storage
      ->delete($entities);
    
    $this->container
      ->get('module_installer')
      ->uninstall([
      'multiversion',
    ]);
    
    $update_manager = \Drupal::entityDefinitionUpdateManager();
    
    $update_manager
      ->applyUpdates();
    
    $this
      ->assertFalse($update_manager
      ->needsUpdates(), 'There are not new updates to apply.');
    $ids_after = [];
    
    foreach ($this->entityTypes as $entity_type_id => $values) {
      $storage = $entity_type_manager
        ->getStorage($entity_type_id);
      $storage_class = $storage
        ->getEntityType($entity_type_id)
        ->getStorageClass();
      $this
        ->assertFalse(strpos($storage_class, 'Drupal\\multiversion\\Entity\\Storage'), "{$entity_type_id} got the correct storage handler assigned.");
      $this
        ->assertTrue($storage
        ->getQuery() instanceof QueryInterface, "{$entity_type_id} got the correct query handler assigned.");
      $ids_after[$entity_type_id] = $storage
        ->getQuery()
        ->execute();
      $this
        ->assertEqual($count_before[$entity_type_id], count($ids_after[$entity_type_id]), "All {$entity_type_id}s were migrated.");
    }
  }
}