SessionManagerTest.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. <?php
  2. use Laravel\IoC;
  3. use Laravel\Session\Manager;
  4. class SessionManagerTest extends PHPUnit_Framework_TestCase {
  5. /**
  6. * @dataProvider mockProvider
  7. */
  8. public function testSessionManagerCallsTransporterGet($driver, $transporter)
  9. {
  10. $transporter->expects($this->once())->method('get');
  11. $manager = new Manager($driver, $transporter);
  12. $manager->payload($this->getConfig());
  13. }
  14. /**
  15. * @dataProvider mockProvider
  16. */
  17. public function testSessionManagerCallsDriverLoadWithSessionID($driver, $transporter)
  18. {
  19. $transporter->expects($this->any())->method('get')->will($this->returnValue('something'));
  20. $driver->expects($this->once())->method('load')->with($this->equalTo('something'));
  21. $manager = new Manager($driver, $transporter);
  22. $manager->payload($this->getConfig());
  23. }
  24. /**
  25. * @dataProvider mockProvider
  26. */
  27. public function testSessionManagerReturnsPayloadWhenFound($driver, $transporter)
  28. {
  29. $this->setDriverExpectation($driver, 'load', $this->getDummySession());
  30. $manager = new Manager($driver, $transporter);
  31. $payload = $manager->payload($this->getConfig());
  32. $this->assertInstanceOf('Laravel\\Session\\Payload', $payload);
  33. $this->assertEquals($payload->session, $this->getDummySession());
  34. }
  35. /**
  36. * @dataProvider mockProvider
  37. */
  38. public function testSessionManagerCreatesNewSessionWhenSessionIsNull($driver, $transporter)
  39. {
  40. $this->setDriverExpectation($driver, 'load', null);
  41. $manager = new Manager($driver, $transporter);
  42. $payload = $manager->payload($this->getConfig());
  43. $this->assertInstanceOf('Laravel\\Session\\Payload', $payload);
  44. $this->assertEquals(strlen($payload->session['id']), 40);
  45. $this->assertTrue(is_array($payload->session['data']));
  46. }
  47. /**
  48. * @dataProvider mockProvider
  49. */
  50. public function testSessionManagerCreatesNewSessionWhenSessionIsExpired($driver, $transporter)
  51. {
  52. $dateTime = new DateTime('1970-01-01');
  53. $this->setDriverExpectation($driver, 'load', array('last_activity' => $dateTime->getTimestamp()));
  54. $manager = new Manager($driver, $transporter);
  55. $payload = $manager->payload($this->getConfig());
  56. $this->assertInstanceOf('Laravel\\Session\\Payload', $payload);
  57. $this->assertEquals(strlen($payload->session['id']), 40);
  58. }
  59. /**
  60. * @dataProvider mockProvider
  61. */
  62. public function testSessionManagerSetsCSRFTokenIfOneIsNotPresent($driver, $transporter)
  63. {
  64. $session = $this->getDummySession();
  65. unset($session['data']['csrf_token']);
  66. $this->setDriverExpectation($driver, 'load', $session);
  67. $manager = new Manager($driver, $transporter);
  68. $payload = $manager->payload($this->getConfig());
  69. $this->assertTrue(isset($payload->session['data']['csrf_token']));
  70. $this->assertEquals(strlen($payload->session['data']['csrf_token']), 16);
  71. }
  72. /**
  73. * @dataProvider mockProvider
  74. */
  75. public function testCloseMethodCallsDriverAndTransporter($driver, $transporter)
  76. {
  77. $driver->expects($this->any())->method('load')->will($this->returnValue($this->getDummySession()));
  78. $manager = new Manager($driver, $transporter);
  79. $payload = $this->getMock('Laravel\\Session\\Payload', array('age'), array(array('id' => 'something')));
  80. $payload->expects($this->any())->method('age')->will($this->returnValue('something'));
  81. $driver->expects($this->once())->method('save')->with('something', $this->getConfig());
  82. $transporter->expects($this->once())->method('put')->with('something', $this->getConfig());
  83. $manager->close($payload, $this->getConfig());
  84. }
  85. /**
  86. * @dataProvider mockProvider
  87. */
  88. public function testCloseMethodCallsSweepWhenDriverIsSweeper($driver, $transporter)
  89. {
  90. $driver = $this->getMock('SweeperStub', array('sweep'));
  91. $driver->expects($this->once())->method('sweep');
  92. $manager = new Manager($driver, $transporter);
  93. $config = $this->getConfig();
  94. $config['sweepage'] = array(100, 100);
  95. $manager->close(new Laravel\Session\Payload($this->getDummySession()), $config);
  96. }
  97. /**
  98. * @dataProvider mockProvider
  99. */
  100. public function testCloseMethodDoesntCallSweepWhenDriverIsNotSweeper($driver, $transporter)
  101. {
  102. $driver = $this->getMock('Laravel\\Session\\Drivers\\Driver', array('sweep', 'load', 'save', 'delete'));
  103. $driver->expects($this->never())->method('sweep');
  104. $manager = new Manager($driver, $transporter);
  105. $manager = new Manager($driver, $transporter);
  106. $config = $this->getConfig();
  107. $config['sweepage'] = array(100, 100);
  108. $manager->close(new Laravel\Session\Payload($this->getDummySession()), $config);
  109. }
  110. // ---------------------------------------------------------------------
  111. // Providers
  112. // ---------------------------------------------------------------------
  113. public function mockProvider()
  114. {
  115. return array(array($this->getMockDriver(), $this->getMockTransporter()));
  116. }
  117. // ---------------------------------------------------------------------
  118. // Support Functions
  119. // ---------------------------------------------------------------------
  120. private function setDriverExpectation($mock, $method, $session)
  121. {
  122. $mock->expects($this->any())
  123. ->method($method)
  124. ->will($this->returnValue($session));
  125. }
  126. private function getMockDriver()
  127. {
  128. return $this->getMock('Laravel\\Session\\Drivers\\Driver');
  129. }
  130. private function getMockTransporter()
  131. {
  132. return $this->getMock('Laravel\\Session\\Transporters\\Transporter', array('get', 'put'));
  133. }
  134. private function getDummySession()
  135. {
  136. return array(
  137. 'id' => 'something',
  138. 'last_activity' => time(),
  139. 'data' => array(
  140. 'name' => 'Taylor',
  141. 'csrf_token' => 'token'
  142. ));
  143. }
  144. private function getConfig()
  145. {
  146. return IoC::resolve('laravel.config')->get('session');
  147. }
  148. }
  149. // ---------------------------------------------------------------------
  150. // Stubs
  151. // ---------------------------------------------------------------------
  152. class SweeperStub implements Laravel\Session\Drivers\Driver, Laravel\Session\Drivers\Sweeper {
  153. public function load($id) {}
  154. public function save($session, $config) {}
  155. public function delete($id) {}
  156. public function sweep($expiration) {}
  157. }