annotate core/modules/media/tests/src/Kernel/MediaTranslationTest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\Tests\media\Kernel;
Chris@0 4
Chris@0 5 use Drupal\Component\Render\FormattableMarkup;
Chris@0 6 use Drupal\language\Entity\ConfigurableLanguage;
Chris@0 7
Chris@0 8 /**
Chris@0 9 * Tests multilanguage fields logic.
Chris@0 10 *
Chris@0 11 * @group media
Chris@0 12 */
Chris@0 13 class MediaTranslationTest extends MediaKernelTestBase {
Chris@0 14
Chris@0 15 /**
Chris@0 16 * Modules to install.
Chris@0 17 *
Chris@0 18 * @var array
Chris@0 19 */
Chris@0 20 public static $modules = ['language'];
Chris@0 21
Chris@0 22 /**
Chris@0 23 * The test media translation type.
Chris@0 24 *
Chris@0 25 * @var \Drupal\media\MediaTypeInterface
Chris@0 26 */
Chris@0 27 protected $testTranslationMediaType;
Chris@0 28
Chris@0 29 /**
Chris@0 30 * {@inheritdoc}
Chris@0 31 */
Chris@0 32 protected function setUp() {
Chris@0 33 parent::setUp();
Chris@0 34
Chris@0 35 $this->installConfig(['language']);
Chris@0 36
Chris@0 37 // Create a test media type for translations.
Chris@0 38 $this->testTranslationMediaType = $this->createMediaType('test_translation');
Chris@0 39
Chris@0 40 for ($i = 0; $i < 3; ++$i) {
Chris@0 41 $language_id = 'l' . $i;
Chris@0 42 ConfigurableLanguage::create([
Chris@0 43 'id' => $language_id,
Chris@0 44 'label' => $this->randomString(),
Chris@0 45 ])->save();
Chris@0 46 file_put_contents('public://' . $language_id . '.png', '');
Chris@0 47 }
Chris@0 48 }
Chris@0 49
Chris@0 50 /**
Chris@0 51 * Test translatable fields storage/retrieval.
Chris@0 52 */
Chris@0 53 public function testTranslatableFieldSaveLoad() {
Chris@0 54 /** @var \Drupal\Core\Entity\EntityTypeInterface $entity_type */
Chris@0 55 $entity_type = $this->container->get('entity_type.manager')->getDefinition('media');
Chris@0 56 $this->assertTrue($entity_type->isTranslatable(), 'Media is translatable.');
Chris@0 57
Chris@0 58 // Prepare the field translations.
Chris@0 59 $source_field_definition = $this->testTranslationMediaType->getSource()->getSourceFieldDefinition($this->testTranslationMediaType);
Chris@0 60 $source_field_storage = $source_field_definition->getFieldStorageDefinition();
Chris@0 61 /** @var \Drupal\Core\Entity\Sql\SqlContentEntityStorage $media_storage */
Chris@0 62 $media_storage = $this->container->get('entity_type.manager')->getStorage('media');
Chris@0 63 /** @var \Drupal\media\Entity\Media $media */
Chris@0 64 $media = $media_storage->create([
Chris@0 65 'bundle' => $this->testTranslationMediaType->id(),
Chris@0 66 'name' => 'Unnamed',
Chris@0 67 ]);
Chris@0 68
Chris@0 69 $field_translations = [];
Chris@0 70 $available_langcodes = array_keys($this->container->get('language_manager')->getLanguages());
Chris@0 71 $media->set('langcode', reset($available_langcodes));
Chris@0 72 foreach ($available_langcodes as $langcode) {
Chris@0 73 $values = [];
Chris@0 74 for ($i = 0; $i < $source_field_storage->getCardinality(); $i++) {
Chris@0 75 $values[$i]['value'] = $this->randomString();
Chris@0 76 }
Chris@0 77 $field_translations[$langcode] = $values;
Chris@0 78 $translation = $media->hasTranslation($langcode) ? $media->getTranslation($langcode) : $media->addTranslation($langcode);
Chris@0 79 $translation->{$source_field_definition->getName()}->setValue($field_translations[$langcode]);
Chris@0 80 }
Chris@0 81
Chris@0 82 // Save and reload the field translations.
Chris@0 83 $media->save();
Chris@0 84 $media_storage->resetCache();
Chris@0 85 $media = $media_storage->load($media->id());
Chris@0 86
Chris@0 87 // Check if the correct source field values were saved/loaded.
Chris@0 88 foreach ($field_translations as $langcode => $items) {
Chris@0 89 /** @var \Drupal\media\MediaInterface $media_translation */
Chris@0 90 $media_translation = $media->getTranslation($langcode);
Chris@0 91 $result = TRUE;
Chris@0 92 foreach ($items as $delta => $item) {
Chris@0 93 $result = $result && $item['value'] == $media_translation->{$source_field_definition->getName()}[$delta]->value;
Chris@0 94 }
Chris@0 95 $this->assertTrue($result, new FormattableMarkup('%language translation field value not correct.', ['%language' => $langcode]));
Chris@17 96 $this->assertSame('public://' . $langcode . '.png', $media_translation->getSource()->getMetadata($media_translation, 'thumbnail_uri'), new FormattableMarkup('%language translation thumbnail metadata attribute is not correct.', ['%language' => $langcode]));
Chris@17 97 $this->assertSame('public://' . $langcode . '.png', $media_translation->get('thumbnail')->entity->getFileUri(), new FormattableMarkup('%language translation thumbnail value is not correct.', ['%language' => $langcode]));
Chris@0 98 $this->assertEquals('Test Thumbnail ' . $langcode, $media_translation->getSource()->getMetadata($media_translation, 'test_thumbnail_alt'), new FormattableMarkup('%language translation thumbnail alt metadata attribute is not correct.', ['%language' => $langcode]));
Chris@17 99 $this->assertSame('Test Thumbnail ' . $langcode, $media_translation->get('thumbnail')->alt, new FormattableMarkup('%language translation thumbnail alt value is not correct.', ['%language' => $langcode]));
Chris@0 100 }
Chris@0 101 }
Chris@0 102
Chris@0 103 }