crossword-8.x-1.x-dev/tests/src/Functional/CrosswordContestAccessTest.php

tests/src/Functional/CrosswordContestAccessTest.php
<?php

namespace Drupal\Tests\crossword\Functional;

use Drupal\media\Entity\Media;
use Drupal\Tests\BrowserTestBase;

/**
 * Tests crossword_contest security.
 *
 * @group crossword
 */
class CrosswordContestAccessTest extends BrowserTestBase {

  /**
   * {@inheritdoc}
   */
  protected static $modules = ['crossword_contest_tests'];

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

  /**
   * Name of test puzzle.
   *
   * @var string
   */
  protected $testPuzzleFilename = 'test.txt';

  /**
   * Test access on the route.
   */
  public function testCrosswordContestAccess() {
    $this->createTestMedia();
    $answer = urlencode(json_encode(['answer']));

    // Published media access.
    $this->drupalLogin($this->drupalCreateUser([
      'access content',
      'view media',
    ]));
    // Published.
    $this->drupalGet("crossword-contest/1/$answer");
    $this->assertSession()->statusCodeEquals(200);
    // Unpublished.
    $this->drupalGet("crossword-contest/2/$answer");
    $this->assertSession()->statusCodeEquals(403);
    // No crossword.
    $this->drupalGet("crossword-contest/3/$answer");
    $this->assertSession()->statusCodeEquals(403);
    // Media doesn't exist.
    $this->drupalGet("crossword-contest/4/$answer");
    $this->assertSession()->statusCodeEquals(403);

    // Now as admin.
    $this->drupalLogin($this->drupalCreateUser([], 'new_admin', TRUE));
    $this->drupalGet("crossword-contest/1/$answer");
    $this->assertSession()->statusCodeEquals(200);
    $this->drupalGet("crossword-contest/2/$answer");
    $this->assertSession()->statusCodeEquals(200);
    $this->drupalGet("crossword-contest/3/$answer");
    $this->assertSession()->statusCodeEquals(403);
    $this->drupalGet("crossword-contest/4/$answer");
    $this->assertSession()->statusCodeEquals(403);
  }

  /**
   * Helper function to create media.
   */
  protected function createTestMedia() {
    // First we move a test file to the file system.
    $contents = file_get_contents(\Drupal::service('extension.list.module')->getPath('crossword') . "/tests/files/{$this->testPuzzleFilename}");
    $file = \Drupal::service('file.repository')->writeData($contents, "public://{$this->testPuzzleFilename}");
    // Now use that file in a new crossword_contests media.
    $media = Media::create(['bundle' => 'crossword_contest']);
    $media->set('name', 'Published Crossword Contest');
    $media->set('field_crossword_contest_xword', $file->id());
    $media->set('status', 1);
    $media->save();
    $media = Media::create(['bundle' => 'crossword_contest']);
    $media->set('name', 'Un-Published Crossword Contest');
    $media->set('field_crossword_contest_xword', $file->id());
    $media->set('status', 0);
    $media->save();
    $media = Media::create(['bundle' => 'crossword_contest']);
    $media->set('name', 'Sans Crossword Contest');
    $media->set('status', 1);
    $media->save();
  }

}

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

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