public function FieldValuesExtractionTest::testNestedComplexFieldValuesExtraction in Search API 8
Tests extraction of field values from nested complex data structures.
@covers ::extractFieldValues
File
- tests/src/ Kernel/ System/ FieldValuesExtractionTest.php, line 308 
Class
- FieldValuesExtractionTest
- Tests extraction of field values, as used during indexing.
Namespace
Drupal\Tests\search_api\Kernel\SystemCode
public function testNestedComplexFieldValuesExtraction() {
  // Complex data definition structure.
  // phpcs:disable Drupal.Commenting.InlineComment.NotCapital
  // data => ListDataDefinition (list) [
  //   itemDefinition => ComplexDataDefinition (map) [
  //     propertyDefinitions => [
  //       id => DataDefinition (string),
  //       values (main property) => ListDataDefinition (list) [
  //         itemDefinition => ComplexDataDefinition (map) [
  //           propertyDefinitions => [
  //             property1 => DataDefinition (string),
  //             property2 (main property) => DataDefinition (string),
  //           ]
  //         ]
  //       ]
  //     ]
  //   ]
  // ]
  // phpcs:enable
  $properties_def = MapDataDefinition::create();
  $properties_def
    ->setPropertyDefinition('property1', DataDefinition::create('string'));
  $properties_def
    ->setPropertyDefinition('property2', DataDefinition::create('string'));
  $properties_def
    ->setMainPropertyName('property2');
  $values_def = ListDataDefinition::create('map');
  $values_def
    ->setItemDefinition($properties_def);
  $data_item_def = MapDataDefinition::create();
  $data_item_def
    ->setPropertyDefinition('id', DataDefinition::create('string'));
  $data_item_def
    ->setPropertyDefinition('values', $values_def);
  $data_item_def
    ->setMainPropertyName('values');
  $data_def = ListDataDefinition::create('map');
  $data_def
    ->setItemDefinition($data_item_def);
  // Creates an instance of the structure with test source data.
  $target_value = 'target value';
  $source_data = [
    'id' => 'test_id',
    'values' => [
      [
        'property1' => 'wrong value',
        'property2' => $target_value,
      ],
    ],
  ];
  $data = ItemList::createInstance($data_def, 'data');
  $data
    ->appendItem($source_data);
  $extracted_values = $this->fieldsHelper
    ->extractFieldValues($data);
  $this
    ->assertEquals([
    $target_value,
  ], $extracted_values);
}