diff options
author | Frederic Guillot <fred@kanboard.net> | 2016-01-18 21:46:56 -0500 |
---|---|---|
committer | Frederic Guillot <fred@kanboard.net> | 2016-01-18 21:46:56 -0500 |
commit | e73334a7e0738d6e46bae7dec1e903232550c964 (patch) | |
tree | acb3c29aba803ea774459375394bd299028ca805 | |
parent | ddb73063a7889c8dad79dd7148c01c9bc845d9f0 (diff) |
Add unit test for LastLogin class
-rw-r--r-- | ChangeLog | 1 | ||||
-rw-r--r-- | app/Model/LastLogin.php | 36 | ||||
-rw-r--r-- | tests/units/Model/LastLoginTest.php | 43 |
3 files changed, 67 insertions, 13 deletions
@@ -22,6 +22,7 @@ Improvements: * Make sure that some event subscribers are not executed multiple times * Show rendering time of individual templates when debug mode is enabled * Make sure that no events are fired if nothing have been modified in the task +* Add unit tests for LastLogin Bug fixes: diff --git a/app/Model/LastLogin.php b/app/Model/LastLogin.php index 0f148ead..f5be020e 100644 --- a/app/Model/LastLogin.php +++ b/app/Model/LastLogin.php @@ -36,11 +36,31 @@ class LastLogin extends Base */ public function create($auth_type, $user_id, $ip, $user_agent) { - // Cleanup old sessions if necessary + $this->cleanup($user_id); + + return $this->db + ->table(self::TABLE) + ->insert(array( + 'auth_type' => $auth_type, + 'user_id' => $user_id, + 'ip' => $ip, + 'user_agent' => substr($user_agent, 0, 255), + 'date_creation' => time(), + )); + } + + /** + * Cleanup login history + * + * @access public + * @param integer $user_id + */ + public function cleanup($user_id) + { $connections = $this->db ->table(self::TABLE) ->eq('user_id', $user_id) - ->desc('date_creation') + ->desc('id') ->findAllByColumn('id'); if (count($connections) >= self::NB_LOGINS) { @@ -49,16 +69,6 @@ class LastLogin extends Base ->notin('id', array_slice($connections, 0, self::NB_LOGINS - 1)) ->remove(); } - - return $this->db - ->table(self::TABLE) - ->insert(array( - 'auth_type' => $auth_type, - 'user_id' => $user_id, - 'ip' => $ip, - 'user_agent' => $user_agent, - 'date_creation' => time(), - )); } /** @@ -73,7 +83,7 @@ class LastLogin extends Base return $this->db ->table(self::TABLE) ->eq('user_id', $user_id) - ->desc('date_creation') + ->desc('id') ->columns('id', 'auth_type', 'ip', 'user_agent', 'date_creation') ->findAll(); } diff --git a/tests/units/Model/LastLoginTest.php b/tests/units/Model/LastLoginTest.php new file mode 100644 index 00000000..fc5ea1e5 --- /dev/null +++ b/tests/units/Model/LastLoginTest.php @@ -0,0 +1,43 @@ +<?php + +require_once __DIR__.'/../Base.php'; + +use Kanboard\Model\LastLogin; + +class LastLoginTest extends Base +{ + public function testCreate() + { + $lastLoginModel = new LastLogin($this->container); + + $this->assertTrue($lastLoginModel->create('Test1', 1, '127.0.0.1', 'My browser')); + $this->assertTrue($lastLoginModel->create('Test2', 1, '127.0.0.1', str_repeat('Too long', 50))); + $this->assertTrue($lastLoginModel->create('Test3', 1, '2001:0db8:0000:0000:0000:ff00:0042:8329', 'My Ipv6 browser')); + + $connections = $lastLoginModel->getAll(1); + $this->assertCount(3, $connections); + + $this->assertEquals('Test3', $connections[0]['auth_type']); + $this->assertEquals('2001:0db8:0000:0000:0000:ff00:0042:8329', $connections[0]['ip']); + + $this->assertEquals('Test2', $connections[1]['auth_type']); + $this->assertEquals('127.0.0.1', $connections[1]['ip']); + + $this->assertEquals('Test1', $connections[2]['auth_type']); + $this->assertEquals('127.0.0.1', $connections[2]['ip']); + } + + public function testCleanup() + { + $lastLoginModel = new LastLogin($this->container); + + for ($i = 0; $i < $lastLoginModel::NB_LOGINS + 5; $i++) { + $this->assertTrue($lastLoginModel->create('Test' . $i, 1, '127.0.0.1', 'My browser')); + } + + $connections = $lastLoginModel->getAll(1); + $this->assertCount(10, $connections); + $this->assertEquals('Test14', $connections[0]['auth_type']); + $this->assertEquals('Test5', $connections[9]['auth_type']); + } +} |