acquia_commercemanager-8.x-1.122/modules/acm/tests/src/Unit/DatabaseSessionStoreTest.php
modules/acm/tests/src/Unit/DatabaseSessionStoreTest.php
<?php namespace Drupal\Tests\acm\Unit; use Drupal\Tests\Core\TempStore\PrivateTempStoreTest; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\RequestStack; /** * @coversDefaultClass \Drupal\acm\DatabaseSessionStore * @group acm */ class DatabaseSessionStoreTest extends PrivateTempStoreTest { /** * The mock key value expirable backend. * * @var \Drupal\Core\KeyValueStore\KeyValueStoreExpirableInterface|\PHPUnit_Framework_MockObject_MockObject */ protected $keyValue; /** * The mock lock backend. * * @var \Drupal\Core\Lock\LockBackendInterface|\PHPUnit_Framework_MockObject_MockObject */ protected $lock; /** * The user temp store. * * @var \Drupal\user\DatabaseSessionStore */ protected $tempStore; /** * The current user. * * @var \Drupal\Core\Session\AccountProxyInterface|\PHPUnit_Framework_MockObject_MockObject */ protected $currentUser; /** * The request stack. * * @var \Symfony\Component\HttpFoundation\RequestStack */ protected $requestStack; /** * A tempstore object belonging to the owner. * * @var \stdClass */ protected $ownObject; /** * A tempstore object not belonging to the owner. * * @var \stdClass */ protected $otherObject; /** * {@inheritdoc} */ protected function setUp() { parent::setUp(); $this->keyValue = $this->getMock('Drupal\Core\KeyValueStore\KeyValueStoreExpirableInterface'); $this->lock = $this->getMock('Drupal\Core\Lock\LockBackendInterface'); $this->currentUser = $this->getMock('Drupal\acm\User\AccountProxyInterface'); $this->currentUser->expects($this->any()) ->method('id') ->willReturn(1); $this->requestStack = new RequestStack(); $request = Request::createFromGlobals(); $this->requestStack->push($request); $this->tempStore = new MockDatabaseSessionStore($this->keyValue, $this->lock, $this->currentUser, $this->requestStack); $this->ownObject = (object) [ 'data' => 'test_data', 'owner' => $this->currentUser->id(), 'updated' => (int) $request->server->get('REQUEST_TIME'), ]; // Clone the object but change the owner. $this->otherObject = clone $this->ownObject; $this->otherObject->owner = 2; } /** * Tests the get() method. * * @covers ::get */ public function testGetWithDefault() { $this->keyValue->expects($this->at(0)) ->method('get') ->with('1:test') ->willReturn(NULL); $current_user = $this->getMock('Drupal\acm\User\AccountProxyInterface'); $tempStore = new MockDatabaseSessionStore($this->keyValue, $this->lock, $current_user, $this->requestStack); $this->assertNull($tempStore->get('test')); $this->assertSame('default_value', $tempStore->get('test', 'default_value')); } /** * Tests the get() method. * * @covers ::get */ public function testGetWithNoCurrentUser() { $current_user = $this->getMock('Drupal\acm\User\AccountProxyInterface'); $current_user->expects($this->any()) ->method('getAccount') ->willReturn(NULL); $this->keyValue->expects($this->at(0)) ->method('get') ->with('1:test'); $tempStore = new MockDatabaseSessionStore($this->keyValue, $this->lock, $current_user, $this->requestStack); $tempStore->get('test'); } /** * Tests the get() method. * * @covers ::get */ public function testGetWithCurrentUserWithNoPreviousAnonSession() { $current_user = $this->getMock('Drupal\acm\User\AccountProxyInterface'); $current_uid = 3; $current_user->expects($this->any()) ->method('id') ->willReturn($current_uid); $current_user->expects($this->any()) ->method('getAccount') ->willReturn($current_user); // First checks if there is an owner reference. $this->keyValue->expects($this->at(0)) ->method('get') ->with($current_uid . ':' . MockDatabaseSessionStore::OWNER_REFERENCE_NAMESPACE) ->will($this->returnValue(NULL)); // Then looks up the key with the current owner since owner reference // returned null. $this->keyValue->expects($this->at(1)) ->method('get') ->with($current_uid . ':test') ->will($this->returnValue(NULL)); $tempStore = new MockDatabaseSessionStore($this->keyValue, $this->lock, $current_user, $this->requestStack); $tempStore->get('test'); } /** * Tests the get() method. * * @covers ::get */ public function testGetWithCurrentUserWithPreviousAnonSession() { $current_user = $this->getMock('Drupal\acm\User\AccountProxyInterface'); $current_uid = 3; $current_user->expects($this->any()) ->method('id') ->willReturn($current_uid); $current_user->expects($this->any()) ->method('getAccount') ->willReturn($current_user); $request = Request::createFromGlobals(); $owner_reference = (object) [ 'data' => 'orig-sess-id', 'owner' => $current_uid, 'updated' => (int) $request->server->get('REQUEST_TIME'), ]; // Returns the original owner reference. $this->keyValue->expects($this->at(0)) ->method('get') ->with($current_uid . ':' . MockDatabaseSessionStore::OWNER_REFERENCE_NAMESPACE) ->will($this->returnValue($owner_reference)); // Instead of using the current uid as the owner, it should use the owner // reference. $this->keyValue->expects($this->at(1)) ->method('get') ->with('orig-sess-id:test') ->will($this->returnValue(NULL)); $tempStore = new MockDatabaseSessionStore($this->keyValue, $this->lock, $current_user, $this->requestStack); $tempStore->get('test'); } /** * Tests the get() method. * * @covers ::get */ public function testGetWithCurrentUserWithPreviousAnonSessionAndNoReference() { $current_user = $this->getMock('Drupal\acm\User\AccountProxyInterface'); $current_uid = 3; $this->lock->expects($this->once()) ->method('acquire') ->with($current_uid . ':' . MockDatabaseSessionStore::OWNER_REFERENCE_NAMESPACE) ->will($this->returnValue(TRUE)); $this->lock->expects($this->never()) ->method('wait'); $this->lock->expects($this->once()) ->method('release') ->with($current_uid . ':' . MockDatabaseSessionStore::OWNER_REFERENCE_NAMESPACE); $current_user->expects($this->any()) ->method('id') ->willReturn($current_uid); $current_user->expects($this->any()) ->method('getAccount') ->willReturn($current_user); // No owner reference yet, but check that it was looked up. $this->keyValue->expects($this->at(0)) ->method('get') ->with($current_uid . ':' . MockDatabaseSessionStore::OWNER_REFERENCE_NAMESPACE) ->willReturn(NULL); // Check that owner reference was created. $request = Request::createFromGlobals(); $owner_reference = (object) [ 'data' => 1, 'owner' => $current_uid, 'updated' => (int) $request->server->get('REQUEST_TIME'), ]; $this->keyValue->expects($this->at(1)) ->method('setWithExpire') ->with($current_uid . ':' . MockDatabaseSessionStore::OWNER_REFERENCE_NAMESPACE, $owner_reference); // Should still use session id since no owner reference originally. $this->keyValue->expects($this->at(2)) ->method('get') ->with('1:test') ->willReturn(NULL); $tempStore = new MockDatabaseSessionStore($this->keyValue, $this->lock, $current_user, $this->requestStack); $tempStore->setCookie(MockDatabaseSessionStore::SESSION_ID_COOKIE, '1'); $tempStore->get('test'); } /** * Tests the set() method. * * @covers ::set */ public function testSetWithDefaultExpire() { $this->lock->expects($this->once()) ->method('acquire') ->with('1:test') ->will($this->returnValue(TRUE)); $this->lock->expects($this->never()) ->method('wait'); $this->lock->expects($this->once()) ->method('release') ->with('1:test'); $this->keyValue->expects($this->once()) ->method('setWithExpire') ->with('1:test', $this->ownObject, 604800); $this->tempStore->set('test', 'test_data'); } /** * Tests the set() method. * * @covers ::set */ public function testSetWithCustomExpire() { $this->lock->expects($this->once()) ->method('acquire') ->with('1:test') ->will($this->returnValue(TRUE)); $this->lock->expects($this->never()) ->method('wait'); $this->lock->expects($this->once()) ->method('release') ->with('1:test'); $this->keyValue->expects($this->once()) ->method('setWithExpire') ->with('1:test', $this->ownObject, 12345); $this->tempStore->set('test', 'test_data', 12345); } }