staged_content-8.x-1.0-alpha1/tests/src/Unit/LayeredImporterTest.php

tests/src/Unit/LayeredImporterTest.php
<?php

namespace Drupal\Tests\staged_content\Unit;

use Drupal\staged_content\DataProxy\JsonDataProxy;
use Drupal\staged_content\LayeredImporter;
use Drupal\Tests\UnitTestCase;
use Symfony\Component\Console\Output\BufferedOutput;

/**
 * Test the layered importer.
 *
 * @package staged_content
 */
class LayeredImporterTest extends UnitTestCase {

  /**
   * @covers Drupal\staged_content\LayeredImporter::keyDataByEntityType
   */
  public function testKeyDataByEntityType() {
    $layeredImporter = $this->generateBaseClass();

    $dataItems = [];
    $dataItems['node-uuid-1'] = new JsonDataProxy('dummy-filename-1.json', 'node-uuid-1', 'node', 'prod');
    $dataItems['node-uuid-2'] = new JsonDataProxy('dummy-filename-2.json', 'node-uuid-2', 'node', 'prod');
    $dataItems['term-uuid-1'] = new JsonDataProxy('dummy-filename-3.json', 'term-uuid-1', 'taxonomy_term', 'prod');
    $dataItems['file-uuid-1'] = new JsonDataProxy('dummy-filename-4.json', 'file-uuid-1', 'file', 'prod');
    $dataItems['file-uuid-2'] = new JsonDataProxy('dummy-filename-5.json', 'file-uuid-2', 'file', 'prod');

    $keyedData = $layeredImporter->keyDataByEntityType($dataItems);

    $this->assertArrayHasKey('node', $keyedData);
    $this->assertEquals(2, count($keyedData['node']));
    $this->assertArrayHasKey('node-uuid-1', $keyedData['node']);
    $this->assertArrayHasKey('node-uuid-2', $keyedData['node']);

    $this->assertArrayHasKey('taxonomy_term', $keyedData);
    $this->assertEquals(1, count($keyedData['taxonomy_term']));
    $this->assertArrayHasKey('term-uuid-1', $keyedData['taxonomy_term']);

    $this->assertArrayHasKey('file', $keyedData);
    $this->assertEquals(2, count($keyedData['file']));
    $this->assertArrayHasKey('file-uuid-1', $keyedData['file']);
    $this->assertArrayHasKey('file-uuid-2', $keyedData['file']);
  }

  /**
   * @covers Drupal\staged_content\LayeredImporter::prepareList
   */
  public function testPrepareListWithDuplicatePreservedId() {
    $itemList = $this->provideDataListWithDuplicatePreservedId();
    $layeredImporter = $this->generateBaseClass();

    $preparedList = $layeredImporter->prepareList('node', $itemList);

    // One item should have been preserved (with id 2)
    $this->assertArrayHasKey('preserved', $preparedList);
    $this->assertArrayHasKey(2, $preparedList['preserved']);

    // One item should have been shifted since item 2 has already been taken.
    $this->assertArrayHasKey('shifted', $preparedList);
    $this->assertEquals(1, count($preparedList['shifted']));

    // All items in the list should be data proxies.
    foreach ($preparedList['preserved'] as $item) {
      $this->assertInstanceOf('Drupal\staged_content\DataProxy\DataProxyInterface', $item);
    }

    foreach ($preparedList['shifted'] as $item) {
      $this->assertInstanceOf('Drupal\staged_content\DataProxy\DataProxyInterface', $item);
    }
  }

  /**
   * @covers Drupal\staged_content\LayeredImporter::prepareList
   */
  public function testPrepareListStandard() {
    $itemList = $this->provideDataListStandard();
    $layeredImporter = $this->generateBaseClass();

    $preparedList = $layeredImporter->prepareList('node', $itemList);

    // One item should have been preserved (with id 2)
    $this->assertArrayHasKey('new', $preparedList);
    $this->assertEquals(2, count($preparedList['new']));

    // All items in the list should be data proxies.
    foreach ($preparedList['new'] as $item) {
      $this->assertInstanceOf('Drupal\staged_content\DataProxy\DataProxyInterface', $item);
    }
  }

  /**
   * Get a list with a duplicate preserved id.
   *
   * @return \Drupal\staged_content\DataProxy\DataProxyInterface[]
   *   List with the proxy items.
   */
  protected function provideDataListWithDuplicatePreservedId() {
    $itemList = [];
    $itemList['uuid-node-1'] = $this->generateDataProxyMock([
      'meta' => [
        'preserve_original_id' => TRUE,
        'original_id' => 2,
      ],
    ]);
    $itemList['uuid-node-2'] = $this->generateDataProxyMock([
      'meta' => [
        'preserve_original_id' => TRUE,
        'original_id' => 2,
      ],
    ]);
    return $itemList;
  }

  /**
   * Get a list with a duplicate preserved id.
   *
   * @return \Drupal\staged_content\DataProxy\DataProxyInterface[]
   *   List with the proxy items.
   */
  protected function provideDataListStandard() {
    $itemList = [];
    $itemList['uuid-node-1'] = $this->generateDataProxyMock([
      'meta' => [
        'preserve_original_id' => FALSE,
      ],
    ]);
    $itemList['uuid-node-2'] = $this->generateDataProxyMock([
      'meta' => [
        'preserve_original_id' => FALSE,
      ],
    ]);
    return $itemList;
  }

  /**
   * Generate a basic mocked item.
   *
   * @return \Drupal\staged_content\LayeredImporter
   *   Layered import with mocked services.
   */
  protected function generateBaseClass() {
    $serializer = $this->createMock('\Symfony\Component\Serializer\Serializer');
    $entityTypeManager = $this->createMock('\Drupal\Core\Entity\EntityTypeManager');
    $accountSwitcher = $this->createMock('\Drupal\Core\Session\AccountSwitcher');

    $layeredImporter = new LayeredImporter($serializer, $entityTypeManager, $accountSwitcher);

    // Buffer the output to prevent printing it out in between the test results.
    $layeredImporter->setOutput(new BufferedOutput());
    return $layeredImporter;
  }

  /**
   * Get a mock data proxy where you can set the data in the file.
   *
   * @param array $mockData
   *   Data to replace the actual file data.
   * @param string|null $uuid
   *   String uuid or null (for a standard sample)
   *
   * @return \Drupal\staged_content\DataProxy\DataProxyInterface
   *   Mocked proxy interface with the data.
   */
  protected function generateDataProxyMock(array $mockData, string $uuid = NULL) {
    $dataProxy = $this->createMock('Drupal\staged_content\DataProxy\JsonDataProxy');
    $dataProxy->method('getData')->willReturn($mockData);
    $uuid = isset($uuid) ? $uuid : 'sample-uuid';
    $dataProxy->method('getUuid')->willReturn($uuid);
    return $dataProxy;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc