bynder-4.0.0-beta1/tests/src/FunctionalJavascript/BynderUsageTest.php

tests/src/FunctionalJavascript/BynderUsageTest.php
<?php

namespace Drupal\Tests\bynder\FunctionalJavascript;

use Drupal\Core\Field\FieldStorageDefinitionInterface;
use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
use Drupal\user\Entity\Role;

/**
 * Test the Bynder media usage info.
 *
 * @group bynder
 */
class BynderUsageTest extends WebDriverTestBase {

  /**
   * User for testing.
   *
   * @var \Drupal\user\UserInterface
   */
  protected $testUser;

  /**
   * Role for testing.
   *
   * @var \Drupal\user\RoleInterface
   */
  protected $testRole;

  /**
   * Modules to enable.
   *
   * @var array
   */
  protected static $modules = [
    'bynder',
    'media',
    'bynder_test_module',
    'node',
  ];

  /**
   * {@inheritdoc}
   */
  protected $defaultTheme = 'stark';

  /**
   * {@inheritdoc}
   */
  protected function setUp(): void {
    parent::setUp();

    $this->createContentType(['type' => 'page']);

    $entities = [
      'node' => 'page',
      'media' => 'media_type',
    ];

    foreach ($entities as $entity => $bundle) {
      foreach (['string', 'string_long', 'entity_reference'] as $type) {
        $settings = $type == 'entity_reference' ? ['target_type' => 'media'] : [];
        \Drupal::entityTypeManager()->getStorage('field_storage_config')
          ->create(
            [
              'field_name' => 'field_' . $type,
              'entity_type' => $entity,
              'type' => $type,
              'cardinality' => FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED,
              'settings' => $settings,
            ]
          )->save();

        $settings = $type == 'entity_reference' ? [
          'handler' => 'default:media',
          'handler_settings' => [
            'target_bundles' => [
              'media_type' => 'media_type',
            ],
          ],
        ] : [];
        \Drupal::entityTypeManager()->getStorage('field_config')
          ->create(
            [
              'entity_type' => $entity,
              'bundle' => $bundle,
              'field_name' => 'field_' . $type,
              'label' => $this->randomMachineName(),
              'settings' => $settings,
            ]
          )->save();
      }
    }

    $this->testRole = Role::create(['id' => 'editor', 'label' => 'Editor']);
    $this->testRole->grantPermission('access content');
    $this->testRole->save();

    $this->testUser = $this->drupalCreateUser();
    $this->testUser->addRole($this->testRole->id());
    $this->testUser->save();

    $this->drupalLogin($this->testUser);
  }

  /**
   * Test Bynder media usage info.
   */
  public function testBynderUsage() {
    $first_node = \Drupal::entityTypeManager()->getStorage('node')->create(
      [
        'title' => 'First node title',
        'field_entity_reference' => [],
        'type' => 'page',
      ]
    );
    $first_node->save();
    $this->drupalGet('node/' . $first_node->id() . '/bynder-usage');
    // Test access is forbidden without permission.
    $this->assertSession()->responseContains('Access denied');
    $this->assertSession()->responseContains(
      'You are not authorized to access this page.'
    );

    $this->testRole->grantPermission('view bynder media usage');
    $this->testRole->save();

    // Go on Bynder media usage tab and test message when table is empty.
    $this->drupalGet('node/' . $first_node->id() . '/bynder-usage');
    $this->assertSession()->responseContains(
      'There are no Bynder media found on the page.'
    );

    \Drupal::configFactory()->getEditable('bynder.settings')
      ->set('account_domain', 'https://plugin.getbynder.com/')
      ->save(TRUE);

    $bynder_data = [
      'type' => 'image',
      'id' => '123',
      'name' => 'Bynder name',
      'propertyOptions' => [
        0 => "6EF40BA8-E011-4758-80C12BDCA70DDF4F",
      ],
    ];

    \Drupal::keyValue('bynder_mock')->set('bynder.bynder_test_media_info', $bynder_data);

    $media = \Drupal::entityTypeManager()->getStorage('media')->create(
      [
        'name' => 'Media name test',
        'field_media_uuid' => '123',
        'bundle' => 'media_type',
        'type' => 'bynder',
      ]
    );

    $media->save();

    $node = \Drupal::entityTypeManager()->getStorage('node')->create(
      [
        'title' => 'Page title',
        'field_entity_reference' => $media->id(),
        'type' => 'page',
      ]
    );
    $node->save();
    // Assert referenced Bynder media appears on Bynder media usage tab.
    $this->drupalGet('node/' . $node->id() . '/bynder-usage');
    $this->assertSession()->responseContains($bynder_data['name']);
    $this->assertSession()->responseContains($bynder_data['type']);
    $this->assertSession()->responseContains('N/A');
    $this->assertSession()->linkExists('Edit');
    $this->assertSession()->linkByHrefExists(
      '/media/' . $media->id() . '/edit'
    );
    $this->assertSession()->linkExists('Edit on Bynder');
    $this->assertSession()->linkByHrefExists(
      '/media?mediaId=' . $bynder_data['id']
    );

    \Drupal::configFactory()->getEditable('bynder.settings')
      ->set('usage_metaproperty', '6EF40BA8-E011-4758-80C12BDCA1111111')
      ->set('restrictions.royalty_free', '6EF40BA8-E011-4758-80C12BDCA70DDF4F')
      ->set('restrictions.web_license', '6EF40BA8-E011-4758-80C12BDCA2222222')
      ->set('restrictions.print_license', '6EF40BA8-E011-4758-80C12BDCA3333333')
      ->save(TRUE);

    $this->drupalGet('node/' . $node->id() . '/bynder-usage');
    $this->assertSession()->responseContains('Royality free');
    $this->assertSession()->responseNotContains('N/A');

    \Drupal::configFactory()->getEditable('bynder.settings')
      ->set('restrictions.royalty_free', '6EF40BA8-E011-4758-80C12BDCA2222222')
      ->set('restrictions.web_license', '6EF40BA8-E011-4758-80C12BDCA70DDF4F')
      ->save(TRUE);

    $this->drupalGet('node/' . $node->id() . '/bynder-usage');
    $this->assertSession()->responseNotContains('Royality free');
    $this->assertSession()->responseNotContains('N/A');
    $this->assertSession()->responseContains('Web licence');
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc