SessionManagerTest.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  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 test_session_manager_calls_transporter_get($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 test_session_manager_calls_driver_load_with_session_id($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 test_session_manager_returns_payload_when_found($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 test_session_manager_creates_new_session_when_session_is_null($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 test_session_manager_creates_new_session_when_session_is_expired($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 test_session_manager_sets_csrf_token_if_one_is_not_present($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 test_close_method_calls_driver_and_transporter($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 test_close_method_calls_sweep_when_driver_is_sweeper($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 test_close_method_doesnt_call_sweep_when_driver_isnt_sweeper($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. $config = $this->getConfig();
  106. $config['sweepage'] = array(100, 100);
  107. $manager->close(new Laravel\Session\Payload($this->getDummySession()), $config);
  108. }
  109. // ---------------------------------------------------------------------
  110. // Providers
  111. // ---------------------------------------------------------------------
  112. public function mockProvider()
  113. {
  114. return array(array($this->getMockDriver(), $this->getMockTransporter()));
  115. }
  116. // ---------------------------------------------------------------------
  117. // Support Functions
  118. // ---------------------------------------------------------------------
  119. private function setDriverExpectation($mock, $method, $session)
  120. {
  121. $mock->expects($this->any())
  122. ->method($method)
  123. ->will($this->returnValue($session));
  124. }
  125. private function getMockDriver()
  126. {
  127. return $this->getMock('Laravel\\Session\\Drivers\\Driver');
  128. }
  129. private function getMockTransporter()
  130. {
  131. return $this->getMock('Laravel\\Session\\Transporters\\Transporter', array('get', 'put'));
  132. }
  133. private function getDummySession()
  134. {
  135. return array(
  136. 'id' => 'something',
  137. 'last_activity' => time(),
  138. 'data' => array(
  139. 'name' => 'Taylor',
  140. 'csrf_token' => 'token'
  141. ));
  142. }
  143. private function getConfig()
  144. {
  145. return Laravel\Config::get('session');
  146. }
  147. }
  148. // ---------------------------------------------------------------------
  149. // Stubs
  150. // ---------------------------------------------------------------------
  151. class SweeperStub implements Laravel\Session\Drivers\Driver, Laravel\Session\Drivers\Sweeper {
  152. public function load($id) {}
  153. public function save($session, $config, $exists) {}
  154. public function delete($id) {}
  155. public function sweep($expiration) {}
  156. }