CollectionTest.php 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Security\Test\Unit\Model\ResourceModel\AdminSessionInfo;
  7. /**
  8. * Test class for \Magento\Security\Model\ResourceModel\AdminSessionInfo\Collection testing
  9. */
  10. class CollectionTest extends \PHPUnit\Framework\TestCase
  11. {
  12. /** @var \Magento\Security\Model\ResourceModel\AdminSessionInfo\Collection */
  13. protected $collectionMock;
  14. /** @var \Magento\Framework\Stdlib\DateTime\DateTime */
  15. protected $dateTimeMock;
  16. /** @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb */
  17. protected $resourceMock;
  18. /**
  19. * Init mocks for tests
  20. * @return void
  21. */
  22. protected function setUp()
  23. {
  24. $this->dateTimeMock = $this->createMock(\Magento\Framework\Stdlib\DateTime\DateTime::class);
  25. $entityFactory = $this->createMock(\Magento\Framework\Data\Collection\EntityFactoryInterface::class);
  26. $logger = $this->createMock(\Psr\Log\LoggerInterface::class);
  27. $fetchStrategy = $this->createMock(\Magento\Framework\Data\Collection\Db\FetchStrategyInterface::class);
  28. $eventManager = $this->createMock(\Magento\Framework\Event\ManagerInterface::class);
  29. $select = $this->getMockBuilder(\Magento\Framework\DB\Select::class)
  30. ->disableOriginalConstructor()
  31. ->getMock();
  32. $connection = $this->getMockBuilder(\Magento\Framework\DB\Adapter\Pdo\Mysql::class)
  33. ->disableOriginalConstructor()
  34. ->getMock();
  35. $connection->expects($this->any())->method('select')->willReturn($select);
  36. $this->resourceMock = $this->getMockBuilder(\Magento\Framework\Model\ResourceModel\Db\AbstractDb::class)
  37. ->disableOriginalConstructor()
  38. ->setMethods(
  39. ['getConnection', 'getMainTable', 'getTable', 'deleteSessionsOlderThen', 'updateStatusByUserId']
  40. )
  41. ->getMockForAbstractClass();
  42. $this->resourceMock->expects($this->any())
  43. ->method('getConnection')
  44. ->will($this->returnValue($connection));
  45. $this->resourceMock->expects($this->any())->method('getMainTable')->willReturn('table_test');
  46. $this->resourceMock->expects($this->any())->method('getTable')->willReturn('test');
  47. $this->collectionMock = $this->getMockBuilder(
  48. \Magento\Security\Model\ResourceModel\AdminSessionInfo\Collection::class
  49. )
  50. ->setMethods(['addFieldToFilter', 'getResource', 'getConnection'])
  51. ->setConstructorArgs(
  52. [
  53. $entityFactory,
  54. $logger,
  55. $fetchStrategy,
  56. $eventManager,
  57. 'dateTime' => $this->dateTimeMock,
  58. $connection,
  59. $this->resourceMock
  60. ]
  61. )
  62. ->disableOriginalConstructor()
  63. ->getMock();
  64. $this->collectionMock->expects($this->any())
  65. ->method('getConnection')
  66. ->will($this->returnValue($connection));
  67. $reflection = new \ReflectionClass(get_class($this->collectionMock));
  68. $reflectionProperty = $reflection->getProperty('dateTime');
  69. $reflectionProperty->setAccessible(true);
  70. $reflectionProperty->setValue($this->collectionMock, $this->dateTimeMock);
  71. $this->collectionMock->expects($this->any())
  72. ->method('getResource')
  73. ->willReturn($this->resourceMock);
  74. }
  75. /**
  76. * @return void
  77. */
  78. public function testFilterByUser()
  79. {
  80. $userId = 10;
  81. $status = 2;
  82. $sessionIdToExclude = [20, 21, 22];
  83. $this->collectionMock->expects($this->exactly(3))
  84. ->method('addFieldToFilter')
  85. ->withConsecutive(
  86. ['user_id', $userId],
  87. ['status', $status],
  88. ['session_id', ['neq' => $sessionIdToExclude]]
  89. )
  90. ->willReturnSelf();
  91. $this->assertEquals(
  92. $this->collectionMock,
  93. $this->collectionMock->filterByUser($userId, $status, $sessionIdToExclude)
  94. );
  95. }
  96. /**
  97. * @return void
  98. */
  99. public function testFilterExpiredSessions()
  100. {
  101. $sessionLifeTime = '600';
  102. $timestamp = time();
  103. $this->dateTimeMock->expects($this->once())
  104. ->method('gmtTimestamp')
  105. ->willReturn($timestamp);
  106. $this->collectionMock->expects($this->once())
  107. ->method('addFieldToFilter')
  108. ->willReturnSelf();
  109. $this->assertEquals($this->collectionMock, $this->collectionMock->filterExpiredSessions($sessionLifeTime));
  110. }
  111. /**
  112. * @return void
  113. */
  114. public function testDeleteSessionsOlderThen()
  115. {
  116. $timestamp = time();
  117. $this->resourceMock->expects($this->any())
  118. ->method('deleteSessionsOlderThen')
  119. ->with($timestamp);
  120. $result = $this->collectionMock->deleteSessionsOlderThen($timestamp);
  121. $this->assertEquals($this->collectionMock, $result);
  122. }
  123. /**
  124. * @return void
  125. */
  126. public function testUpdateActiveSessionsStatus()
  127. {
  128. $status = 2;
  129. $userId = 10;
  130. $sessionIdToExclude = '20';
  131. $updateOlderThen = 12345;
  132. $result = 1;
  133. $this->resourceMock->expects($this->any())
  134. ->method('updateStatusByUserId')
  135. ->with(
  136. $status,
  137. $userId,
  138. [\Magento\Security\Model\AdminSessionInfo::LOGGED_IN],
  139. [$sessionIdToExclude],
  140. $updateOlderThen
  141. )->willReturn($result);
  142. $this->assertEquals(
  143. $result,
  144. $this->collectionMock->updateActiveSessionsStatus($status, $userId, $sessionIdToExclude, $updateOlderThen)
  145. );
  146. }
  147. }