data_pipelines-1.x-dev/tests/src/Kernel/DatasetSource/CsvUriTest.php

tests/src/Kernel/DatasetSource/CsvUriTest.php
<?php

declare(strict_types=1);

namespace Drupal\Tests\data_pipelines\Kernel\DatasetSource;

use Drupal\Tests\data_pipelines\Kernel\DatasetKernelTestBase;
use Drupal\Tests\data_pipelines\Traits\MockHttpClientTrait;
use Drupal\data_pipelines\DatasetData;
use Drupal\data_pipelines\Entity\Dataset;
use Drupal\data_pipelines\Source\DatasetSourceInterface;
use Drupal\data_pipelines\Source\DatasetSourcePluginManager;
use GuzzleHttp\Exception\TransferException;
use GuzzleHttp\Psr7\Request;
use GuzzleHttp\Psr7\Response;

/**
 * Defines a test for the CsvUri dataset source.
 *
 * @group data_pipelines
 *
 * @covers \Drupal\data_pipelines\Plugin\DatasetSource\CsvSource
 * @covers \Drupal\data_pipelines\Source\Resource\Uri
 * @covers \Drupal\data_pipelines\Source\DatasetSourcePluginManager
 */
class CsvUriTest extends DatasetKernelTestBase {

  use MockHttpClientTrait;

  /**
   * {@inheritdoc}
   */
  protected function afterInitialSetup(): void {
    parent::afterInitialSetup();
    $this->mockClient();
  }

  /**
   * Tests extracting data from remote CSV files.
   */
  public function testExtractDataFromDataSet() {
    $csv = <<<CSV
should_we,firstname,lastname
Y,joe,bloggs
N,betty,bloggs
CSV;
    $this->mockResponses([
      new Response(200, [], $csv),
    ]);
    $manager = \Drupal::service('plugin.manager.data_pipelines_source');
    assert($manager instanceof DatasetSourcePluginManager);
    $instance = $manager->createInstance('csv:uri');
    assert($instance instanceof DatasetSourceInterface);

    $uri = 'http://www.example.com/foo.csv';
    $dataset = Dataset::create([
      'name' => $this->randomMachineName(),
      'machine_name' => mb_strtolower($this->randomMachineName()),
      'source' => 'csv:uri',
      'pipeline' => 'test_pipeline_1',
      'csv_uri' => $uri,
    ]);
    $data = iterator_to_array($instance->extractDataFromDataSet($dataset));
    $expected = [
      new DatasetData([
        'should_we' => 'Y',
        'firstname' => 'joe',
        'lastname' => 'bloggs',
      ]),
      new DatasetData([
        'should_we' => 'N',
        'firstname' => 'betty',
        'lastname' => 'bloggs',
      ]),
    ];
    $this->assertEquals($expected, $data);
    $request = reset($this->history)['request'];
    assert($request instanceof Request);
    $this->assertEquals($uri, (string) $request->getUri());

    // A subsequent request should use cache.
    $data = iterator_to_array($instance->extractDataFromDataSet($dataset));
    $this->assertEquals($expected, $data);
    $this->assertCount(1, $this->history);
  }

  /**
   * Tests extracting data from remote CSV files with a response error.
   */
  public function testRecoversFromResponseError() {
    $this->mockResponses([
      new Response(404, [], 'Not found'),
    ]);
    $manager = \Drupal::service('plugin.manager.data_pipelines_source');
    assert($manager instanceof DatasetSourcePluginManager);
    $instance = $manager->createInstance('csv:uri');
    assert($instance instanceof DatasetSourceInterface);

    $uri = 'http://www.example.com/foo.csv';
    $dataset = Dataset::create([
      'source' => 'csv:uri',
      'pipeline' => 'test_pipeline_1',
      'name' => $this->randomMachineName(),
      'machine_name' => mb_strtolower($this->randomMachineName()),
      'csv_uri' => $uri,
    ]);
    $data = iterator_to_array($instance->extractDataFromDataSet($dataset));
    $this->assertEmpty($data);
    $logs = $dataset->getLogs();
    $this->assertCount(1, $logs);
    $this->assertEquals(sprintf('Error fetching %s: 404 - Not Found', $uri), reset($logs));
  }

  /**
   * Tests extracting data from remote CSV files with other error.
   */
  public function testRecoversFromHttpError() {
    $this->mockResponses([
      new TransferException('Eek'),
    ]);
    $manager = \Drupal::service('plugin.manager.data_pipelines_source');
    assert($manager instanceof DatasetSourcePluginManager);
    $instance = $manager->createInstance('csv:uri');
    assert($instance instanceof DatasetSourceInterface);

    $uri = 'http://www.example.com/foo.csv';
    $dataset = Dataset::create([
      'source' => 'csv:uri',
      'pipeline' => 'test_pipeline_1',
      'name' => $this->randomMachineName(),
      'machine_name' => mb_strtolower($this->randomMachineName()),
      'csv_uri' => $uri,
    ]);
    $data = iterator_to_array($instance->extractDataFromDataSet($dataset));
    $this->assertEmpty($data);
    $logs = $dataset->getLogs();
    $this->assertCount(1, $logs);
    $this->assertEquals(sprintf('Error fetching %s: Eek', $uri), reset($logs));
  }

}

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

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