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(); } }