You are here

class SessionHelperTest in Examples for Developers 8

Same name and namespace in other branches
  1. 3.x modules/stream_wrapper_example/tests/src/Unit/SessionHelperTest.php \Drupal\Tests\stream_wrapper_example\Unit\SessionHelperTest

PHPUnit test for the SessionHelper session manipulation class.

The SessionHelper class is a utility used to manipulate an associative array stored in the session object as if it were a file system. This greatly simplifies the code in our stream wrapper class, since SessionHelper handles things like interacting with the session object, and also deals with translating path strings into nested arrays.

The test class covers the equivalent of adding directories and files, reading and writing data nodes (our "files"), and clearing of arrays and data nodes (file deletion for purposes of the stream wrapper class).

@group stream_wrapper_example @group examples

@coversDefaultClass \Drupal\stream_wrapper_example\SessionHelper

Hierarchy

Expanded class hierarchy of SessionHelperTest

Related topics

File

stream_wrapper_example/tests/src/Unit/SessionHelperTest.php, line 28

Namespace

Drupal\Tests\stream_wrapper_example\Unit
View source
class SessionHelperTest extends UnitTestCase {
  use MockSessionTrait;

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

    // Mock the session service.
    $this
      ->createSessionMock();

    // Set up the example.
    $helper = new SessionHelper($this->requestStack);
  }

  /**
   * Run our wrapper through the paces.
   */
  public function testWrapper() {

    // Check out root.
    $helper = new SessionHelper($this->requestStack);
    $root = $helper
      ->getPath('');
    $this
      ->assertInternalType('array', $root);
    $this
      ->assertEmpty($root);

    // Add a top level file.
    $helper = new SessionHelper($this->requestStack);
    $helper
      ->setPath('drupal.txt', "Stuff");
    $text = $helper
      ->getPath('drupal.txt');
    $this
      ->assertEquals($text, "Stuff", "File at base of hierarchy can be read.");

    // Add a "directory".
    $helper = new SessionHelper($this->requestStack);
    $dir = [
      'file.txt' => 'More stuff',
    ];
    $helper
      ->setPath('directory1', $dir);
    $fetched_dir = $helper
      ->getPath('directory1');
    $this
      ->assertEquals($fetched_dir['file.txt'], "More stuff", "File inside of directory can be read.");

    // Check file existance.
    $helper = new SessionHelper($this->requestStack);
    $this
      ->assertTrue($helper
      ->checkPath('drupal.txt'), "File at root still exists.");
    $this
      ->assertFalse($helper
      ->checkPath('file.txt'), "Non-existant file at root does not exist.");
    $this
      ->assertTrue($helper
      ->checkPath('directory1'), "Directory at root still exists.");
    $this
      ->assertTrue($helper
      ->checkPath('directory1/file.txt'), "File in directory at root still exists.");

    // Two deep.
    $helper = new SessionHelper($this->requestStack);
    $helper
      ->setPath('directory1/directory2', []);
    $helper
      ->setPath('directory1/directory2/junk.txt', "Store some junk");
    $text = $helper
      ->getPath('directory1/directory2/junk.txt');
    $this
      ->assertEquals($text, "Store some junk", "File inside of nested directory can be read.");

    // Clear references.
    $helper = new SessionHelper($this->requestStack);
    $before = $helper
      ->checkPath('directory1/directory2/junk.txt');
    $this
      ->assertTrue($before, "File 2 deep exists.");
    $helper
      ->clearPath('directory1/directory2/junk.txt');
    $after = $helper
      ->checkPath('directory1/directory2/junk.txt');
    $this
      ->assertFalse($after, "File 2 deep should be gone.");

    // Clean up test.
    $helper = new SessionHelper($this->requestStack);
    $store = $helper
      ->getPath('');
    $this
      ->assertNotEmpty($store, "Before cleanup store is not empty.");
    $helper
      ->cleanUpStore();
    $store = $helper
      ->getPath('');
    $this
      ->assertEmpty($store, "After cleanup store is empty.");
  }

}

Members

Namesort descending Modifiers Type Description Overrides
MockSessionTrait::$requestStack protected property A representation of the HTTP request.
MockSessionTrait::$sessionStore protected property We'll use this array to back our mock session.
MockSessionTrait::createSessionMock protected function Create a mock session object.
MockSessionTrait::getSessionHelper public function Get a session helper.
MockSessionTrait::getSessionStore public function Helper for mocks.
MockSessionTrait::resetSessionStore public function Helper for our mocks.
MockSessionTrait::setSessionStore public function Helper for our mocks.
PhpunitCompatibilityTrait::getMock Deprecated public function Returns a mock object for the specified class using the available method.
PhpunitCompatibilityTrait::setExpectedException Deprecated public function Compatibility layer for PHPUnit 6 to support PHPUnit 4 code.
SessionHelperTest::setUp protected function Overrides UnitTestCase::setUp
SessionHelperTest::testWrapper public function Run our wrapper through the paces.
UnitTestCase::$randomGenerator protected property The random generator.
UnitTestCase::$root protected property The app root. 1
UnitTestCase::assertArrayEquals protected function Asserts if two arrays are equal by sorting them first.
UnitTestCase::getBlockMockWithMachineName Deprecated protected function Mocks a block with a block plugin. 1
UnitTestCase::getClassResolverStub protected function Returns a stub class resolver.
UnitTestCase::getConfigFactoryStub public function Returns a stub config factory that behaves according to the passed array.
UnitTestCase::getConfigStorageStub public function Returns a stub config storage that returns the supplied configuration.
UnitTestCase::getContainerWithCacheTagsInvalidator protected function Sets up a container with a cache tags invalidator.
UnitTestCase::getRandomGenerator protected function Gets the random generator for the utility methods.
UnitTestCase::getStringTranslationStub public function Returns a stub translation manager that just returns the passed string.
UnitTestCase::randomMachineName public function Generates a unique random string containing letters and numbers.