function ContentImportTest::assertContentWasImported

Asserts that the default content was imported as expected.

Parameters

\Drupal\Core\Session\AccountInterface $account: The account that should own the imported content.

2 calls to ContentImportTest::assertContentWasImported()
ContentImportTest::testDirectContentImport in core/tests/Drupal/FunctionalTests/DefaultContent/ContentImportTest.php
Tests importing content directly, via the API.
ContentImportTest::testDirectContentImportWithDifferentUser in core/tests/Drupal/FunctionalTests/DefaultContent/ContentImportTest.php
Tests importing content directly, via the API, with a different user.

File

core/tests/Drupal/FunctionalTests/DefaultContent/ContentImportTest.php, line 208

Class

ContentImportTest
Tests Content Import.

Namespace

Drupal\FunctionalTests\DefaultContent

Code

private function assertContentWasImported(AccountInterface $account) : void {
  /** @var \Drupal\Core\Entity\EntityRepositoryInterface $entity_repository */
  $entity_repository = $this->container
    ->get(EntityRepositoryInterface::class);
  $node = $entity_repository->loadEntityByUuid('node', 'e1714f23-70c0-4493-8e92-af1901771921');
  $this->assertInstanceOf(NodeInterface::class, $node);
  $this->assertSame('Crikey it works!', $node->body->value);
  $this->assertSame('article', $node->bundle());
  $this->assertSame('Test Article', $node->label());
  $this->assertTrue($node->isPublished());
  $this->assertSame('published', $node->moderation_state->value);
  $tag = $node->field_tags->entity;
  $this->assertInstanceOf(TermInterface::class, $tag);
  $this->assertSame('Default Content', $tag->label());
  $this->assertSame('tags', $tag->bundle());
  $this->assertSame('550f86ad-aa11-4047-953f-636d42889f85', $tag->uuid());
  // The tag carries a field with serialized data, so ensure it came through
  // properly.
  $this->assertSame('a:2:{i:0;s:2:"Hi";i:1;s:6:"there!";}', $tag->field_serialized_stuff->value);
  $this->assertSame('94503467-be7f-406c-9795-fc25baa22203', $node->getOwner()
    ->uuid());
  // The node's URL should use the path alias shipped with the recipe.
  $node_url = $node->toUrl()
    ->toString();
  $this->assertSame(Url::fromUserInput('/test-article')->toString(), $node_url);
  $media = $entity_repository->loadEntityByUuid('media', '344b943c-b231-4d73-9669-0b0a2be12aa5');
  $this->assertInstanceOf(MediaInterface::class, $media);
  $this->assertSame('image', $media->bundle());
  $this->assertSame('druplicon.png', $media->label());
  $file = $media->field_media_image->entity;
  $this->assertInstanceOf(FileInterface::class, $file);
  $this->assertSame('druplicon.png', $file->getFilename());
  $this->assertSame('d8404562-efcc-40e3-869e-40132d53fe0b', $file->uuid());
  // Another file entity referencing an existing file but already in use by
  // another entity, should be imported.
  $same_file_different_entity = $entity_repository->loadEntityByUuid('file', '23a7f61f-1db3-407d-a6dd-eb4731995c9f');
  $this->assertInstanceOf(FileInterface::class, $same_file_different_entity);
  $this->assertSame('druplicon-duplicate.png', $same_file_different_entity->getFilename());
  $this->assertStringEndsWith('/druplicon_0.png', (string) $same_file_different_entity->getFileUri());
  // Another file entity that references a file with the same name as, but
  // different contents than, an existing file, should be imported and the
  // file should be renamed.
  $different_file = $entity_repository->loadEntityByUuid('file', 'a6b79928-838f-44bd-a8f0-44c2fff9e4cc');
  $this->assertInstanceOf(FileInterface::class, $different_file);
  $this->assertSame('druplicon-different.png', $different_file->getFilename());
  $this->assertStringEndsWith('/druplicon_1.png', (string) $different_file->getFileUri());
  // Another file entity referencing an existing file but one that is not in
  // use by another entity, should be imported but use the existing file.
  $different_file = $entity_repository->loadEntityByUuid('file', '7fb09f9f-ba5f-4db4-82ed-aa5ccf7d425d');
  $this->assertInstanceOf(FileInterface::class, $different_file);
  $this->assertSame('druplicon_copy.png', $different_file->getFilename());
  $this->assertStringEndsWith('/druplicon_copy.png', (string) $different_file->getFileUri());
  // Our node should have a menu link, and it should use the path alias we
  // included with the recipe.
  $menu_link = $entity_repository->loadEntityByUuid('menu_link_content', '3434bd5a-d2cd-4f26-bf79-a7f6b951a21b');
  $this->assertInstanceOf(MenuLinkContentInterface::class, $menu_link);
  $this->assertSame($menu_link->getUrlObject()
    ->toString(), $node_url);
  $this->assertSame('main', $menu_link->getMenuName());
  $block_content = $entity_repository->loadEntityByUuid('block_content', 'd9b72b2f-a5ea-4a3f-b10c-28deb7b3b7bf');
  $this->assertInstanceOf(BlockContentInterface::class, $block_content);
  $this->assertSame('basic', $block_content->bundle());
  $this->assertSame('Useful Info', $block_content->label());
  $this->assertSame("I'd love to put some useful info here.", $block_content->body->value);
  // A node with a non-existent owner should be reassigned to the current
  // user or the user provided to the importer.
  $node = $entity_repository->loadEntityByUuid('node', '7f1dd75a-0be2-4d3b-be5d-9d1a868b9267');
  $this->assertInstanceOf(NodeInterface::class, $node);
  $this->assertSame($account->id(), $node->getOwner()
    ->id());
  // Ensure a node with a translation is imported properly.
  $node = $entity_repository->loadEntityByUuid('node', '2d3581c3-92c7-4600-8991-a0d4b3741198');
  $this->assertInstanceOf(NodeInterface::class, $node);
  $this->assertFalse($node->isPublished());
  $this->assertSame('draft', $node->moderation_state->value);
  $translation = $node->getTranslation('fr');
  $this->assertSame('Perdu en traduction', $translation->label());
  $this->assertSame("Içi c'est la version français.", $translation->body->value);
  // Layout data should be imported.
  $node = $entity_repository->loadEntityByUuid('node', '32650de8-9edd-48dc-80b8-8bda180ebbac');
  $this->assertInstanceOf(NodeInterface::class, $node);
  $section = $node->layout_builder__layout[0]->section;
  $this->assertInstanceOf(Section::class, $section);
  $components = $section->getComponents();
  $this->assertCount(3, $components);
  // None of the components should be using the `broken` fallback plugin.
  foreach ($components as $component) {
    $this->assertNotSame('broken', $component->getPlugin()
      ->getPluginId());
  }
  // Workspaces should have been imported with their parent references intact.
  $workspaces = Workspace::loadMultiple();
  $this->assertArrayHasKey('test_workspace', $workspaces);
  $this->assertSame('test_workspace', $workspaces['inner_test']?->parent->entity
    ->id());
  // A taxonomy term's parent reference should be intact.
  $term = $entity_repository->loadEntityByUuid('taxonomy_term', '9dfe4733-1347-4566-9340-27a9b22a1f64');
  $this->assertInstanceOf(TermInterface::class, $term);
  $this->assertSame('Default Content', $term->parent->entity?->label());
  // When importing files that have URIs like `public://foo.png`, the `public`
  // part should not have been treated as a directory name.
  $this->assertDirectoryDoesNotExist($this->getDrupalRoot() . '/public:');
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.