crossword-8.x-1.x-dev/tests/src/Kernel/Formatter/SimpleCrosswordFormatterTestBase.php
tests/src/Kernel/Formatter/SimpleCrosswordFormatterTestBase.php
<?php namespace Drupal\Tests\crossword\Kernel\Formatter; use Drupal\entity_test\Entity\EntityTestRev; use Drupal\field\Entity\FieldConfig; use Drupal\field\Entity\FieldStorageConfig; use Drupal\KernelTests\KernelTestBase; /** * Base class for testing crossword field formatter plugins. * * These check that the render array gives uus what we expect. * See FunctionalJavascript tests for tests that test js. * Inspired by the core StringFormatterTest. */ abstract class SimpleCrosswordFormatterTestBase extends KernelTestBase { /** * The modules to load to run the test. * * @var array */ protected static $modules = [ 'field', 'entity_test', 'system', 'user', 'file', 'crossword', ]; /** * Id of the plugin. * * @var string */ public $id; /** * A test entity. * * @var Drupal\entity_test\Entity\EntityTestRev */ public $entity; /** * The class of the formatter. * * @var string */ protected $class; /** * Settings to try in addition to default settings. * * @var array */ public $customSettings; /** * {@inheritdoc} */ protected function setUp(): void { parent::setUp(); $this->installConfig(['system', 'field']); $this->installEntitySchema('entity_test_rev'); $this->installSchema('file', ['file_usage']); $this->installEntitySchema('file'); $this->entity = $this->createTestEntity(); $this->class = \Drupal::service('plugin.manager.field.formatter')->getDefinitions()[$this->id]['class']; } /** * Helper function to create node that can be used for testing. * * @return Drupal\entity_test\Entity\EntityTestRev * An entity to be used for testing. */ protected function createTestEntity() { // First we move a test file to the file system. $contents = file_get_contents(\Drupal::service('extension.list.module')->getPath('crossword') . "/tests/files/test.txt"); $file = \Drupal::service('file.repository')->writeData($contents, 'public://test.txt'); $field_storage = FieldStorageConfig::create([ 'field_name' => 'field_crossword', 'entity_type' => 'entity_test_rev', 'type' => 'crossword', ]); $field_storage->save(); $instance = FieldConfig::create([ 'field_storage' => $field_storage, 'bundle' => 'entity_test_rev', 'label' => 'Crossword', ]); $instance->save(); $entity = EntityTestRev::create([]); $entity->set('field_crossword', $file->id()); $entity->save(); return $entity; } /** * Test things in the details section: title, author, notepad. * * @return bool * True if everything looks good. */ protected function checkDetail(string $detail_name, array $render, string $value, string $html_tag) { if (empty($html_tag)) { return empty($render[0]['#content'][$detail_name]); } return ($value == $render[0]['#content'][$detail_name]['#value']) && ($html_tag == $render[0]['#content'][$detail_name]['#tag']); } }