You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

UserStatusMapperTest.php 5.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. <?php
  2. declare(strict_types=1);
  3. /**
  4. * @copyright Copyright (c) 2020, Georg Ehrke
  5. *
  6. * @author Georg Ehrke <oc.list@georgehrke.com>
  7. *
  8. * @license AGPL-3.0
  9. *
  10. * This code is free software: you can redistribute it and/or modify
  11. * it under the terms of the GNU Affero General Public License, version 3,
  12. * as published by the Free Software Foundation.
  13. *
  14. * This program is distributed in the hope that it will be useful,
  15. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17. * GNU Affero General Public License for more details.
  18. *
  19. * You should have received a copy of the GNU Affero General Public License, version 3,
  20. * along with this program. If not, see <http://www.gnu.org/licenses/>
  21. *
  22. */
  23. namespace OCA\UserStatus\Tests\Db;
  24. use Doctrine\DBAL\Exception\UniqueConstraintViolationException;
  25. use OCA\UserStatus\Db\UserStatus;
  26. use OCA\UserStatus\Db\UserStatusMapper;
  27. use Test\TestCase;
  28. class UserStatusMapperTest extends TestCase {
  29. /** @var UserStatusMapper */
  30. private $mapper;
  31. protected function setUp(): void {
  32. parent::setUp();
  33. // make sure that DB is empty
  34. $qb = self::$realDatabase->getQueryBuilder();
  35. $qb->delete('user_status')->execute();
  36. $this->mapper = new UserStatusMapper(self::$realDatabase);
  37. }
  38. public function testGetTableName(): void {
  39. $this->assertEquals('user_status', $this->mapper->getTableName());
  40. }
  41. public function testGetFindAll(): void {
  42. $this->insertSampleStatuses();
  43. $allResults = $this->mapper->findAll();
  44. $this->assertCount(3, $allResults);
  45. $limitedResults = $this->mapper->findAll(2);
  46. $this->assertCount(2, $limitedResults);
  47. $this->assertEquals('admin', $limitedResults[0]->getUserId());
  48. $this->assertEquals('user1', $limitedResults[1]->getUserId());
  49. $offsetResults = $this->mapper->findAll(null, 2);
  50. $this->assertCount(1, $offsetResults);
  51. $this->assertEquals('user2', $offsetResults[0]->getUserId());
  52. }
  53. public function testGetFind(): void {
  54. $this->insertSampleStatuses();
  55. $adminStatus = $this->mapper->findByUserId('admin');
  56. $this->assertEquals('admin', $adminStatus->getUserId());
  57. $this->assertEquals('offline', $adminStatus->getStatus());
  58. $this->assertEquals(0, $adminStatus->getStatusTimestamp());
  59. $this->assertEquals(false, $adminStatus->getIsUserDefined());
  60. $this->assertEquals(null, $adminStatus->getCustomIcon());
  61. $this->assertEquals(null, $adminStatus->getCustomMessage());
  62. $this->assertEquals(null, $adminStatus->getClearAt());
  63. $user1Status = $this->mapper->findByUserId('user1');
  64. $this->assertEquals('user1', $user1Status->getUserId());
  65. $this->assertEquals('dnd', $user1Status->getStatus());
  66. $this->assertEquals(5000, $user1Status->getStatusTimestamp());
  67. $this->assertEquals(true, $user1Status->getIsUserDefined());
  68. $this->assertEquals('💩', $user1Status->getCustomIcon());
  69. $this->assertEquals('Do not disturb', $user1Status->getCustomMessage());
  70. $this->assertEquals(50000, $user1Status->getClearAt());
  71. $user2Status = $this->mapper->findByUserId('user2');
  72. $this->assertEquals('user2', $user2Status->getUserId());
  73. $this->assertEquals('away', $user2Status->getStatus());
  74. $this->assertEquals(5000, $user2Status->getStatusTimestamp());
  75. $this->assertEquals(false, $user2Status->getIsUserDefined());
  76. $this->assertEquals('🏝', $user2Status->getCustomIcon());
  77. $this->assertEquals('On vacation', $user2Status->getCustomMessage());
  78. $this->assertEquals(60000, $user2Status->getClearAt());
  79. }
  80. public function testUserIdUnique(): void {
  81. // Test that inserting a second status for a user is throwing an exception
  82. $userStatus1 = new UserStatus();
  83. $userStatus1->setUserId('admin');
  84. $userStatus1->setStatus('dnd');
  85. $userStatus1->setStatusTimestamp(5000);
  86. $userStatus1->setIsUserDefined(true);
  87. $this->mapper->insert($userStatus1);
  88. $userStatus2 = new UserStatus();
  89. $userStatus2->setUserId('admin');
  90. $userStatus2->setStatus('away');
  91. $userStatus2->setStatusTimestamp(6000);
  92. $userStatus2->setIsUserDefined(false);
  93. $this->expectException(UniqueConstraintViolationException::class);
  94. $this->mapper->insert($userStatus2);
  95. }
  96. public function testClearOlderThan(): void {
  97. $this->insertSampleStatuses();
  98. $this->mapper->clearOlderThan(55000);
  99. $allStatuses = $this->mapper->findAll();
  100. $this->assertCount(3, $allStatuses);
  101. $user1Status = $this->mapper->findByUserId('user1');
  102. $this->assertEquals('user1', $user1Status->getUserId());
  103. $this->assertEquals('dnd', $user1Status->getStatus());
  104. $this->assertEquals(5000, $user1Status->getStatusTimestamp());
  105. $this->assertEquals(true, $user1Status->getIsUserDefined());
  106. $this->assertEquals(null, $user1Status->getCustomIcon());
  107. $this->assertEquals(null, $user1Status->getCustomMessage());
  108. $this->assertEquals(null, $user1Status->getClearAt());
  109. }
  110. private function insertSampleStatuses(): void {
  111. $userStatus1 = new UserStatus();
  112. $userStatus1->setUserId('admin');
  113. $userStatus1->setStatus('offline');
  114. $userStatus1->setStatusTimestamp(0);
  115. $userStatus1->setIsUserDefined(false);
  116. $userStatus2 = new UserStatus();
  117. $userStatus2->setUserId('user1');
  118. $userStatus2->setStatus('dnd');
  119. $userStatus2->setStatusTimestamp(5000);
  120. $userStatus2->setIsUserDefined(true);
  121. $userStatus2->setCustomIcon('💩');
  122. $userStatus2->setCustomMessage('Do not disturb');
  123. $userStatus2->setClearAt(50000);
  124. $userStatus3 = new UserStatus();
  125. $userStatus3->setUserId('user2');
  126. $userStatus3->setStatus('away');
  127. $userStatus3->setStatusTimestamp(5000);
  128. $userStatus3->setIsUserDefined(false);
  129. $userStatus3->setCustomIcon('🏝');
  130. $userStatus3->setCustomMessage('On vacation');
  131. $userStatus3->setClearAt(60000);
  132. $this->mapper->insert($userStatus1);
  133. $this->mapper->insert($userStatus2);
  134. $this->mapper->insert($userStatus3);
  135. }
  136. }