search_api-8.x-1.15/tests/src/Functional/ExampleContentTrait.php
tests/src/Functional/ExampleContentTrait.php
<?php namespace Drupal\Tests\search_api\Functional; use Drupal\search_api\Entity\Index; use Drupal\search_api\Utility\Utility; /** * Contains helpers to create data that can be used by tests. */ trait ExampleContentTrait { /** * The generated test entities, keyed by ID. * * @var \Drupal\entity_test\Entity\EntityTestMulRevChanged[] */ protected $entities = []; /** * The Search API item IDs of the generated entities. * * @var string[] */ protected $ids = []; /** * Sets up the necessary bundles on the test entity type. */ protected function setUpExampleStructure() { entity_test_create_bundle('item', NULL, 'entity_test_mulrev_changed'); entity_test_create_bundle('article', NULL, 'entity_test_mulrev_changed'); } /** * Creates several test entities. */ protected function insertExampleContent() { // To test Unicode compliance, include all kind of strange characters here. $smiley = json_decode('"\u1F601"'); $this->addTestEntity(1, [ 'name' => 'foo bar baz foobaz föö smile' . $smiley, 'body' => 'test test case Case casE', 'type' => 'item', 'keywords' => ['Orange', 'orange', 'örange', 'Orange', $smiley], 'category' => 'item_category', ]); $this->addTestEntity(2, [ 'name' => 'foo test foobuz', 'body' => 'bar test casE', 'type' => 'item', 'keywords' => ['orange', 'apple', 'grape'], 'category' => 'item_category', ]); $this->addTestEntity(3, [ 'name' => 'bar', 'body' => 'test foobar Case', 'type' => 'item', ]); $this->addTestEntity(4, [ 'name' => 'foo baz', 'body' => 'test test test', 'type' => 'article', 'keywords' => ['apple', 'strawberry', 'grape'], 'category' => 'article_category', 'width' => '1.0', ]); $this->addTestEntity(5, [ 'name' => 'bar baz', 'body' => 'foo', 'type' => 'article', 'keywords' => ['orange', 'strawberry', 'grape', 'banana'], 'category' => 'article_category', 'width' => '2.0', ]); $count = \Drupal::entityQuery('entity_test_mulrev_changed')->count()->execute(); $this->assertEquals(5, $count, "$count items inserted."); } /** * Creates and saves a test entity with the given values. * * @param int $id * The entity's ID. * @param array $values * The entity's property values. * * @return \Drupal\entity_test\Entity\EntityTestMulRevChanged * The created entity. */ protected function addTestEntity($id, array $values) { $entity_type = 'entity_test_mulrev_changed'; $storage = \Drupal::entityTypeManager()->getStorage($entity_type); $values['id'] = $id; $this->entities[$id] = $storage->create($values); $this->entities[$id]->save(); $this->ids[$id] = Utility::createCombinedId("entity:$entity_type", "$id:en"); return $this->entities[$id]; } /** * Deletes the test entity with the given ID. * * @param int $id * The entity's ID. * * @return $this */ protected function removeTestEntity($id) { $this->entities[$id]->delete(); unset($this->entities[$id]); return $this; } /** * Indexes all (unindexed) items on the specified index. * * @param string $index_id * The ID of the index on which items should be indexed. * * @return int * The number of successfully indexed items. */ protected function indexItems($index_id) { /** @var \Drupal\search_api\IndexInterface $index */ $index = Index::load($index_id); return $index->indexItems(); } /** * Returns the item IDs for the given entity IDs. * * @param array $entity_ids * An array of entity IDs. * * @return string[] * An array of item IDs. */ protected function getItemIds(array $entity_ids) { $map = $this->ids; $translate_ids = function ($entity_id) use ($map) { return $map[$entity_id]; }; return array_map($translate_ids, $entity_ids); } }