public function JmesPathParserTest::testImportWithInvalidExpression in Feeds extensible parsers 8
Tests an import with an invalid source expression.
File
- tests/src/ Functional/ Feeds/ Parser/ JmesPathParserTest.php, line 72 
Class
- JmesPathParserTest
- @coversDefaultClass \Drupal\feeds_ex\Feeds\Parser\JmesPathParser @group feeds_ex
Namespace
Drupal\Tests\feeds_ex\Functional\Feeds\ParserCode
public function testImportWithInvalidExpression() {
  // Add body field.
  node_add_body_field($this->nodeType);
  // Create a feed type with an invalid jmespath source value.
  $feed_type = $this
    ->createFeedType([
    'parser' => 'jmespath',
    'parser_configuration' => [
      'context' => [
        'value' => '@',
      ],
      'sources' => [
        'title' => [
          'label' => 'Title',
          'value' => 'items[].title',
        ],
        'title_desc' => [
          'label' => 'Title and description',
          // Invalid source expression. Closing bracket is missing.
          'value' => 'items[].join(`__`,[title,description)',
        ],
      ],
    ],
    'custom_sources' => [
      'title' => [
        'label' => 'Title',
        'value' => 'items[].title',
        'machine_name' => 'title',
      ],
      'title_desc' => [
        'label' => 'Title and description',
        // Invalid source expression. Closing bracket is missing.
        'value' => 'items[].join(`__`,[title,description)',
        'machine_name' => 'title_desc',
      ],
    ],
    'mappings' => [
      [
        'target' => 'title',
        'map' => [
          'value' => 'title',
        ],
        'unique' => [
          'value' => TRUE,
        ],
      ],
      [
        'target' => 'body',
        'map' => [
          'value' => 'title_desc',
        ],
        'settings' => [
          'format' => 'plain_text',
        ],
      ],
    ],
  ]);
  // And try to do a batch import.
  $feed = $this
    ->createFeed($feed_type
    ->id(), [
    'source' => $this
      ->resourcesUrl() . '/test.json',
  ]);
  $this
    ->batchImport($feed);
  // And assert that it failed gracefully.
  $this
    ->assertSession()
    ->pageTextContains('There are no new Article items.');
  $this
    ->assertSession()
    ->pageTextContains('Syntax error at character');
}