summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrederic Guillot <fred@kanboard.net>2016-01-18 21:46:56 -0500
committerFrederic Guillot <fred@kanboard.net>2016-01-18 21:46:56 -0500
commite73334a7e0738d6e46bae7dec1e903232550c964 (patch)
treeacb3c29aba803ea774459375394bd299028ca805
parentddb73063a7889c8dad79dd7148c01c9bc845d9f0 (diff)
Add unit test for LastLogin class
-rw-r--r--ChangeLog1
-rw-r--r--app/Model/LastLogin.php36
-rw-r--r--tests/units/Model/LastLoginTest.php43
3 files changed, 67 insertions, 13 deletions
diff --git a/ChangeLog b/ChangeLog
index 071b4329..18456293 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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']);
+ }
+}