summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/integration/ApiTest.php212
-rw-r--r--tests/integration/Base.php2
-rw-r--r--tests/integration/BoardTest.php21
-rw-r--r--tests/integration/ColumnTest.php65
-rw-r--r--tests/integration/SwimlaneTest.php103
-rw-r--r--tests/integration/UserTest.php18
-rw-r--r--tests/units/Action/CommentCreationMoveTaskColumnTest.php1
-rw-r--r--tests/units/Action/CommentCreationTest.php1
-rw-r--r--tests/units/Action/TaskAssignCategoryLinkTest.php1
-rw-r--r--tests/units/Action/TaskAssignUserTest.php1
-rw-r--r--tests/units/Action/TaskCloseNoActivityTest.php43
-rw-r--r--tests/units/Action/TaskEmailNoActivityTest.php103
-rw-r--r--tests/units/Analytic/AverageLeadCycleTimeAnalyticTest.php13
-rw-r--r--tests/units/Analytic/AverageTimeSpentColumnAnalyticTest.php101
-rw-r--r--tests/units/Auth/DatabaseAuthTest.php12
-rw-r--r--tests/units/Auth/GithubAuthTest.php89
-rw-r--r--tests/units/Auth/GitlabAuthTest.php89
-rw-r--r--tests/units/Auth/GoogleAuthTest.php89
-rw-r--r--tests/units/Base.php68
-rw-r--r--tests/units/Core/DateParserTest.php182
-rw-r--r--tests/units/Core/ExternalLink/ExternalLinkManagerTest.php120
-rw-r--r--tests/units/Core/HelperTest.php17
-rw-r--r--tests/units/Core/Http/OAuth2Test.php28
-rw-r--r--tests/units/Core/Http/RequestTest.php6
-rw-r--r--tests/units/Core/Http/RouterTest.php22
-rw-r--r--tests/units/Core/Ldap/LdapGroupTest.php1
-rw-r--r--tests/units/Core/TemplateTest.php6
-rw-r--r--tests/units/Export/TaskExportTest.php (renamed from tests/units/Model/TaskExportTest.php)6
-rw-r--r--tests/units/Export/TransitionExportTest.php45
-rw-r--r--tests/units/ExternalLink/AttachmentLinkProviderTest.php64
-rw-r--r--tests/units/ExternalLink/AttachmentLinkTest.php18
-rw-r--r--tests/units/ExternalLink/WebLinkProviderTest.php52
-rw-r--r--tests/units/ExternalLink/WebLinkTest.php45
-rw-r--r--tests/units/Formatter/TaskFilterCalendarFormatterTest.php8
-rw-r--r--tests/units/Formatter/TaskFilterICalendarFormatterTest.php3
-rw-r--r--tests/units/Helper/AppHelperTest.php9
-rw-r--r--tests/units/Helper/AssetHelperTest.php4
-rw-r--r--tests/units/Helper/DatetimeHelperTest.php54
-rw-r--r--tests/units/Helper/FileHelperText.php29
-rw-r--r--tests/units/Helper/HookHelperTest.php10
-rw-r--r--tests/units/Helper/TaskHelperTest.php6
-rw-r--r--tests/units/Helper/TextHelperTest.php12
-rw-r--r--tests/units/Helper/UrlHelperTest.php30
-rw-r--r--tests/units/Helper/UserHelperTest.php38
-rw-r--r--tests/units/Model/ActionTest.php6
-rw-r--r--tests/units/Model/BoardTest.php227
-rw-r--r--tests/units/Model/CategoryTest.php222
-rw-r--r--tests/units/Model/ColorTest.php93
-rw-r--r--tests/units/Model/ColumnTest.php236
-rw-r--r--tests/units/Model/CommentTest.php1
-rw-r--r--tests/units/Model/ConfigTest.php1
-rw-r--r--tests/units/Model/FileTest.php263
-rw-r--r--tests/units/Model/NotificationTest.php5
-rw-r--r--tests/units/Model/ProjectActivityTest.php3
-rw-r--r--tests/units/Model/ProjectDailyColumnStatsTest.php1
-rw-r--r--tests/units/Model/ProjectDailyStatsTest.php10
-rw-r--r--tests/units/Model/ProjectDuplicationTest.php383
-rw-r--r--tests/units/Model/ProjectFileTest.php311
-rw-r--r--tests/units/Model/ProjectGroupRoleTest.php38
-rw-r--r--tests/units/Model/ProjectPermissionTest.php22
-rw-r--r--tests/units/Model/ProjectTest.php2
-rw-r--r--tests/units/Model/ProjectUserRoleTest.php61
-rw-r--r--tests/units/Model/SubtaskTest.php191
-rw-r--r--tests/units/Model/SubtaskTimeTrackingTest.php2
-rw-r--r--tests/units/Model/SwimlaneTest.php274
-rw-r--r--tests/units/Model/TaskCreationTest.php5
-rw-r--r--tests/units/Model/TaskDuplicationTest.php27
-rw-r--r--tests/units/Model/TaskExternalLinkTest.php123
-rw-r--r--tests/units/Model/TaskFileTest.php445
-rw-r--r--tests/units/Model/TaskFilterTest.php1
-rw-r--r--tests/units/Model/TaskFinderTest.php3
-rw-r--r--tests/units/Model/TaskLinkTest.php1
-rw-r--r--tests/units/Model/TaskModificationTest.php1
-rw-r--r--tests/units/Model/TaskPermissionTest.php2
-rw-r--r--tests/units/Model/TaskPositionTest.php14
-rw-r--r--tests/units/Model/TransitionTest.php141
-rw-r--r--tests/units/Model/UserNotificationTest.php4
-rw-r--r--tests/units/Model/UserTest.php28
-rw-r--r--tests/units/Model/UserUnreadNotificationTest.php3
-rw-r--r--tests/units/Notification/MailTest.php4
-rw-r--r--tests/units/Notification/WebhookTest.php91
-rw-r--r--tests/units/Validator/ExternalLinkValidatorTest.php63
-rw-r--r--tests/units/Validator/PasswordResetValidatorTest.php1
83 files changed, 3329 insertions, 1827 deletions
diff --git a/tests/integration/ApiTest.php b/tests/integration/ApiTest.php
index 798bde42..5fed0368 100644
--- a/tests/integration/ApiTest.php
+++ b/tests/integration/ApiTest.php
@@ -170,192 +170,6 @@ class Api extends PHPUnit_Framework_TestCase
$this->assertCount(0, $activities);
}
- public function testGetBoard()
- {
- $board = $this->client->getBoard(1);
- $this->assertTrue(is_array($board));
- $this->assertEquals(1, count($board));
- $this->assertEquals('Default swimlane', $board[0]['name']);
- $this->assertEquals(4, count($board[0]['columns']));
- }
-
- public function testGetColumns()
- {
- $columns = $this->client->getColumns(1);
- $this->assertTrue(is_array($columns));
- $this->assertEquals(4, count($columns));
- $this->assertEquals('Done', $columns[3]['title']);
- }
-
- public function testMoveColumnUp()
- {
- $this->assertTrue($this->client->moveColumnUp(1, 4));
-
- $columns = $this->client->getColumns(1);
- $this->assertTrue(is_array($columns));
- $this->assertEquals('Done', $columns[2]['title']);
- $this->assertEquals('Work in progress', $columns[3]['title']);
- }
-
- public function testMoveColumnDown()
- {
- $this->assertTrue($this->client->moveColumnDown(1, 4));
-
- $columns = $this->client->getColumns(1);
- $this->assertTrue(is_array($columns));
- $this->assertEquals('Work in progress', $columns[2]['title']);
- $this->assertEquals('Done', $columns[3]['title']);
- }
-
- public function testUpdateColumn()
- {
- $this->assertTrue($this->client->updateColumn(4, 'Boo', 2));
-
- $columns = $this->client->getColumns(1);
- $this->assertTrue(is_array($columns));
- $this->assertEquals('Boo', $columns[3]['title']);
- $this->assertEquals(2, $columns[3]['task_limit']);
- }
-
- public function testAddColumn()
- {
- $column_id = $this->client->addColumn(1, 'New column');
-
- $this->assertNotFalse($column_id);
- $this->assertInternalType('int', $column_id);
- $this->assertTrue($column_id > 0);
-
- $columns = $this->client->getColumns(1);
- $this->assertTrue(is_array($columns));
- $this->assertEquals(5, count($columns));
- $this->assertEquals('New column', $columns[4]['title']);
- }
-
- public function testRemoveColumn()
- {
- $this->assertTrue($this->client->removeColumn(5));
-
- $columns = $this->client->getColumns(1);
- $this->assertTrue(is_array($columns));
- $this->assertEquals(4, count($columns));
- }
-
- public function testGetDefaultSwimlane()
- {
- $swimlane = $this->client->getDefaultSwimlane(1);
- $this->assertNotEmpty($swimlane);
- $this->assertEquals('Default swimlane', $swimlane['default_swimlane']);
- }
-
- public function testAddSwimlane()
- {
- $swimlane_id = $this->client->addSwimlane(1, 'Swimlane 1');
- $this->assertNotFalse($swimlane_id);
- $this->assertInternalType('int', $swimlane_id);
-
- $swimlane = $this->client->getSwimlaneById($swimlane_id);
- $this->assertNotEmpty($swimlane);
- $this->assertInternalType('array', $swimlane);
- $this->assertEquals('Swimlane 1', $swimlane['name']);
- }
-
- public function testGetSwimlane()
- {
- $swimlane = $this->client->getSwimlane(1);
- $this->assertNotEmpty($swimlane);
- $this->assertInternalType('array', $swimlane);
- $this->assertEquals('Swimlane 1', $swimlane['name']);
- }
-
- public function testUpdateSwimlane()
- {
- $swimlane = $this->client->getSwimlaneByName(1, 'Swimlane 1');
- $this->assertNotEmpty($swimlane);
- $this->assertInternalType('array', $swimlane);
- $this->assertEquals(1, $swimlane['id']);
- $this->assertEquals('Swimlane 1', $swimlane['name']);
-
- $this->assertTrue($this->client->updateSwimlane($swimlane['id'], 'Another swimlane'));
-
- $swimlane = $this->client->getSwimlaneById($swimlane['id']);
- $this->assertNotEmpty($swimlane);
- $this->assertEquals('Another swimlane', $swimlane['name']);
- }
-
- public function testDisableSwimlane()
- {
- $this->assertTrue($this->client->disableSwimlane(1, 1));
-
- $swimlane = $this->client->getSwimlaneById(1);
- $this->assertNotEmpty($swimlane);
- $this->assertEquals(0, $swimlane['is_active']);
- }
-
- public function testEnableSwimlane()
- {
- $this->assertTrue($this->client->enableSwimlane(1, 1));
-
- $swimlane = $this->client->getSwimlaneById(1);
- $this->assertNotEmpty($swimlane);
- $this->assertEquals(1, $swimlane['is_active']);
- }
-
- public function testGetAllSwimlanes()
- {
- $this->assertNotFalse($this->client->addSwimlane(1, 'Swimlane A'));
-
- $swimlanes = $this->client->getAllSwimlanes(1);
- $this->assertNotEmpty($swimlanes);
- $this->assertCount(2, $swimlanes);
- $this->assertEquals('Another swimlane', $swimlanes[0]['name']);
- $this->assertEquals('Swimlane A', $swimlanes[1]['name']);
- }
-
- public function testGetActiveSwimlane()
- {
- $this->assertTrue($this->client->disableSwimlane(1, 1));
-
- $swimlanes = $this->client->getActiveSwimlanes(1);
- $this->assertNotEmpty($swimlanes);
- $this->assertCount(2, $swimlanes);
- $this->assertEquals('Default swimlane', $swimlanes[0]['name']);
- $this->assertEquals('Swimlane A', $swimlanes[1]['name']);
- }
-
- public function testMoveSwimlaneUp()
- {
- $this->assertTrue($this->client->enableSwimlane(1, 1));
- $this->assertTrue($this->client->moveSwimlaneUp(1, 1));
-
- $swimlanes = $this->client->getActiveSwimlanes(1);
- $this->assertNotEmpty($swimlanes);
- $this->assertCount(3, $swimlanes);
- $this->assertEquals('Default swimlane', $swimlanes[0]['name']);
- $this->assertEquals('Another swimlane', $swimlanes[1]['name']);
- $this->assertEquals('Swimlane A', $swimlanes[2]['name']);
-
- $this->assertTrue($this->client->moveSwimlaneUp(1, 2));
-
- $swimlanes = $this->client->getActiveSwimlanes(1);
- $this->assertNotEmpty($swimlanes);
- $this->assertCount(3, $swimlanes);
- $this->assertEquals('Default swimlane', $swimlanes[0]['name']);
- $this->assertEquals('Swimlane A', $swimlanes[1]['name']);
- $this->assertEquals('Another swimlane', $swimlanes[2]['name']);
- }
-
- public function testMoveSwimlaneDown()
- {
- $this->assertTrue($this->client->moveSwimlaneDown(1, 2));
-
- $swimlanes = $this->client->getActiveSwimlanes(1);
- $this->assertNotEmpty($swimlanes);
- $this->assertCount(3, $swimlanes);
- $this->assertEquals('Default swimlane', $swimlanes[0]['name']);
- $this->assertEquals('Another swimlane', $swimlanes[1]['name']);
- $this->assertEquals('Swimlane A', $swimlanes[2]['name']);
- }
-
public function testCreateTaskWithWrongMember()
{
$task = array(
@@ -464,18 +278,6 @@ class Api extends PHPUnit_Framework_TestCase
$this->assertNotEquals($moved_timestamp, $task['date_moved']);
}
- public function testRemoveSwimlane()
- {
- $this->assertTrue($this->client->removeSwimlane(1, 2));
-
- $task = $this->client->getTask($this->getTaskId());
- $this->assertNotFalse($task);
- $this->assertTrue(is_array($task));
- $this->assertEquals(1, $task['position']);
- $this->assertEquals(4, $task['column_id']);
- $this->assertEquals(0, $task['swimlane_id']);
- }
-
public function testUpdateTask()
{
$task = $this->client->getTask(1);
@@ -563,6 +365,20 @@ class Api extends PHPUnit_Framework_TestCase
$this->assertNull($this->client->getUser(2222));
}
+ public function testGetUserByName()
+ {
+ $user = $this->client->getUserByName('toto');
+ $this->assertNotFalse($user);
+ $this->assertTrue(is_array($user));
+ $this->assertEquals(2, $user['id']);
+
+ $user = $this->client->getUserByName('manager');
+ $this->assertNotEmpty($user);
+ $this->assertEquals('app-manager', $user['role']);
+
+ $this->assertNull($this->client->getUserByName('nonexistantusername'));
+ }
+
public function testUpdateUser()
{
$user = array();
diff --git a/tests/integration/Base.php b/tests/integration/Base.php
index 6facd9ce..983d0ed9 100644
--- a/tests/integration/Base.php
+++ b/tests/integration/Base.php
@@ -35,7 +35,7 @@ abstract class Base extends PHPUnit_Framework_TestCase
{
$this->app = new JsonRPC\Client(API_URL);
$this->app->authentication('jsonrpc', API_KEY);
- $this->app->debug = true;
+ // $this->app->debug = true;
$this->admin = new JsonRPC\Client(API_URL);
$this->admin->authentication('admin', 'admin');
diff --git a/tests/integration/BoardTest.php b/tests/integration/BoardTest.php
new file mode 100644
index 00000000..bf8d50b9
--- /dev/null
+++ b/tests/integration/BoardTest.php
@@ -0,0 +1,21 @@
+<?php
+
+require_once __DIR__.'/Base.php';
+
+class BoardTest extends Base
+{
+ public function testCreateProject()
+ {
+ $this->assertEquals(1, $this->app->createProject('A project'));
+ }
+
+ public function testGetBoard()
+ {
+ $board = $this->app->getBoard(1);
+ $this->assertCount(1, $board);
+ $this->assertEquals('Default swimlane', $board[0]['name']);
+
+ $this->assertCount(4, $board[0]['columns']);
+ $this->assertEquals('Ready', $board[0]['columns'][1]['title']);
+ }
+}
diff --git a/tests/integration/ColumnTest.php b/tests/integration/ColumnTest.php
new file mode 100644
index 00000000..6d02afc0
--- /dev/null
+++ b/tests/integration/ColumnTest.php
@@ -0,0 +1,65 @@
+<?php
+
+require_once __DIR__.'/Base.php';
+
+class ColumnTest extends Base
+{
+ public function testCreateProject()
+ {
+ $this->assertEquals(1, $this->app->createProject('A project'));
+ }
+
+ public function testGetColumns()
+ {
+ $columns = $this->app->getColumns($this->getProjectId());
+ $this->assertCount(4, $columns);
+ $this->assertEquals('Done', $columns[3]['title']);
+ }
+
+ public function testUpdateColumn()
+ {
+ $this->assertTrue($this->app->updateColumn(4, 'Boo', 2));
+
+ $columns = $this->app->getColumns($this->getProjectId());
+ $this->assertEquals('Boo', $columns[3]['title']);
+ $this->assertEquals(2, $columns[3]['task_limit']);
+ }
+
+ public function testAddColumn()
+ {
+ $column_id = $this->app->addColumn($this->getProjectId(), 'New column');
+
+ $this->assertNotFalse($column_id);
+ $this->assertInternalType('int', $column_id);
+ $this->assertTrue($column_id > 0);
+
+ $columns = $this->app->getColumns($this->getProjectId());
+ $this->assertCount(5, $columns);
+ $this->assertEquals('New column', $columns[4]['title']);
+ }
+
+ public function testRemoveColumn()
+ {
+ $this->assertTrue($this->app->removeColumn(5));
+
+ $columns = $this->app->getColumns($this->getProjectId());
+ $this->assertCount(4, $columns);
+ }
+
+ public function testChangeColumnPosition()
+ {
+ $this->assertTrue($this->app->changeColumnPosition($this->getProjectId(), 1, 3));
+
+ $columns = $this->app->getColumns($this->getProjectId());
+ $this->assertCount(4, $columns);
+
+ $this->assertEquals('Ready', $columns[0]['title']);
+ $this->assertEquals(1, $columns[0]['position']);
+ $this->assertEquals('Work in progress', $columns[1]['title']);
+ $this->assertEquals(2, $columns[1]['position']);
+ $this->assertEquals('Backlog', $columns[2]['title']);
+ $this->assertEquals(3, $columns[2]['position']);
+ $this->assertEquals('Boo', $columns[3]['title']);
+ $this->assertEquals(4, $columns[3]['position']);
+ }
+}
diff --git a/tests/integration/SwimlaneTest.php b/tests/integration/SwimlaneTest.php
new file mode 100644
index 00000000..88747204
--- /dev/null
+++ b/tests/integration/SwimlaneTest.php
@@ -0,0 +1,103 @@
+<?php
+
+require_once __DIR__.'/Base.php';
+
+class SwimlaneTest extends Base
+{
+ public function testCreateProject()
+ {
+ $this->assertEquals(1, $this->app->createProject('A project'));
+ }
+
+ public function testGetDefaultSwimlane()
+ {
+ $swimlane = $this->app->getDefaultSwimlane(1);
+ $this->assertNotEmpty($swimlane);
+ $this->assertEquals('Default swimlane', $swimlane['default_swimlane']);
+ }
+
+ public function testAddSwimlane()
+ {
+ $swimlane_id = $this->app->addSwimlane(1, 'Swimlane 1');
+ $this->assertNotFalse($swimlane_id);
+ $this->assertInternalType('int', $swimlane_id);
+
+ $swimlane = $this->app->getSwimlaneById($swimlane_id);
+ $this->assertNotEmpty($swimlane);
+ $this->assertInternalType('array', $swimlane);
+ $this->assertEquals('Swimlane 1', $swimlane['name']);
+ }
+
+ public function testGetSwimlane()
+ {
+ $swimlane = $this->app->getSwimlane(1);
+ $this->assertInternalType('array', $swimlane);
+ $this->assertEquals('Swimlane 1', $swimlane['name']);
+ }
+
+ public function testUpdateSwimlane()
+ {
+ $swimlane = $this->app->getSwimlaneByName(1, 'Swimlane 1');
+ $this->assertInternalType('array', $swimlane);
+ $this->assertEquals(1, $swimlane['id']);
+ $this->assertEquals('Swimlane 1', $swimlane['name']);
+
+ $this->assertTrue($this->app->updateSwimlane($swimlane['id'], 'Another swimlane'));
+
+ $swimlane = $this->app->getSwimlaneById($swimlane['id']);
+ $this->assertEquals('Another swimlane', $swimlane['name']);
+ }
+
+ public function testDisableSwimlane()
+ {
+ $this->assertTrue($this->app->disableSwimlane(1, 1));
+
+ $swimlane = $this->app->getSwimlaneById(1);
+ $this->assertEquals(0, $swimlane['is_active']);
+ }
+
+ public function testEnableSwimlane()
+ {
+ $this->assertTrue($this->app->enableSwimlane(1, 1));
+
+ $swimlane = $this->app->getSwimlaneById(1);
+ $this->assertEquals(1, $swimlane['is_active']);
+ }
+
+ public function testGetAllSwimlanes()
+ {
+ $this->assertNotFalse($this->app->addSwimlane(1, 'Swimlane A'));
+
+ $swimlanes = $this->app->getAllSwimlanes(1);
+ $this->assertCount(2, $swimlanes);
+ $this->assertEquals('Another swimlane', $swimlanes[0]['name']);
+ $this->assertEquals('Swimlane A', $swimlanes[1]['name']);
+ }
+
+ public function testGetActiveSwimlane()
+ {
+ $this->assertTrue($this->app->disableSwimlane(1, 1));
+
+ $swimlanes = $this->app->getActiveSwimlanes(1);
+ $this->assertCount(2, $swimlanes);
+ $this->assertEquals('Default swimlane', $swimlanes[0]['name']);
+ $this->assertEquals('Swimlane A', $swimlanes[1]['name']);
+ }
+
+ public function testRemoveSwimlane()
+ {
+ $this->assertTrue($this->app->removeSwimlane(1, 2));
+ }
+
+ public function testChangePosition()
+ {
+ $this->assertNotFalse($this->app->addSwimlane(1, 'Swimlane 1'));
+ $this->assertNotFalse($this->app->addSwimlane(1, 'Swimlane 2'));
+
+ $swimlanes = $this->app->getAllSwimlanes(1);
+ $this->assertCount(3, $swimlanes);
+
+ $this->assertTrue($this->app->changeSwimlanePosition(1, 1, 3));
+ $this->assertFalse($this->app->changeSwimlanePosition(1, 1, 6));
+ }
+}
diff --git a/tests/integration/UserTest.php b/tests/integration/UserTest.php
new file mode 100644
index 00000000..10da051c
--- /dev/null
+++ b/tests/integration/UserTest.php
@@ -0,0 +1,18 @@
+<?php
+
+require_once __DIR__.'/Base.php';
+
+class UserTest extends Base
+{
+ public function testDisableUser()
+ {
+ $this->assertEquals(2, $this->app->createUser(array('username' => 'someone', 'password' => 'test123')));
+ $this->assertTrue($this->app->isActiveUser(2));
+
+ $this->assertTrue($this->app->disableUser(2));
+ $this->assertFalse($this->app->isActiveUser(2));
+
+ $this->assertTrue($this->app->enableUser(2));
+ $this->assertTrue($this->app->isActiveUser(2));
+ }
+}
diff --git a/tests/units/Action/CommentCreationMoveTaskColumnTest.php b/tests/units/Action/CommentCreationMoveTaskColumnTest.php
index 87ee86ea..6464639e 100644
--- a/tests/units/Action/CommentCreationMoveTaskColumnTest.php
+++ b/tests/units/Action/CommentCreationMoveTaskColumnTest.php
@@ -7,7 +7,6 @@ use Kanboard\Model\Task;
use Kanboard\Model\TaskCreation;
use Kanboard\Model\Comment;
use Kanboard\Model\Project;
-use Kanboard\Model\ProjectUserRole;
use Kanboard\Action\CommentCreationMoveTaskColumn;
class CommentCreationMoveTaskColumnTest extends Base
diff --git a/tests/units/Action/CommentCreationTest.php b/tests/units/Action/CommentCreationTest.php
index 8460a350..042a8f8b 100644
--- a/tests/units/Action/CommentCreationTest.php
+++ b/tests/units/Action/CommentCreationTest.php
@@ -3,7 +3,6 @@
require_once __DIR__.'/../Base.php';
use Kanboard\Event\GenericEvent;
-use Kanboard\Model\Task;
use Kanboard\Model\TaskCreation;
use Kanboard\Model\Comment;
use Kanboard\Model\Project;
diff --git a/tests/units/Action/TaskAssignCategoryLinkTest.php b/tests/units/Action/TaskAssignCategoryLinkTest.php
index f638e017..da83d541 100644
--- a/tests/units/Action/TaskAssignCategoryLinkTest.php
+++ b/tests/units/Action/TaskAssignCategoryLinkTest.php
@@ -2,7 +2,6 @@
require_once __DIR__.'/../Base.php';
-use Kanboard\Model\Task;
use Kanboard\Model\TaskCreation;
use Kanboard\Model\TaskFinder;
use Kanboard\Model\Project;
diff --git a/tests/units/Action/TaskAssignUserTest.php b/tests/units/Action/TaskAssignUserTest.php
index d1cb72b9..31404c0b 100644
--- a/tests/units/Action/TaskAssignUserTest.php
+++ b/tests/units/Action/TaskAssignUserTest.php
@@ -8,7 +8,6 @@ use Kanboard\Model\TaskFinder;
use Kanboard\Model\Project;
use Kanboard\Model\ProjectUserRole;
use Kanboard\Model\User;
-use Kanboard\Model\Task;
use Kanboard\Action\TaskAssignUser;
use Kanboard\Core\Security\Role;
diff --git a/tests/units/Action/TaskCloseNoActivityTest.php b/tests/units/Action/TaskCloseNoActivityTest.php
new file mode 100644
index 00000000..b6e04c47
--- /dev/null
+++ b/tests/units/Action/TaskCloseNoActivityTest.php
@@ -0,0 +1,43 @@
+<?php
+
+require_once __DIR__.'/../Base.php';
+
+use Kanboard\Event\TaskListEvent;
+use Kanboard\Model\TaskCreation;
+use Kanboard\Model\TaskFinder;
+use Kanboard\Model\Project;
+use Kanboard\Model\Task;
+use Kanboard\Action\TaskCloseNoActivity;
+
+class TaskCloseNoActivityTest extends Base
+{
+ public function testClose()
+ {
+ $projectModel = new Project($this->container);
+ $taskCreationModel = new TaskCreation($this->container);
+ $taskFinderModel = new TaskFinder($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'test1')));
+ $this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));
+ $this->assertEquals(2, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));
+
+ $this->container['db']->table(Task::TABLE)->eq('id', 1)->update(array('date_modification' => strtotime('-10days')));
+
+ $tasks = $taskFinderModel->getAll(1);
+ $event = new TaskListEvent(array('tasks' => $tasks, 'project_id' => 1));
+
+ $action = new TaskCloseNoActivity($this->container);
+ $action->setProjectId(1);
+ $action->setParam('duration', 2);
+
+ $this->assertTrue($action->execute($event, Task::EVENT_DAILY_CRONJOB));
+
+ $task = $taskFinderModel->getById(1);
+ $this->assertNotEmpty($task);
+ $this->assertEquals(0, $task['is_active']);
+
+ $task = $taskFinderModel->getById(2);
+ $this->assertNotEmpty($task);
+ $this->assertEquals(1, $task['is_active']);
+ }
+}
diff --git a/tests/units/Action/TaskEmailNoActivityTest.php b/tests/units/Action/TaskEmailNoActivityTest.php
new file mode 100644
index 00000000..af4baed5
--- /dev/null
+++ b/tests/units/Action/TaskEmailNoActivityTest.php
@@ -0,0 +1,103 @@
+<?php
+
+require_once __DIR__.'/../Base.php';
+
+use Kanboard\Event\TaskListEvent;
+use Kanboard\Model\TaskCreation;
+use Kanboard\Model\TaskFinder;
+use Kanboard\Model\Project;
+use Kanboard\Model\Task;
+use Kanboard\Model\User;
+use Kanboard\Action\TaskEmailNoActivity;
+
+class TaskEmailNoActivityTest extends Base
+{
+ public function testSendEmail()
+ {
+ $userModel = new User($this->container);
+ $projectModel = new Project($this->container);
+ $taskCreationModel = new TaskCreation($this->container);
+ $taskFinderModel = new TaskFinder($this->container);
+
+ $this->assertEquals(2, $userModel->create(array('username' => 'test', 'email' => 'chuck@norris', 'name' => 'Chuck Norris')));
+ $this->assertEquals(1, $projectModel->create(array('name' => 'test1')));
+ $this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));
+ $this->assertEquals(2, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));
+
+ $this->container['db']->table(Task::TABLE)->eq('id', 1)->update(array('date_modification' => strtotime('-10days')));
+
+ $tasks = $taskFinderModel->getAll(1);
+ $event = new TaskListEvent(array('tasks' => $tasks, 'project_id' => 1));
+
+ $action = new TaskEmailNoActivity($this->container);
+ $action->setProjectId(1);
+ $action->setParam('user_id', 2);
+ $action->setParam('subject', 'Old tasks');
+ $action->setParam('duration', 2);
+
+ $this->container['emailClient']
+ ->expects($this->once())
+ ->method('send')
+ ->with('chuck@norris', 'Chuck Norris', 'Old tasks', $this->anything());
+
+ $this->assertTrue($action->execute($event, Task::EVENT_DAILY_CRONJOB));
+ }
+
+ public function testUserWithNoEmail()
+ {
+ $userModel = new User($this->container);
+ $projectModel = new Project($this->container);
+ $taskCreationModel = new TaskCreation($this->container);
+ $taskFinderModel = new TaskFinder($this->container);
+
+ $this->assertEquals(2, $userModel->create(array('username' => 'test', 'name' => 'Chuck Norris')));
+ $this->assertEquals(1, $projectModel->create(array('name' => 'test1')));
+ $this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));
+ $this->assertEquals(2, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));
+
+ $this->container['db']->table(Task::TABLE)->eq('id', 1)->update(array('date_modification' => strtotime('-10days')));
+
+ $tasks = $taskFinderModel->getAll(1);
+ $event = new TaskListEvent(array('tasks' => $tasks, 'project_id' => 1));
+
+ $action = new TaskEmailNoActivity($this->container);
+ $action->setProjectId(1);
+ $action->setParam('user_id', 2);
+ $action->setParam('subject', 'Old tasks');
+ $action->setParam('duration', 2);
+
+ $this->container['emailClient']
+ ->expects($this->never())
+ ->method('send');
+
+ $this->assertFalse($action->execute($event, Task::EVENT_DAILY_CRONJOB));
+ }
+
+ public function testTooRecent()
+ {
+ $userModel = new User($this->container);
+ $projectModel = new Project($this->container);
+ $taskCreationModel = new TaskCreation($this->container);
+ $taskFinderModel = new TaskFinder($this->container);
+
+ $this->assertEquals(2, $userModel->create(array('username' => 'test', 'email' => 'chuck@norris', 'name' => 'Chuck Norris')));
+ $this->assertEquals(1, $projectModel->create(array('name' => 'test1')));
+ $this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));
+ $this->assertEquals(2, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));
+
+ $tasks = $taskFinderModel->getAll(1);
+ $event = new TaskListEvent(array('tasks' => $tasks, 'project_id' => 1));
+
+ $action = new TaskEmailNoActivity($this->container);
+ $action->setProjectId(1);
+ $action->setParam('user_id', 2);
+ $action->setParam('subject', 'Old tasks');
+ $action->setParam('duration', 2);
+
+ $this->container['emailClient']
+ ->expects($this->never())
+ ->method('send');
+
+ $this->assertFalse($action->execute($event, Task::EVENT_DAILY_CRONJOB));
+ }
+}
diff --git a/tests/units/Analytic/AverageLeadCycleTimeAnalyticTest.php b/tests/units/Analytic/AverageLeadCycleTimeAnalyticTest.php
index 9c445dca..b8faec6c 100644
--- a/tests/units/Analytic/AverageLeadCycleTimeAnalyticTest.php
+++ b/tests/units/Analytic/AverageLeadCycleTimeAnalyticTest.php
@@ -37,15 +37,12 @@ class AverageLeadCycleTimeAnalyticTest extends Base
$this->container['db']->table(Task::TABLE)->eq('id', 4)->update(array('date_completed' => $now + 2 * 3600));
$stats = $averageLeadCycleTimeAnalytic->build(1);
- $expected = array(
- 'count' => 4,
- 'total_lead_time' => 3600 + 1800 + 3600 + 2*3600,
- 'total_cycle_time' => 1800 + 900,
- 'avg_lead_time' => (3600 + 1800 + 3600 + 2*3600) / 4,
- 'avg_cycle_time' => (1800 + 900) / 4,
- );
- $this->assertEquals($expected, $stats);
+ $this->assertEquals(4, $stats['count']);
+ $this->assertEquals(3600 + 1800 + 3600 + 2*3600, $stats['total_lead_time'], '', 5);
+ $this->assertEquals(1800 + 900, $stats['total_cycle_time'], '', 5);
+ $this->assertEquals((3600 + 1800 + 3600 + 2*3600) / 4, $stats['avg_lead_time'], '', 5);
+ $this->assertEquals((1800 + 900) / 4, $stats['avg_cycle_time'], '', 5);
}
public function testBuildWithNoTasks()
diff --git a/tests/units/Analytic/AverageTimeSpentColumnAnalyticTest.php b/tests/units/Analytic/AverageTimeSpentColumnAnalyticTest.php
index 75cb181d..4e01bfa9 100644
--- a/tests/units/Analytic/AverageTimeSpentColumnAnalyticTest.php
+++ b/tests/units/Analytic/AverageTimeSpentColumnAnalyticTest.php
@@ -16,45 +16,38 @@ class AverageTimeSpentColumnAnalyticTest extends Base
$taskCreationModel = new TaskCreation($this->container);
$projectModel = new Project($this->container);
$averageLeadCycleTimeAnalytic = new AverageTimeSpentColumnAnalytic($this->container);
- $now = time();
$this->assertEquals(1, $projectModel->create(array('name' => 'test1')));
$this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));
$this->assertEquals(2, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));
+ $now = time();
+
$this->container['db']->table(Task::TABLE)->eq('id', 1)->update(array('date_completed' => $now + 3600));
$this->container['db']->table(Task::TABLE)->eq('id', 2)->update(array('date_completed' => $now + 1800));
$stats = $averageLeadCycleTimeAnalytic->build(1);
- $expected = array(
- 1 => array(
- 'count' => 2,
- 'time_spent' => 3600+1800,
- 'average' => (int) ((3600+1800)/2),
- 'title' => 'Backlog',
- ),
- 2 => array(
- 'count' => 0,
- 'time_spent' => 0,
- 'average' => 0,
- 'title' => 'Ready',
- ),
- 3 => array(
- 'count' => 0,
- 'time_spent' => 0,
- 'average' => 0,
- 'title' => 'Work in progress',
- ),
- 4 => array(
- 'count' => 0,
- 'time_spent' => 0,
- 'average' => 0,
- 'title' => 'Done',
- )
- );
-
- $this->assertEquals($expected, $stats);
+
+ $this->assertEquals(2, $stats[1]['count']);
+ $this->assertEquals(3600+1800, $stats[1]['time_spent'], '', 3);
+ $this->assertEquals((int) ((3600+1800)/2), $stats[1]['average'], '', 3);
+ $this->assertEquals('Backlog', $stats[1]['title']);
+
+ $this->assertEquals(0, $stats[2]['count']);
+ $this->assertEquals(0, $stats[2]['time_spent'], '', 3);
+ $this->assertEquals(0, $stats[2]['average'], '', 3);
+ $this->assertEquals('Ready', $stats[2]['title']);
+
+ $this->assertEquals(0, $stats[3]['count']);
+ $this->assertEquals(0, $stats[3]['time_spent'], '', 3);
+ $this->assertEquals(0, $stats[3]['average'], '', 3);
+ $this->assertEquals('Work in progress', $stats[3]['title']);
+
+ $this->assertEquals(0, $stats[4]['count']);
+ $this->assertEquals(0, $stats[4]['time_spent'], '', 3);
+ $this->assertEquals(0, $stats[4]['average'], '', 3);
+ $this->assertEquals('Done', $stats[4]['title']);
}
public function testAverageWithTransitions()
@@ -64,13 +57,13 @@ class AverageTimeSpentColumnAnalyticTest extends Base
$taskCreationModel = new TaskCreation($this->container);
$projectModel = new Project($this->container);
$averageLeadCycleTimeAnalytic = new AverageTimeSpentColumnAnalytic($this->container);
- $now = time();
$this->assertEquals(1, $projectModel->create(array('name' => 'test1')));
$this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));
$this->assertEquals(2, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));
+ $now = time();
$this->container['db']->table(Task::TABLE)->eq('id', 1)->update(array('date_completed' => $now + 3600));
$this->container['db']->table(Task::TABLE)->eq('id', 2)->update(array('date_completed' => $now + 1800));
@@ -84,33 +77,25 @@ class AverageTimeSpentColumnAnalyticTest extends Base
}
$stats = $averageLeadCycleTimeAnalytic->build(1);
- $expected = array(
- 1 => array(
- 'count' => 2,
- 'time_spent' => 3600+1800,
- 'average' => (int) ((3600+1800)/2),
- 'title' => 'Backlog',
- ),
- 2 => array(
- 'count' => 0,
- 'time_spent' => 0,
- 'average' => 0,
- 'title' => 'Ready',
- ),
- 3 => array(
- 'count' => 2,
- 'time_spent' => 1800,
- 'average' => 900,
- 'title' => 'Work in progress',
- ),
- 4 => array(
- 'count' => 0,
- 'time_spent' => 0,
- 'average' => 0,
- 'title' => 'Done',
- )
- );
-
- $this->assertEquals($expected, $stats);
+
+ $this->assertEquals(2, $stats[1]['count']);
+ $this->assertEquals(3600+1800, $stats[1]['time_spent'], '', 3);
+ $this->assertEquals((int) ((3600+1800)/2), $stats[1]['average'], '', 3);
+ $this->assertEquals('Backlog', $stats[1]['title']);
+
+ $this->assertEquals(0, $stats[2]['count']);
+ $this->assertEquals(0, $stats[2]['time_spent'], '', 3);
+ $this->assertEquals(0, $stats[2]['average'], '', 3);
+ $this->assertEquals('Ready', $stats[2]['title']);
+
+ $this->assertEquals(2, $stats[3]['count']);
+ $this->assertEquals(1800, $stats[3]['time_spent'], '', 3);
+ $this->assertEquals(900, $stats[3]['average'], '', 3);
+ $this->assertEquals('Work in progress', $stats[3]['title']);
+
+ $this->assertEquals(0, $stats[4]['count']);
+ $this->assertEquals(0, $stats[4]['time_spent'], '', 3);
+ $this->assertEquals(0, $stats[4]['average'], '', 3);
+ $this->assertEquals('Done', $stats[4]['title']);
}
}
diff --git a/tests/units/Auth/DatabaseAuthTest.php b/tests/units/Auth/DatabaseAuthTest.php
index a13b7fee..ac099a7e 100644
--- a/tests/units/Auth/DatabaseAuthTest.php
+++ b/tests/units/Auth/DatabaseAuthTest.php
@@ -3,6 +3,7 @@
require_once __DIR__.'/../Base.php';
use Kanboard\Auth\DatabaseAuth;
+use Kanboard\Model\User;
class DatabaseAuthTest extends Base
{
@@ -40,12 +41,21 @@ class DatabaseAuthTest extends Base
public function testIsvalidSession()
{
+ $userModel = new User($this->container);
$provider = new DatabaseAuth($this->container);
+
$this->assertFalse($provider->isValidSession());
- $this->container['sessionStorage']->user = array('id' => 1);
+ $this->assertEquals(2, $userModel->create(array('username' => 'foobar')));
+
+ $this->container['sessionStorage']->user = array('id' => 2);
$this->assertTrue($provider->isValidSession());
+ $this->container['sessionStorage']->user = array('id' => 3);
+ $this->assertFalse($provider->isValidSession());
+
+ $this->assertTrue($userModel->disable(2));
+
$this->container['sessionStorage']->user = array('id' => 2);
$this->assertFalse($provider->isValidSession());
}
diff --git a/tests/units/Auth/GithubAuthTest.php b/tests/units/Auth/GithubAuthTest.php
deleted file mode 100644
index e9ab066f..00000000
--- a/tests/units/Auth/GithubAuthTest.php
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-
-require_once __DIR__.'/../Base.php';
-
-use Kanboard\Auth\GithubAuth;
-use Kanboard\Model\User;
-
-class GithubAuthTest extends Base
-{
- public function testGetName()
- {
- $provider = new GithubAuth($this->container);
- $this->assertEquals('Github', $provider->getName());
- }
-
- public function testAuthenticationSuccessful()
- {
- $profile = array(
- 'id' => 1234,
- 'email' => 'test@localhost',
- 'name' => 'Test',
- );
-
- $provider = $this
- ->getMockBuilder('\Kanboard\Auth\GithubAuth')
- ->setConstructorArgs(array($this->container))
- ->setMethods(array(
- 'getProfile',
- ))
- ->getMock();
-
- $provider->expects($this->once())
- ->method('getProfile')
- ->will($this->returnValue($profile));
-
- $this->assertInstanceOf('Kanboard\Auth\GithubAuth', $provider->setCode('1234'));
-
- $this->assertTrue($provider->authenticate());
-
- $user = $provider->getUser();
- $this->assertInstanceOf('Kanboard\User\GithubUserProvider', $user);
- $this->assertEquals('Test', $user->getName());
- $this->assertEquals('', $user->getInternalId());
- $this->assertEquals(1234, $user->getExternalId());
- $this->assertEquals('', $user->getRole());
- $this->assertEquals('', $user->getUsername());
- $this->assertEquals('test@localhost', $user->getEmail());
- $this->assertEquals('github_id', $user->getExternalIdColumn());
- $this->assertEquals(array(), $user->getExternalGroupIds());
- $this->assertEquals(array(), $user->getExtraAttributes());
- $this->assertFalse($user->isUserCreationAllowed());
- }
-
- public function testAuthenticationFailed()
- {
- $provider = $this
- ->getMockBuilder('\Kanboard\Auth\GithubAuth')
- ->setConstructorArgs(array($this->container))
- ->setMethods(array(
- 'getProfile',
- ))
- ->getMock();
-
- $provider->expects($this->once())
- ->method('getProfile')
- ->will($this->returnValue(array()));
-
- $this->assertFalse($provider->authenticate());
- $this->assertEquals(null, $provider->getUser());
- }
-
- public function testGetService()
- {
- $provider = new GithubAuth($this->container);
- $this->assertInstanceOf('Kanboard\Core\Http\OAuth2', $provider->getService());
- }
-
- public function testUnlink()
- {
- $userModel = new User($this->container);
- $provider = new GithubAuth($this->container);
-
- $this->assertEquals(2, $userModel->create(array('username' => 'test', 'github_id' => '1234')));
- $this->assertNotEmpty($userModel->getByExternalId('github_id', 1234));
-
- $this->assertTrue($provider->unlink(2));
- $this->assertEmpty($userModel->getByExternalId('github_id', 1234));
- }
-}
diff --git a/tests/units/Auth/GitlabAuthTest.php b/tests/units/Auth/GitlabAuthTest.php
deleted file mode 100644
index e3ae0bdd..00000000
--- a/tests/units/Auth/GitlabAuthTest.php
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-
-require_once __DIR__.'/../Base.php';
-
-use Kanboard\Auth\GitlabAuth;
-use Kanboard\Model\User;
-
-class GitlabAuthTest extends Base
-{
- public function testGetName()
- {
- $provider = new GitlabAuth($this->container);
- $this->assertEquals('Gitlab', $provider->getName());
- }
-
- public function testAuthenticationSuccessful()
- {
- $profile = array(
- 'id' => 1234,
- 'email' => 'test@localhost',
- 'name' => 'Test',
- );
-
- $provider = $this
- ->getMockBuilder('\Kanboard\Auth\GitlabAuth')
- ->setConstructorArgs(array($this->container))
- ->setMethods(array(
- 'getProfile',
- ))
- ->getMock();
-
- $provider->expects($this->once())
- ->method('getProfile')
- ->will($this->returnValue($profile));
-
- $this->assertInstanceOf('Kanboard\Auth\GitlabAuth', $provider->setCode('1234'));
-
- $this->assertTrue($provider->authenticate());
-
- $user = $provider->getUser();
- $this->assertInstanceOf('Kanboard\User\GitlabUserProvider', $user);
- $this->assertEquals('Test', $user->getName());
- $this->assertEquals('', $user->getInternalId());
- $this->assertEquals(1234, $user->getExternalId());
- $this->assertEquals('', $user->getRole());
- $this->assertEquals('', $user->getUsername());
- $this->assertEquals('test@localhost', $user->getEmail());
- $this->assertEquals('gitlab_id', $user->getExternalIdColumn());
- $this->assertEquals(array(), $user->getExternalGroupIds());
- $this->assertEquals(array(), $user->getExtraAttributes());
- $this->assertFalse($user->isUserCreationAllowed());
- }
-
- public function testAuthenticationFailed()
- {
- $provider = $this
- ->getMockBuilder('\Kanboard\Auth\GitlabAuth')
- ->setConstructorArgs(array($this->container))
- ->setMethods(array(
- 'getProfile',
- ))
- ->getMock();
-
- $provider->expects($this->once())
- ->method('getProfile')
- ->will($this->returnValue(array()));
-
- $this->assertFalse($provider->authenticate());
- $this->assertEquals(null, $provider->getUser());
- }
-
- public function testGetService()
- {
- $provider = new GitlabAuth($this->container);
- $this->assertInstanceOf('Kanboard\Core\Http\OAuth2', $provider->getService());
- }
-
- public function testUnlink()
- {
- $userModel = new User($this->container);
- $provider = new GitlabAuth($this->container);
-
- $this->assertEquals(2, $userModel->create(array('username' => 'test', 'gitlab_id' => '1234')));
- $this->assertNotEmpty($userModel->getByExternalId('gitlab_id', 1234));
-
- $this->assertTrue($provider->unlink(2));
- $this->assertEmpty($userModel->getByExternalId('gitlab_id', 1234));
- }
-}
diff --git a/tests/units/Auth/GoogleAuthTest.php b/tests/units/Auth/GoogleAuthTest.php
deleted file mode 100644
index b9a7d811..00000000
--- a/tests/units/Auth/GoogleAuthTest.php
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-
-require_once __DIR__.'/../Base.php';
-
-use Kanboard\Auth\GoogleAuth;
-use Kanboard\Model\User;
-
-class GoogleAuthTest extends Base
-{
- public function testGetName()
- {
- $provider = new GoogleAuth($this->container);
- $this->assertEquals('Google', $provider->getName());
- }
-
- public function testAuthenticationSuccessful()
- {
- $profile = array(
- 'id' => 1234,
- 'email' => 'test@localhost',
- 'name' => 'Test',
- );
-
- $provider = $this
- ->getMockBuilder('\Kanboard\Auth\GoogleAuth')
- ->setConstructorArgs(array($this->container))
- ->setMethods(array(
- 'getProfile',
- ))
- ->getMock();
-
- $provider->expects($this->once())
- ->method('getProfile')
- ->will($this->returnValue($profile));
-
- $this->assertInstanceOf('Kanboard\Auth\GoogleAuth', $provider->setCode('1234'));
-
- $this->assertTrue($provider->authenticate());
-
- $user = $provider->getUser();
- $this->assertInstanceOf('Kanboard\User\GoogleUserProvider', $user);
- $this->assertEquals('Test', $user->getName());
- $this->assertEquals('', $user->getInternalId());
- $this->assertEquals(1234, $user->getExternalId());
- $this->assertEquals('', $user->getRole());
- $this->assertEquals('', $user->getUsername());
- $this->assertEquals('test@localhost', $user->getEmail());
- $this->assertEquals('google_id', $user->getExternalIdColumn());
- $this->assertEquals(array(), $user->getExternalGroupIds());
- $this->assertEquals(array(), $user->getExtraAttributes());
- $this->assertFalse($user->isUserCreationAllowed());
- }
-
- public function testAuthenticationFailed()
- {
- $provider = $this
- ->getMockBuilder('\Kanboard\Auth\GoogleAuth')
- ->setConstructorArgs(array($this->container))
- ->setMethods(array(
- 'getProfile',
- ))
- ->getMock();
-
- $provider->expects($this->once())
- ->method('getProfile')
- ->will($this->returnValue(array()));
-
- $this->assertFalse($provider->authenticate());
- $this->assertEquals(null, $provider->getUser());
- }
-
- public function testGetService()
- {
- $provider = new GoogleAuth($this->container);
- $this->assertInstanceOf('Kanboard\Core\Http\OAuth2', $provider->getService());
- }
-
- public function testUnlink()
- {
- $userModel = new User($this->container);
- $provider = new GoogleAuth($this->container);
-
- $this->assertEquals(2, $userModel->create(array('username' => 'test', 'google_id' => '1234')));
- $this->assertNotEmpty($userModel->getByExternalId('google_id', 1234));
-
- $this->assertTrue($provider->unlink(2));
- $this->assertEmpty($userModel->getByExternalId('google_id', 1234));
- }
-}
diff --git a/tests/units/Base.php b/tests/units/Base.php
index 4b54cdb0..6af14ba5 100644
--- a/tests/units/Base.php
+++ b/tests/units/Base.php
@@ -10,49 +10,7 @@ use SimpleLogger\Logger;
use SimpleLogger\File;
use Kanboard\Core\Session\FlashMessage;
use Kanboard\Core\Session\SessionStorage;
-
-class FakeHttpClient
-{
- private $url = '';
- private $data = array();
- private $headers = array();
-
- public function getUrl()
- {
- return $this->url;
- }
-
- public function getData()
- {
- return $this->data;
- }
-
- public function getHeaders()
- {
- return $this->headers;
- }
-
- public function toPrettyJson()
- {
- return json_encode($this->data, JSON_PRETTY_PRINT);
- }
-
- public function postJson($url, array $data, array $headers = array())
- {
- $this->url = $url;
- $this->data = $data;
- $this->headers = $headers;
- return true;
- }
-
- public function postForm($url, array $data, array $headers = array())
- {
- $this->url = $url;
- $this->data = $data;
- $this->headers = $headers;
- return true;
- }
-}
+use Kanboard\ServiceProvider\ActionProvider;
abstract class Base extends PHPUnit_Framework_TestCase
{
@@ -75,6 +33,7 @@ abstract class Base extends PHPUnit_Framework_TestCase
}
$this->container = new Pimple\Container;
+ $this->container->register(new Kanboard\ServiceProvider\HelperProvider);
$this->container->register(new Kanboard\ServiceProvider\AuthenticationProvider);
$this->container->register(new Kanboard\ServiceProvider\DatabaseProvider);
$this->container->register(new Kanboard\ServiceProvider\ClassProvider);
@@ -90,8 +49,18 @@ abstract class Base extends PHPUnit_Framework_TestCase
$this->container['logger'] = new Logger;
$this->container['logger']->setLogger(new File($this->isWindows() ? 'NUL' : '/dev/null'));
- $this->container['httpClient'] = new FakeHttpClient;
- $this->container['emailClient'] = $this->getMockBuilder('EmailClient')->setMethods(array('send'))->getMock();
+
+ $this->container['httpClient'] = $this
+ ->getMockBuilder('\Kanboard\Core\Http\Client')
+ ->setConstructorArgs(array($this->container))
+ ->setMethods(array('get', 'getJson', 'postJson', 'postForm'))
+ ->getMock();
+
+ $this->container['emailClient'] = $this
+ ->getMockBuilder('\Kanboard\Core\Mail\Client')
+ ->setConstructorArgs(array($this->container))
+ ->setMethods(array('send'))
+ ->getMock();
$this->container['userNotificationType'] = $this
->getMockBuilder('\Kanboard\Model\UserNotificationType')
@@ -99,9 +68,16 @@ abstract class Base extends PHPUnit_Framework_TestCase
->setMethods(array('getType', 'getSelectedTypes'))
->getMock();
+ $this->container['objectStorage'] = $this
+ ->getMockBuilder('\Kanboard\Core\ObjectStorage\FileStorage')
+ ->setConstructorArgs(array($this->container))
+ ->setMethods(array('put', 'moveFile', 'remove', 'moveUploadedFile'))
+ ->getMock();
+
$this->container['sessionStorage'] = new SessionStorage;
+ $this->container->register(new ActionProvider);
- $this->container['flash'] = function($c) {
+ $this->container['flash'] = function ($c) {
return new FlashMessage($c);
};
}
diff --git a/tests/units/Core/DateParserTest.php b/tests/units/Core/DateParserTest.php
index 0d345784..dc3366b3 100644
--- a/tests/units/Core/DateParserTest.php
+++ b/tests/units/Core/DateParserTest.php
@@ -6,79 +6,167 @@ use Kanboard\Core\DateParser;
class DateParserTest extends Base
{
+ public function testGetTimeFormats()
+ {
+ $dateParser = new DateParser($this->container);
+ $this->assertCount(2, $dateParser->getTimeFormats());
+ $this->assertContains('H:i', $dateParser->getTimeFormats());
+ $this->assertContains('g:i a', $dateParser->getTimeFormats());
+ }
+
+ public function testGetDateFormats()
+ {
+ $dateParser = new DateParser($this->container);
+ $this->assertCount(4, $dateParser->getDateFormats());
+ $this->assertCount(6, $dateParser->getDateFormats(true));
+ $this->assertContains('d/m/Y', $dateParser->getDateFormats());
+ $this->assertNotContains('Y-m-d', $dateParser->getDateFormats());
+ $this->assertContains('Y-m-d', $dateParser->getDateFormats(true));
+ }
+
+ public function testGetDateTimeFormats()
+ {
+ $dateParser = new DateParser($this->container);
+ $this->assertCount(8, $dateParser->getDateTimeFormats());
+ $this->assertCount(12, $dateParser->getDateTimeFormats(true));
+ $this->assertContains('d/m/Y H:i', $dateParser->getDateTimeFormats());
+ $this->assertNotContains('Y-m-d H:i', $dateParser->getDateTimeFormats());
+ $this->assertContains('Y-m-d g:i a', $dateParser->getDateTimeFormats(true));
+ }
+
+ public function testGetAllDateFormats()
+ {
+ $dateParser = new DateParser($this->container);
+ $this->assertCount(12, $dateParser->getAllDateFormats());
+ $this->assertCount(18, $dateParser->getAllDateFormats(true));
+ $this->assertContains('d/m/Y', $dateParser->getAllDateFormats());
+ $this->assertContains('d/m/Y H:i', $dateParser->getAllDateFormats());
+ $this->assertNotContains('Y-m-d H:i', $dateParser->getAllDateFormats());
+ $this->assertContains('Y-m-d g:i a', $dateParser->getAllDateFormats(true));
+ $this->assertContains('Y-m-d', $dateParser->getAllDateFormats(true));
+ }
+
+ public function testGetAllAvailableFormats()
+ {
+ $dateParser = new DateParser($this->container);
+
+ $formats = $dateParser->getAvailableFormats($dateParser->getDateFormats());
+ $this->assertArrayHasKey('d/m/Y', $formats);
+ $this->assertContains(date('d/m/Y'), $formats);
+
+ $formats = $dateParser->getAvailableFormats($dateParser->getDateTimeFormats());
+ $this->assertArrayHasKey('d/m/Y H:i', $formats);
+ $this->assertContains(date('d/m/Y H:i'), $formats);
+
+ $formats = $dateParser->getAvailableFormats($dateParser->getAllDateFormats());
+ $this->assertArrayHasKey('d/m/Y', $formats);
+ $this->assertContains(date('d/m/Y'), $formats);
+ $this->assertArrayHasKey('d/m/Y H:i', $formats);
+ $this->assertContains(date('d/m/Y H:i'), $formats);
+ }
+
+ public function testGetTimestamp()
+ {
+ $dateParser = new DateParser($this->container);
+
+ $this->assertEquals(1393995600, $dateParser->getTimestamp(1393995600));
+ $this->assertEquals('2014-03-05', date('Y-m-d', $dateParser->getTimestamp('2014-03-05')));
+ $this->assertEquals('2014-03-05', date('Y-m-d', $dateParser->getTimestamp('2014_03_05')));
+ $this->assertEquals('2014-03-05', date('Y-m-d', $dateParser->getTimestamp('03/05/2014')));
+ $this->assertEquals('2014-03-25 17:18', date('Y-m-d H:i', $dateParser->getTimestamp('03/25/2014 5:18 pm')));
+ $this->assertEquals('2014-03-25 05:18', date('Y-m-d H:i', $dateParser->getTimestamp('03/25/2014 5:18 am')));
+ $this->assertEquals('2014-03-25 17:18', date('Y-m-d H:i', $dateParser->getTimestamp('03/25/2014 5:18pm')));
+ $this->assertEquals('2014-03-25 23:14', date('Y-m-d H:i', $dateParser->getTimestamp('03/25/2014 23:14')));
+ $this->assertEquals('2014-03-29 23:14', date('Y-m-d H:i', $dateParser->getTimestamp('2014_03_29 23:14')));
+ $this->assertEquals('2014-03-29 23:14', date('Y-m-d H:i', $dateParser->getTimestamp('2014-03-29 23:14')));
+ }
+
public function testDateRange()
{
- $d = new DateParser($this->container);
+ $dateParser = new DateParser($this->container);
- $this->assertTrue($d->withinDateRange(new DateTime('2015-03-14 15:30:00'), new DateTime('2015-03-14 15:00:00'), new DateTime('2015-03-14 16:00:00')));
- $this->assertFalse($d->withinDateRange(new DateTime('2015-03-14 15:30:00'), new DateTime('2015-03-14 16:00:00'), new DateTime('2015-03-14 17:00:00')));
+ $this->assertTrue($dateParser->withinDateRange(new DateTime('2015-03-14 15:30:00'), new DateTime('2015-03-14 15:00:00'), new DateTime('2015-03-14 16:00:00')));
+ $this->assertFalse($dateParser->withinDateRange(new DateTime('2015-03-14 15:30:00'), new DateTime('2015-03-14 16:00:00'), new DateTime('2015-03-14 17:00:00')));
+ }
+
+ public function testGetHours()
+ {
+ $dateParser = new DateParser($this->container);
+
+ $this->assertEquals(1, $dateParser->getHours(new DateTime('2015-03-14 15:00:00'), new DateTime('2015-03-14 16:00:00')));
+ $this->assertEquals(2.5, $dateParser->getHours(new DateTime('2015-03-14 15:00:00'), new DateTime('2015-03-14 17:30:00')));
+ $this->assertEquals(2.75, $dateParser->getHours(new DateTime('2015-03-14 15:00:00'), new DateTime('2015-03-14 17:45:00')));
+ $this->assertEquals(3, $dateParser->getHours(new DateTime('2015-03-14 14:57:00'), new DateTime('2015-03-14 17:58:00')));
+ $this->assertEquals(3, $dateParser->getHours(new DateTime('2015-03-14 14:57:00'), new DateTime('2015-03-14 11:58:00')));
}
public function testRoundSeconds()
{
- $d = new DateParser($this->container);
- $this->assertEquals('16:30', date('H:i', $d->getRoundedSeconds(strtotime('16:28'))));
- $this->assertEquals('16:00', date('H:i', $d->getRoundedSeconds(strtotime('16:02'))));
- $this->assertEquals('16:15', date('H:i', $d->getRoundedSeconds(strtotime('16:14'))));
- $this->assertEquals('17:00', date('H:i', $d->getRoundedSeconds(strtotime('16:58'))));
+ $dateParser = new DateParser($this->container);
+ $this->assertEquals('16:30', date('H:i', $dateParser->getRoundedSeconds(strtotime('16:28'))));
+ $this->assertEquals('16:00', date('H:i', $dateParser->getRoundedSeconds(strtotime('16:02'))));
+ $this->assertEquals('16:15', date('H:i', $dateParser->getRoundedSeconds(strtotime('16:14'))));
+ $this->assertEquals('17:00', date('H:i', $dateParser->getRoundedSeconds(strtotime('16:58'))));
}
- public function testGetHours()
+ public function testGetIsoDate()
{
- $d = new DateParser($this->container);
+ $dateParser = new DateParser($this->container);
+
+ $this->assertEquals('2016-02-06', $dateParser->getIsoDate(1454786217));
+ $this->assertEquals('2014-03-05', $dateParser->getIsoDate('2014-03-05'));
+ $this->assertEquals('2014-03-05', $dateParser->getIsoDate('2014_03_05'));
+ $this->assertEquals('2014-03-05', $dateParser->getIsoDate('03/05/2014'));
+ $this->assertEquals('2014-03-25', $dateParser->getIsoDate('03/25/2014 5:18 pm'));
+ $this->assertEquals('2014-03-25', $dateParser->getIsoDate('03/25/2014 5:18 am'));
+ $this->assertEquals('2014-03-25', $dateParser->getIsoDate('03/25/2014 5:18pm'));
+ $this->assertEquals('2014-03-25', $dateParser->getIsoDate('03/25/2014 23:14'));
+ $this->assertEquals('2014-03-29', $dateParser->getIsoDate('2014_03_29 23:14'));
+ $this->assertEquals('2014-03-29', $dateParser->getIsoDate('2014-03-29 23:14'));
+ }
- $this->assertEquals(1, $d->getHours(new DateTime('2015-03-14 15:00:00'), new DateTime('2015-03-14 16:00:00')));
- $this->assertEquals(2.5, $d->getHours(new DateTime('2015-03-14 15:00:00'), new DateTime('2015-03-14 17:30:00')));
- $this->assertEquals(2.75, $d->getHours(new DateTime('2015-03-14 15:00:00'), new DateTime('2015-03-14 17:45:00')));
- $this->assertEquals(3, $d->getHours(new DateTime('2015-03-14 14:57:00'), new DateTime('2015-03-14 17:58:00')));
- $this->assertEquals(3, $d->getHours(new DateTime('2015-03-14 14:57:00'), new DateTime('2015-03-14 11:58:00')));
+ public function testGetTimestampFromIsoFormat()
+ {
+ $dateParser = new DateParser($this->container);
+ $this->assertEquals('2014-03-05 00:00', date('Y-m-d H:i', $dateParser->getTimestampFromIsoFormat('2014-03-05')));
+ $this->assertEquals(date('Y-m-d 00:00', strtotime('+2 days')), date('Y-m-d H:i', $dateParser->getTimestampFromIsoFormat(strtotime('+2 days'))));
}
- public function testValidDate()
+ public function testRemoveTimeFromTimestamp()
{
- $d = new DateParser($this->container);
-
- $this->assertEquals('2014-03-05', date('Y-m-d', $d->getValidDate('2014-03-05', 'Y-m-d')));
- $this->assertEquals('2014-03-05', date('Y-m-d', $d->getValidDate('2014_03_05', 'Y_m_d')));
- $this->assertEquals('2014-03-05', date('Y-m-d', $d->getValidDate('05/03/2014', 'd/m/Y')));
- $this->assertEquals('2014-03-05', date('Y-m-d', $d->getValidDate('03/05/2014', 'm/d/Y')));
- $this->assertEquals('2014-03-05', date('Y-m-d', $d->getValidDate('3/5/2014', 'm/d/Y')));
- $this->assertEquals('2014-03-05', date('Y-m-d', $d->getValidDate('5/3/2014', 'd/m/Y')));
- $this->assertEquals('2014-03-05', date('Y-m-d', $d->getValidDate('5/3/14', 'd/m/y')));
- $this->assertEquals(0, $d->getValidDate('5/3/14', 'd/m/Y'));
- $this->assertEquals(0, $d->getValidDate('5-3-2014', 'd/m/Y'));
+ $dateParser = new DateParser($this->container);
+ $this->assertEquals('2016-02-06 00:00', date('Y-m-d H:i', $dateParser->removeTimeFromTimestamp(1454786217)));
}
- public function testGetTimestamp()
+ public function testFormat()
{
- $d = new DateParser($this->container);
-
- $this->assertEquals('2014-03-05', date('Y-m-d', $d->getTimestamp('2014-03-05')));
- $this->assertEquals('2014-03-05', date('Y-m-d', $d->getTimestamp('2014_03_05')));
- $this->assertEquals('2014-03-05', date('Y-m-d', $d->getTimestamp('03/05/2014')));
- $this->assertEquals('2014-03-25 17:18', date('Y-m-d H:i', $d->getTimestamp('03/25/2014 5:18 pm')));
- $this->assertEquals('2014-03-25 05:18', date('Y-m-d H:i', $d->getTimestamp('03/25/2014 5:18 am')));
- $this->assertEquals('2014-03-25 05:18', date('Y-m-d H:i', $d->getTimestamp('03/25/2014 5:18am')));
- $this->assertEquals('2014-03-25 23:14', date('Y-m-d H:i', $d->getTimestamp('03/25/2014 23:14')));
- $this->assertEquals('2014-03-29 23:14', date('Y-m-d H:i', $d->getTimestamp('2014_03_29 23:14')));
- $this->assertEquals('2014-03-29 23:14', date('Y-m-d H:i', $d->getTimestamp('2014-03-29 23:14')));
+ $dateParser = new DateParser($this->container);
+ $values['date'] = '1454787006';
+
+ $this->assertEquals(array('date' => '06/02/2016'), $dateParser->format($values, array('date'), 'd/m/Y'));
+ $this->assertEquals(array('date' => '02/06/2016 7:30 pm'), $dateParser->format($values, array('date'), 'm/d/Y g:i a'));
}
public function testConvert()
{
- $d = new DateParser($this->container);
-
+ $dateParser = new DateParser($this->container);
$values = array(
'date_due' => '2015-01-25',
- 'date_started' => '2015_01_25',
+ 'date_started' => '2015-01-25 17:25',
);
- $d->convert($values, array('date_due', 'date_started'));
+ $this->assertEquals(
+ array('date_due' => 1422144000, 'date_started' => 1422144000),
+ $dateParser->convert($values, array('date_due', 'date_started'))
+ );
- $this->assertEquals(mktime(0, 0, 0, 1, 25, 2015), $values['date_due']);
- $this->assertEquals('2015-01-25', date('Y-m-d', $values['date_due']));
+ $values = array(
+ 'date_started' => '2015-01-25 17:25',
+ );
- $this->assertEquals(mktime(0, 0, 0, 1, 25, 2015), $values['date_started']);
- $this->assertEquals('2015-01-25', date('Y-m-d', $values['date_started']));
+ $this->assertEquals(
+ array('date_started' => 1422206700),
+ $dateParser->convert($values, array('date_due', 'date_started'), true)
+ );
}
}
diff --git a/tests/units/Core/ExternalLink/ExternalLinkManagerTest.php b/tests/units/Core/ExternalLink/ExternalLinkManagerTest.php
new file mode 100644
index 00000000..d284a80b
--- /dev/null
+++ b/tests/units/Core/ExternalLink/ExternalLinkManagerTest.php
@@ -0,0 +1,120 @@
+<?php
+
+require_once __DIR__.'/../../Base.php';
+
+use Kanboard\Core\ExternalLink\ExternalLinkManager;
+use Kanboard\ExternalLink\WebLinkProvider;
+use Kanboard\ExternalLink\AttachmentLinkProvider;
+
+class ExternalLinkManagerTest extends Base
+{
+ public function testRegister()
+ {
+ $externalLinkManager = new ExternalLinkManager($this->container);
+ $webLinkProvider = new WebLinkProvider($this->container);
+ $attachmentLinkProvider = new AttachmentLinkProvider($this->container);
+
+ $externalLinkManager->register($webLinkProvider);
+ $externalLinkManager->register($attachmentLinkProvider);
+
+ $this->assertInstanceOf(get_class($webLinkProvider), $externalLinkManager->getProvider($webLinkProvider->getType()));
+ $this->assertInstanceOf(get_class($attachmentLinkProvider), $externalLinkManager->getProvider($attachmentLinkProvider->getType()));
+ }
+
+ public function testGetProviderNotFound()
+ {
+ $externalLinkManager = new ExternalLinkManager($this->container);
+
+ $this->setExpectedException('\Kanboard\Core\ExternalLink\ExternalLinkProviderNotFound');
+ $externalLinkManager->getProvider('not found');
+ }
+
+ public function testGetTypes()
+ {
+ $externalLinkManager = new ExternalLinkManager($this->container);
+ $webLinkProvider = new WebLinkProvider($this->container);
+ $attachmentLinkProvider = new AttachmentLinkProvider($this->container);
+
+ $this->assertEquals(array(ExternalLinkManager::TYPE_AUTO => 'Auto'), $externalLinkManager->getTypes());
+
+ $externalLinkManager->register($webLinkProvider);
+ $externalLinkManager->register($attachmentLinkProvider);
+
+ $this->assertEquals(
+ array(ExternalLinkManager::TYPE_AUTO => 'Auto', 'attachment' => 'Attachment', 'weblink' => 'Web Link'),
+ $externalLinkManager->getTypes()
+ );
+ }
+
+ public function testGetDependencyLabel()
+ {
+ $externalLinkManager = new ExternalLinkManager($this->container);
+ $webLinkProvider = new WebLinkProvider($this->container);
+ $attachmentLinkProvider = new AttachmentLinkProvider($this->container);
+
+ $externalLinkManager->register($webLinkProvider);
+ $externalLinkManager->register($attachmentLinkProvider);
+
+ $this->assertSame('Related', $externalLinkManager->getDependencyLabel($webLinkProvider->getType(), 'related'));
+ $this->assertSame('custom', $externalLinkManager->getDependencyLabel($webLinkProvider->getType(), 'custom'));
+ }
+
+ public function testFindProviderNotFound()
+ {
+ $externalLinkManager = new ExternalLinkManager($this->container);
+ $webLinkProvider = new WebLinkProvider($this->container);
+ $attachmentLinkProvider = new AttachmentLinkProvider($this->container);
+
+ $externalLinkManager->register($webLinkProvider);
+ $externalLinkManager->register($attachmentLinkProvider);
+
+ $this->setExpectedException('\Kanboard\Core\ExternalLink\ExternalLinkProviderNotFound');
+ $externalLinkManager->find();
+ }
+
+ public function testFindProvider()
+ {
+ $externalLinkManager = new ExternalLinkManager($this->container);
+ $webLinkProvider = new WebLinkProvider($this->container);
+ $attachmentLinkProvider = new AttachmentLinkProvider($this->container);
+
+ $externalLinkManager->register($webLinkProvider);
+ $externalLinkManager->register($attachmentLinkProvider);
+
+ $externalLinkManager->setUserInput(array('text' => 'https://google.com/', 'type' => ExternalLinkManager::TYPE_AUTO));
+ $this->assertSame($webLinkProvider, $externalLinkManager->find());
+
+ $externalLinkManager->setUserInput(array('text' => 'https://google.com/file.pdf', 'type' => ExternalLinkManager::TYPE_AUTO));
+ $this->assertSame($attachmentLinkProvider, $externalLinkManager->find());
+ }
+
+ public function testFindProviderWithSelectedType()
+ {
+ $externalLinkManager = new ExternalLinkManager($this->container);
+ $webLinkProvider = new WebLinkProvider($this->container);
+ $attachmentLinkProvider = new AttachmentLinkProvider($this->container);
+
+ $externalLinkManager->register($webLinkProvider);
+ $externalLinkManager->register($attachmentLinkProvider);
+
+ $externalLinkManager->setUserInput(array('text' => 'https://google.com/', 'type' => $webLinkProvider->getType()));
+ $this->assertSame($webLinkProvider, $externalLinkManager->find());
+
+ $externalLinkManager->setUserInput(array('text' => 'https://google.com/file.pdf', 'type' => $attachmentLinkProvider->getType()));
+ $this->assertSame($attachmentLinkProvider, $externalLinkManager->find());
+ }
+
+ public function testFindProviderWithSelectedTypeNotFound()
+ {
+ $externalLinkManager = new ExternalLinkManager($this->container);
+ $webLinkProvider = new WebLinkProvider($this->container);
+ $attachmentLinkProvider = new AttachmentLinkProvider($this->container);
+
+ $externalLinkManager->register($webLinkProvider);
+ $externalLinkManager->register($attachmentLinkProvider);
+
+ $this->setExpectedException('\Kanboard\Core\ExternalLink\ExternalLinkProviderNotFound');
+ $externalLinkManager->setUserInput(array('text' => 'https://google.com/', 'type' => 'not found'));
+ $externalLinkManager->find();
+ }
+}
diff --git a/tests/units/Core/HelperTest.php b/tests/units/Core/HelperTest.php
new file mode 100644
index 00000000..b766dd96
--- /dev/null
+++ b/tests/units/Core/HelperTest.php
@@ -0,0 +1,17 @@
+<?php
+
+require_once __DIR__.'/../Base.php';
+
+use Kanboard\Core\Helper;
+
+class HelperTest extends Base
+{
+ public function testRegister()
+ {
+ $helper = new Helper($this->container);
+ $helper->register('foobar', '\Stdclass');
+
+ $this->assertInstanceOf('Stdclass', $helper->foobar);
+ $this->assertInstanceOf('Stdclass', $helper->getHelper('foobar'));
+ }
+}
diff --git a/tests/units/Core/Http/OAuth2Test.php b/tests/units/Core/Http/OAuth2Test.php
index d703dd7a..c68ae116 100644
--- a/tests/units/Core/Http/OAuth2Test.php
+++ b/tests/units/Core/Http/OAuth2Test.php
@@ -27,17 +27,27 @@ class OAuth2Test extends Base
public function testAccessToken()
{
+ $params = array(
+ 'code' => 'something',
+ 'client_id' => 'A',
+ 'client_secret' => 'B',
+ 'redirect_uri' => 'C',
+ 'grant_type' => 'authorization_code',
+ );
+
+ $response = json_encode(array(
+ 'token_type' => 'bearer',
+ 'access_token' => 'plop',
+ ));
+
+ $this->container['httpClient']
+ ->expects($this->once())
+ ->method('postForm')
+ ->with('E', $params, array('Accept: application/json'))
+ ->will($this->returnValue($response));
+
$oauth = new OAuth2($this->container);
$oauth->createService('A', 'B', 'C', 'D', 'E', array('f', 'g'));
$oauth->getAccessToken('something');
-
- $data = $this->container['httpClient']->getData();
- $this->assertEquals('something', $data['code']);
- $this->assertEquals('A', $data['client_id']);
- $this->assertEquals('B', $data['client_secret']);
- $this->assertEquals('C', $data['redirect_uri']);
- $this->assertEquals('authorization_code', $data['grant_type']);
-
- $this->assertEquals('E', $this->container['httpClient']->getUrl());
}
}
diff --git a/tests/units/Core/Http/RequestTest.php b/tests/units/Core/Http/RequestTest.php
index 217698f9..6fa796f7 100644
--- a/tests/units/Core/Http/RequestTest.php
+++ b/tests/units/Core/Http/RequestTest.php
@@ -102,6 +102,12 @@ class RequestTest extends Base
$request = new Request($this->container, array('HTTPS' => '1'), array(), array(), array(), array());
$this->assertTrue($request->isHTTPS());
+
+ $request = new Request($this->container, array('HTTP_X_FORWARDED_PROTO' => 'https'), array(), array(), array(), array());
+ $this->assertTrue($request->isHTTPS());
+
+ $request = new Request($this->container, array('HTTP_X_FORWARDED_PROTO' => 'http'), array(), array(), array(), array());
+ $this->assertFalse($request->isHTTPS());
}
public function testGetCookie()
diff --git a/tests/units/Core/Http/RouterTest.php b/tests/units/Core/Http/RouterTest.php
index 0b200ab5..75a3ba4f 100644
--- a/tests/units/Core/Http/RouterTest.php
+++ b/tests/units/Core/Http/RouterTest.php
@@ -40,21 +40,25 @@ namespace {
$this->assertEquals('userImport', $dispatcher->sanitize('userImport', 'default'));
}
- public function testGetPath()
+ public function testGetPathWithFolder()
{
- $dispatcher = new Router($this->container);
-
- $this->container['helper'] = new Helper($this->container);
+ $router = new Router($this->container);
$this->container['request'] = new Request($this->container, array('PHP_SELF' => '/index.php', 'REQUEST_URI' => '/a/b/c', 'REQUEST_METHOD' => 'GET'));
- $this->assertEquals('a/b/c', $dispatcher->getPath());
+ $this->assertEquals('a/b/c', $router->getPath());
+ }
- $this->container['helper'] = new Helper($this->container);
+ public function testGetPathWithQueryString()
+ {
+ $router = new Router($this->container);
$this->container['request'] = new Request($this->container, array('PHP_SELF' => '/index.php', 'REQUEST_URI' => '/a/b/something?test=a', 'QUERY_STRING' => 'test=a', 'REQUEST_METHOD' => 'GET'));
- $this->assertEquals('a/b/something', $dispatcher->getPath());
+ $this->assertEquals('a/b/something', $router->getPath());
+ }
- $this->container['helper'] = new Helper($this->container);
+ public function testGetPathWithSubFolderAndQueryString()
+ {
+ $router = new Router($this->container);
$this->container['request'] = new Request($this->container, array('PHP_SELF' => '/a/index.php', 'REQUEST_URI' => '/a/b/something?test=a', 'QUERY_STRING' => 'test=a', 'REQUEST_METHOD' => 'GET'));
- $this->assertEquals('b/something', $dispatcher->getPath());
+ $this->assertEquals('b/something', $router->getPath());
}
public function testDispatcherWithControllerNotFound()
diff --git a/tests/units/Core/Ldap/LdapGroupTest.php b/tests/units/Core/Ldap/LdapGroupTest.php
index 3f538249..4341ffc8 100644
--- a/tests/units/Core/Ldap/LdapGroupTest.php
+++ b/tests/units/Core/Ldap/LdapGroupTest.php
@@ -4,7 +4,6 @@ require_once __DIR__.'/../../Base.php';
use Kanboard\Core\Ldap\Group;
use Kanboard\Core\Ldap\Entries;
-use Kanboard\Core\Security\Role;
class LdapGroupTest extends Base
{
diff --git a/tests/units/Core/TemplateTest.php b/tests/units/Core/TemplateTest.php
index 6e5ae00d..bd476c51 100644
--- a/tests/units/Core/TemplateTest.php
+++ b/tests/units/Core/TemplateTest.php
@@ -8,7 +8,7 @@ class TemplateTest extends Base
{
public function testGetTemplateFile()
{
- $t = new Template($this->container);
+ $t = new Template($this->container['helper']);
$this->assertStringEndsWith(
'app'.DIRECTORY_SEPARATOR.'Core'.DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'Template'.DIRECTORY_SEPARATOR.'a'.DIRECTORY_SEPARATOR.'b.php',
$t->getTemplateFile('a'.DIRECTORY_SEPARATOR.'b')
@@ -17,7 +17,7 @@ class TemplateTest extends Base
public function testGetPluginTemplateFile()
{
- $t = new Template($this->container);
+ $t = new Template($this->container['helper']);
$this->assertStringEndsWith(
'app'.DIRECTORY_SEPARATOR.'Core'.DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'plugins'.DIRECTORY_SEPARATOR.'Myplugin'.DIRECTORY_SEPARATOR.'Template'.DIRECTORY_SEPARATOR.'a'.DIRECTORY_SEPARATOR.'b.php',
$t->getTemplateFile('myplugin:a'.DIRECTORY_SEPARATOR.'b')
@@ -26,7 +26,7 @@ class TemplateTest extends Base
public function testGetOverridedTemplateFile()
{
- $t = new Template($this->container);
+ $t = new Template($this->container['helper']);
$t->setTemplateOverride('a'.DIRECTORY_SEPARATOR.'b', 'myplugin:c');
$this->assertStringEndsWith(
diff --git a/tests/units/Model/TaskExportTest.php b/tests/units/Export/TaskExportTest.php
index b40b0771..f0637c25 100644
--- a/tests/units/Model/TaskExportTest.php
+++ b/tests/units/Export/TaskExportTest.php
@@ -1,13 +1,11 @@
<?php
-require_once __DIR__.'/../Base.php';
+require_once __DIR__ . '/../Base.php';
-use Kanboard\Model\Task;
use Kanboard\Model\TaskCreation;
-use Kanboard\Model\TaskExport;
+use Kanboard\Export\TaskExport;
use Kanboard\Model\Project;
use Kanboard\Model\Category;
-use Kanboard\Model\User;
use Kanboard\Model\Swimlane;
class TaskExportTest extends Base
diff --git a/tests/units/Export/TransitionExportTest.php b/tests/units/Export/TransitionExportTest.php
new file mode 100644
index 00000000..7ff3082e
--- /dev/null
+++ b/tests/units/Export/TransitionExportTest.php
@@ -0,0 +1,45 @@
+<?php
+
+require_once __DIR__ . '/../Base.php';
+
+use Kanboard\Model\TaskCreation;
+use Kanboard\Model\Transition;
+use Kanboard\Export\TransitionExport;
+use Kanboard\Model\Project;
+
+class TransitionExportTest extends Base
+{
+ public function testExport()
+ {
+ $projectModel = new Project($this->container);
+ $taskCreationModel = new TaskCreation($this->container);
+ $transitionModel = new Transition($this->container);
+ $transitionExportModel = new TransitionExport($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'test')));
+ $this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));
+
+ $task_event = array(
+ 'project_id' => 1,
+ 'task_id' => 1,
+ 'src_column_id' => 1,
+ 'dst_column_id' => 2,
+ 'date_moved' => time() - 3600
+ );
+
+ $this->assertTrue($transitionModel->save(1, $task_event));
+
+ $export = $transitionExportModel->export(1, date('Y-m-d'), date('Y-m-d'));
+ $this->assertCount(2, $export);
+
+ $this->assertEquals(
+ array('Id', 'Task Title', 'Source column', 'Destination column', 'Executer', 'Date', 'Time spent'),
+ $export[0]
+ );
+
+ $this->assertEquals(
+ array(1, 'test', 'Backlog', 'Ready', 'admin', date('m/d/Y H:i', time()), 1.0),
+ $export[1]
+ );
+ }
+}
diff --git a/tests/units/ExternalLink/AttachmentLinkProviderTest.php b/tests/units/ExternalLink/AttachmentLinkProviderTest.php
new file mode 100644
index 00000000..fe374664
--- /dev/null
+++ b/tests/units/ExternalLink/AttachmentLinkProviderTest.php
@@ -0,0 +1,64 @@
+<?php
+
+require_once __DIR__.'/../Base.php';
+
+use Kanboard\ExternalLink\AttachmentLinkProvider;
+
+class AttachmentLinkProviderTest extends Base
+{
+ public function testGetName()
+ {
+ $attachmentLinkProvider = new AttachmentLinkProvider($this->container);
+ $this->assertEquals('Attachment', $attachmentLinkProvider->getName());
+ }
+
+ public function testGetType()
+ {
+ $attachmentLinkProvider = new AttachmentLinkProvider($this->container);
+ $this->assertEquals('attachment', $attachmentLinkProvider->getType());
+ }
+
+ public function testGetDependencies()
+ {
+ $attachmentLinkProvider = new AttachmentLinkProvider($this->container);
+ $this->assertEquals(array('related' => 'Related'), $attachmentLinkProvider->getDependencies());
+ }
+
+ public function testMatch()
+ {
+ $attachmentLinkProvider = new AttachmentLinkProvider($this->container);
+
+ $attachmentLinkProvider->setUserTextInput('http://kanboard.net/FILE.DOC');
+ $this->assertTrue($attachmentLinkProvider->match());
+
+ $attachmentLinkProvider->setUserTextInput('http://kanboard.net/folder/document.PDF');
+ $this->assertTrue($attachmentLinkProvider->match());
+
+ $attachmentLinkProvider->setUserTextInput('http://kanboard.net/archive.zip');
+ $this->assertTrue($attachmentLinkProvider->match());
+
+ $attachmentLinkProvider->setUserTextInput(' https://kanboard.net/folder/archive.tar ');
+ $this->assertTrue($attachmentLinkProvider->match());
+
+ $attachmentLinkProvider->setUserTextInput('http:// invalid url');
+ $this->assertFalse($attachmentLinkProvider->match());
+
+ $attachmentLinkProvider->setUserTextInput('');
+ $this->assertFalse($attachmentLinkProvider->match());
+
+ $attachmentLinkProvider->setUserTextInput('http://kanboard.net/folder/document.html');
+ $this->assertFalse($attachmentLinkProvider->match());
+
+ $attachmentLinkProvider->setUserTextInput('http://kanboard.net/folder/DOC.HTML');
+ $this->assertFalse($attachmentLinkProvider->match());
+
+ $attachmentLinkProvider->setUserTextInput('http://kanboard.net/folder/document.do');
+ $this->assertFalse($attachmentLinkProvider->match());
+ }
+
+ public function testGetLink()
+ {
+ $attachmentLinkProvider = new AttachmentLinkProvider($this->container);
+ $this->assertInstanceOf('\Kanboard\ExternalLink\AttachmentLink', $attachmentLinkProvider->getLink());
+ }
+}
diff --git a/tests/units/ExternalLink/AttachmentLinkTest.php b/tests/units/ExternalLink/AttachmentLinkTest.php
new file mode 100644
index 00000000..0211869c
--- /dev/null
+++ b/tests/units/ExternalLink/AttachmentLinkTest.php
@@ -0,0 +1,18 @@
+<?php
+
+require_once __DIR__.'/../Base.php';
+
+use Kanboard\ExternalLink\AttachmentLink;
+
+class AttachmentLinkTest extends Base
+{
+ public function testGetTitleFromUrl()
+ {
+ $url = 'https://kanboard.net/folder/document.pdf';
+
+ $link = new AttachmentLink($this->container);
+ $link->setUrl($url);
+ $this->assertEquals($url, $link->getUrl());
+ $this->assertEquals('document.pdf', $link->getTitle());
+ }
+}
diff --git a/tests/units/ExternalLink/WebLinkProviderTest.php b/tests/units/ExternalLink/WebLinkProviderTest.php
new file mode 100644
index 00000000..95110ed8
--- /dev/null
+++ b/tests/units/ExternalLink/WebLinkProviderTest.php
@@ -0,0 +1,52 @@
+<?php
+
+require_once __DIR__.'/../Base.php';
+
+use Kanboard\ExternalLink\WebLinkProvider;
+
+class WebLinkProviderTest extends Base
+{
+ public function testGetName()
+ {
+ $webLinkProvider = new WebLinkProvider($this->container);
+ $this->assertEquals('Web Link', $webLinkProvider->getName());
+ }
+
+ public function testGetType()
+ {
+ $webLinkProvider = new WebLinkProvider($this->container);
+ $this->assertEquals('weblink', $webLinkProvider->getType());
+ }
+
+ public function testGetDependencies()
+ {
+ $webLinkProvider = new WebLinkProvider($this->container);
+ $this->assertEquals(array('related' => 'Related'), $webLinkProvider->getDependencies());
+ }
+
+ public function testMatch()
+ {
+ $webLinkProvider = new WebLinkProvider($this->container);
+
+ $webLinkProvider->setUserTextInput('http://kanboard.net/');
+ $this->assertTrue($webLinkProvider->match());
+
+ $webLinkProvider->setUserTextInput('http://kanboard.net/mypage');
+ $this->assertTrue($webLinkProvider->match());
+
+ $webLinkProvider->setUserTextInput(' https://kanboard.net/ ');
+ $this->assertTrue($webLinkProvider->match());
+
+ $webLinkProvider->setUserTextInput('http:// invalid url');
+ $this->assertFalse($webLinkProvider->match());
+
+ $webLinkProvider->setUserTextInput('');
+ $this->assertFalse($webLinkProvider->match());
+ }
+
+ public function testGetLink()
+ {
+ $webLinkProvider = new WebLinkProvider($this->container);
+ $this->assertInstanceOf('\Kanboard\ExternalLink\WebLink', $webLinkProvider->getLink());
+ }
+}
diff --git a/tests/units/ExternalLink/WebLinkTest.php b/tests/units/ExternalLink/WebLinkTest.php
new file mode 100644
index 00000000..85487e15
--- /dev/null
+++ b/tests/units/ExternalLink/WebLinkTest.php
@@ -0,0 +1,45 @@
+<?php
+
+require_once __DIR__.'/../Base.php';
+
+use Kanboard\ExternalLink\WebLink;
+
+class WebLinkTest extends Base
+{
+ public function testGetTitleFromHtml()
+ {
+ $url = 'http://kanboard.net/something';
+ $title = 'My title';
+ $html = '<!DOCTYPE html><html><head><title> '.$title.' </title></head><body>Test</body></html>';
+
+ $webLink = new WebLink($this->container);
+ $webLink->setUrl($url);
+ $this->assertEquals($url, $webLink->getUrl());
+
+ $this->container['httpClient']
+ ->expects($this->once())
+ ->method('get')
+ ->with($url)
+ ->will($this->returnValue($html));
+
+ $this->assertEquals($title, $webLink->getTitle());
+ }
+
+ public function testGetTitleFromUrl()
+ {
+ $url = 'http://kanboard.net/something';
+ $html = '<!DOCTYPE html><html><head></head><body>Test</body></html>';
+
+ $webLink = new WebLink($this->container);
+ $webLink->setUrl($url);
+ $this->assertEquals($url, $webLink->getUrl());
+
+ $this->container['httpClient']
+ ->expects($this->once())
+ ->method('get')
+ ->with($url)
+ ->will($this->returnValue($html));
+
+ $this->assertEquals('kanboard.net/something', $webLink->getTitle());
+ }
+}
diff --git a/tests/units/Formatter/TaskFilterCalendarFormatterTest.php b/tests/units/Formatter/TaskFilterCalendarFormatterTest.php
index a42e865f..09dd0de6 100644
--- a/tests/units/Formatter/TaskFilterCalendarFormatterTest.php
+++ b/tests/units/Formatter/TaskFilterCalendarFormatterTest.php
@@ -3,14 +3,6 @@
require_once __DIR__.'/../Base.php';
use Kanboard\Formatter\TaskFilterCalendarFormatter;
-use Kanboard\Model\Project;
-use Kanboard\Model\User;
-use Kanboard\Model\TaskCreation;
-use Kanboard\Core\DateParser;
-use Kanboard\Model\Category;
-use Kanboard\Model\Subtask;
-use Kanboard\Model\Config;
-use Kanboard\Model\Swimlane;
class TaskFilterCalendarFormatterTest extends Base
{
diff --git a/tests/units/Formatter/TaskFilterICalendarFormatterTest.php b/tests/units/Formatter/TaskFilterICalendarFormatterTest.php
index 915cdda2..6de9cf0f 100644
--- a/tests/units/Formatter/TaskFilterICalendarFormatterTest.php
+++ b/tests/units/Formatter/TaskFilterICalendarFormatterTest.php
@@ -8,10 +8,7 @@ use Kanboard\Model\Project;
use Kanboard\Model\User;
use Kanboard\Model\TaskCreation;
use Kanboard\Core\DateParser;
-use Kanboard\Model\Category;
-use Kanboard\Model\Subtask;
use Kanboard\Model\Config;
-use Kanboard\Model\Swimlane;
class TaskFilterICalendarFormatterTest extends Base
{
diff --git a/tests/units/Helper/AppHelperTest.php b/tests/units/Helper/AppHelperTest.php
index 0639b7aa..dee0750e 100644
--- a/tests/units/Helper/AppHelperTest.php
+++ b/tests/units/Helper/AppHelperTest.php
@@ -3,26 +3,25 @@
require_once __DIR__.'/../Base.php';
use Kanboard\Core\Session\FlashMessage;
-use Kanboard\Helper\App;
-use Kanboard\Model\Config;
+use Kanboard\Helper\AppHelper;
class AppHelperTest extends Base
{
public function testJsLang()
{
- $h = new App($this->container);
+ $h = new AppHelper($this->container);
$this->assertEquals('en', $h->jsLang());
}
public function testTimezone()
{
- $h = new App($this->container);
+ $h = new AppHelper($this->container);
$this->assertEquals('UTC', $h->getTimezone());
}
public function testFlashMessage()
{
- $h = new App($this->container);
+ $h = new AppHelper($this->container);
$f = new FlashMessage($this->container);
$this->assertEmpty($h->flashMessage());
diff --git a/tests/units/Helper/AssetHelperTest.php b/tests/units/Helper/AssetHelperTest.php
index 64fcd569..6ef5accd 100644
--- a/tests/units/Helper/AssetHelperTest.php
+++ b/tests/units/Helper/AssetHelperTest.php
@@ -2,14 +2,14 @@
require_once __DIR__.'/../Base.php';
-use Kanboard\Helper\Asset;
+use Kanboard\Helper\AssetHelper;
use Kanboard\Model\Config;
class AssetHelperTest extends Base
{
public function testCustomCss()
{
- $h = new Asset($this->container);
+ $h = new AssetHelper($this->container);
$c = new Config($this->container);
$this->assertEmpty($h->customCss());
diff --git a/tests/units/Helper/DatetimeHelperTest.php b/tests/units/Helper/DatetimeHelperTest.php
index 8e9c461b..19b1b704 100644
--- a/tests/units/Helper/DatetimeHelperTest.php
+++ b/tests/units/Helper/DatetimeHelperTest.php
@@ -2,27 +2,49 @@
require_once __DIR__.'/../Base.php';
-use Kanboard\Helper\Dt;
+use Kanboard\Helper\DateHelper;
class DatetimeHelperTest extends Base
{
+ public function testGetTime()
+ {
+ $helper = new DateHelper($this->container);
+ $this->assertEquals('17:25', $helper->time(1422206700));
+ }
+
+ public function testGetDate()
+ {
+ $helper = new DateHelper($this->container);
+ $this->assertEquals('01/25/2015', $helper->date(1422206700));
+ $this->assertEquals('01/25/2015', $helper->date('2015-01-25'));
+ $this->assertEquals('', $helper->date('0'));
+ $this->assertEquals('', $helper->date(0));
+ $this->assertEquals('', $helper->date(''));
+ }
+
+ public function testGetDatetime()
+ {
+ $helper = new DateHelper($this->container);
+ $this->assertEquals('01/25/2015 17:25', $helper->datetime(1422206700));
+ }
+
public function testAge()
{
- $h = new Dt($this->container);
-
- $this->assertEquals('&lt;15m', $h->age(0, 30));
- $this->assertEquals('&lt;30m', $h->age(0, 1000));
- $this->assertEquals('&lt;1h', $h->age(0, 3000));
- $this->assertEquals('~2h', $h->age(0, 2*3600));
- $this->assertEquals('1d', $h->age(0, 30*3600));
- $this->assertEquals('2d', $h->age(0, 65*3600));
+ $helper = new DateHelper($this->container);
+
+ $this->assertEquals('&lt;15m', $helper->age(0, 30));
+ $this->assertEquals('&lt;30m', $helper->age(0, 1000));
+ $this->assertEquals('&lt;1h', $helper->age(0, 3000));
+ $this->assertEquals('~2h', $helper->age(0, 2*3600));
+ $this->assertEquals('1d', $helper->age(0, 30*3600));
+ $this->assertEquals('2d', $helper->age(0, 65*3600));
}
public function testGetDayHours()
{
- $h = new Dt($this->container);
+ $helper = new DateHelper($this->container);
- $slots = $h->getDayHours();
+ $slots = $helper->getDayHours();
$this->assertNotEmpty($slots);
$this->assertCount(48, $slots);
@@ -36,9 +58,9 @@ class DatetimeHelperTest extends Base
public function testGetWeekDays()
{
- $h = new Dt($this->container);
+ $helper = new DateHelper($this->container);
- $slots = $h->getWeekDays();
+ $slots = $helper->getWeekDays();
$this->assertNotEmpty($slots);
$this->assertCount(7, $slots);
@@ -48,9 +70,9 @@ class DatetimeHelperTest extends Base
public function testGetWeekDay()
{
- $h = new Dt($this->container);
+ $helper = new DateHelper($this->container);
- $this->assertEquals('Monday', $h->getWeekDay(1));
- $this->assertEquals('Sunday', $h->getWeekDay(7));
+ $this->assertEquals('Monday', $helper->getWeekDay(1));
+ $this->assertEquals('Sunday', $helper->getWeekDay(7));
}
}
diff --git a/tests/units/Helper/FileHelperText.php b/tests/units/Helper/FileHelperText.php
index a681c890..215b024b 100644
--- a/tests/units/Helper/FileHelperText.php
+++ b/tests/units/Helper/FileHelperText.php
@@ -2,14 +2,35 @@
require_once __DIR__.'/../Base.php';
-use Kanboard\Helper\File;
+use Kanboard\Helper\FileHelper;
class FileHelperTest extends Base
{
public function testIcon()
{
- $h = new File($this->container);
- $this->assertEquals('fa-file-image-o', $h->icon('test.png'));
- $this->assertEquals('fa-file-o', $h->icon('test'));
+ $helper = new FileHelper($this->container);
+ $this->assertEquals('fa-file-image-o', $helper->icon('test.png'));
+ $this->assertEquals('fa-file-o', $helper->icon('test'));
+ }
+
+ public function testGetMimeType()
+ {
+ $helper = new FileHelper($this->container);
+
+ $this->assertEquals('image/jpeg', $helper->getImageMimeType('My File.JPG'));
+ $this->assertEquals('image/jpeg', $helper->getImageMimeType('My File.jpeg'));
+ $this->assertEquals('image/png', $helper->getImageMimeType('My File.PNG'));
+ $this->assertEquals('image/gif', $helper->getImageMimeType('My File.gif'));
+ $this->assertEquals('image/jpeg', $helper->getImageMimeType('My File.bmp'));
+ $this->assertEquals('image/jpeg', $helper->getImageMimeType('My File'));
+ }
+
+ public function testGetPreviewType()
+ {
+ $helper = new FileHelper($this->container);
+ $this->assertEquals('text', $helper->getPreviewType('test.txt'));
+ $this->assertEquals('markdown', $helper->getPreviewType('test.markdown'));
+ $this->assertEquals('md', $helper->getPreviewType('test.md'));
+ $this->assertEquals(null, $helper->getPreviewType('test.doc'));
}
}
diff --git a/tests/units/Helper/HookHelperTest.php b/tests/units/Helper/HookHelperTest.php
index aec4a771..6e03acd1 100644
--- a/tests/units/Helper/HookHelperTest.php
+++ b/tests/units/Helper/HookHelperTest.php
@@ -2,7 +2,7 @@
require_once __DIR__.'/../Base.php';
-use Kanboard\Helper\Hook;
+use Kanboard\Helper\HookHelper;
class HookHelperTest extends Base
{
@@ -10,7 +10,7 @@ class HookHelperTest extends Base
{
$this->container['template'] = $this
->getMockBuilder('\Kanboard\Core\Template')
- ->setConstructorArgs(array($this->container))
+ ->setConstructorArgs(array($this->container['helper']))
->setMethods(array('render'))
->getMock();
@@ -32,7 +32,7 @@ class HookHelperTest extends Base
)
->will($this->returnValue('tpl2_content'));
- $h = new Hook($this->container);
+ $h = new HookHelper($this->container);
$h->attach('test', 'tpl1');
$h->attach('test', 'tpl2');
$this->assertEquals('tpl1_contenttpl2_content', $h->render('test'));
@@ -41,7 +41,7 @@ class HookHelperTest extends Base
public function testAssetHooks()
{
$this->container['helper']->asset = $this
- ->getMockBuilder('\Kanboard\Helper\Asset')
+ ->getMockBuilder('\Kanboard\Helper\AssetHelper')
->setConstructorArgs(array($this->container))
->setMethods(array('css', 'js'))
->getMock();
@@ -64,7 +64,7 @@ class HookHelperTest extends Base
)
->will($this->returnValue('<script src="skin.js"></script>'));
- $h = new Hook($this->container);
+ $h = new HookHelper($this->container);
$h->attach('test1', 'skin.css');
$h->attach('test2', 'skin.js');
diff --git a/tests/units/Helper/TaskHelperTest.php b/tests/units/Helper/TaskHelperTest.php
index 726188e4..454da553 100644
--- a/tests/units/Helper/TaskHelperTest.php
+++ b/tests/units/Helper/TaskHelperTest.php
@@ -2,20 +2,20 @@
require_once __DIR__.'/../Base.php';
-use Kanboard\Helper\Task;
+use Kanboard\Helper\TaskHelper;
class TaskHelperTest extends Base
{
public function testSelectPriority()
{
- $helper = new Task($this->container);
+ $helper = new TaskHelper($this->container);
$this->assertNotEmpty($helper->selectPriority(array('priority_end' => '3', 'priority_start' => '1', 'priority_default' => '2'), array()));
$this->assertEmpty($helper->selectPriority(array('priority_end' => '3', 'priority_start' => '3', 'priority_default' => '2'), array()));
}
public function testFormatPriority()
{
- $helper = new Task($this->container);
+ $helper = new TaskHelper($this->container);
$this->assertEquals(
'<span class="task-board-priority" title="Task priority">P2</span>',
diff --git a/tests/units/Helper/TextHelperTest.php b/tests/units/Helper/TextHelperTest.php
index a4bdfa91..d7324dfd 100644
--- a/tests/units/Helper/TextHelperTest.php
+++ b/tests/units/Helper/TextHelperTest.php
@@ -2,13 +2,13 @@
require_once __DIR__.'/../Base.php';
-use Kanboard\Helper\Text;
+use Kanboard\Helper\TextHelper;
class TextHelperTest extends Base
{
public function testMarkdownTaskLink()
{
- $h = new Text($this->container);
+ $h = new TextHelper($this->container);
$this->assertEquals('<p>Test</p>', $h->markdown('Test'));
@@ -33,13 +33,13 @@ class TextHelperTest extends Base
public function testMarkdownUserLink()
{
- $h = new Text($this->container);
+ $h = new TextHelper($this->container);
$this->assertEquals('<p>Text <a href="?controller=user&amp;action=profile&amp;user_id=1" class="user-mention-link">@admin</a> @notfound</p>', $h->markdown('Text @admin @notfound'));
}
public function testFormatBytes()
{
- $h = new Text($this->container);
+ $h = new TextHelper($this->container);
$this->assertEquals('1k', $h->bytes(1024));
$this->assertEquals('33.71k', $h->bytes(34520));
@@ -47,7 +47,7 @@ class TextHelperTest extends Base
public function testContains()
{
- $h = new Text($this->container);
+ $h = new TextHelper($this->container);
$this->assertTrue($h->contains('abc', 'b'));
$this->assertFalse($h->contains('abc', 'd'));
@@ -55,7 +55,7 @@ class TextHelperTest extends Base
public function testInList()
{
- $h = new Text($this->container);
+ $h = new TextHelper($this->container);
$this->assertEquals('?', $h->in('a', array('b' => 'c')));
$this->assertEquals('c', $h->in('b', array('b' => 'c')));
}
diff --git a/tests/units/Helper/UrlHelperTest.php b/tests/units/Helper/UrlHelperTest.php
index 9f26a802..34ab7604 100644
--- a/tests/units/Helper/UrlHelperTest.php
+++ b/tests/units/Helper/UrlHelperTest.php
@@ -2,7 +2,7 @@
require_once __DIR__.'/../Base.php';
-use Kanboard\Helper\Url;
+use Kanboard\Helper\UrlHelper;
use Kanboard\Model\Config;
use Kanboard\Core\Http\Request;
@@ -10,9 +10,9 @@ class UrlHelperTest extends Base
{
public function testPluginLink()
{
- $h = new Url($this->container);
+ $h = new UrlHelper($this->container);
$this->assertEquals(
- '<a href="?controller=a&amp;action=b&amp;d=e&amp;plugin=something" class="f" title="g" target="_blank">label</a>',
+ '<a href="?controller=a&amp;action=b&amp;d=e&amp;plugin=something" class="f" title=\'g\' target="_blank">label</a>',
$h->link('label', 'a', 'b', array('d' => 'e', 'plugin' => 'something'), false, 'f', 'g', true)
);
}
@@ -22,25 +22,25 @@ class UrlHelperTest extends Base
$this->container['route']->enable();
$this->container['route']->addRoute('/myplugin/something/:d', 'a', 'b', 'something');
- $h = new Url($this->container);
+ $h = new UrlHelper($this->container);
$this->assertEquals(
- '<a href="myplugin/something/e" class="f" title="g" target="_blank">label</a>',
+ '<a href="myplugin/something/e" class="f" title=\'g\' target="_blank">label</a>',
$h->link('label', 'a', 'b', array('d' => 'e', 'plugin' => 'something'), false, 'f', 'g', true)
);
}
public function testAppLink()
{
- $h = new Url($this->container);
+ $h = new UrlHelper($this->container);
$this->assertEquals(
- '<a href="?controller=a&amp;action=b&amp;d=e" class="f" title="g" target="_blank">label</a>',
+ '<a href="?controller=a&amp;action=b&amp;d=e" class="f" title=\'g\' target="_blank">label</a>',
$h->link('label', 'a', 'b', array('d' => 'e'), false, 'f', 'g', true)
);
}
public function testHref()
{
- $h = new Url($this->container);
+ $h = new UrlHelper($this->container);
$this->assertEquals(
'?controller=a&amp;action=b&amp;d=e',
$h->href('a', 'b', array('d' => 'e'))
@@ -49,7 +49,7 @@ class UrlHelperTest extends Base
public function testTo()
{
- $h = new Url($this->container);
+ $h = new UrlHelper($this->container);
$this->assertEquals(
'?controller=a&action=b&d=e',
$h->to('a', 'b', array('d' => 'e'))
@@ -64,7 +64,7 @@ class UrlHelperTest extends Base
)
);
- $h = new Url($this->container);
+ $h = new UrlHelper($this->container);
$this->assertEquals('/kanboard/', $h->dir());
$this->container['request'] = new Request($this->container, array(
@@ -73,7 +73,7 @@ class UrlHelperTest extends Base
)
);
- $h = new Url($this->container);
+ $h = new UrlHelper($this->container);
$this->assertEquals('/', $h->dir());
}
@@ -87,7 +87,7 @@ class UrlHelperTest extends Base
)
);
- $h = new Url($this->container);
+ $h = new UrlHelper($this->container);
$this->assertEquals('http://localhost/', $h->server());
$this->container['request'] = new Request($this->container, array(
@@ -98,7 +98,7 @@ class UrlHelperTest extends Base
)
);
- $h = new Url($this->container);
+ $h = new UrlHelper($this->container);
$this->assertEquals('http://kb:1234/', $h->server());
}
@@ -112,14 +112,14 @@ class UrlHelperTest extends Base
)
);
- $h = new Url($this->container);
+ $h = new UrlHelper($this->container);
$this->assertEquals('http://kb:1234/', $h->base());
$c = new Config($this->container);
$c->save(array('application_url' => 'https://mykanboard/'));
$this->container['memoryCache']->flush();
- $h = new Url($this->container);
+ $h = new UrlHelper($this->container);
$this->assertEquals('https://mykanboard/', $c->get('application_url'));
$this->assertEquals('https://mykanboard/', $h->base());
}
diff --git a/tests/units/Helper/UserHelperTest.php b/tests/units/Helper/UserHelperTest.php
index 67ccee73..7ee6e8bb 100644
--- a/tests/units/Helper/UserHelperTest.php
+++ b/tests/units/Helper/UserHelperTest.php
@@ -2,7 +2,7 @@
require_once __DIR__.'/../Base.php';
-use Kanboard\Helper\User;
+use Kanboard\Helper\UserHelper;
use Kanboard\Model\Project;
use Kanboard\Model\ProjectUserRole;
use Kanboard\Model\User as UserModel;
@@ -12,7 +12,7 @@ class UserHelperTest extends Base
{
public function testInitials()
{
- $helper = new User($this->container);
+ $helper = new UserHelper($this->container);
$this->assertEquals('CN', $helper->getInitials('chuck norris'));
$this->assertEquals('A', $helper->getInitials('admin'));
@@ -20,7 +20,7 @@ class UserHelperTest extends Base
public function testGetRoleName()
{
- $helper = new User($this->container);
+ $helper = new UserHelper($this->container);
$this->assertEquals('Administrator', $helper->getRoleName(Role::APP_ADMIN));
$this->assertEquals('Manager', $helper->getRoleName(Role::APP_MANAGER));
$this->assertEquals('Project Viewer', $helper->getRoleName(Role::PROJECT_VIEWER));
@@ -28,7 +28,7 @@ class UserHelperTest extends Base
public function testHasAccessForAdmins()
{
- $helper = new User($this->container);
+ $helper = new UserHelper($this->container);
$this->container['sessionStorage']->user = array(
'id' => 2,
@@ -36,13 +36,13 @@ class UserHelperTest extends Base
);
$this->assertTrue($helper->hasAccess('user', 'create'));
- $this->assertTrue($helper->hasAccess('project', 'create'));
- $this->assertTrue($helper->hasAccess('project', 'createPrivate'));
+ $this->assertTrue($helper->hasAccess('ProjectCreation', 'create'));
+ $this->assertTrue($helper->hasAccess('ProjectCreation', 'createPrivate'));
}
public function testHasAccessForManagers()
{
- $helper = new User($this->container);
+ $helper = new UserHelper($this->container);
$this->container['sessionStorage']->user = array(
'id' => 2,
@@ -50,13 +50,13 @@ class UserHelperTest extends Base
);
$this->assertFalse($helper->hasAccess('user', 'create'));
- $this->assertTrue($helper->hasAccess('project', 'create'));
- $this->assertTrue($helper->hasAccess('project', 'createPrivate'));
+ $this->assertTrue($helper->hasAccess('ProjectCreation', 'create'));
+ $this->assertTrue($helper->hasAccess('ProjectCreation', 'createPrivate'));
}
public function testHasAccessForUsers()
{
- $helper = new User($this->container);
+ $helper = new UserHelper($this->container);
$this->container['sessionStorage']->user = array(
'id' => 2,
@@ -64,13 +64,13 @@ class UserHelperTest extends Base
);
$this->assertFalse($helper->hasAccess('user', 'create'));
- $this->assertFalse($helper->hasAccess('project', 'create'));
- $this->assertTrue($helper->hasAccess('project', 'createPrivate'));
+ $this->assertFalse($helper->hasAccess('ProjectCreation', 'create'));
+ $this->assertTrue($helper->hasAccess('ProjectCreation', 'createPrivate'));
}
public function testHasProjectAccessForAdmins()
{
- $helper = new User($this->container);
+ $helper = new UserHelper($this->container);
$project = new Project($this->container);
$this->container['sessionStorage']->user = array(
@@ -86,7 +86,7 @@ class UserHelperTest extends Base
public function testHasProjectAccessForManagers()
{
- $helper = new User($this->container);
+ $helper = new UserHelper($this->container);
$project = new Project($this->container);
$this->container['sessionStorage']->user = array(
@@ -102,7 +102,7 @@ class UserHelperTest extends Base
public function testHasProjectAccessForUsers()
{
- $helper = new User($this->container);
+ $helper = new UserHelper($this->container);
$project = new Project($this->container);
$this->container['sessionStorage']->user = array(
@@ -118,7 +118,7 @@ class UserHelperTest extends Base
public function testHasProjectAccessForAppManagerAndProjectManagers()
{
- $helper = new User($this->container);
+ $helper = new UserHelper($this->container);
$user = new UserModel($this->container);
$project = new Project($this->container);
$projectUserRole = new ProjectUserRole($this->container);
@@ -146,7 +146,7 @@ class UserHelperTest extends Base
public function testHasProjectAccessForProjectManagers()
{
- $helper = new User($this->container);
+ $helper = new UserHelper($this->container);
$user = new UserModel($this->container);
$project = new Project($this->container);
$projectUserRole = new ProjectUserRole($this->container);
@@ -174,7 +174,7 @@ class UserHelperTest extends Base
public function testHasProjectAccessForProjectMembers()
{
- $helper = new User($this->container);
+ $helper = new UserHelper($this->container);
$user = new UserModel($this->container);
$project = new Project($this->container);
$projectUserRole = new ProjectUserRole($this->container);
@@ -202,7 +202,7 @@ class UserHelperTest extends Base
public function testHasProjectAccessForProjectViewers()
{
- $helper = new User($this->container);
+ $helper = new UserHelper($this->container);
$user = new UserModel($this->container);
$project = new Project($this->container);
$projectUserRole = new ProjectUserRole($this->container);
diff --git a/tests/units/Model/ActionTest.php b/tests/units/Model/ActionTest.php
index 8d574115..ed687846 100644
--- a/tests/units/Model/ActionTest.php
+++ b/tests/units/Model/ActionTest.php
@@ -6,7 +6,7 @@ use Kanboard\Model\Action;
use Kanboard\Model\Project;
use Kanboard\Model\Task;
use Kanboard\Model\User;
-use Kanboard\Model\Board;
+use Kanboard\Model\Column;
use Kanboard\Model\Category;
use Kanboard\Model\ProjectUserRole;
use Kanboard\Core\Security\Role;
@@ -260,12 +260,12 @@ class ActionTest extends Base
{
$projectModel = new Project($this->container);
$actionModel = new Action($this->container);
- $boardModel = new Board($this->container);
+ $columnModel = new Column($this->container);
$this->assertEquals(1, $projectModel->create(array('name' => 'test1')));
$this->assertEquals(2, $projectModel->create(array('name' => 'test2')));
- $this->assertTrue($boardModel->updateColumn(2, 'My unique column'));
+ $this->assertTrue($columnModel->update(2, 'My unique column'));
$this->assertEquals(1, $actionModel->create(array(
'project_id' => 1,
diff --git a/tests/units/Model/BoardTest.php b/tests/units/Model/BoardTest.php
index bb6c4b76..bb0778ce 100644
--- a/tests/units/Model/BoardTest.php
+++ b/tests/units/Model/BoardTest.php
@@ -4,6 +4,7 @@ require_once __DIR__.'/../Base.php';
use Kanboard\Model\Project;
use Kanboard\Model\Board;
+use Kanboard\Model\Column;
use Kanboard\Model\Config;
use Kanboard\Model\TaskCreation;
use Kanboard\Model\TaskFinder;
@@ -15,12 +16,13 @@ class BoardTest extends Base
{
$p = new Project($this->container);
$b = new Board($this->container);
+ $columnModel = new Column($this->container);
$c = new Config($this->container);
// Default columns
$this->assertEquals(1, $p->create(array('name' => 'UnitTest1')));
- $columns = $b->getColumnsList(1);
+ $columns = $columnModel->getList(1);
$this->assertTrue(is_array($columns));
$this->assertEquals(4, count($columns));
@@ -37,7 +39,7 @@ class BoardTest extends Base
$this->assertEquals($input, $c->get('board_columns'));
$this->assertEquals(2, $p->create(array('name' => 'UnitTest2')));
- $columns = $b->getColumnsList(2);
+ $columns = $columnModel->getList(2);
$this->assertTrue(is_array($columns));
$this->assertEquals(2, count($columns));
@@ -161,225 +163,4 @@ class BoardTest extends Base
$this->assertEquals(1, $board[1]['columns'][3]['tasks'][0]['position']);
$this->assertEquals(1, $board[1]['columns'][3]['tasks'][0]['swimlane_id']);
}
-
- public function testGetColumn()
- {
- $p = new Project($this->container);
- $b = new Board($this->container);
-
- $this->assertEquals(1, $p->create(array('name' => 'UnitTest1')));
-
- $column = $b->getColumn(3);
- $this->assertNotEmpty($column);
- $this->assertEquals('Work in progress', $column['title']);
-
- $column = $b->getColumn(33);
- $this->assertEmpty($column);
- }
-
- public function testRemoveColumn()
- {
- $p = new Project($this->container);
- $b = new Board($this->container);
-
- $this->assertEquals(1, $p->create(array('name' => 'UnitTest1')));
- $this->assertTrue($b->removeColumn(3));
- $this->assertFalse($b->removeColumn(322));
-
- $columns = $b->getColumns(1);
- $this->assertTrue(is_array($columns));
- $this->assertEquals(3, count($columns));
- }
-
- public function testUpdateColumn()
- {
- $p = new Project($this->container);
- $b = new Board($this->container);
-
- $this->assertEquals(1, $p->create(array('name' => 'UnitTest1')));
-
- $this->assertTrue($b->updateColumn(3, 'blah', 5));
- $this->assertTrue($b->updateColumn(2, 'boo'));
-
- $column = $b->getColumn(3);
- $this->assertNotEmpty($column);
- $this->assertEquals('blah', $column['title']);
- $this->assertEquals(5, $column['task_limit']);
-
- $column = $b->getColumn(2);
- $this->assertNotEmpty($column);
- $this->assertEquals('boo', $column['title']);
- $this->assertEquals(0, $column['task_limit']);
- }
-
- public function testAddColumn()
- {
- $p = new Project($this->container);
- $b = new Board($this->container);
-
- $this->assertEquals(1, $p->create(array('name' => 'UnitTest1')));
- $this->assertNotFalse($b->addColumn(1, 'another column'));
- $this->assertNotFalse($b->addColumn(1, 'one more', 3, 'one more description'));
-
- $columns = $b->getColumns(1);
- $this->assertTrue(is_array($columns));
- $this->assertEquals(6, count($columns));
-
- $this->assertEquals('another column', $columns[4]['title']);
- $this->assertEquals(0, $columns[4]['task_limit']);
- $this->assertEquals(5, $columns[4]['position']);
-
- $this->assertEquals('one more', $columns[5]['title']);
- $this->assertEquals(3, $columns[5]['task_limit']);
- $this->assertEquals(6, $columns[5]['position']);
- $this->assertEquals('one more description', $columns[5]['description']);
- }
-
- public function testMoveColumns()
- {
- $p = new Project($this->container);
- $b = new Board($this->container);
-
- // We create 2 projects
- $this->assertEquals(1, $p->create(array('name' => 'UnitTest1')));
- $this->assertEquals(2, $p->create(array('name' => 'UnitTest2')));
-
- // We get the columns of the project 2
- $columns = $b->getColumns(2);
- $columns_id = array_keys($b->getColumnsList(2));
- $this->assertNotEmpty($columns);
-
- // Initial order: 5, 6, 7, 8
-
- // Move the column 1 down
- $this->assertEquals(1, $columns[0]['position']);
- $this->assertEquals($columns_id[0], $columns[0]['id']);
-
- $this->assertEquals(2, $columns[1]['position']);
- $this->assertEquals($columns_id[1], $columns[1]['id']);
-
- $this->assertTrue($b->moveDown(2, $columns[0]['id']));
- $columns = $b->getColumns(2); // Sorted by position
-
- // New order: 6, 5, 7, 8
-
- $this->assertEquals(1, $columns[0]['position']);
- $this->assertEquals($columns_id[1], $columns[0]['id']);
-
- $this->assertEquals(2, $columns[1]['position']);
- $this->assertEquals($columns_id[0], $columns[1]['id']);
-
- // Move the column 3 up
- $this->assertTrue($b->moveUp(2, $columns[2]['id']));
- $columns = $b->getColumns(2);
-
- // New order: 6, 7, 5, 8
-
- $this->assertEquals(1, $columns[0]['position']);
- $this->assertEquals($columns_id[1], $columns[0]['id']);
-
- $this->assertEquals(2, $columns[1]['position']);
- $this->assertEquals($columns_id[2], $columns[1]['id']);
-
- $this->assertEquals(3, $columns[2]['position']);
- $this->assertEquals($columns_id[0], $columns[2]['id']);
-
- // Move column 1 up (must do nothing because it's the first column)
- $this->assertFalse($b->moveUp(2, $columns[0]['id']));
- $columns = $b->getColumns(2);
-
- // Order: 6, 7, 5, 8
-
- $this->assertEquals(1, $columns[0]['position']);
- $this->assertEquals($columns_id[1], $columns[0]['id']);
-
- // Move column 4 down (must do nothing because it's the last column)
- $this->assertFalse($b->moveDown(2, $columns[3]['id']));
- $columns = $b->getColumns(2);
-
- // Order: 6, 7, 5, 8
-
- $this->assertEquals(4, $columns[3]['position']);
- $this->assertEquals($columns_id[3], $columns[3]['id']);
- }
-
- public function testMoveUpAndRemoveColumn()
- {
- $p = new Project($this->container);
- $b = new Board($this->container);
-
- // We create a project
- $this->assertEquals(1, $p->create(array('name' => 'UnitTest1')));
-
- // We remove the second column
- $this->assertTrue($b->removeColumn(2));
-
- $columns = $b->getColumns(1);
- $this->assertNotEmpty($columns);
- $this->assertCount(3, $columns);
-
- $this->assertEquals(1, $columns[0]['position']);
- $this->assertEquals(3, $columns[1]['position']);
- $this->assertEquals(4, $columns[2]['position']);
-
- $this->assertEquals(1, $columns[0]['id']);
- $this->assertEquals(3, $columns[1]['id']);
- $this->assertEquals(4, $columns[2]['id']);
-
- // We move up the second column
- $this->assertTrue($b->moveUp(1, $columns[1]['id']));
-
- // Check the new positions
- $columns = $b->getColumns(1);
- $this->assertNotEmpty($columns);
- $this->assertCount(3, $columns);
-
- $this->assertEquals(1, $columns[0]['position']);
- $this->assertEquals(2, $columns[1]['position']);
- $this->assertEquals(3, $columns[2]['position']);
-
- $this->assertEquals(3, $columns[0]['id']);
- $this->assertEquals(1, $columns[1]['id']);
- $this->assertEquals(4, $columns[2]['id']);
- }
-
- public function testMoveDownAndRemoveColumn()
- {
- $p = new Project($this->container);
- $b = new Board($this->container);
-
- // We create a project
- $this->assertEquals(1, $p->create(array('name' => 'UnitTest1')));
-
- // We remove the second column
- $this->assertTrue($b->removeColumn(2));
-
- $columns = $b->getColumns(1);
- $this->assertNotEmpty($columns);
- $this->assertCount(3, $columns);
-
- $this->assertEquals(1, $columns[0]['position']);
- $this->assertEquals(3, $columns[1]['position']);
- $this->assertEquals(4, $columns[2]['position']);
-
- $this->assertEquals(1, $columns[0]['id']);
- $this->assertEquals(3, $columns[1]['id']);
- $this->assertEquals(4, $columns[2]['id']);
-
- // We move up the second column
- $this->assertTrue($b->moveDown(1, $columns[0]['id']));
-
- // Check the new positions
- $columns = $b->getColumns(1);
- $this->assertNotEmpty($columns);
- $this->assertCount(3, $columns);
-
- $this->assertEquals(1, $columns[0]['position']);
- $this->assertEquals(2, $columns[1]['position']);
- $this->assertEquals(3, $columns[2]['position']);
-
- $this->assertEquals(3, $columns[0]['id']);
- $this->assertEquals(1, $columns[1]['id']);
- $this->assertEquals(4, $columns[2]['id']);
- }
}
diff --git a/tests/units/Model/CategoryTest.php b/tests/units/Model/CategoryTest.php
index 85d9eaae..600007d0 100644
--- a/tests/units/Model/CategoryTest.php
+++ b/tests/units/Model/CategoryTest.php
@@ -2,66 +2,216 @@
require_once __DIR__.'/../Base.php';
-use Kanboard\Model\Task;
+use Kanboard\Model\Config;
use Kanboard\Model\TaskCreation;
use Kanboard\Model\TaskFinder;
use Kanboard\Model\Project;
use Kanboard\Model\Category;
-use Kanboard\Model\User;
class CategoryTest extends Base
{
public function testCreation()
{
- $tc = new TaskCreation($this->container);
- $tf = new TaskFinder($this->container);
- $p = new Project($this->container);
- $c = new Category($this->container);
-
- $this->assertEquals(1, $p->create(array('name' => 'Project #1')));
- $this->assertEquals(1, $c->create(array('name' => 'Category #1', 'project_id' => 1)));
- $this->assertEquals(2, $c->create(array('name' => 'Category #2', 'project_id' => 1)));
- $this->assertEquals(1, $tc->create(array('title' => 'Task #1', 'project_id' => 1, 'category_id' => 2)));
-
- $task = $tf->getById(1);
- $this->assertTrue(is_array($task));
+ $taskCreationModel = new TaskCreation($this->container);
+ $taskFinderModel = new TaskFinder($this->container);
+ $projectModel = new Project($this->container);
+ $categoryModel = new Category($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'Project #1')));
+ $this->assertEquals(1, $categoryModel->create(array('name' => 'Category #1', 'project_id' => 1)));
+ $this->assertEquals(2, $categoryModel->create(array('name' => 'Category #2', 'project_id' => 1)));
+ $this->assertEquals(1, $taskCreationModel->create(array('title' => 'Task #1', 'project_id' => 1, 'category_id' => 2)));
+
+ $task = $taskFinderModel->getById(1);
$this->assertEquals(2, $task['category_id']);
- $category = $c->getById(2);
- $this->assertTrue(is_array($category));
+ $category = $categoryModel->getById(2);
$this->assertEquals(2, $category['id']);
$this->assertEquals('Category #2', $category['name']);
$this->assertEquals(1, $category['project_id']);
+ }
+
+ public function testExists()
+ {
+ $projectModel = new Project($this->container);
+ $categoryModel = new Category($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'Project #1')));
+ $this->assertEquals(1, $categoryModel->create(array('name' => 'Category #1', 'project_id' => 1)));
+ $this->assertTrue($categoryModel->exists(1));
+ $this->assertFalse($categoryModel->exists(2));
+ }
+
+ public function testGetById()
+ {
+ $projectModel = new Project($this->container);
+ $categoryModel = new Category($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'Project #1')));
+ $this->assertEquals(1, $categoryModel->create(array('name' => 'Category #1', 'project_id' => 1, 'description' => 'test')));
+
+ $category = $categoryModel->getById(1);
+ $this->assertEquals(1, $category['id']);
+ $this->assertEquals('Category #1', $category['name']);
+ $this->assertEquals(1, $category['project_id']);
+ $this->assertEquals('test', $category['description']);
+ }
+
+ public function testGetNameById()
+ {
+ $projectModel = new Project($this->container);
+ $categoryModel = new Category($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'Project #1')));
+ $this->assertEquals(1, $categoryModel->create(array('name' => 'Category #1', 'project_id' => 1, 'description' => 'test')));
+
+ $this->assertEquals('Category #1', $categoryModel->getNameById(1));
+ $this->assertEquals('', $categoryModel->getNameById(2));
+ }
+
+ public function testGetIdByName()
+ {
+ $projectModel = new Project($this->container);
+ $categoryModel = new Category($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'Project #1')));
+ $this->assertEquals(1, $categoryModel->create(array('name' => 'Category #1', 'project_id' => 1, 'description' => 'test')));
+
+ $this->assertSame(1, $categoryModel->getIdByName(1, 'Category #1'));
+ $this->assertSame(0, $categoryModel->getIdByName(1, 'Category #2'));
+ }
+
+ public function testGetList()
+ {
+ $projectModel = new Project($this->container);
+ $categoryModel = new Category($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'Project #1')));
+ $this->assertEquals(1, $categoryModel->create(array('name' => 'Category #1', 'project_id' => 1, 'description' => 'test')));
+ $this->assertEquals(2, $categoryModel->create(array('name' => 'Category #2', 'project_id' => 1)));
+
+ $categories = $categoryModel->getList(1, false, false);
+ $this->assertCount(2, $categories);
+ $this->assertEquals('Category #1', $categories[1]);
+ $this->assertEquals('Category #2', $categories[2]);
+
+ $categories = $categoryModel->getList(1, true, false);
+ $this->assertCount(3, $categories);
+ $this->assertEquals('No category', $categories[0]);
+ $this->assertEquals('Category #1', $categories[1]);
+ $this->assertEquals('Category #2', $categories[2]);
- $this->assertEquals(2, $c->getIdByName(1, 'Category #2'));
- $this->assertEquals(0, $c->getIdByName(2, 'Category #2'));
+ $categories = $categoryModel->getList(1, false, true);
+ $this->assertCount(3, $categories);
+ $this->assertEquals('All categories', $categories[-1]);
+ $this->assertEquals('Category #1', $categories[1]);
+ $this->assertEquals('Category #2', $categories[2]);
- $this->assertEquals('Category #2', $c->getNameById(2));
- $this->assertEquals('', $c->getNameById(23));
+ $categories = $categoryModel->getList(1, true, true);
+ $this->assertCount(4, $categories);
+ $this->assertEquals('All categories', $categories[-1]);
+ $this->assertEquals('No category', $categories[0]);
+ $this->assertEquals('Category #1', $categories[1]);
+ $this->assertEquals('Category #2', $categories[2]);
+ }
+
+ public function testGetAll()
+ {
+ $projectModel = new Project($this->container);
+ $categoryModel = new Category($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'Project #1')));
+ $this->assertEquals(1, $categoryModel->create(array('name' => 'Category #1', 'project_id' => 1, 'description' => 'test')));
+ $this->assertEquals(2, $categoryModel->create(array('name' => 'Category #2', 'project_id' => 1)));
+
+ $categories = $categoryModel->getAll(1);
+ $this->assertCount(2, $categories);
+
+ $this->assertEquals('Category #1', $categories[0]['name']);
+ $this->assertEquals('test', $categories[0]['description']);
+ $this->assertEquals(1, $categories[0]['project_id']);
+ $this->assertEquals(1, $categories[0]['id']);
+
+ $this->assertEquals('Category #2', $categories[1]['name']);
+ $this->assertEquals('', $categories[1]['description']);
+ $this->assertEquals(1, $categories[1]['project_id']);
+ $this->assertEquals(2, $categories[1]['id']);
+ }
+
+ public function testCreateDefaultCategories()
+ {
+ $projectModel = new Project($this->container);
+ $categoryModel = new Category($this->container);
+ $configModel = new Config($this->container);
+
+ $this->assertTrue($configModel->save(array('project_categories' => 'C1, C2, C3')));
+ $this->assertEquals(1, $projectModel->create(array('name' => 'Project #1')));
+ $this->assertTrue($categoryModel->createDefaultCategories(1));
+
+ $categories = $categoryModel->getAll(1);
+ $this->assertCount(3, $categories);
+ $this->assertEquals('C1', $categories[0]['name']);
+ $this->assertEquals('C2', $categories[1]['name']);
+ $this->assertEquals('C3', $categories[2]['name']);
+ }
+
+ public function testUpdate()
+ {
+ $projectModel = new Project($this->container);
+ $categoryModel = new Category($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'Project #1')));
+ $this->assertEquals(1, $categoryModel->create(array('name' => 'Category #1', 'project_id' => 1)));
+ $this->assertTrue($categoryModel->update(array('id' => 1, 'description' => 'test')));
+
+ $category = $categoryModel->getById(1);
+ $this->assertEquals('Category #1', $category['name']);
+ $this->assertEquals(1, $category['project_id']);
+ $this->assertEquals('test', $category['description']);
}
public function testRemove()
{
- $tc = new TaskCreation($this->container);
- $tf = new TaskFinder($this->container);
- $p = new Project($this->container);
- $c = new Category($this->container);
-
- $this->assertEquals(1, $p->create(array('name' => 'Project #1')));
- $this->assertEquals(1, $c->create(array('name' => 'Category #1', 'project_id' => 1)));
- $this->assertEquals(2, $c->create(array('name' => 'Category #2', 'project_id' => 1)));
- $this->assertEquals(1, $tc->create(array('title' => 'Task #1', 'project_id' => 1, 'category_id' => 2)));
-
- $task = $tf->getById(1);
- $this->assertTrue(is_array($task));
+ $taskCreationModel = new TaskCreation($this->container);
+ $taskFinderModel = new TaskFinder($this->container);
+ $projectModel = new Project($this->container);
+ $categoryModel = new Category($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'Project #1')));
+ $this->assertEquals(1, $categoryModel->create(array('name' => 'Category #1', 'project_id' => 1)));
+ $this->assertEquals(2, $categoryModel->create(array('name' => 'Category #2', 'project_id' => 1)));
+ $this->assertEquals(1, $taskCreationModel->create(array('title' => 'Task #1', 'project_id' => 1, 'category_id' => 2)));
+
+ $task = $taskFinderModel->getById(1);
$this->assertEquals(2, $task['category_id']);
- $this->assertTrue($c->remove(1));
- $this->assertTrue($c->remove(2));
+ $this->assertTrue($categoryModel->remove(1));
+ $this->assertTrue($categoryModel->remove(2));
// Make sure tasks assigned with that category are reseted
- $task = $tf->getById(1);
- $this->assertTrue(is_array($task));
+ $task = $taskFinderModel->getById(1);
$this->assertEquals(0, $task['category_id']);
}
+
+ public function testDuplicate()
+ {
+ $projectModel = new Project($this->container);
+ $categoryModel = new Category($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'Project #1')));
+ $this->assertEquals(2, $projectModel->create(array('name' => 'Project #2')));
+ $this->assertEquals(1, $categoryModel->create(array('name' => 'Category #1', 'project_id' => 1, 'description' => 'test')));
+
+ $this->assertTrue($categoryModel->duplicate(1, 2));
+
+ $category = $categoryModel->getById(1);
+ $this->assertEquals('Category #1', $category['name']);
+ $this->assertEquals(1, $category['project_id']);
+ $this->assertEquals('test', $category['description']);
+
+ $category = $categoryModel->getById(2);
+ $this->assertEquals('Category #1', $category['name']);
+ $this->assertEquals(2, $category['project_id']);
+ $this->assertEquals('test', $category['description']);
+ }
}
diff --git a/tests/units/Model/ColorTest.php b/tests/units/Model/ColorTest.php
new file mode 100644
index 00000000..e96ecb6b
--- /dev/null
+++ b/tests/units/Model/ColorTest.php
@@ -0,0 +1,93 @@
+<?php
+
+require_once __DIR__.'/../Base.php';
+
+use Kanboard\Model\Color;
+use Kanboard\Model\Config;
+
+class ColorTest extends Base
+{
+ public function testFind()
+ {
+ $colorModel = new Color($this->container);
+ $this->assertEquals('yellow', $colorModel->find('yellow'));
+ $this->assertEquals('yellow', $colorModel->find('Yellow'));
+ $this->assertEquals('dark_grey', $colorModel->find('Dark Grey'));
+ $this->assertEquals('dark_grey', $colorModel->find('dark_grey'));
+ }
+
+ public function testGetColorProperties()
+ {
+ $colorModel = new Color($this->container);
+ $expected = array(
+ 'name' => 'Light Green',
+ 'background' => '#dcedc8',
+ 'border' => '#689f38',
+ );
+
+ $this->assertEquals($expected, $colorModel->getColorProperties('light_green'));
+
+ $expected = array(
+ 'name' => 'Yellow',
+ 'background' => 'rgb(245, 247, 196)',
+ 'border' => 'rgb(223, 227, 45)',
+ );
+
+ $this->assertEquals($expected, $colorModel->getColorProperties('foobar'));
+ }
+
+ public function testGetList()
+ {
+ $colorModel = new Color($this->container);
+
+ $colors = $colorModel->getList();
+ $this->assertCount(16, $colors);
+ $this->assertEquals('Yellow', $colors['yellow']);
+
+ $colors = $colorModel->getList(true);
+ $this->assertCount(17, $colors);
+ $this->assertEquals('All colors', $colors['']);
+ $this->assertEquals('Yellow', $colors['yellow']);
+ }
+
+ public function testGetDefaultColor()
+ {
+ $colorModel = new Color($this->container);
+ $configModel = new Config($this->container);
+
+ $this->assertEquals('yellow', $colorModel->getDefaultColor());
+
+ $this->container['memoryCache']->flush();
+ $this->assertTrue($configModel->save(array('default_color' => 'red')));
+ $this->assertEquals('red', $colorModel->getDefaultColor());
+ }
+
+ public function testGetDefaultColors()
+ {
+ $colorModel = new Color($this->container);
+
+ $colors = $colorModel->getDefaultColors();
+ $this->assertCount(16, $colors);
+ }
+
+ public function testGetBorderColor()
+ {
+ $colorModel = new Color($this->container);
+ $this->assertEquals('rgb(74, 227, 113)', $colorModel->getBorderColor('green'));
+ }
+
+ public function testGetBackgroundColor()
+ {
+ $colorModel = new Color($this->container);
+ $this->assertEquals('rgb(189, 244, 203)', $colorModel->getBackgroundColor('green'));
+ }
+
+ public function testGetCss()
+ {
+ $colorModel = new Color($this->container);
+ $css = $colorModel->getCss();
+
+ $this->assertStringStartsWith('div.color-yellow {', $css);
+ $this->assertStringEndsWith('td.color-amber { background-color: #ffe082}', $css);
+ }
+}
diff --git a/tests/units/Model/ColumnTest.php b/tests/units/Model/ColumnTest.php
new file mode 100644
index 00000000..e40f89c6
--- /dev/null
+++ b/tests/units/Model/ColumnTest.php
@@ -0,0 +1,236 @@
+<?php
+
+require_once __DIR__.'/../Base.php';
+
+use Kanboard\Model\Project;
+use Kanboard\Model\Column;
+
+class ColumnTest extends Base
+{
+ public function testGetColumn()
+ {
+ $projectModel = new Project($this->container);
+ $columnModel = new Column($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'UnitTest')));
+
+ $column = $columnModel->getById(3);
+ $this->assertNotEmpty($column);
+ $this->assertEquals('Work in progress', $column['title']);
+
+ $column = $columnModel->getById(33);
+ $this->assertEmpty($column);
+ }
+
+ public function testGetFirstColumnId()
+ {
+ $projectModel = new Project($this->container);
+ $columnModel = new Column($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'UnitTest')));
+ $this->assertEquals(1, $columnModel->getFirstColumnId(1));
+ }
+
+ public function testGetLastColumnId()
+ {
+ $projectModel = new Project($this->container);
+ $columnModel = new Column($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'UnitTest')));
+ $this->assertEquals(4, $columnModel->getLastColumnId(1));
+ }
+
+ public function testGetLastColumnPosition()
+ {
+ $projectModel = new Project($this->container);
+ $columnModel = new Column($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'UnitTest')));
+ $this->assertEquals(4, $columnModel->getLastColumnPosition(1));
+ }
+
+ public function testGetColumnIdByTitle()
+ {
+ $projectModel = new Project($this->container);
+ $columnModel = new Column($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'UnitTest')));
+ $this->assertEquals(2, $columnModel->getColumnIdByTitle(1, 'Ready'));
+ }
+
+ public function testGetTitleByColumnId()
+ {
+ $projectModel = new Project($this->container);
+ $columnModel = new Column($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'UnitTest')));
+ $this->assertEquals('Work in progress', $columnModel->getColumnTitleById(3));
+ }
+
+ public function testGetAll()
+ {
+ $projectModel = new Project($this->container);
+ $columnModel = new Column($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'UnitTest')));
+
+ $columns = $columnModel->getAll(1);
+ $this->assertCount(4, $columns);
+
+ $this->assertEquals(1, $columns[0]['id']);
+ $this->assertEquals(1, $columns[0]['position']);
+ $this->assertEquals('Backlog', $columns[0]['title']);
+
+ $this->assertEquals(2, $columns[1]['id']);
+ $this->assertEquals(2, $columns[1]['position']);
+ $this->assertEquals('Ready', $columns[1]['title']);
+
+ $this->assertEquals(3, $columns[2]['id']);
+ $this->assertEquals(3, $columns[2]['position']);
+ $this->assertEquals('Work in progress', $columns[2]['title']);
+
+ $this->assertEquals(4, $columns[3]['id']);
+ $this->assertEquals(4, $columns[3]['position']);
+ $this->assertEquals('Done', $columns[3]['title']);
+ }
+
+ public function testGetList()
+ {
+ $projectModel = new Project($this->container);
+ $columnModel = new Column($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'UnitTest')));
+
+ $columns = $columnModel->getList(1);
+ $this->assertCount(4, $columns);
+ $this->assertEquals('Backlog', $columns[1]);
+ $this->assertEquals('Ready', $columns[2]);
+ $this->assertEquals('Work in progress', $columns[3]);
+ $this->assertEquals('Done', $columns[4]);
+
+ $columns = $columnModel->getList(1, true);
+ $this->assertCount(5, $columns);
+ $this->assertEquals('All columns', $columns[-1]);
+ $this->assertEquals('Backlog', $columns[1]);
+ $this->assertEquals('Ready', $columns[2]);
+ $this->assertEquals('Work in progress', $columns[3]);
+ $this->assertEquals('Done', $columns[4]);
+ }
+
+ public function testAddColumn()
+ {
+ $projectModel = new Project($this->container);
+ $columnModel = new Column($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'UnitTest')));
+ $this->assertNotFalse($columnModel->create(1, 'another column'));
+ $this->assertNotFalse($columnModel->create(1, 'one more', 3, 'one more description'));
+
+ $columns = $columnModel->getAll(1);
+ $this->assertTrue(is_array($columns));
+ $this->assertEquals(6, count($columns));
+
+ $this->assertEquals('another column', $columns[4]['title']);
+ $this->assertEquals(0, $columns[4]['task_limit']);
+ $this->assertEquals(5, $columns[4]['position']);
+
+ $this->assertEquals('one more', $columns[5]['title']);
+ $this->assertEquals(3, $columns[5]['task_limit']);
+ $this->assertEquals(6, $columns[5]['position']);
+ $this->assertEquals('one more description', $columns[5]['description']);
+ }
+
+ public function testUpdateColumn()
+ {
+ $projectModel = new Project($this->container);
+ $columnModel = new Column($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'UnitTest')));
+
+ $this->assertTrue($columnModel->update(3, 'blah', 5));
+ $this->assertTrue($columnModel->update(2, 'boo'));
+
+ $column = $columnModel->getById(3);
+ $this->assertNotEmpty($column);
+ $this->assertEquals('blah', $column['title']);
+ $this->assertEquals(5, $column['task_limit']);
+
+ $column = $columnModel->getById(2);
+ $this->assertNotEmpty($column);
+ $this->assertEquals('boo', $column['title']);
+ $this->assertEquals(0, $column['task_limit']);
+ }
+
+ public function testRemoveColumn()
+ {
+ $projectModel = new Project($this->container);
+ $columnModel = new Column($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'UnitTest')));
+ $this->assertTrue($columnModel->remove(3));
+ $this->assertFalse($columnModel->remove(322));
+
+ $columns = $columnModel->getAll(1);
+ $this->assertTrue(is_array($columns));
+ $this->assertEquals(3, count($columns));
+ }
+
+ public function testChangePosition()
+ {
+ $projectModel = new Project($this->container);
+ $columnModel = new Column($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'test1')));
+
+ $columns = $columnModel->getAll(1);
+ $this->assertEquals(1, $columns[0]['position']);
+ $this->assertEquals(1, $columns[0]['id']);
+ $this->assertEquals(2, $columns[1]['position']);
+ $this->assertEquals(2, $columns[1]['id']);
+ $this->assertEquals(3, $columns[2]['position']);
+ $this->assertEquals(3, $columns[2]['id']);
+
+ $this->assertTrue($columnModel->changePosition(1, 3, 2));
+
+ $columns = $columnModel->getAll(1);
+ $this->assertEquals(1, $columns[0]['position']);
+ $this->assertEquals(1, $columns[0]['id']);
+ $this->assertEquals(2, $columns[1]['position']);
+ $this->assertEquals(3, $columns[1]['id']);
+ $this->assertEquals(3, $columns[2]['position']);
+ $this->assertEquals(2, $columns[2]['id']);
+
+ $this->assertTrue($columnModel->changePosition(1, 2, 1));
+
+ $columns = $columnModel->getAll(1);
+ $this->assertEquals(1, $columns[0]['position']);
+ $this->assertEquals(2, $columns[0]['id']);
+ $this->assertEquals(2, $columns[1]['position']);
+ $this->assertEquals(1, $columns[1]['id']);
+ $this->assertEquals(3, $columns[2]['position']);
+ $this->assertEquals(3, $columns[2]['id']);
+
+ $this->assertTrue($columnModel->changePosition(1, 2, 2));
+
+ $columns = $columnModel->getAll(1);
+ $this->assertEquals(1, $columns[0]['position']);
+ $this->assertEquals(1, $columns[0]['id']);
+ $this->assertEquals(2, $columns[1]['position']);
+ $this->assertEquals(2, $columns[1]['id']);
+ $this->assertEquals(3, $columns[2]['position']);
+ $this->assertEquals(3, $columns[2]['id']);
+
+ $this->assertTrue($columnModel->changePosition(1, 4, 1));
+
+ $columns = $columnModel->getAll(1);
+ $this->assertEquals(1, $columns[0]['position']);
+ $this->assertEquals(4, $columns[0]['id']);
+ $this->assertEquals(2, $columns[1]['position']);
+ $this->assertEquals(1, $columns[1]['id']);
+ $this->assertEquals(3, $columns[2]['position']);
+ $this->assertEquals(2, $columns[2]['id']);
+
+ $this->assertFalse($columnModel->changePosition(1, 2, 0));
+ $this->assertFalse($columnModel->changePosition(1, 2, 5));
+ }
+}
diff --git a/tests/units/Model/CommentTest.php b/tests/units/Model/CommentTest.php
index ec4e7a56..bb96e4f4 100644
--- a/tests/units/Model/CommentTest.php
+++ b/tests/units/Model/CommentTest.php
@@ -2,7 +2,6 @@
require_once __DIR__.'/../Base.php';
-use Kanboard\Model\Task;
use Kanboard\Model\TaskCreation;
use Kanboard\Model\Project;
use Kanboard\Model\Comment;
diff --git a/tests/units/Model/ConfigTest.php b/tests/units/Model/ConfigTest.php
index 447c9238..6ccdbef9 100644
--- a/tests/units/Model/ConfigTest.php
+++ b/tests/units/Model/ConfigTest.php
@@ -3,7 +3,6 @@
require_once __DIR__.'/../Base.php';
use Kanboard\Model\Config;
-use Kanboard\Core\Session\SessionManager;
class ConfigTest extends Base
{
diff --git a/tests/units/Model/FileTest.php b/tests/units/Model/FileTest.php
deleted file mode 100644
index 29f6ee93..00000000
--- a/tests/units/Model/FileTest.php
+++ /dev/null
@@ -1,263 +0,0 @@
-<?php
-
-require_once __DIR__.'/../Base.php';
-
-use Kanboard\Model\Task;
-use Kanboard\Model\File;
-use Kanboard\Model\TaskCreation;
-use Kanboard\Model\Project;
-
-class FileTest extends Base
-{
- public function setUp()
- {
- parent::setUp();
-
- $this->container['objectStorage'] = $this
- ->getMockBuilder('\Kanboard\Core\ObjectStorage\FileStorage')
- ->setConstructorArgs(array($this->container))
- ->setMethods(array('put', 'moveFile', 'remove'))
- ->getMock();
- }
-
- public function testCreation()
- {
- $p = new Project($this->container);
- $f = new File($this->container);
- $tc = new TaskCreation($this->container);
-
- $this->assertEquals(1, $p->create(array('name' => 'test')));
- $this->assertEquals(1, $tc->create(array('project_id' => 1, 'title' => 'test')));
-
- $this->assertEquals(1, $f->create(1, 'test', '/tmp/foo', 10));
-
- $file = $f->getById(1);
- $this->assertNotEmpty($file);
- $this->assertEquals('test', $file['name']);
- $this->assertEquals('/tmp/foo', $file['path']);
- $this->assertEquals(0, $file['is_image']);
- $this->assertEquals(1, $file['task_id']);
- $this->assertEquals(time(), $file['date'], '', 2);
- $this->assertEquals(0, $file['user_id']);
- $this->assertEquals(10, $file['size']);
-
- $this->assertEquals(2, $f->create(1, 'test2.png', '/tmp/foobar', 10));
-
- $file = $f->getById(2);
- $this->assertNotEmpty($file);
- $this->assertEquals('test2.png', $file['name']);
- $this->assertEquals('/tmp/foobar', $file['path']);
- $this->assertEquals(1, $file['is_image']);
- }
-
- public function testCreationFileNameTooLong()
- {
- $p = new Project($this->container);
- $f = new File($this->container);
- $tc = new TaskCreation($this->container);
-
- $this->assertEquals(1, $p->create(array('name' => 'test')));
- $this->assertEquals(1, $tc->create(array('project_id' => 1, 'title' => 'test')));
-
- $this->assertNotFalse($f->create(1, 'test', '/tmp/foo', 10));
- $this->assertNotFalse($f->create(1, str_repeat('a', 1000), '/tmp/foo', 10));
-
- $files = $f->getAll(1);
- $this->assertNotEmpty($files);
- $this->assertCount(2, $files);
-
- $this->assertEquals(str_repeat('a', 255), $files[0]['name']);
- $this->assertEquals('test', $files[1]['name']);
- }
-
- public function testIsImage()
- {
- $f = new File($this->container);
-
- $this->assertTrue($f->isImage('test.png'));
- $this->assertTrue($f->isImage('test.jpeg'));
- $this->assertTrue($f->isImage('test.gif'));
- $this->assertTrue($f->isImage('test.jpg'));
- $this->assertTrue($f->isImage('test.JPG'));
-
- $this->assertFalse($f->isImage('test.bmp'));
- $this->assertFalse($f->isImage('test'));
- $this->assertFalse($f->isImage('test.pdf'));
- }
-
- public function testGeneratePath()
- {
- $f = new File($this->container);
-
- $this->assertStringStartsWith('12'.DIRECTORY_SEPARATOR.'34'.DIRECTORY_SEPARATOR, $f->generatePath(12, 34, 'test.png'));
- $this->assertNotEquals($f->generatePath(12, 34, 'test1.png'), $f->generatePath(12, 34, 'test2.png'));
- }
-
- public function testUploadScreenshot()
- {
- $p = new Project($this->container);
- $tc = new TaskCreation($this->container);
-
- $this->assertEquals(1, $p->create(array('name' => 'test')));
- $this->assertEquals(1, $tc->create(array('project_id' => 1, 'title' => 'test')));
-
- $data = base64_encode('image data');
-
- $f = $this
- ->getMockBuilder('\Kanboard\Model\File')
- ->setConstructorArgs(array($this->container))
- ->setMethods(array('generateThumbnailFromData'))
- ->getMock();
-
- $this->container['objectStorage']
- ->expects($this->once())
- ->method('put')
- ->with(
- $this->stringContains('1'.DIRECTORY_SEPARATOR.'1'.DIRECTORY_SEPARATOR),
- $this->equalTo(base64_decode($data))
- )
- ->will($this->returnValue(true));
-
- $f->expects($this->once())
- ->method('generateThumbnailFromData');
-
- $this->assertEquals(1, $f->uploadScreenshot(1, 1, $data));
-
- $file = $f->getById(1);
- $this->assertNotEmpty($file);
- $this->assertStringStartsWith('Screenshot taken ', $file['name']);
- $this->assertStringStartsWith('1'.DIRECTORY_SEPARATOR.'1'.DIRECTORY_SEPARATOR, $file['path']);
- $this->assertEquals(1, $file['is_image']);
- $this->assertEquals(1, $file['task_id']);
- $this->assertEquals(time(), $file['date'], '', 2);
- $this->assertEquals(0, $file['user_id']);
- $this->assertEquals(10, $file['size']);
- }
-
- public function testUploadFileContent()
- {
- $p = new Project($this->container);
- $f = new File($this->container);
- $tc = new TaskCreation($this->container);
-
- $this->assertEquals(1, $p->create(array('name' => 'test')));
- $this->assertEquals(1, $tc->create(array('project_id' => 1, 'title' => 'test')));
-
- $data = base64_encode('file data');
-
- $this->container['objectStorage']
- ->expects($this->once())
- ->method('put')
- ->with(
- $this->stringContains('1'.DIRECTORY_SEPARATOR.'1'.DIRECTORY_SEPARATOR),
- $this->equalTo(base64_decode($data))
- )
- ->will($this->returnValue(true));
-
- $this->assertEquals(1, $f->uploadContent(1, 1, 'my file.pdf', $data));
-
- $file = $f->getById(1);
- $this->assertNotEmpty($file);
- $this->assertEquals('my file.pdf', $file['name']);
- $this->assertStringStartsWith('1'.DIRECTORY_SEPARATOR.'1'.DIRECTORY_SEPARATOR, $file['path']);
- $this->assertEquals(0, $file['is_image']);
- $this->assertEquals(1, $file['task_id']);
- $this->assertEquals(time(), $file['date'], '', 2);
- $this->assertEquals(0, $file['user_id']);
- $this->assertEquals(9, $file['size']);
- }
-
- public function testGetAll()
- {
- $p = new Project($this->container);
- $f = new File($this->container);
- $tc = new TaskCreation($this->container);
-
- $this->assertEquals(1, $p->create(array('name' => 'test')));
- $this->assertEquals(1, $tc->create(array('project_id' => 1, 'title' => 'test')));
-
- $this->assertEquals(1, $f->create(1, 'B.pdf', '/tmp/foo', 10));
- $this->assertEquals(2, $f->create(1, 'A.png', '/tmp/foo', 10));
- $this->assertEquals(3, $f->create(1, 'D.doc', '/tmp/foo', 10));
- $this->assertEquals(4, $f->create(1, 'C.JPG', '/tmp/foo', 10));
-
- $files = $f->getAll(1);
- $this->assertNotEmpty($files);
- $this->assertCount(4, $files);
- $this->assertEquals('A.png', $files[0]['name']);
- $this->assertEquals('B.pdf', $files[1]['name']);
- $this->assertEquals('C.JPG', $files[2]['name']);
- $this->assertEquals('D.doc', $files[3]['name']);
-
- $files = $f->getAllImages(1);
- $this->assertNotEmpty($files);
- $this->assertCount(2, $files);
- $this->assertEquals('A.png', $files[0]['name']);
- $this->assertEquals('C.JPG', $files[1]['name']);
-
- $files = $f->getAllDocuments(1);
- $this->assertNotEmpty($files);
- $this->assertCount(2, $files);
- $this->assertEquals('B.pdf', $files[0]['name']);
- $this->assertEquals('D.doc', $files[1]['name']);
- }
-
- public function testRemove()
- {
- $p = new Project($this->container);
- $f = new File($this->container);
- $tc = new TaskCreation($this->container);
-
- $this->assertEquals(1, $p->create(array('name' => 'test')));
- $this->assertEquals(1, $tc->create(array('project_id' => 1, 'title' => 'test')));
-
- $this->assertEquals(1, $f->create(1, 'B.pdf', DIRECTORY_SEPARATOR.'tmp'.DIRECTORY_SEPARATOR.'foo1', 10));
- $this->assertEquals(2, $f->create(1, 'A.png', DIRECTORY_SEPARATOR.'tmp'.DIRECTORY_SEPARATOR.'foo2', 10));
- $this->assertEquals(3, $f->create(1, 'D.doc', DIRECTORY_SEPARATOR.'tmp'.DIRECTORY_SEPARATOR.'foo3', 10));
-
- $this->container['objectStorage']
- ->expects($this->at(0))
- ->method('remove')
- ->with(
- $this->equalTo(DIRECTORY_SEPARATOR.'tmp'.DIRECTORY_SEPARATOR.'foo2')
- )
- ->will($this->returnValue(true));
-
- $this->container['objectStorage']
- ->expects($this->at(1))
- ->method('remove')
- ->with(
- $this->equalTo('thumbnails'.DIRECTORY_SEPARATOR.DIRECTORY_SEPARATOR.'tmp'.DIRECTORY_SEPARATOR.'foo2')
- )
- ->will($this->returnValue(true));
-
- $this->container['objectStorage']
- ->expects($this->at(2))
- ->method('remove')
- ->with(
- $this->equalTo(DIRECTORY_SEPARATOR.'tmp'.DIRECTORY_SEPARATOR.'foo1')
- )
- ->will($this->returnValue(true));
-
- $this->container['objectStorage']
- ->expects($this->at(3))
- ->method('remove')
- ->with(
- $this->equalTo(DIRECTORY_SEPARATOR.'tmp'.DIRECTORY_SEPARATOR.'foo3')
- )
- ->will($this->returnValue(true));
-
- $this->assertTrue($f->remove(2));
-
- $files = $f->getAll(1);
- $this->assertNotEmpty($files);
- $this->assertCount(2, $files);
- $this->assertEquals('B.pdf', $files[0]['name']);
- $this->assertEquals('D.doc', $files[1]['name']);
-
- $this->assertTrue($f->removeAll(1));
-
- $files = $f->getAll(1);
- $this->assertEmpty($files);
- }
-}
diff --git a/tests/units/Model/NotificationTest.php b/tests/units/Model/NotificationTest.php
index 7f9977ce..d5ec7735 100644
--- a/tests/units/Model/NotificationTest.php
+++ b/tests/units/Model/NotificationTest.php
@@ -6,8 +6,7 @@ use Kanboard\Model\TaskFinder;
use Kanboard\Model\TaskCreation;
use Kanboard\Model\Subtask;
use Kanboard\Model\Comment;
-use Kanboard\Model\User;
-use Kanboard\Model\File;
+use Kanboard\Model\TaskFile;
use Kanboard\Model\Task;
use Kanboard\Model\Project;
use Kanboard\Model\Notification;
@@ -23,7 +22,7 @@ class NotificationTest extends Base
$tc = new TaskCreation($this->container);
$s = new Subtask($this->container);
$c = new Comment($this->container);
- $f = new File($this->container);
+ $f = new TaskFile($this->container);
$this->assertEquals(1, $p->create(array('name' => 'test')));
$this->assertEquals(1, $tc->create(array('title' => 'test', 'project_id' => 1)));
diff --git a/tests/units/Model/ProjectActivityTest.php b/tests/units/Model/ProjectActivityTest.php
index 10201aa8..27ea039d 100644
--- a/tests/units/Model/ProjectActivityTest.php
+++ b/tests/units/Model/ProjectActivityTest.php
@@ -7,9 +7,6 @@ use Kanboard\Model\TaskFinder;
use Kanboard\Model\TaskCreation;
use Kanboard\Model\ProjectActivity;
use Kanboard\Model\Project;
-use Kanboard\Model\Subtask;
-use Kanboard\Model\Comment;
-use Kanboard\Model\File;
class ProjectActivityTest extends Base
{
diff --git a/tests/units/Model/ProjectDailyColumnStatsTest.php b/tests/units/Model/ProjectDailyColumnStatsTest.php
index 5e8ec3e8..1a0e826c 100644
--- a/tests/units/Model/ProjectDailyColumnStatsTest.php
+++ b/tests/units/Model/ProjectDailyColumnStatsTest.php
@@ -7,7 +7,6 @@ use Kanboard\Model\ProjectDailyColumnStats;
use Kanboard\Model\Config;
use Kanboard\Model\Task;
use Kanboard\Model\TaskCreation;
-use Kanboard\Model\TaskStatus;
class ProjectDailyColumnStatsTest extends Base
{
diff --git a/tests/units/Model/ProjectDailyStatsTest.php b/tests/units/Model/ProjectDailyStatsTest.php
index 9efdb199..c3b20cb9 100644
--- a/tests/units/Model/ProjectDailyStatsTest.php
+++ b/tests/units/Model/ProjectDailyStatsTest.php
@@ -4,7 +4,6 @@ require_once __DIR__.'/../Base.php';
use Kanboard\Model\Project;
use Kanboard\Model\ProjectDailyStats;
-use Kanboard\Model\Task;
use Kanboard\Model\TaskCreation;
use Kanboard\Model\TaskStatus;
@@ -43,6 +42,13 @@ class ProjectDailyStatsTest extends Base
)
);
- $this->assertEquals($expected, $metrics);
+ $this->assertEquals($expected[0]['day'], $metrics[0]['day']);
+ $this->assertEquals($expected[1]['day'], $metrics[1]['day']);
+
+ $this->assertEquals($expected[0]['avg_lead_time'], $metrics[0]['avg_lead_time'], '', 2);
+ $this->assertEquals($expected[1]['avg_lead_time'], $metrics[1]['avg_lead_time'], '', 2);
+
+ $this->assertEquals($expected[0]['avg_cycle_time'], $metrics[0]['avg_cycle_time'], '', 2);
+ $this->assertEquals($expected[1]['avg_cycle_time'], $metrics[1]['avg_cycle_time'], '', 2);
}
}
diff --git a/tests/units/Model/ProjectDuplicationTest.php b/tests/units/Model/ProjectDuplicationTest.php
index db5da525..ee5b4ce4 100644
--- a/tests/units/Model/ProjectDuplicationTest.php
+++ b/tests/units/Model/ProjectDuplicationTest.php
@@ -6,8 +6,11 @@ use Kanboard\Model\Action;
use Kanboard\Model\Project;
use Kanboard\Model\Category;
use Kanboard\Model\ProjectUserRole;
+use Kanboard\Model\ProjectGroupRole;
use Kanboard\Model\ProjectDuplication;
use Kanboard\Model\User;
+use Kanboard\Model\Group;
+use Kanboard\Model\GroupMember;
use Kanboard\Model\Swimlane;
use Kanboard\Model\Task;
use Kanboard\Model\TaskCreation;
@@ -16,7 +19,14 @@ use Kanboard\Core\Security\Role;
class ProjectDuplicationTest extends Base
{
- public function testProjectName()
+ public function testGetSelections()
+ {
+ $projectDuplicationModel = new ProjectDuplication($this->container);
+ $this->assertCount(5, $projectDuplicationModel->getOptionalSelection());
+ $this->assertCount(6, $projectDuplicationModel->getPossibleSelection());
+ }
+
+ public function testGetClonedProjectName()
{
$pd = new ProjectDuplication($this->container);
@@ -29,54 +39,142 @@ class ProjectDuplicationTest extends Base
$this->assertEquals(str_repeat('a', 42).' (Clone)', $pd->getClonedProjectName(str_repeat('a', 60)));
}
- public function testCopyProjectWithLongName()
+ public function testClonePublicProject()
{
$p = new Project($this->container);
$pd = new ProjectDuplication($this->container);
- $this->assertEquals(1, $p->create(array('name' => str_repeat('a', 50))));
+ $this->assertEquals(1, $p->create(array('name' => 'Public')));
$this->assertEquals(2, $pd->duplicate(1));
$project = $p->getById(2);
$this->assertNotEmpty($project);
- $this->assertEquals(str_repeat('a', 42).' (Clone)', $project['name']);
+ $this->assertEquals('Public (Clone)', $project['name']);
+ $this->assertEquals(1, $project['is_active']);
+ $this->assertEquals(0, $project['is_private']);
+ $this->assertEquals(0, $project['is_public']);
+ $this->assertEquals(0, $project['owner_id']);
+ $this->assertEmpty($project['token']);
}
- public function testClonePublicProject()
+ public function testClonePrivateProject()
{
$p = new Project($this->container);
$pd = new ProjectDuplication($this->container);
+ $pp = new ProjectUserRole($this->container);
- $this->assertEquals(1, $p->create(array('name' => 'Public')));
+ $this->assertEquals(1, $p->create(array('name' => 'Private', 'is_private' => 1), 1, true));
$this->assertEquals(2, $pd->duplicate(1));
$project = $p->getById(2);
$this->assertNotEmpty($project);
- $this->assertEquals('Public (Clone)', $project['name']);
- $this->assertEquals(0, $project['is_private']);
+ $this->assertEquals('Private (Clone)', $project['name']);
+ $this->assertEquals(1, $project['is_active']);
+ $this->assertEquals(1, $project['is_private']);
$this->assertEquals(0, $project['is_public']);
+ $this->assertEquals(0, $project['owner_id']);
$this->assertEmpty($project['token']);
+
+ $this->assertEquals(Role::PROJECT_MANAGER, $pp->getUserRole(2, 1));
}
- public function testClonePrivateProject()
+ public function testCloneSharedProject()
{
$p = new Project($this->container);
$pd = new ProjectDuplication($this->container);
- $this->assertEquals(1, $p->create(array('name' => 'Private', 'is_private' => 1), 1, true));
+ $this->assertEquals(1, $p->create(array('name' => 'Shared')));
+ $this->assertTrue($p->update(array('id' => 1, 'is_public' => 1, 'token' => 'test')));
+
+ $project = $p->getById(1);
+ $this->assertEquals('test', $project['token']);
+ $this->assertEquals(1, $project['is_public']);
+
$this->assertEquals(2, $pd->duplicate(1));
$project = $p->getById(2);
$this->assertNotEmpty($project);
- $this->assertEquals('Private (Clone)', $project['name']);
- $this->assertEquals(1, $project['is_private']);
+ $this->assertEquals('Shared (Clone)', $project['name']);
+ $this->assertEquals('', $project['token']);
$this->assertEquals(0, $project['is_public']);
- $this->assertEmpty($project['token']);
+ }
- $pp = new ProjectUserRole($this->container);
+ public function testCloneInactiveProject()
+ {
+ $p = new Project($this->container);
+ $pd = new ProjectDuplication($this->container);
+
+ $this->assertEquals(1, $p->create(array('name' => 'Inactive')));
+ $this->assertTrue($p->update(array('id' => 1, 'is_active' => 0)));
+
+ $project = $p->getById(1);
+ $this->assertEquals(0, $project['is_active']);
+
+ $this->assertEquals(2, $pd->duplicate(1));
+
+ $project = $p->getById(2);
+ $this->assertNotEmpty($project);
+ $this->assertEquals('Inactive (Clone)', $project['name']);
+ $this->assertEquals(1, $project['is_active']);
+ }
+
+ public function testCloneProjectWithOwner()
+ {
+ $p = new Project($this->container);
+ $pd = new ProjectDuplication($this->container);
+ $projectUserRoleModel = new ProjectUserRole($this->container);
+
+ $this->assertEquals(1, $p->create(array('name' => 'Owner')));
+
+ $project = $p->getById(1);
+ $this->assertEquals(0, $project['owner_id']);
+
+ $this->assertEquals(2, $pd->duplicate(1, array('projectPermission'), 1));
- $this->assertEquals(array(1 => 'admin'), $pp->getAssignableUsers(1));
- $this->assertEquals(array(1 => 'admin'), $pp->getAssignableUsers(2));
+ $project = $p->getById(2);
+ $this->assertNotEmpty($project);
+ $this->assertEquals('Owner (Clone)', $project['name']);
+ $this->assertEquals(1, $project['owner_id']);
+
+ $this->assertEquals(Role::PROJECT_MANAGER, $projectUserRoleModel->getUserRole(2, 1));
+ }
+
+ public function testCloneProjectWithDifferentName()
+ {
+ $p = new Project($this->container);
+ $pd = new ProjectDuplication($this->container);
+
+ $this->assertEquals(1, $p->create(array('name' => 'Owner')));
+
+ $project = $p->getById(1);
+ $this->assertEquals(0, $project['owner_id']);
+
+ $this->assertEquals(2, $pd->duplicate(1, array('projectPermission'), 1, 'Foobar'));
+
+ $project = $p->getById(2);
+ $this->assertNotEmpty($project);
+ $this->assertEquals('Foobar', $project['name']);
+ $this->assertEquals(1, $project['owner_id']);
+ }
+
+ public function testCloneProjectAndForceItToBePrivate()
+ {
+ $p = new Project($this->container);
+ $pd = new ProjectDuplication($this->container);
+
+ $this->assertEquals(1, $p->create(array('name' => 'Owner')));
+
+ $project = $p->getById(1);
+ $this->assertEquals(0, $project['owner_id']);
+ $this->assertEquals(0, $project['is_private']);
+
+ $this->assertEquals(2, $pd->duplicate(1, array('projectPermission'), 1, 'Foobar', true));
+
+ $project = $p->getById(2);
+ $this->assertNotEmpty($project);
+ $this->assertEquals('Foobar', $project['name']);
+ $this->assertEquals(1, $project['owner_id']);
+ $this->assertEquals(1, $project['is_private']);
}
public function testCloneProjectWithCategories()
@@ -98,16 +196,9 @@ class ProjectDuplicationTest extends Base
$this->assertEquals('P1 (Clone)', $project['name']);
$categories = $c->getAll(2);
- $this->assertNotempty($categories);
- $this->assertEquals(3, count($categories));
-
- $this->assertEquals(4, $categories[0]['id']);
+ $this->assertCount(3, $categories);
$this->assertEquals('C1', $categories[0]['name']);
-
- $this->assertEquals(5, $categories[1]['id']);
$this->assertEquals('C2', $categories[1]['name']);
-
- $this->assertEquals(6, $categories[2]['id']);
$this->assertEquals('C3', $categories[2]['name']);
}
@@ -119,28 +210,115 @@ class ProjectDuplicationTest extends Base
$u = new User($this->container);
$pd = new ProjectDuplication($this->container);
- $this->assertEquals(2, $u->create(array('username' => 'unittest1', 'password' => 'unittest')));
- $this->assertEquals(3, $u->create(array('username' => 'unittest2', 'password' => 'unittest')));
- $this->assertEquals(4, $u->create(array('username' => 'unittest3', 'password' => 'unittest')));
+ $this->assertEquals(2, $u->create(array('username' => 'user1')));
+ $this->assertEquals(3, $u->create(array('username' => 'user2')));
+ $this->assertEquals(4, $u->create(array('username' => 'user3')));
$this->assertEquals(1, $p->create(array('name' => 'P1')));
- $this->assertTrue($pp->addUser(1, 2, Role::PROJECT_MEMBER));
+
+ $this->assertTrue($pp->addUser(1, 2, Role::PROJECT_MANAGER));
$this->assertTrue($pp->addUser(1, 3, Role::PROJECT_MEMBER));
- $this->assertTrue($pp->addUser(1, 4, Role::PROJECT_MANAGER));
- $this->assertEquals(Role::PROJECT_MEMBER, $pp->getUserRole(1, 2));
- $this->assertEquals(Role::PROJECT_MEMBER, $pp->getUserRole(1, 3));
- $this->assertEquals(Role::PROJECT_MANAGER, $pp->getUserRole(1, 4));
+ $this->assertTrue($pp->addUser(1, 4, Role::PROJECT_VIEWER));
$this->assertEquals(2, $pd->duplicate(1));
+ $this->assertCount(3, $pp->getUsers(2));
+ $this->assertEquals(Role::PROJECT_MANAGER, $pp->getUserRole(2, 2));
+ $this->assertEquals(Role::PROJECT_MEMBER, $pp->getUserRole(2, 3));
+ $this->assertEquals(Role::PROJECT_VIEWER, $pp->getUserRole(2, 4));
+ }
+
+ public function testCloneProjectWithUsersAndOverrideOwner()
+ {
+ $p = new Project($this->container);
+ $c = new Category($this->container);
+ $pp = new ProjectUserRole($this->container);
+ $u = new User($this->container);
+ $pd = new ProjectDuplication($this->container);
+
+ $this->assertEquals(2, $u->create(array('username' => 'user1')));
+ $this->assertEquals(1, $p->create(array('name' => 'P1'), 2));
+
+ $project = $p->getById(1);
+ $this->assertEquals(2, $project['owner_id']);
+
+ $this->assertTrue($pp->addUser(1, 2, Role::PROJECT_MANAGER));
+ $this->assertTrue($pp->addUser(1, 1, Role::PROJECT_MEMBER));
+
+ $this->assertEquals(2, $pd->duplicate(1, array('projectPermission'), 1));
+
+ $this->assertCount(2, $pp->getUsers(2));
+ $this->assertEquals(Role::PROJECT_MANAGER, $pp->getUserRole(2, 2));
+ $this->assertEquals(Role::PROJECT_MANAGER, $pp->getUserRole(2, 1));
+
$project = $p->getById(2);
- $this->assertNotEmpty($project);
- $this->assertEquals('P1 (Clone)', $project['name']);
+ $this->assertEquals(1, $project['owner_id']);
+ }
- $this->assertEquals(3, count($pp->getUsers(2)));
- $this->assertEquals(Role::PROJECT_MEMBER, $pp->getUserRole(2, 2));
- $this->assertEquals(Role::PROJECT_MEMBER, $pp->getUserRole(2, 3));
- $this->assertEquals(Role::PROJECT_MANAGER, $pp->getUserRole(2, 4));
+ public function testCloneTeamProjectToPrivatProject()
+ {
+ $p = new Project($this->container);
+ $c = new Category($this->container);
+ $pp = new ProjectUserRole($this->container);
+ $u = new User($this->container);
+ $pd = new ProjectDuplication($this->container);
+
+ $this->assertEquals(2, $u->create(array('username' => 'user1')));
+ $this->assertEquals(3, $u->create(array('username' => 'user2')));
+ $this->assertEquals(1, $p->create(array('name' => 'P1'), 2));
+
+ $project = $p->getById(1);
+ $this->assertEquals(2, $project['owner_id']);
+ $this->assertEquals(0, $project['is_private']);
+
+ $this->assertTrue($pp->addUser(1, 2, Role::PROJECT_MANAGER));
+ $this->assertTrue($pp->addUser(1, 1, Role::PROJECT_MEMBER));
+
+ $this->assertEquals(2, $pd->duplicate(1, array('projectPermission'), 3, 'My private project', true));
+
+ $this->assertCount(1, $pp->getUsers(2));
+ $this->assertEquals(Role::PROJECT_MANAGER, $pp->getUserRole(2, 3));
+
+ $project = $p->getById(2);
+ $this->assertEquals(3, $project['owner_id']);
+ $this->assertEquals(1, $project['is_private']);
+ }
+
+ public function testCloneProjectWithGroups()
+ {
+ $p = new Project($this->container);
+ $c = new Category($this->container);
+ $pd = new ProjectDuplication($this->container);
+ $userModel = new User($this->container);
+ $groupModel = new Group($this->container);
+ $groupMemberModel = new GroupMember($this->container);
+ $projectGroupRoleModel = new ProjectGroupRole($this->container);
+ $projectUserRoleModel = new ProjectUserRole($this->container);
+
+ $this->assertEquals(1, $p->create(array('name' => 'P1')));
+
+ $this->assertEquals(1, $groupModel->create('G1'));
+ $this->assertEquals(2, $groupModel->create('G2'));
+ $this->assertEquals(3, $groupModel->create('G3'));
+
+ $this->assertEquals(2, $userModel->create(array('username' => 'user1')));
+ $this->assertEquals(3, $userModel->create(array('username' => 'user2')));
+ $this->assertEquals(4, $userModel->create(array('username' => 'user3')));
+
+ $this->assertTrue($groupMemberModel->addUser(1, 2));
+ $this->assertTrue($groupMemberModel->addUser(2, 3));
+ $this->assertTrue($groupMemberModel->addUser(3, 4));
+
+ $this->assertTrue($projectGroupRoleModel->addGroup(1, 1, Role::PROJECT_MANAGER));
+ $this->assertTrue($projectGroupRoleModel->addGroup(1, 2, Role::PROJECT_MEMBER));
+ $this->assertTrue($projectGroupRoleModel->addGroup(1, 3, Role::PROJECT_VIEWER));
+
+ $this->assertEquals(2, $pd->duplicate(1));
+
+ $this->assertCount(3, $projectGroupRoleModel->getGroups(2));
+ $this->assertEquals(Role::PROJECT_MANAGER, $projectUserRoleModel->getUserRole(2, 2));
+ $this->assertEquals(Role::PROJECT_MEMBER, $projectUserRoleModel->getUserRole(2, 3));
+ $this->assertEquals(Role::PROJECT_VIEWER, $projectUserRoleModel->getUserRole(2, 4));
}
public function testCloneProjectWithActionTaskAssignCurrentUser()
@@ -199,7 +377,7 @@ class ProjectDuplicationTest extends Base
$this->assertEquals(5, $actions[0]['params']['category_id']);
}
- public function testCloneProjectWithSwimlanesAndTasks()
+ public function testCloneProjectWithSwimlanes()
{
$p = new Project($this->container);
$pd = new ProjectDuplication($this->container);
@@ -207,31 +385,22 @@ class ProjectDuplicationTest extends Base
$tc = new TaskCreation($this->container);
$tf = new TaskFinder($this->container);
- $this->assertEquals(1, $p->create(array('name' => 'P1')));
+ $this->assertEquals(1, $p->create(array('name' => 'P1', 'default_swimlane' => 'New Default')));
// create initial swimlanes
$this->assertEquals(1, $s->create(array('project_id' => 1, 'name' => 'S1')));
$this->assertEquals(2, $s->create(array('project_id' => 1, 'name' => 'S2')));
$this->assertEquals(3, $s->create(array('project_id' => 1, 'name' => 'S3')));
- $default_swimlane1 = $s->getDefault(1);
- $default_swimlane1['default_swimlane'] = 'New Default';
-
- $this->assertTrue($s->updateDefault($default_swimlane1));
+ // create initial tasks
+ $this->assertEquals(1, $tc->create(array('title' => 'T0', 'project_id' => 1, 'swimlane_id' => 0)));
+ $this->assertEquals(2, $tc->create(array('title' => 'T1', 'project_id' => 1, 'swimlane_id' => 1)));
+ $this->assertEquals(3, $tc->create(array('title' => 'T2', 'project_id' => 1, 'swimlane_id' => 2)));
+ $this->assertEquals(4, $tc->create(array('title' => 'T3', 'project_id' => 1, 'swimlane_id' => 3)));
- //create initial tasks
- $this->assertEquals(1, $tc->create(array('title' => 'T1', 'project_id' => 1, 'column_id' => 1, 'owner_id' => 1)));
- $this->assertEquals(2, $tc->create(array('title' => 'T2', 'project_id' => 1, 'column_id' => 2, 'owner_id' => 1)));
- $this->assertEquals(3, $tc->create(array('title' => 'T3', 'project_id' => 1, 'column_id' => 3, 'owner_id' => 1)));
-
- $this->assertNotFalse($pd->duplicate(1, array('category', 'action', 'swimlane', 'task')));
- $project = $p->getByName('P1 (Clone)');
- $this->assertNotFalse($project);
- $project_id = $project['id'];
-
- // Check if Swimlanes have been duplicated
- $swimlanes = $s->getAll($project_id);
+ $this->assertEquals(2, $pd->duplicate(1, array('category', 'swimlane')));
+ $swimlanes = $s->getAll(2);
$this->assertCount(3, $swimlanes);
$this->assertEquals(4, $swimlanes[0]['id']);
$this->assertEquals('S1', $swimlanes[0]['name']);
@@ -239,29 +408,15 @@ class ProjectDuplicationTest extends Base
$this->assertEquals('S2', $swimlanes[1]['name']);
$this->assertEquals(6, $swimlanes[2]['id']);
$this->assertEquals('S3', $swimlanes[2]['name']);
- $new_default = $s->getDefault($project_id);
- $this->assertEquals('New Default', $new_default['default_swimlane']);
-
- // Check if Tasks have been duplicated
- $tasks = $tf->getAll($project_id);
+ $swimlane = $s->getDefault(2);
+ $this->assertEquals('New Default', $swimlane['default_swimlane']);
- $this->assertCount(3, $tasks);
- // $this->assertEquals(4, $tasks[0]['id']);
- $this->assertEquals('T1', $tasks[0]['title']);
- // $this->assertEquals(5, $tasks[1]['id']);
- $this->assertEquals('T2', $tasks[1]['title']);
- // $this->assertEquals(6, $tasks[2]['id']);
- $this->assertEquals('T3', $tasks[2]['title']);
-
- $p->remove($project_id);
-
- $this->assertFalse($p->exists($project_id));
- $this->assertCount(0, $s->getAll($project_id));
- $this->assertCount(0, $tf->getAll($project_id));
+ // Check if tasks are NOT been duplicated
+ $this->assertCount(0, $tf->getAll(2));
}
- public function testCloneProjectWithSwimlanes()
+ public function testCloneProjectWithTasks()
{
$p = new Project($this->container);
$pd = new ProjectDuplication($this->container);
@@ -271,43 +426,22 @@ class ProjectDuplicationTest extends Base
$this->assertEquals(1, $p->create(array('name' => 'P1')));
- // create initial swimlanes
- $this->assertEquals(1, $s->create(array('project_id' => 1, 'name' => 'S1')));
- $this->assertEquals(2, $s->create(array('project_id' => 1, 'name' => 'S2')));
- $this->assertEquals(3, $s->create(array('project_id' => 1, 'name' => 'S3')));
+ // create initial tasks
+ $this->assertEquals(1, $tc->create(array('title' => 'T1', 'project_id' => 1, 'column_id' => 1)));
+ $this->assertEquals(2, $tc->create(array('title' => 'T2', 'project_id' => 1, 'column_id' => 2)));
+ $this->assertEquals(3, $tc->create(array('title' => 'T3', 'project_id' => 1, 'column_id' => 3)));
- $default_swimlane1 = $s->getDefault(1);
- $default_swimlane1['default_swimlane'] = 'New Default';
-
- $this->assertTrue($s->updateDefault($default_swimlane1));
-
- //create initial tasks
- $this->assertEquals(1, $tc->create(array('title' => 'T1', 'project_id' => 1, 'column_id' => 1, 'owner_id' => 1)));
- $this->assertEquals(2, $tc->create(array('title' => 'T2', 'project_id' => 1, 'column_id' => 2, 'owner_id' => 1)));
- $this->assertEquals(3, $tc->create(array('title' => 'T3', 'project_id' => 1, 'column_id' => 3, 'owner_id' => 1)));
-
- $this->assertNotFalse($pd->duplicate(1, array('category', 'action', 'swimlane')));
- $project = $p->getByName('P1 (Clone)');
- $this->assertNotFalse($project);
- $project_id = $project['id'];
-
- $swimlanes = $s->getAll($project_id);
-
- $this->assertCount(3, $swimlanes);
- $this->assertEquals(4, $swimlanes[0]['id']);
- $this->assertEquals('S1', $swimlanes[0]['name']);
- $this->assertEquals(5, $swimlanes[1]['id']);
- $this->assertEquals('S2', $swimlanes[1]['name']);
- $this->assertEquals(6, $swimlanes[2]['id']);
- $this->assertEquals('S3', $swimlanes[2]['name']);
- $new_default = $s->getDefault($project_id);
- $this->assertEquals('New Default', $new_default['default_swimlane']);
+ $this->assertEquals(2, $pd->duplicate(1, array('category', 'action', 'task')));
- // Check if Tasks have NOT been duplicated
- $this->assertCount(0, $tf->getAll($project_id));
+ // Check if Tasks have been duplicated
+ $tasks = $tf->getAll(2);
+ $this->assertCount(3, $tasks);
+ $this->assertEquals('T1', $tasks[0]['title']);
+ $this->assertEquals('T2', $tasks[1]['title']);
+ $this->assertEquals('T3', $tasks[2]['title']);
}
- public function testCloneProjectWithTasks()
+ public function testCloneProjectWithSwimlanesAndTasks()
{
$p = new Project($this->container);
$pd = new ProjectDuplication($this->container);
@@ -315,40 +449,39 @@ class ProjectDuplicationTest extends Base
$tc = new TaskCreation($this->container);
$tf = new TaskFinder($this->container);
- $this->assertEquals(1, $p->create(array('name' => 'P1')));
+ $this->assertEquals(1, $p->create(array('name' => 'P1', 'default_swimlane' => 'New Default')));
// create initial swimlanes
$this->assertEquals(1, $s->create(array('project_id' => 1, 'name' => 'S1')));
$this->assertEquals(2, $s->create(array('project_id' => 1, 'name' => 'S2')));
$this->assertEquals(3, $s->create(array('project_id' => 1, 'name' => 'S3')));
- $default_swimlane1 = $s->getDefault(1);
- $default_swimlane1['default_swimlane'] = 'New Default';
-
- $this->assertTrue($s->updateDefault($default_swimlane1));
-
- //create initial tasks
+ // create initial tasks
$this->assertEquals(1, $tc->create(array('title' => 'T1', 'project_id' => 1, 'column_id' => 1, 'owner_id' => 1)));
$this->assertEquals(2, $tc->create(array('title' => 'T2', 'project_id' => 1, 'column_id' => 2, 'owner_id' => 1)));
$this->assertEquals(3, $tc->create(array('title' => 'T3', 'project_id' => 1, 'column_id' => 3, 'owner_id' => 1)));
- $this->assertNotFalse($pd->duplicate(1, array('category', 'action', 'task')));
- $project = $p->getByName('P1 (Clone)');
- $this->assertNotFalse($project);
- $project_id = $project['id'];
+ $this->assertEquals(2, $pd->duplicate(1, array('projectPermission', 'swimlane', 'task')));
+
+ // Check if Swimlanes have been duplicated
+ $swimlanes = $s->getAll(2);
+ $this->assertCount(3, $swimlanes);
+ $this->assertEquals(4, $swimlanes[0]['id']);
+ $this->assertEquals('S1', $swimlanes[0]['name']);
+ $this->assertEquals(5, $swimlanes[1]['id']);
+ $this->assertEquals('S2', $swimlanes[1]['name']);
+ $this->assertEquals(6, $swimlanes[2]['id']);
+ $this->assertEquals('S3', $swimlanes[2]['name']);
- // Check if Swimlanes have NOT been duplicated
- $this->assertCount(0, $s->getAll($project_id));
+ $swimlane = $s->getDefault(2);
+ $this->assertEquals('New Default', $swimlane['default_swimlane']);
// Check if Tasks have been duplicated
- $tasks = $tf->getAll($project_id);
+ $tasks = $tf->getAll(2);
$this->assertCount(3, $tasks);
- //$this->assertEquals(4, $tasks[0]['id']);
$this->assertEquals('T1', $tasks[0]['title']);
- //$this->assertEquals(5, $tasks[1]['id']);
$this->assertEquals('T2', $tasks[1]['title']);
- //$this->assertEquals(6, $tasks[2]['id']);
$this->assertEquals('T3', $tasks[2]['title']);
}
}
diff --git a/tests/units/Model/ProjectFileTest.php b/tests/units/Model/ProjectFileTest.php
new file mode 100644
index 00000000..d9b37fbe
--- /dev/null
+++ b/tests/units/Model/ProjectFileTest.php
@@ -0,0 +1,311 @@
+<?php
+
+require_once __DIR__.'/../Base.php';
+
+use Kanboard\Model\ProjectFile;
+use Kanboard\Model\Project;
+
+class ProjectFileTest extends Base
+{
+ public function testCreation()
+ {
+ $projectModel = new Project($this->container);
+ $fileModel = new ProjectFile($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'test')));
+ $this->assertEquals(1, $fileModel->create(1, 'test', '/tmp/foo', 10));
+
+ $file = $fileModel->getById(1);
+ $this->assertEquals('test', $file['name']);
+ $this->assertEquals('/tmp/foo', $file['path']);
+ $this->assertEquals(0, $file['is_image']);
+ $this->assertEquals(1, $file['project_id']);
+ $this->assertEquals(time(), $file['date'], '', 2);
+ $this->assertEquals(0, $file['user_id']);
+ $this->assertEquals(10, $file['size']);
+
+ $this->assertEquals(2, $fileModel->create(1, 'test2.png', '/tmp/foobar', 10));
+
+ $file = $fileModel->getById(2);
+ $this->assertEquals('test2.png', $file['name']);
+ $this->assertEquals('/tmp/foobar', $file['path']);
+ $this->assertEquals(1, $file['is_image']);
+ }
+
+ public function testCreationWithFileNameTooLong()
+ {
+ $projectModel = new Project($this->container);
+ $fileModel = new ProjectFile($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'test')));
+
+ $this->assertNotFalse($fileModel->create(1, 'test', '/tmp/foo', 10));
+ $this->assertNotFalse($fileModel->create(1, str_repeat('a', 1000), '/tmp/foo', 10));
+
+ $files = $fileModel->getAll(1);
+ $this->assertNotEmpty($files);
+ $this->assertCount(2, $files);
+
+ $this->assertEquals(str_repeat('a', 255), $files[0]['name']);
+ $this->assertEquals('test', $files[1]['name']);
+ }
+
+ public function testCreationWithSessionOpen()
+ {
+ $this->container['sessionStorage']->user = array('id' => 1);
+
+ $projectModel = new Project($this->container);
+ $fileModel = new ProjectFile($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'test')));
+ $this->assertEquals(1, $fileModel->create(1, 'test', '/tmp/foo', 10));
+
+ $file = $fileModel->getById(1);
+ $this->assertEquals('test', $file['name']);
+ $this->assertEquals(1, $file['user_id']);
+ }
+
+ public function testGetAll()
+ {
+ $projectModel = new Project($this->container);
+ $fileModel = new ProjectFile($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'test')));
+
+ $this->assertEquals(1, $fileModel->create(1, 'B.pdf', '/tmp/foo', 10));
+ $this->assertEquals(2, $fileModel->create(1, 'A.png', '/tmp/foo', 10));
+ $this->assertEquals(3, $fileModel->create(1, 'D.doc', '/tmp/foo', 10));
+ $this->assertEquals(4, $fileModel->create(1, 'C.JPG', '/tmp/foo', 10));
+
+ $fileModeliles = $fileModel->getAll(1);
+ $this->assertNotEmpty($fileModeliles);
+ $this->assertCount(4, $fileModeliles);
+ $this->assertEquals('A.png', $fileModeliles[0]['name']);
+ $this->assertEquals('B.pdf', $fileModeliles[1]['name']);
+ $this->assertEquals('C.JPG', $fileModeliles[2]['name']);
+ $this->assertEquals('D.doc', $fileModeliles[3]['name']);
+
+ $fileModeliles = $fileModel->getAllImages(1);
+ $this->assertNotEmpty($fileModeliles);
+ $this->assertCount(2, $fileModeliles);
+ $this->assertEquals('A.png', $fileModeliles[0]['name']);
+ $this->assertEquals('C.JPG', $fileModeliles[1]['name']);
+
+ $fileModeliles = $fileModel->getAllDocuments(1);
+ $this->assertNotEmpty($fileModeliles);
+ $this->assertCount(2, $fileModeliles);
+ $this->assertEquals('B.pdf', $fileModeliles[0]['name']);
+ $this->assertEquals('D.doc', $fileModeliles[1]['name']);
+ }
+
+ public function testGetThumbnailPath()
+ {
+ $fileModel = new ProjectFile($this->container);
+ $this->assertEquals('thumbnails'.DIRECTORY_SEPARATOR.'test', $fileModel->getThumbnailPath('test'));
+ }
+
+ public function testGeneratePath()
+ {
+ $fileModel = new ProjectFile($this->container);
+
+ $this->assertStringStartsWith('projects'.DIRECTORY_SEPARATOR.'34'.DIRECTORY_SEPARATOR, $fileModel->generatePath(34, 'test.png'));
+ $this->assertNotEquals($fileModel->generatePath(34, 'test1.png'), $fileModel->generatePath(34, 'test2.png'));
+ }
+
+ public function testUploadFiles()
+ {
+ $fileModel = $this
+ ->getMockBuilder('\Kanboard\Model\ProjectFile')
+ ->setConstructorArgs(array($this->container))
+ ->setMethods(array('generateThumbnailFromFile'))
+ ->getMock();
+
+ $projectModel = new Project($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'test')));
+
+ $files = array(
+ 'name' => array(
+ 'file1.png',
+ 'file2.doc',
+ ),
+ 'tmp_name' => array(
+ '/tmp/phpYzdqkD',
+ '/tmp/phpeEwEWG',
+ ),
+ 'error' => array(
+ UPLOAD_ERR_OK,
+ UPLOAD_ERR_OK,
+ ),
+ 'size' => array(
+ 123,
+ 456,
+ ),
+ );
+
+ $fileModel
+ ->expects($this->once())
+ ->method('generateThumbnailFromFile');
+
+ $this->container['objectStorage']
+ ->expects($this->at(0))
+ ->method('moveUploadedFile')
+ ->with($this->equalTo('/tmp/phpYzdqkD'), $this->anything());
+
+ $this->container['objectStorage']
+ ->expects($this->at(1))
+ ->method('moveUploadedFile')
+ ->with($this->equalTo('/tmp/phpeEwEWG'), $this->anything());
+
+ $this->assertTrue($fileModel->uploadFiles(1, $files));
+
+ $files = $fileModel->getAll(1);
+ $this->assertCount(2, $files);
+
+ $this->assertEquals(1, $files[0]['id']);
+ $this->assertEquals('file1.png', $files[0]['name']);
+ $this->assertEquals(1, $files[0]['is_image']);
+ $this->assertEquals(1, $files[0]['project_id']);
+ $this->assertEquals(0, $files[0]['user_id']);
+ $this->assertEquals(123, $files[0]['size']);
+ $this->assertEquals(time(), $files[0]['date'], '', 2);
+
+ $this->assertEquals(2, $files[1]['id']);
+ $this->assertEquals('file2.doc', $files[1]['name']);
+ $this->assertEquals(0, $files[1]['is_image']);
+ $this->assertEquals(1, $files[1]['project_id']);
+ $this->assertEquals(0, $files[1]['user_id']);
+ $this->assertEquals(456, $files[1]['size']);
+ $this->assertEquals(time(), $files[1]['date'], '', 2);
+ }
+
+ public function testUploadFilesWithEmptyFiles()
+ {
+ $fileModel = new ProjectFile($this->container);
+ $this->assertFalse($fileModel->uploadFiles(1, array()));
+ }
+
+ public function testUploadFilesWithUploadError()
+ {
+ $files = array(
+ 'name' => array(
+ 'file1.png',
+ 'file2.doc',
+ ),
+ 'tmp_name' => array(
+ '',
+ '/tmp/phpeEwEWG',
+ ),
+ 'error' => array(
+ UPLOAD_ERR_CANT_WRITE,
+ UPLOAD_ERR_OK,
+ ),
+ 'size' => array(
+ 123,
+ 456,
+ ),
+ );
+
+ $fileModel = new ProjectFile($this->container);
+ $this->assertFalse($fileModel->uploadFiles(1, $files));
+ }
+
+ public function testUploadFilesWithObjectStorageError()
+ {
+ $files = array(
+ 'name' => array(
+ 'file1.csv',
+ 'file2.doc',
+ ),
+ 'tmp_name' => array(
+ '/tmp/phpYzdqkD',
+ '/tmp/phpeEwEWG',
+ ),
+ 'error' => array(
+ UPLOAD_ERR_OK,
+ UPLOAD_ERR_OK,
+ ),
+ 'size' => array(
+ 123,
+ 456,
+ ),
+ );
+
+ $this->container['objectStorage']
+ ->expects($this->at(0))
+ ->method('moveUploadedFile')
+ ->with($this->equalTo('/tmp/phpYzdqkD'), $this->anything())
+ ->will($this->throwException(new \Kanboard\Core\ObjectStorage\ObjectStorageException('test')));
+
+ $fileModel = new ProjectFile($this->container);
+ $this->assertFalse($fileModel->uploadFiles(1, $files));
+ }
+
+ public function testUploadFileContent()
+ {
+ $fileModel = $this
+ ->getMockBuilder('\Kanboard\Model\ProjectFile')
+ ->setConstructorArgs(array($this->container))
+ ->setMethods(array('generateThumbnailFromFile'))
+ ->getMock();
+
+ $projectModel = new Project($this->container);
+ $data = 'test';
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'test')));
+
+ $this->container['objectStorage']
+ ->expects($this->once())
+ ->method('put')
+ ->with($this->anything(), $this->equalTo($data));
+
+ $this->assertEquals(1, $fileModel->uploadContent(1, 'test.doc', base64_encode($data)));
+
+ $files = $fileModel->getAll(1);
+ $this->assertCount(1, $files);
+
+ $this->assertEquals(1, $files[0]['id']);
+ $this->assertEquals('test.doc', $files[0]['name']);
+ $this->assertEquals(0, $files[0]['is_image']);
+ $this->assertEquals(1, $files[0]['project_id']);
+ $this->assertEquals(0, $files[0]['user_id']);
+ $this->assertEquals(4, $files[0]['size']);
+ $this->assertEquals(time(), $files[0]['date'], '', 2);
+ }
+
+ public function testUploadImageContent()
+ {
+ $fileModel = $this
+ ->getMockBuilder('\Kanboard\Model\ProjectFile')
+ ->setConstructorArgs(array($this->container))
+ ->setMethods(array('generateThumbnailFromFile'))
+ ->getMock();
+
+ $projectModel = new Project($this->container);
+ $data = 'test';
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'test')));
+
+ $fileModel
+ ->expects($this->once())
+ ->method('generateThumbnailFromFile');
+
+ $this->container['objectStorage']
+ ->expects($this->once())
+ ->method('put')
+ ->with($this->anything(), $this->equalTo($data));
+
+ $this->assertEquals(1, $fileModel->uploadContent(1, 'test.png', base64_encode($data)));
+
+ $files = $fileModel->getAll(1);
+ $this->assertCount(1, $files);
+
+ $this->assertEquals(1, $files[0]['id']);
+ $this->assertEquals('test.png', $files[0]['name']);
+ $this->assertEquals(1, $files[0]['is_image']);
+ $this->assertEquals(1, $files[0]['project_id']);
+ $this->assertEquals(0, $files[0]['user_id']);
+ $this->assertEquals(4, $files[0]['size']);
+ $this->assertEquals(time(), $files[0]['date'], '', 2);
+ }
+}
diff --git a/tests/units/Model/ProjectGroupRoleTest.php b/tests/units/Model/ProjectGroupRoleTest.php
index 29a9536b..e38e812a 100644
--- a/tests/units/Model/ProjectGroupRoleTest.php
+++ b/tests/units/Model/ProjectGroupRoleTest.php
@@ -204,6 +204,44 @@ class ProjectGroupRoleTest extends Base
$this->assertEquals('', $users[1]['name']);
}
+ public function testGetAssignableUsersWithDisabledUsers()
+ {
+ $userModel = new User($this->container);
+ $projectModel = new Project($this->container);
+ $groupModel = new Group($this->container);
+ $groupMemberModel = new GroupMember($this->container);
+ $groupRoleModel = new ProjectGroupRole($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'Project 1')));
+ $this->assertEquals(2, $projectModel->create(array('name' => 'Project 2')));
+
+ $this->assertEquals(2, $userModel->create(array('username' => 'user 1', 'name' => 'User #1')));
+ $this->assertEquals(3, $userModel->create(array('username' => 'user 2', 'is_active' => 0)));
+ $this->assertEquals(4, $userModel->create(array('username' => 'user 3')));
+
+ $this->assertEquals(1, $groupModel->create('Group A'));
+ $this->assertEquals(2, $groupModel->create('Group B'));
+ $this->assertEquals(3, $groupModel->create('Group C'));
+
+ $this->assertTrue($groupMemberModel->addUser(1, 4));
+ $this->assertTrue($groupMemberModel->addUser(2, 3));
+ $this->assertTrue($groupMemberModel->addUser(3, 2));
+
+ $this->assertTrue($groupRoleModel->addGroup(1, 1, Role::PROJECT_VIEWER));
+ $this->assertTrue($groupRoleModel->addGroup(1, 2, Role::PROJECT_MEMBER));
+ $this->assertTrue($groupRoleModel->addGroup(1, 3, Role::PROJECT_MANAGER));
+
+ $users = $groupRoleModel->getAssignableUsers(2);
+ $this->assertCount(0, $users);
+
+ $users = $groupRoleModel->getAssignableUsers(1);
+ $this->assertCount(1, $users);
+
+ $this->assertEquals(2, $users[0]['id']);
+ $this->assertEquals('user 1', $users[0]['username']);
+ $this->assertEquals('User #1', $users[0]['name']);
+ }
+
public function testGetProjectsByUser()
{
$userModel = new User($this->container);
diff --git a/tests/units/Model/ProjectPermissionTest.php b/tests/units/Model/ProjectPermissionTest.php
index 035a1246..10fcdcc2 100644
--- a/tests/units/Model/ProjectPermissionTest.php
+++ b/tests/units/Model/ProjectPermissionTest.php
@@ -192,6 +192,28 @@ class ProjectPermissionTest extends Base
$this->assertFalse($projectPermission->isAssignable(2, 5));
}
+ public function testIsAssignableWhenUserIsDisabled()
+ {
+ $userModel = new User($this->container);
+ $projectModel = new Project($this->container);
+ $groupModel = new Group($this->container);
+ $groupRoleModel = new ProjectGroupRole($this->container);
+ $groupMemberModel = new GroupMember($this->container);
+ $userRoleModel = new ProjectUserRole($this->container);
+ $projectPermission = new ProjectPermission($this->container);
+
+ $this->assertEquals(2, $userModel->create(array('username' => 'user 1')));
+ $this->assertEquals(3, $userModel->create(array('username' => 'user 2', 'is_active' => 0)));
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'Project 1')));
+
+ $this->assertTrue($userRoleModel->addUser(1, 2, Role::PROJECT_MEMBER));
+ $this->assertTrue($userRoleModel->addUser(1, 3, Role::PROJECT_MEMBER));
+
+ $this->assertTrue($projectPermission->isAssignable(1, 2));
+ $this->assertFalse($projectPermission->isAssignable(1, 3));
+ }
+
public function testIsMember()
{
$userModel = new User($this->container);
diff --git a/tests/units/Model/ProjectTest.php b/tests/units/Model/ProjectTest.php
index cadb42a6..5478fa40 100644
--- a/tests/units/Model/ProjectTest.php
+++ b/tests/units/Model/ProjectTest.php
@@ -8,8 +8,6 @@ use Kanboard\Model\Project;
use Kanboard\Model\User;
use Kanboard\Model\Task;
use Kanboard\Model\TaskCreation;
-use Kanboard\Model\Acl;
-use Kanboard\Model\Board;
use Kanboard\Model\Config;
use Kanboard\Model\Category;
diff --git a/tests/units/Model/ProjectUserRoleTest.php b/tests/units/Model/ProjectUserRoleTest.php
index c6b4eb7c..06cd1b70 100644
--- a/tests/units/Model/ProjectUserRoleTest.php
+++ b/tests/units/Model/ProjectUserRoleTest.php
@@ -8,6 +8,7 @@ use Kanboard\Model\Group;
use Kanboard\Model\GroupMember;
use Kanboard\Model\ProjectGroupRole;
use Kanboard\Model\ProjectUserRole;
+use Kanboard\Model\ProjectPermission;
use Kanboard\Core\Security\Role;
class ProjectUserRoleTest extends Base
@@ -100,6 +101,36 @@ class ProjectUserRoleTest extends Base
$this->assertEquals('', $userRoleModel->getUserRole(1, 2));
}
+ public function testGetAssignableUsersWithDisabledUsers()
+ {
+ $projectModel = new Project($this->container);
+ $userModel = new User($this->container);
+ $userRoleModel = new ProjectUserRole($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'Test')));
+ $this->assertEquals(2, $userModel->create(array('username' => 'user1', 'name' => 'User1')));
+ $this->assertEquals(3, $userModel->create(array('username' => 'user2', 'name' => 'User2')));
+
+ $this->assertTrue($userRoleModel->addUser(1, 1, Role::PROJECT_MEMBER));
+ $this->assertTrue($userRoleModel->addUser(1, 2, Role::PROJECT_MEMBER));
+ $this->assertTrue($userRoleModel->addUser(1, 3, Role::PROJECT_MEMBER));
+
+ $users = $userRoleModel->getAssignableUsers(1);
+ $this->assertCount(3, $users);
+
+ $this->assertEquals('admin', $users[1]);
+ $this->assertEquals('User1', $users[2]);
+ $this->assertEquals('User2', $users[3]);
+
+ $this->assertTrue($userModel->disable(2));
+
+ $users = $userRoleModel->getAssignableUsers(1);
+ $this->assertCount(2, $users);
+
+ $this->assertEquals('admin', $users[1]);
+ $this->assertEquals('User2', $users[3]);
+ }
+
public function testGetAssignableUsersWithoutGroups()
{
$projectModel = new Project($this->container);
@@ -219,6 +250,36 @@ class ProjectUserRoleTest extends Base
$this->assertEquals('User4', $users[5]);
}
+ public function testGetAssignableUsersWithDisabledUsersAndEverybodyAllowed()
+ {
+ $projectModel = new Project($this->container);
+ $projectPermission = new ProjectPermission($this->container);
+ $userModel = new User($this->container);
+ $userRoleModel = new ProjectUserRole($this->container);
+
+ $this->assertEquals(2, $userModel->create(array('username' => 'user1', 'name' => 'User1')));
+ $this->assertEquals(3, $userModel->create(array('username' => 'user2', 'name' => 'User2')));
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'Project 1', 'is_everybody_allowed' => 1)));
+
+ $this->assertTrue($projectPermission->isEverybodyAllowed(1));
+
+ $users = $userRoleModel->getAssignableUsers(1);
+ $this->assertCount(3, $users);
+
+ $this->assertEquals('admin', $users[1]);
+ $this->assertEquals('User1', $users[2]);
+ $this->assertEquals('User2', $users[3]);
+
+ $this->assertTrue($userModel->disable(2));
+
+ $users = $userRoleModel->getAssignableUsers(1);
+ $this->assertCount(2, $users);
+
+ $this->assertEquals('admin', $users[1]);
+ $this->assertEquals('User2', $users[3]);
+ }
+
public function testGetProjectsByUser()
{
$userModel = new User($this->container);
diff --git a/tests/units/Model/SubtaskTest.php b/tests/units/Model/SubtaskTest.php
index 9be2dff4..eb9747d4 100644
--- a/tests/units/Model/SubtaskTest.php
+++ b/tests/units/Model/SubtaskTest.php
@@ -2,12 +2,9 @@
require_once __DIR__.'/../Base.php';
-use Kanboard\Model\Task;
use Kanboard\Model\TaskCreation;
use Kanboard\Model\Subtask;
use Kanboard\Model\Project;
-use Kanboard\Model\Category;
-use Kanboard\Model\User;
use Kanboard\Core\User\UserSession;
class SubtaskTest extends Base
@@ -159,7 +156,7 @@ class SubtaskTest extends Base
$this->assertEquals(0, $subtask['user_id']);
$this->assertEquals(1, $subtask['task_id']);
- $this->assertTrue($s->toggleStatus(1));
+ $this->assertEquals(Subtask::STATUS_INPROGRESS, $s->toggleStatus(1));
$subtask = $s->getById(1);
$this->assertNotEmpty($subtask);
@@ -167,7 +164,7 @@ class SubtaskTest extends Base
$this->assertEquals(0, $subtask['user_id']);
$this->assertEquals(1, $subtask['task_id']);
- $this->assertTrue($s->toggleStatus(1));
+ $this->assertEquals(Subtask::STATUS_DONE, $s->toggleStatus(1));
$subtask = $s->getById(1);
$this->assertNotEmpty($subtask);
@@ -175,7 +172,7 @@ class SubtaskTest extends Base
$this->assertEquals(0, $subtask['user_id']);
$this->assertEquals(1, $subtask['task_id']);
- $this->assertTrue($s->toggleStatus(1));
+ $this->assertEquals(Subtask::STATUS_TODO, $s->toggleStatus(1));
$subtask = $s->getById(1);
$this->assertNotEmpty($subtask);
@@ -205,7 +202,7 @@ class SubtaskTest extends Base
// Set the current logged user
$this->container['sessionStorage']->user = array('id' => 1);
- $this->assertTrue($s->toggleStatus(1));
+ $this->assertEquals(Subtask::STATUS_INPROGRESS, $s->toggleStatus(1));
$subtask = $s->getById(1);
$this->assertNotEmpty($subtask);
@@ -213,7 +210,7 @@ class SubtaskTest extends Base
$this->assertEquals(1, $subtask['user_id']);
$this->assertEquals(1, $subtask['task_id']);
- $this->assertTrue($s->toggleStatus(1));
+ $this->assertEquals(Subtask::STATUS_DONE, $s->toggleStatus(1));
$subtask = $s->getById(1);
$this->assertNotEmpty($subtask);
@@ -221,7 +218,7 @@ class SubtaskTest extends Base
$this->assertEquals(1, $subtask['user_id']);
$this->assertEquals(1, $subtask['task_id']);
- $this->assertTrue($s->toggleStatus(1));
+ $this->assertEquals(Subtask::STATUS_TODO, $s->toggleStatus(1));
$subtask = $s->getById(1);
$this->assertNotEmpty($subtask);
@@ -252,117 +249,6 @@ class SubtaskTest extends Base
}
}
- public function testMoveUp()
- {
- $tc = new TaskCreation($this->container);
- $s = new Subtask($this->container);
- $p = new Project($this->container);
-
- $this->assertEquals(1, $p->create(array('name' => 'test1')));
- $this->assertEquals(1, $tc->create(array('title' => 'test 1', 'project_id' => 1)));
-
- $this->assertEquals(1, $s->create(array('title' => 'subtask #1', 'task_id' => 1)));
- $this->assertEquals(2, $s->create(array('title' => 'subtask #2', 'task_id' => 1)));
- $this->assertEquals(3, $s->create(array('title' => 'subtask #3', 'task_id' => 1)));
-
- // Check positions
- $subtask = $s->getById(1);
- $this->assertNotEmpty($subtask);
- $this->assertEquals(1, $subtask['position']);
-
- $subtask = $s->getById(2);
- $this->assertNotEmpty($subtask);
- $this->assertEquals(2, $subtask['position']);
-
- $subtask = $s->getById(3);
- $this->assertNotEmpty($subtask);
- $this->assertEquals(3, $subtask['position']);
-
- // Move up
- $this->assertTrue($s->moveUp(1, 2));
-
- // Check positions
- $subtask = $s->getById(1);
- $this->assertNotEmpty($subtask);
- $this->assertEquals(2, $subtask['position']);
-
- $subtask = $s->getById(2);
- $this->assertNotEmpty($subtask);
- $this->assertEquals(1, $subtask['position']);
-
- $subtask = $s->getById(3);
- $this->assertNotEmpty($subtask);
- $this->assertEquals(3, $subtask['position']);
-
- // We can't move up #2
- $this->assertFalse($s->moveUp(1, 2));
-
- // Test remove
- $this->assertTrue($s->remove(1));
- $this->assertTrue($s->moveUp(1, 3));
-
- // Check positions
- $subtask = $s->getById(1);
- $this->assertEmpty($subtask);
-
- $subtask = $s->getById(2);
- $this->assertNotEmpty($subtask);
- $this->assertEquals(2, $subtask['position']);
-
- $subtask = $s->getById(3);
- $this->assertNotEmpty($subtask);
- $this->assertEquals(1, $subtask['position']);
- }
-
- public function testMoveDown()
- {
- $tc = new TaskCreation($this->container);
- $s = new Subtask($this->container);
- $p = new Project($this->container);
-
- $this->assertEquals(1, $p->create(array('name' => 'test1')));
- $this->assertEquals(1, $tc->create(array('title' => 'test 1', 'project_id' => 1)));
-
- $this->assertEquals(1, $s->create(array('title' => 'subtask #1', 'task_id' => 1)));
- $this->assertEquals(2, $s->create(array('title' => 'subtask #2', 'task_id' => 1)));
- $this->assertEquals(3, $s->create(array('title' => 'subtask #3', 'task_id' => 1)));
-
- // Move down #1
- $this->assertTrue($s->moveDown(1, 1));
-
- // Check positions
- $subtask = $s->getById(1);
- $this->assertNotEmpty($subtask);
- $this->assertEquals(2, $subtask['position']);
-
- $subtask = $s->getById(2);
- $this->assertNotEmpty($subtask);
- $this->assertEquals(1, $subtask['position']);
-
- $subtask = $s->getById(3);
- $this->assertNotEmpty($subtask);
- $this->assertEquals(3, $subtask['position']);
-
- // We can't move down #3
- $this->assertFalse($s->moveDown(1, 3));
-
- // Test remove
- $this->assertTrue($s->remove(1));
- $this->assertTrue($s->moveDown(1, 2));
-
- // Check positions
- $subtask = $s->getById(1);
- $this->assertEmpty($subtask);
-
- $subtask = $s->getById(2);
- $this->assertNotEmpty($subtask);
- $this->assertEquals(2, $subtask['position']);
-
- $subtask = $s->getById(3);
- $this->assertNotEmpty($subtask);
- $this->assertEquals(1, $subtask['position']);
- }
-
public function testDuplicate()
{
$tc = new TaskCreation($this->container);
@@ -409,4 +295,69 @@ class SubtaskTest extends Base
$this->assertEquals(1, $subtasks[0]['position']);
$this->assertEquals(2, $subtasks[1]['position']);
}
+
+ public function testChangePosition()
+ {
+ $taskCreationModel = new TaskCreation($this->container);
+ $subtaskModel = new Subtask($this->container);
+ $projectModel = new Project($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'test1')));
+ $this->assertEquals(1, $taskCreationModel->create(array('title' => 'test 1', 'project_id' => 1)));
+
+ $this->assertEquals(1, $subtaskModel->create(array('title' => 'subtask #1', 'task_id' => 1)));
+ $this->assertEquals(2, $subtaskModel->create(array('title' => 'subtask #2', 'task_id' => 1)));
+ $this->assertEquals(3, $subtaskModel->create(array('title' => 'subtask #3', 'task_id' => 1)));
+
+ $subtasks = $subtaskModel->getAll(1);
+ $this->assertEquals(1, $subtasks[0]['position']);
+ $this->assertEquals(1, $subtasks[0]['id']);
+ $this->assertEquals(2, $subtasks[1]['position']);
+ $this->assertEquals(2, $subtasks[1]['id']);
+ $this->assertEquals(3, $subtasks[2]['position']);
+ $this->assertEquals(3, $subtasks[2]['id']);
+
+ $this->assertTrue($subtaskModel->changePosition(1, 3, 2));
+
+ $subtasks = $subtaskModel->getAll(1);
+ $this->assertEquals(1, $subtasks[0]['position']);
+ $this->assertEquals(1, $subtasks[0]['id']);
+ $this->assertEquals(2, $subtasks[1]['position']);
+ $this->assertEquals(3, $subtasks[1]['id']);
+ $this->assertEquals(3, $subtasks[2]['position']);
+ $this->assertEquals(2, $subtasks[2]['id']);
+
+ $this->assertTrue($subtaskModel->changePosition(1, 2, 1));
+
+ $subtasks = $subtaskModel->getAll(1);
+ $this->assertEquals(1, $subtasks[0]['position']);
+ $this->assertEquals(2, $subtasks[0]['id']);
+ $this->assertEquals(2, $subtasks[1]['position']);
+ $this->assertEquals(1, $subtasks[1]['id']);
+ $this->assertEquals(3, $subtasks[2]['position']);
+ $this->assertEquals(3, $subtasks[2]['id']);
+
+ $this->assertTrue($subtaskModel->changePosition(1, 2, 2));
+
+ $subtasks = $subtaskModel->getAll(1);
+ $this->assertEquals(1, $subtasks[0]['position']);
+ $this->assertEquals(1, $subtasks[0]['id']);
+ $this->assertEquals(2, $subtasks[1]['position']);
+ $this->assertEquals(2, $subtasks[1]['id']);
+ $this->assertEquals(3, $subtasks[2]['position']);
+ $this->assertEquals(3, $subtasks[2]['id']);
+
+ $this->assertTrue($subtaskModel->changePosition(1, 1, 3));
+
+ $subtasks = $subtaskModel->getAll(1);
+ $this->assertEquals(1, $subtasks[0]['position']);
+ $this->assertEquals(2, $subtasks[0]['id']);
+ $this->assertEquals(2, $subtasks[1]['position']);
+ $this->assertEquals(3, $subtasks[1]['id']);
+ $this->assertEquals(3, $subtasks[2]['position']);
+ $this->assertEquals(1, $subtasks[2]['id']);
+
+ $this->assertFalse($subtaskModel->changePosition(1, 2, 0));
+ $this->assertFalse($subtaskModel->changePosition(1, 2, 4));
+ }
}
diff --git a/tests/units/Model/SubtaskTimeTrackingTest.php b/tests/units/Model/SubtaskTimeTrackingTest.php
index 40461eea..9fa8d5b0 100644
--- a/tests/units/Model/SubtaskTimeTrackingTest.php
+++ b/tests/units/Model/SubtaskTimeTrackingTest.php
@@ -7,8 +7,6 @@ use Kanboard\Model\TaskCreation;
use Kanboard\Model\Subtask;
use Kanboard\Model\SubtaskTimeTracking;
use Kanboard\Model\Project;
-use Kanboard\Model\Category;
-use Kanboard\Model\User;
class SubtaskTimeTrackingTest extends Base
{
diff --git a/tests/units/Model/SwimlaneTest.php b/tests/units/Model/SwimlaneTest.php
index 3d048abd..71c13e40 100644
--- a/tests/units/Model/SwimlaneTest.php
+++ b/tests/units/Model/SwimlaneTest.php
@@ -3,7 +3,6 @@
require_once __DIR__.'/../Base.php';
use Kanboard\Model\Project;
-use Kanboard\Model\Task;
use Kanboard\Model\TaskCreation;
use Kanboard\Model\TaskFinder;
use Kanboard\Model\Swimlane;
@@ -86,7 +85,23 @@ class SwimlaneTest extends Base
$this->assertEquals(0, $default['show_default_swimlane']);
}
- public function testDisable()
+ public function testDisableEnableDefaultSwimlane()
+ {
+ $projectModel = new Project($this->container);
+ $swimlaneModel = new Swimlane($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'UnitTest')));
+
+ $this->assertTrue($swimlaneModel->disableDefault(1));
+ $default = $swimlaneModel->getDefault(1);
+ $this->assertEquals(0, $default['show_default_swimlane']);
+
+ $this->assertTrue($swimlaneModel->enableDefault(1));
+ $default = $swimlaneModel->getDefault(1);
+ $this->assertEquals(1, $default['show_default_swimlane']);
+ }
+
+ public function testDisableEnable()
{
$p = new Project($this->container);
$s = new Swimlane($this->container);
@@ -210,172 +225,6 @@ class SwimlaneTest extends Base
$this->assertEquals(1, $swimlane['position']);
}
- public function testMoveUp()
- {
- $p = new Project($this->container);
- $s = new Swimlane($this->container);
-
- $this->assertEquals(1, $p->create(array('name' => 'UnitTest')));
- $this->assertEquals(1, $s->create(array('project_id' => 1, 'name' => 'Swimlane #1')));
- $this->assertEquals(2, $s->create(array('project_id' => 1, 'name' => 'Swimlane #2')));
- $this->assertEquals(3, $s->create(array('project_id' => 1, 'name' => 'Swimlane #3')));
-
- $swimlane = $s->getById(1);
- $this->assertNotEmpty($swimlane);
- $this->assertEquals(1, $swimlane['is_active']);
- $this->assertEquals(1, $swimlane['position']);
-
- $swimlane = $s->getById(2);
- $this->assertNotEmpty($swimlane);
- $this->assertEquals(1, $swimlane['is_active']);
- $this->assertEquals(2, $swimlane['position']);
-
- $swimlane = $s->getById(3);
- $this->assertNotEmpty($swimlane);
- $this->assertEquals(1, $swimlane['is_active']);
- $this->assertEquals(3, $swimlane['position']);
-
- // Move the swimlane 3 up
- $this->assertTrue($s->moveUp(1, 3));
-
- $swimlane = $s->getById(1);
- $this->assertNotEmpty($swimlane);
- $this->assertEquals(1, $swimlane['is_active']);
- $this->assertEquals(1, $swimlane['position']);
-
- $swimlane = $s->getById(2);
- $this->assertNotEmpty($swimlane);
- $this->assertEquals(1, $swimlane['is_active']);
- $this->assertEquals(3, $swimlane['position']);
-
- $swimlane = $s->getById(3);
- $this->assertNotEmpty($swimlane);
- $this->assertEquals(1, $swimlane['is_active']);
- $this->assertEquals(2, $swimlane['position']);
-
- // First swimlane can be moved up
- $this->assertFalse($s->moveUp(1, 1));
-
- // Move with a disabled swimlane
- $this->assertTrue($s->disable(1, 1));
-
- $swimlane = $s->getById(1);
- $this->assertNotEmpty($swimlane);
- $this->assertEquals(0, $swimlane['is_active']);
- $this->assertEquals(0, $swimlane['position']);
-
- $swimlane = $s->getById(2);
- $this->assertNotEmpty($swimlane);
- $this->assertEquals(1, $swimlane['is_active']);
- $this->assertEquals(2, $swimlane['position']);
-
- $swimlane = $s->getById(3);
- $this->assertNotEmpty($swimlane);
- $this->assertEquals(1, $swimlane['is_active']);
- $this->assertEquals(1, $swimlane['position']);
-
- // Move the 2nd swimlane up
- $this->assertTrue($s->moveUp(1, 2));
-
- $swimlane = $s->getById(1);
- $this->assertNotEmpty($swimlane);
- $this->assertEquals(0, $swimlane['is_active']);
- $this->assertEquals(0, $swimlane['position']);
-
- $swimlane = $s->getById(2);
- $this->assertNotEmpty($swimlane);
- $this->assertEquals(1, $swimlane['is_active']);
- $this->assertEquals(1, $swimlane['position']);
-
- $swimlane = $s->getById(3);
- $this->assertNotEmpty($swimlane);
- $this->assertEquals(1, $swimlane['is_active']);
- $this->assertEquals(2, $swimlane['position']);
- }
-
- public function testMoveDown()
- {
- $p = new Project($this->container);
- $s = new Swimlane($this->container);
-
- $this->assertEquals(1, $p->create(array('name' => 'UnitTest')));
- $this->assertEquals(1, $s->create(array('project_id' => 1, 'name' => 'Swimlane #1')));
- $this->assertEquals(2, $s->create(array('project_id' => 1, 'name' => 'Swimlane #2')));
- $this->assertEquals(3, $s->create(array('project_id' => 1, 'name' => 'Swimlane #3')));
-
- $swimlane = $s->getById(1);
- $this->assertNotEmpty($swimlane);
- $this->assertEquals(1, $swimlane['is_active']);
- $this->assertEquals(1, $swimlane['position']);
-
- $swimlane = $s->getById(2);
- $this->assertNotEmpty($swimlane);
- $this->assertEquals(1, $swimlane['is_active']);
- $this->assertEquals(2, $swimlane['position']);
-
- $swimlane = $s->getById(3);
- $this->assertNotEmpty($swimlane);
- $this->assertEquals(1, $swimlane['is_active']);
- $this->assertEquals(3, $swimlane['position']);
-
- // Move the swimlane 1 down
- $this->assertTrue($s->moveDown(1, 1));
-
- $swimlane = $s->getById(1);
- $this->assertNotEmpty($swimlane);
- $this->assertEquals(1, $swimlane['is_active']);
- $this->assertEquals(2, $swimlane['position']);
-
- $swimlane = $s->getById(2);
- $this->assertNotEmpty($swimlane);
- $this->assertEquals(1, $swimlane['is_active']);
- $this->assertEquals(1, $swimlane['position']);
-
- $swimlane = $s->getById(3);
- $this->assertNotEmpty($swimlane);
- $this->assertEquals(1, $swimlane['is_active']);
- $this->assertEquals(3, $swimlane['position']);
-
- // Last swimlane can be moved down
- $this->assertFalse($s->moveDown(1, 3));
-
- // Move with a disabled swimlane
- $this->assertTrue($s->disable(1, 3));
-
- $swimlane = $s->getById(1);
- $this->assertNotEmpty($swimlane);
- $this->assertEquals(1, $swimlane['is_active']);
- $this->assertEquals(2, $swimlane['position']);
-
- $swimlane = $s->getById(2);
- $this->assertNotEmpty($swimlane);
- $this->assertEquals(1, $swimlane['is_active']);
- $this->assertEquals(1, $swimlane['position']);
-
- $swimlane = $s->getById(3);
- $this->assertNotEmpty($swimlane);
- $this->assertEquals(0, $swimlane['is_active']);
- $this->assertEquals(0, $swimlane['position']);
-
- // Move the 2st swimlane down
- $this->assertTrue($s->moveDown(1, 2));
-
- $swimlane = $s->getById(1);
- $this->assertNotEmpty($swimlane);
- $this->assertEquals(1, $swimlane['is_active']);
- $this->assertEquals(1, $swimlane['position']);
-
- $swimlane = $s->getById(2);
- $this->assertNotEmpty($swimlane);
- $this->assertEquals(1, $swimlane['is_active']);
- $this->assertEquals(2, $swimlane['position']);
-
- $swimlane = $s->getById(3);
- $this->assertNotEmpty($swimlane);
- $this->assertEquals(0, $swimlane['is_active']);
- $this->assertEquals(0, $swimlane['position']);
- }
-
public function testDuplicateSwimlane()
{
$p = new Project($this->container);
@@ -406,4 +255,93 @@ class SwimlaneTest extends Base
$new_default = $s->getDefault(2);
$this->assertEquals('New Default', $new_default['default_swimlane']);
}
+
+ public function testChangePosition()
+ {
+ $projectModel = new Project($this->container);
+ $swimlaneModel = new Swimlane($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'test1')));
+ $this->assertEquals(1, $swimlaneModel->create(array('project_id' => 1, 'name' => 'Swimlane #1')));
+ $this->assertEquals(2, $swimlaneModel->create(array('project_id' => 1, 'name' => 'Swimlane #2')));
+ $this->assertEquals(3, $swimlaneModel->create(array('project_id' => 1, 'name' => 'Swimlane #3')));
+ $this->assertEquals(4, $swimlaneModel->create(array('project_id' => 1, 'name' => 'Swimlane #4')));
+
+ $swimlanes = $swimlaneModel->getAllByStatus(1);
+ $this->assertEquals(1, $swimlanes[0]['position']);
+ $this->assertEquals(1, $swimlanes[0]['id']);
+ $this->assertEquals(2, $swimlanes[1]['position']);
+ $this->assertEquals(2, $swimlanes[1]['id']);
+ $this->assertEquals(3, $swimlanes[2]['position']);
+ $this->assertEquals(3, $swimlanes[2]['id']);
+
+ $this->assertTrue($swimlaneModel->changePosition(1, 3, 2));
+
+ $swimlanes = $swimlaneModel->getAllByStatus(1);
+ $this->assertEquals(1, $swimlanes[0]['position']);
+ $this->assertEquals(1, $swimlanes[0]['id']);
+ $this->assertEquals(2, $swimlanes[1]['position']);
+ $this->assertEquals(3, $swimlanes[1]['id']);
+ $this->assertEquals(3, $swimlanes[2]['position']);
+ $this->assertEquals(2, $swimlanes[2]['id']);
+
+ $this->assertTrue($swimlaneModel->changePosition(1, 2, 1));
+
+ $swimlanes = $swimlaneModel->getAllByStatus(1);
+ $this->assertEquals(1, $swimlanes[0]['position']);
+ $this->assertEquals(2, $swimlanes[0]['id']);
+ $this->assertEquals(2, $swimlanes[1]['position']);
+ $this->assertEquals(1, $swimlanes[1]['id']);
+ $this->assertEquals(3, $swimlanes[2]['position']);
+ $this->assertEquals(3, $swimlanes[2]['id']);
+
+ $this->assertTrue($swimlaneModel->changePosition(1, 2, 2));
+
+ $swimlanes = $swimlaneModel->getAllByStatus(1);
+ $this->assertEquals(1, $swimlanes[0]['position']);
+ $this->assertEquals(1, $swimlanes[0]['id']);
+ $this->assertEquals(2, $swimlanes[1]['position']);
+ $this->assertEquals(2, $swimlanes[1]['id']);
+ $this->assertEquals(3, $swimlanes[2]['position']);
+ $this->assertEquals(3, $swimlanes[2]['id']);
+
+ $this->assertTrue($swimlaneModel->changePosition(1, 4, 1));
+
+ $swimlanes = $swimlaneModel->getAllByStatus(1);
+ $this->assertEquals(1, $swimlanes[0]['position']);
+ $this->assertEquals(4, $swimlanes[0]['id']);
+ $this->assertEquals(2, $swimlanes[1]['position']);
+ $this->assertEquals(1, $swimlanes[1]['id']);
+ $this->assertEquals(3, $swimlanes[2]['position']);
+ $this->assertEquals(2, $swimlanes[2]['id']);
+
+ $this->assertFalse($swimlaneModel->changePosition(1, 2, 0));
+ $this->assertFalse($swimlaneModel->changePosition(1, 2, 5));
+ }
+
+ public function testChangePositionWithInactiveSwimlane()
+ {
+ $projectModel = new Project($this->container);
+ $swimlaneModel = new Swimlane($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'test1')));
+ $this->assertEquals(1, $swimlaneModel->create(array('project_id' => 1, 'name' => 'Swimlane #1')));
+ $this->assertEquals(2, $swimlaneModel->create(array('project_id' => 1, 'name' => 'Swimlane #2', 'is_active' => 0)));
+ $this->assertEquals(3, $swimlaneModel->create(array('project_id' => 1, 'name' => 'Swimlane #3', 'is_active' => 0)));
+ $this->assertEquals(4, $swimlaneModel->create(array('project_id' => 1, 'name' => 'Swimlane #4')));
+
+ $swimlanes = $swimlaneModel->getAllByStatus(1);
+ $this->assertEquals(1, $swimlanes[0]['position']);
+ $this->assertEquals(1, $swimlanes[0]['id']);
+ $this->assertEquals(2, $swimlanes[1]['position']);
+ $this->assertEquals(4, $swimlanes[1]['id']);
+
+ $this->assertTrue($swimlaneModel->changePosition(1, 4, 1));
+
+ $swimlanes = $swimlaneModel->getAllByStatus(1);
+ $this->assertEquals(1, $swimlanes[0]['position']);
+ $this->assertEquals(4, $swimlanes[0]['id']);
+ $this->assertEquals(2, $swimlanes[1]['position']);
+ $this->assertEquals(1, $swimlanes[1]['id']);
+ }
}
diff --git a/tests/units/Model/TaskCreationTest.php b/tests/units/Model/TaskCreationTest.php
index 19b3b0d1..04d23930 100644
--- a/tests/units/Model/TaskCreationTest.php
+++ b/tests/units/Model/TaskCreationTest.php
@@ -6,7 +6,6 @@ use Kanboard\Model\Config;
use Kanboard\Model\Task;
use Kanboard\Model\TaskCreation;
use Kanboard\Model\TaskFinder;
-use Kanboard\Model\TaskStatus;
use Kanboard\Model\Project;
class TaskCreationTest extends Base
@@ -295,7 +294,7 @@ class TaskCreationTest extends Base
$task = $tf->getById(2);
$this->assertNotEmpty($task);
$this->assertEquals(2, $task['id']);
- $this->assertEquals($timestamp, $task['date_due']);
+ $this->assertEquals(date('Y-m-d 00:00', $timestamp), date('Y-m-d 00:00', $task['date_due']));
$task = $tf->getById(3);
$this->assertEquals(3, $task['id']);
@@ -422,6 +421,6 @@ class TaskCreationTest extends Base
$task = $tf->getById(1);
$this->assertNotEmpty($task);
- $this->assertEquals('2050-01-10 12:30', date('Y-m-d H:i', $task['date_due']));
+ $this->assertEquals('2050-01-10 00:00', date('Y-m-d H:i', $task['date_due']));
}
}
diff --git a/tests/units/Model/TaskDuplicationTest.php b/tests/units/Model/TaskDuplicationTest.php
index 798b3835..c4b36e45 100644
--- a/tests/units/Model/TaskDuplicationTest.php
+++ b/tests/units/Model/TaskDuplicationTest.php
@@ -2,11 +2,11 @@
require_once __DIR__.'/../Base.php';
+use Kanboard\Core\DateParser;
use Kanboard\Model\Task;
use Kanboard\Model\TaskCreation;
use Kanboard\Model\TaskDuplication;
use Kanboard\Model\TaskFinder;
-use Kanboard\Model\TaskStatus;
use Kanboard\Model\Project;
use Kanboard\Model\ProjectUserRole;
use Kanboard\Model\Category;
@@ -57,8 +57,8 @@ class TaskDuplicationTest extends Base
// Some categories
$this->assertNotFalse($c->create(array('name' => 'Category #1', 'project_id' => 1)));
$this->assertNotFalse($c->create(array('name' => 'Category #2', 'project_id' => 1)));
- $this->assertTrue($c->exists(1, 1));
- $this->assertTrue($c->exists(2, 1));
+ $this->assertTrue($c->exists(1));
+ $this->assertTrue($c->exists(2));
$this->assertEquals(
1,
@@ -110,7 +110,7 @@ class TaskDuplicationTest extends Base
$this->assertEquals(2, $p->create(array('name' => 'test2')));
$this->assertNotFalse($c->create(array('name' => 'Category #1', 'project_id' => 1)));
- $this->assertTrue($c->exists(1, 1));
+ $this->assertTrue($c->exists(1));
// We create a task
$this->assertEquals(1, $tc->create(array('title' => 'test', 'project_id' => 1, 'column_id' => 2, 'owner_id' => 1, 'category_id' => 1)));
@@ -151,8 +151,8 @@ class TaskDuplicationTest extends Base
$this->assertNotFalse($c->create(array('name' => 'Category #1', 'project_id' => 1)));
$this->assertNotFalse($c->create(array('name' => 'Category #1', 'project_id' => 2)));
- $this->assertTrue($c->exists(1, 1));
- $this->assertTrue($c->exists(2, 2));
+ $this->assertTrue($c->exists(1));
+ $this->assertTrue($c->exists(2));
// We create a task
$this->assertEquals(1, $tc->create(array('title' => 'test', 'project_id' => 1, 'column_id' => 2, 'category_id' => 1)));
@@ -187,9 +187,9 @@ class TaskDuplicationTest extends Base
$this->assertNotFalse($c->create(array('name' => 'Category #1', 'project_id' => 1)));
$this->assertNotFalse($c->create(array('name' => 'Category #1', 'project_id' => 2)));
$this->assertNotFalse($c->create(array('name' => 'Category #2', 'project_id' => 2)));
- $this->assertTrue($c->exists(1, 1));
- $this->assertTrue($c->exists(2, 2));
- $this->assertTrue($c->exists(3, 2));
+ $this->assertTrue($c->exists(1));
+ $this->assertTrue($c->exists(2));
+ $this->assertTrue($c->exists(3));
// We create a task
$this->assertEquals(1, $tc->create(array('title' => 'test', 'project_id' => 1, 'column_id' => 2, 'category_id' => 1)));
@@ -468,8 +468,8 @@ class TaskDuplicationTest extends Base
$this->assertNotFalse($c->create(array('name' => 'Category #1', 'project_id' => 1)));
$this->assertNotFalse($c->create(array('name' => 'Category #1', 'project_id' => 2)));
- $this->assertTrue($c->exists(1, 1));
- $this->assertTrue($c->exists(2, 2));
+ $this->assertTrue($c->exists(1));
+ $this->assertTrue($c->exists(2));
// We create a task
$this->assertEquals(1, $tc->create(array('title' => 'test', 'project_id' => 1, 'column_id' => 2, 'category_id' => 1)));
@@ -665,6 +665,7 @@ class TaskDuplicationTest extends Base
$tf = new TaskFinder($this->container);
$p = new Project($this->container);
$c = new Category($this->container);
+ $dp = new DateParser($this->container);
$this->assertEquals(1, $p->create(array('name' => 'test1')));
@@ -685,7 +686,7 @@ class TaskDuplicationTest extends Base
$this->assertNotEmpty($task);
$this->assertEquals(Task::RECURRING_STATUS_PROCESSED, $task['recurrence_status']);
$this->assertEquals(2, $task['recurrence_child']);
- $this->assertEquals(1436561776, $task['date_due'], '', 2);
+ $this->assertEquals(1436486400, $task['date_due'], '', 2);
$task = $tf->getById(2);
$this->assertNotEmpty($task);
@@ -695,6 +696,6 @@ class TaskDuplicationTest extends Base
$this->assertEquals(Task::RECURRING_BASEDATE_TRIGGERDATE, $task['recurrence_basedate']);
$this->assertEquals(1, $task['recurrence_parent']);
$this->assertEquals(2, $task['recurrence_factor']);
- $this->assertEquals(strtotime('+2 days'), $task['date_due'], '', 2);
+ $this->assertEquals($dp->removeTimeFromTimestamp(strtotime('+2 days')), $task['date_due'], '', 2);
}
}
diff --git a/tests/units/Model/TaskExternalLinkTest.php b/tests/units/Model/TaskExternalLinkTest.php
new file mode 100644
index 00000000..28ccab83
--- /dev/null
+++ b/tests/units/Model/TaskExternalLinkTest.php
@@ -0,0 +1,123 @@
+<?php
+
+require_once __DIR__.'/../Base.php';
+
+use Kanboard\Model\TaskCreation;
+use Kanboard\Model\Project;
+use Kanboard\Model\TaskExternalLink;
+use Kanboard\Core\ExternalLink\ExternalLinkManager;
+use Kanboard\ExternalLink\WebLinkProvider;
+
+class TaskExternalLinkTest extends Base
+{
+ public function testCreate()
+ {
+ $projectModel = new Project($this->container);
+ $taskCreationModel = new TaskCreation($this->container);
+ $taskExternalLinkModel = new TaskExternalLink($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'Test')));
+ $this->assertEquals(1, $taskCreationModel->create(array('title' => 'Test', 'project_id' => 1)));
+ $this->assertEquals(1, $taskExternalLinkModel->create(array('task_id' => 1, 'id' => '', 'url' => 'http://kanboard.net/', 'title' => 'My website', 'link_type' => 'weblink', 'dependency' => 'related')));
+
+ $link = $taskExternalLinkModel->getById(1);
+ $this->assertNotEmpty($link);
+ $this->assertEquals('My website', $link['title']);
+ $this->assertEquals('http://kanboard.net/', $link['url']);
+ $this->assertEquals('related', $link['dependency']);
+ $this->assertEquals('weblink', $link['link_type']);
+ $this->assertEquals(0, $link['creator_id']);
+ $this->assertEquals(time(), $link['date_modification'], '', 2);
+ $this->assertEquals(time(), $link['date_creation'], '', 2);
+ }
+
+ public function testCreateWithUserSession()
+ {
+ $this->container['sessionStorage']->user = array('id' => 1);
+
+ $projectModel = new Project($this->container);
+ $taskCreationModel = new TaskCreation($this->container);
+ $taskExternalLinkModel = new TaskExternalLink($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'Test')));
+ $this->assertEquals(1, $taskCreationModel->create(array('title' => 'Test', 'project_id' => 1)));
+ $this->assertEquals(1, $taskExternalLinkModel->create(array('task_id' => 1, 'id' => '', 'url' => 'http://kanboard.net/', 'title' => 'My website', 'link_type' => 'weblink', 'dependency' => 'related')));
+
+ $link = $taskExternalLinkModel->getById(1);
+ $this->assertNotEmpty($link);
+ $this->assertEquals('My website', $link['title']);
+ $this->assertEquals('http://kanboard.net/', $link['url']);
+ $this->assertEquals('related', $link['dependency']);
+ $this->assertEquals('weblink', $link['link_type']);
+ $this->assertEquals(1, $link['creator_id']);
+ $this->assertEquals(time(), $link['date_modification'], '', 2);
+ $this->assertEquals(time(), $link['date_creation'], '', 2);
+ }
+
+ public function testModification()
+ {
+ $projectModel = new Project($this->container);
+ $taskCreationModel = new TaskCreation($this->container);
+ $taskExternalLinkModel = new TaskExternalLink($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'Test')));
+ $this->assertEquals(1, $taskCreationModel->create(array('title' => 'Test', 'project_id' => 1)));
+ $this->assertEquals(1, $taskExternalLinkModel->create(array('task_id' => 1, 'id' => '', 'url' => 'http://kanboard.net/', 'title' => 'My website', 'link_type' => 'weblink', 'dependency' => 'related')));
+
+ sleep(1);
+
+ $this->assertTrue($taskExternalLinkModel->update(array('id' => 1, 'url' => 'https://kanboard.net/')));
+
+ $link = $taskExternalLinkModel->getById(1);
+ $this->assertNotEmpty($link);
+ $this->assertEquals('https://kanboard.net/', $link['url']);
+ $this->assertEquals(time(), $link['date_modification'], '', 2);
+ }
+
+ public function testRemove()
+ {
+ $projectModel = new Project($this->container);
+ $taskCreationModel = new TaskCreation($this->container);
+ $taskExternalLinkModel = new TaskExternalLink($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'Test')));
+ $this->assertEquals(1, $taskCreationModel->create(array('title' => 'Test', 'project_id' => 1)));
+ $this->assertEquals(1, $taskExternalLinkModel->create(array('task_id' => 1, 'id' => '', 'url' => 'http://kanboard.net/', 'title' => 'My website', 'link_type' => 'weblink', 'dependency' => 'related')));
+
+ $this->assertTrue($taskExternalLinkModel->remove(1));
+ $this->assertFalse($taskExternalLinkModel->remove(1));
+
+ $this->assertEmpty($taskExternalLinkModel->getById(1));
+ }
+
+ public function testGetAll()
+ {
+ $this->container['sessionStorage']->user = array('id' => 1);
+ $this->container['externalLinkManager'] = new ExternalLinkManager($this->container);
+
+ $projectModel = new Project($this->container);
+ $taskCreationModel = new TaskCreation($this->container);
+ $taskExternalLinkModel = new TaskExternalLink($this->container);
+ $webLinkProvider = new WebLinkProvider($this->container);
+
+ $this->container['externalLinkManager']->register($webLinkProvider);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'Test')));
+ $this->assertEquals(1, $taskCreationModel->create(array('title' => 'Test', 'project_id' => 1)));
+ $this->assertEquals(1, $taskExternalLinkModel->create(array('task_id' => 1, 'url' => 'https://miniflux.net/', 'title' => 'MX', 'link_type' => 'weblink', 'dependency' => 'related')));
+ $this->assertEquals(2, $taskExternalLinkModel->create(array('task_id' => 1, 'url' => 'http://kanboard.net/', 'title' => 'KB', 'link_type' => 'weblink', 'dependency' => 'related')));
+
+ $links = $taskExternalLinkModel->getAll(1);
+ $this->assertCount(2, $links);
+ $this->assertEquals('KB', $links[0]['title']);
+ $this->assertEquals('MX', $links[1]['title']);
+ $this->assertEquals('Web Link', $links[0]['type']);
+ $this->assertEquals('Web Link', $links[1]['type']);
+ $this->assertEquals('Related', $links[0]['dependency_label']);
+ $this->assertEquals('Related', $links[1]['dependency_label']);
+ $this->assertEquals('admin', $links[0]['creator_username']);
+ $this->assertEquals('admin', $links[1]['creator_username']);
+ $this->assertEquals('', $links[0]['creator_name']);
+ $this->assertEquals('', $links[1]['creator_name']);
+ }
+}
diff --git a/tests/units/Model/TaskFileTest.php b/tests/units/Model/TaskFileTest.php
new file mode 100644
index 00000000..b900e8f3
--- /dev/null
+++ b/tests/units/Model/TaskFileTest.php
@@ -0,0 +1,445 @@
+<?php
+
+require_once __DIR__.'/../Base.php';
+
+use Kanboard\Model\TaskFile;
+use Kanboard\Model\TaskCreation;
+use Kanboard\Model\Project;
+
+class TaskFileTest extends Base
+{
+ public function testCreation()
+ {
+ $projectModel = new Project($this->container);
+ $fileModel = new TaskFile($this->container);
+ $taskCreationModel = new TaskCreation($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'test')));
+ $this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));
+
+ $this->assertEquals(1, $fileModel->create(1, 'test', '/tmp/foo', 10));
+
+ $file = $fileModel->getById(1);
+ $this->assertEquals('test', $file['name']);
+ $this->assertEquals('/tmp/foo', $file['path']);
+ $this->assertEquals(0, $file['is_image']);
+ $this->assertEquals(1, $file['task_id']);
+ $this->assertEquals(time(), $file['date'], '', 2);
+ $this->assertEquals(0, $file['user_id']);
+ $this->assertEquals(10, $file['size']);
+
+ $this->assertEquals(2, $fileModel->create(1, 'test2.png', '/tmp/foobar', 10));
+
+ $file = $fileModel->getById(2);
+ $this->assertEquals('test2.png', $file['name']);
+ $this->assertEquals('/tmp/foobar', $file['path']);
+ $this->assertEquals(1, $file['is_image']);
+ }
+
+ public function testCreationWithFileNameTooLong()
+ {
+ $projectModel = new Project($this->container);
+ $fileModel = new TaskFile($this->container);
+ $taskCreationModel = new TaskCreation($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'test')));
+ $this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));
+
+ $this->assertNotFalse($fileModel->create(1, 'test', '/tmp/foo', 10));
+ $this->assertNotFalse($fileModel->create(1, str_repeat('a', 1000), '/tmp/foo', 10));
+
+ $files = $fileModel->getAll(1);
+ $this->assertNotEmpty($files);
+ $this->assertCount(2, $files);
+
+ $this->assertEquals(str_repeat('a', 255), $files[0]['name']);
+ $this->assertEquals('test', $files[1]['name']);
+ }
+
+ public function testCreationWithSessionOpen()
+ {
+ $this->container['sessionStorage']->user = array('id' => 1);
+
+ $projectModel = new Project($this->container);
+ $fileModel = new TaskFile($this->container);
+ $taskCreationModel = new TaskCreation($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'test')));
+ $this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));
+ $this->assertEquals(1, $fileModel->create(1, 'test', '/tmp/foo', 10));
+
+ $file = $fileModel->getById(1);
+ $this->assertEquals('test', $file['name']);
+ $this->assertEquals(1, $file['user_id']);
+ }
+
+ public function testGetAll()
+ {
+ $projectModel = new Project($this->container);
+ $fileModel = new TaskFile($this->container);
+ $taskCreationModel = new TaskCreation($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'test')));
+ $this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));
+
+ $this->assertEquals(1, $fileModel->create(1, 'B.pdf', '/tmp/foo', 10));
+ $this->assertEquals(2, $fileModel->create(1, 'A.png', '/tmp/foo', 10));
+ $this->assertEquals(3, $fileModel->create(1, 'D.doc', '/tmp/foo', 10));
+ $this->assertEquals(4, $fileModel->create(1, 'C.JPG', '/tmp/foo', 10));
+
+ $fileModeliles = $fileModel->getAll(1);
+ $this->assertNotEmpty($fileModeliles);
+ $this->assertCount(4, $fileModeliles);
+ $this->assertEquals('A.png', $fileModeliles[0]['name']);
+ $this->assertEquals('B.pdf', $fileModeliles[1]['name']);
+ $this->assertEquals('C.JPG', $fileModeliles[2]['name']);
+ $this->assertEquals('D.doc', $fileModeliles[3]['name']);
+
+ $fileModeliles = $fileModel->getAllImages(1);
+ $this->assertNotEmpty($fileModeliles);
+ $this->assertCount(2, $fileModeliles);
+ $this->assertEquals('A.png', $fileModeliles[0]['name']);
+ $this->assertEquals('C.JPG', $fileModeliles[1]['name']);
+
+ $fileModeliles = $fileModel->getAllDocuments(1);
+ $this->assertNotEmpty($fileModeliles);
+ $this->assertCount(2, $fileModeliles);
+ $this->assertEquals('B.pdf', $fileModeliles[0]['name']);
+ $this->assertEquals('D.doc', $fileModeliles[1]['name']);
+ }
+
+ public function testIsImage()
+ {
+ $fileModel = new TaskFile($this->container);
+
+ $this->assertTrue($fileModel->isImage('test.png'));
+ $this->assertTrue($fileModel->isImage('test.jpeg'));
+ $this->assertTrue($fileModel->isImage('test.gif'));
+ $this->assertTrue($fileModel->isImage('test.jpg'));
+ $this->assertTrue($fileModel->isImage('test.JPG'));
+
+ $this->assertFalse($fileModel->isImage('test.bmp'));
+ $this->assertFalse($fileModel->isImage('test'));
+ $this->assertFalse($fileModel->isImage('test.pdf'));
+ }
+
+ public function testGetThumbnailPath()
+ {
+ $fileModel = new TaskFile($this->container);
+ $this->assertEquals('thumbnails'.DIRECTORY_SEPARATOR.'test', $fileModel->getThumbnailPath('test'));
+ }
+
+ public function testGeneratePath()
+ {
+ $fileModel = new TaskFile($this->container);
+
+ $this->assertStringStartsWith('tasks'.DIRECTORY_SEPARATOR.'34'.DIRECTORY_SEPARATOR, $fileModel->generatePath(34, 'test.png'));
+ $this->assertNotEquals($fileModel->generatePath(34, 'test1.png'), $fileModel->generatePath(34, 'test2.png'));
+ }
+
+ public function testUploadFiles()
+ {
+ $fileModel = $this
+ ->getMockBuilder('\Kanboard\Model\TaskFile')
+ ->setConstructorArgs(array($this->container))
+ ->setMethods(array('generateThumbnailFromFile'))
+ ->getMock();
+
+ $projectModel = new Project($this->container);
+ $taskCreationModel = new TaskCreation($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'test')));
+ $this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));
+
+ $files = array(
+ 'name' => array(
+ 'file1.png',
+ 'file2.doc',
+ ),
+ 'tmp_name' => array(
+ '/tmp/phpYzdqkD',
+ '/tmp/phpeEwEWG',
+ ),
+ 'error' => array(
+ UPLOAD_ERR_OK,
+ UPLOAD_ERR_OK,
+ ),
+ 'size' => array(
+ 123,
+ 456,
+ ),
+ );
+
+ $fileModel
+ ->expects($this->once())
+ ->method('generateThumbnailFromFile');
+
+ $this->container['objectStorage']
+ ->expects($this->at(0))
+ ->method('moveUploadedFile')
+ ->with($this->equalTo('/tmp/phpYzdqkD'), $this->anything());
+
+ $this->container['objectStorage']
+ ->expects($this->at(1))
+ ->method('moveUploadedFile')
+ ->with($this->equalTo('/tmp/phpeEwEWG'), $this->anything());
+
+ $this->assertTrue($fileModel->uploadFiles(1, $files));
+
+ $files = $fileModel->getAll(1);
+ $this->assertCount(2, $files);
+
+ $this->assertEquals(1, $files[0]['id']);
+ $this->assertEquals('file1.png', $files[0]['name']);
+ $this->assertEquals(1, $files[0]['is_image']);
+ $this->assertEquals(1, $files[0]['task_id']);
+ $this->assertEquals(0, $files[0]['user_id']);
+ $this->assertEquals(123, $files[0]['size']);
+ $this->assertEquals(time(), $files[0]['date'], '', 2);
+
+ $this->assertEquals(2, $files[1]['id']);
+ $this->assertEquals('file2.doc', $files[1]['name']);
+ $this->assertEquals(0, $files[1]['is_image']);
+ $this->assertEquals(1, $files[1]['task_id']);
+ $this->assertEquals(0, $files[1]['user_id']);
+ $this->assertEquals(456, $files[1]['size']);
+ $this->assertEquals(time(), $files[1]['date'], '', 2);
+ }
+
+ public function testUploadFilesWithEmptyFiles()
+ {
+ $fileModel = new TaskFile($this->container);
+ $this->assertFalse($fileModel->uploadFiles(1, array()));
+ }
+
+ public function testUploadFilesWithUploadError()
+ {
+ $files = array(
+ 'name' => array(
+ 'file1.png',
+ 'file2.doc',
+ ),
+ 'tmp_name' => array(
+ '',
+ '/tmp/phpeEwEWG',
+ ),
+ 'error' => array(
+ UPLOAD_ERR_CANT_WRITE,
+ UPLOAD_ERR_OK,
+ ),
+ 'size' => array(
+ 123,
+ 456,
+ ),
+ );
+
+ $fileModel = new TaskFile($this->container);
+ $this->assertFalse($fileModel->uploadFiles(1, $files));
+ }
+
+ public function testUploadFilesWithObjectStorageError()
+ {
+ $files = array(
+ 'name' => array(
+ 'file1.csv',
+ 'file2.doc',
+ ),
+ 'tmp_name' => array(
+ '/tmp/phpYzdqkD',
+ '/tmp/phpeEwEWG',
+ ),
+ 'error' => array(
+ UPLOAD_ERR_OK,
+ UPLOAD_ERR_OK,
+ ),
+ 'size' => array(
+ 123,
+ 456,
+ ),
+ );
+
+ $this->container['objectStorage']
+ ->expects($this->at(0))
+ ->method('moveUploadedFile')
+ ->with($this->equalTo('/tmp/phpYzdqkD'), $this->anything())
+ ->will($this->throwException(new \Kanboard\Core\ObjectStorage\ObjectStorageException('test')));
+
+ $fileModel = new TaskFile($this->container);
+ $this->assertFalse($fileModel->uploadFiles(1, $files));
+ }
+
+ public function testUploadFileContent()
+ {
+ $fileModel = $this
+ ->getMockBuilder('\Kanboard\Model\TaskFile')
+ ->setConstructorArgs(array($this->container))
+ ->setMethods(array('generateThumbnailFromFile'))
+ ->getMock();
+
+ $projectModel = new Project($this->container);
+ $taskCreationModel = new TaskCreation($this->container);
+ $data = 'test';
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'test')));
+ $this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));
+
+ $this->container['objectStorage']
+ ->expects($this->once())
+ ->method('put')
+ ->with($this->anything(), $this->equalTo($data));
+
+ $this->assertEquals(1, $fileModel->uploadContent(1, 'test.doc', base64_encode($data)));
+
+ $files = $fileModel->getAll(1);
+ $this->assertCount(1, $files);
+
+ $this->assertEquals(1, $files[0]['id']);
+ $this->assertEquals('test.doc', $files[0]['name']);
+ $this->assertEquals(0, $files[0]['is_image']);
+ $this->assertEquals(1, $files[0]['task_id']);
+ $this->assertEquals(0, $files[0]['user_id']);
+ $this->assertEquals(4, $files[0]['size']);
+ $this->assertEquals(time(), $files[0]['date'], '', 2);
+ }
+
+ public function testUploadFileContentWithObjectStorageError()
+ {
+ $fileModel = $this
+ ->getMockBuilder('\Kanboard\Model\TaskFile')
+ ->setConstructorArgs(array($this->container))
+ ->setMethods(array('generateThumbnailFromFile'))
+ ->getMock();
+
+ $projectModel = new Project($this->container);
+ $taskCreationModel = new TaskCreation($this->container);
+ $data = 'test';
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'test')));
+ $this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));
+
+ $this->container['objectStorage']
+ ->expects($this->once())
+ ->method('put')
+ ->with($this->anything(), $this->equalTo($data))
+ ->will($this->throwException(new \Kanboard\Core\ObjectStorage\ObjectStorageException('test')));
+
+ $this->assertFalse($fileModel->uploadContent(1, 'test.doc', base64_encode($data)));
+ }
+
+ public function testUploadScreenshot()
+ {
+ $fileModel = $this
+ ->getMockBuilder('\Kanboard\Model\TaskFile')
+ ->setConstructorArgs(array($this->container))
+ ->setMethods(array('generateThumbnailFromFile'))
+ ->getMock();
+
+ $projectModel = new Project($this->container);
+ $taskCreationModel = new TaskCreation($this->container);
+ $data = 'test';
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'test')));
+ $this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));
+
+ $fileModel
+ ->expects($this->once())
+ ->method('generateThumbnailFromFile');
+
+ $this->container['objectStorage']
+ ->expects($this->once())
+ ->method('put')
+ ->with($this->anything(), $this->equalTo($data));
+
+ $this->assertEquals(1, $fileModel->uploadScreenshot(1, base64_encode($data)));
+
+ $files = $fileModel->getAll(1);
+ $this->assertCount(1, $files);
+
+ $this->assertEquals(1, $files[0]['id']);
+ $this->assertStringStartsWith('Screenshot taken ', $files[0]['name']);
+ $this->assertEquals(1, $files[0]['is_image']);
+ $this->assertEquals(1, $files[0]['task_id']);
+ $this->assertEquals(0, $files[0]['user_id']);
+ $this->assertEquals(4, $files[0]['size']);
+ $this->assertEquals(time(), $files[0]['date'], '', 2);
+ }
+
+ public function testRemove()
+ {
+ $fileModel = new TaskFile($this->container);
+ $projectModel = new Project($this->container);
+ $taskCreationModel = new TaskCreation($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'test')));
+ $this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));
+ $this->assertEquals(1, $fileModel->create(1, 'test', 'tmp/foo', 10));
+
+ $this->container['objectStorage']
+ ->expects($this->once())
+ ->method('remove')
+ ->with('tmp/foo');
+
+ $this->assertTrue($fileModel->remove(1));
+ }
+
+ public function testRemoveWithObjectStorageError()
+ {
+ $fileModel = new TaskFile($this->container);
+ $projectModel = new Project($this->container);
+ $taskCreationModel = new TaskCreation($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'test')));
+ $this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));
+ $this->assertEquals(1, $fileModel->create(1, 'test', 'tmp/foo', 10));
+
+ $this->container['objectStorage']
+ ->expects($this->once())
+ ->method('remove')
+ ->with('tmp/foo')
+ ->will($this->throwException(new \Kanboard\Core\ObjectStorage\ObjectStorageException('test')));
+
+ $this->assertFalse($fileModel->remove(1));
+ }
+
+ public function testRemoveImage()
+ {
+ $fileModel = new TaskFile($this->container);
+ $projectModel = new Project($this->container);
+ $taskCreationModel = new TaskCreation($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'test')));
+ $this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));
+ $this->assertEquals(1, $fileModel->create(1, 'image.gif', 'tmp/image.gif', 10));
+
+ $this->container['objectStorage']
+ ->expects($this->at(0))
+ ->method('remove')
+ ->with('tmp/image.gif');
+
+ $this->container['objectStorage']
+ ->expects($this->at(1))
+ ->method('remove')
+ ->with('thumbnails'.DIRECTORY_SEPARATOR.'tmp/image.gif');
+
+ $this->assertTrue($fileModel->remove(1));
+ }
+
+ public function testRemoveAll()
+ {
+ $fileModel = new TaskFile($this->container);
+ $projectModel = new Project($this->container);
+ $taskCreationModel = new TaskCreation($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'test')));
+ $this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));
+ $this->assertEquals(1, $fileModel->create(1, 'test', 'tmp/foo', 10));
+ $this->assertEquals(2, $fileModel->create(1, 'test', 'tmp/foo', 10));
+
+ $this->container['objectStorage']
+ ->expects($this->exactly(2))
+ ->method('remove')
+ ->with('tmp/foo');
+
+ $this->assertTrue($fileModel->removeAll(1));
+ }
+}
diff --git a/tests/units/Model/TaskFilterTest.php b/tests/units/Model/TaskFilterTest.php
index daa193b2..9e291c31 100644
--- a/tests/units/Model/TaskFilterTest.php
+++ b/tests/units/Model/TaskFilterTest.php
@@ -10,7 +10,6 @@ use Kanboard\Model\TaskLink;
use Kanboard\Core\DateParser;
use Kanboard\Model\Category;
use Kanboard\Model\Subtask;
-use Kanboard\Model\Config;
use Kanboard\Model\Swimlane;
class TaskFilterTest extends Base
diff --git a/tests/units/Model/TaskFinderTest.php b/tests/units/Model/TaskFinderTest.php
index b21a4ea3..0ed211ed 100644
--- a/tests/units/Model/TaskFinderTest.php
+++ b/tests/units/Model/TaskFinderTest.php
@@ -2,12 +2,9 @@
require_once __DIR__.'/../Base.php';
-use Kanboard\Model\Task;
use Kanboard\Model\TaskCreation;
use Kanboard\Model\TaskFinder;
use Kanboard\Model\Project;
-use Kanboard\Model\Category;
-use Kanboard\Model\User;
class TaskFinderTest extends Base
{
diff --git a/tests/units/Model/TaskLinkTest.php b/tests/units/Model/TaskLinkTest.php
index 192a4298..8dd71830 100644
--- a/tests/units/Model/TaskLinkTest.php
+++ b/tests/units/Model/TaskLinkTest.php
@@ -2,7 +2,6 @@
require_once __DIR__.'/../Base.php';
-use Kanboard\Model\Link;
use Kanboard\Model\TaskFinder;
use Kanboard\Model\TaskLink;
use Kanboard\Model\TaskCreation;
diff --git a/tests/units/Model/TaskModificationTest.php b/tests/units/Model/TaskModificationTest.php
index 119201f0..315125d5 100644
--- a/tests/units/Model/TaskModificationTest.php
+++ b/tests/units/Model/TaskModificationTest.php
@@ -6,7 +6,6 @@ use Kanboard\Model\Task;
use Kanboard\Model\TaskCreation;
use Kanboard\Model\TaskModification;
use Kanboard\Model\TaskFinder;
-use Kanboard\Model\TaskStatus;
use Kanboard\Model\Project;
class TaskModificationTest extends Base
diff --git a/tests/units/Model/TaskPermissionTest.php b/tests/units/Model/TaskPermissionTest.php
index 0b093bbb..82cd581e 100644
--- a/tests/units/Model/TaskPermissionTest.php
+++ b/tests/units/Model/TaskPermissionTest.php
@@ -2,12 +2,10 @@
require_once __DIR__.'/../Base.php';
-use Kanboard\Model\Task;
use Kanboard\Model\TaskCreation;
use Kanboard\Model\TaskFinder;
use Kanboard\Model\TaskPermission;
use Kanboard\Model\Project;
-use Kanboard\Model\Category;
use Kanboard\Model\User;
use Kanboard\Core\User\UserSession;
diff --git a/tests/units/Model/TaskPositionTest.php b/tests/units/Model/TaskPositionTest.php
index 5f045768..28145a66 100644
--- a/tests/units/Model/TaskPositionTest.php
+++ b/tests/units/Model/TaskPositionTest.php
@@ -3,7 +3,7 @@
require_once __DIR__.'/../Base.php';
use Kanboard\Model\Task;
-use Kanboard\Model\Board;
+use Kanboard\Model\Column;
use Kanboard\Model\TaskStatus;
use Kanboard\Model\TaskPosition;
use Kanboard\Model\TaskCreation;
@@ -21,23 +21,23 @@ class TaskPositionTest extends Base
$tc = new TaskCreation($this->container);
$tf = new TaskFinder($this->container);
$p = new Project($this->container);
- $b = new Board($this->container);
+ $columnModel = new Column($this->container);
$this->assertEquals(1, $p->create(array('name' => 'Project #1')));
$this->assertEquals(1, $tc->create(array('title' => 'Task #1', 'project_id' => 1, 'column_id' => 1)));
- $this->assertEquals(0, $t->getProgress($tf->getById(1), $b->getColumnsList(1)));
+ $this->assertEquals(0, $t->getProgress($tf->getById(1), $columnModel->getList(1)));
$this->assertTrue($tp->movePosition(1, 1, 2, 1));
- $this->assertEquals(25, $t->getProgress($tf->getById(1), $b->getColumnsList(1)));
+ $this->assertEquals(25, $t->getProgress($tf->getById(1), $columnModel->getList(1)));
$this->assertTrue($tp->movePosition(1, 1, 3, 1));
- $this->assertEquals(50, $t->getProgress($tf->getById(1), $b->getColumnsList(1)));
+ $this->assertEquals(50, $t->getProgress($tf->getById(1), $columnModel->getList(1)));
$this->assertTrue($tp->movePosition(1, 1, 4, 1));
- $this->assertEquals(75, $t->getProgress($tf->getById(1), $b->getColumnsList(1)));
+ $this->assertEquals(75, $t->getProgress($tf->getById(1), $columnModel->getList(1)));
$this->assertTrue($ts->close(1));
- $this->assertEquals(100, $t->getProgress($tf->getById(1), $b->getColumnsList(1)));
+ $this->assertEquals(100, $t->getProgress($tf->getById(1), $columnModel->getList(1)));
}
public function testMoveTaskToWrongPosition()
diff --git a/tests/units/Model/TransitionTest.php b/tests/units/Model/TransitionTest.php
new file mode 100644
index 00000000..0c262e78
--- /dev/null
+++ b/tests/units/Model/TransitionTest.php
@@ -0,0 +1,141 @@
+<?php
+
+require_once __DIR__.'/../Base.php';
+
+use Kanboard\Model\TaskCreation;
+use Kanboard\Model\Transition;
+use Kanboard\Model\Project;
+
+class TransitionTest extends Base
+{
+ public function testSave()
+ {
+ $projectModel = new Project($this->container);
+ $taskCreationModel = new TaskCreation($this->container);
+ $transitionModel = new Transition($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'test')));
+ $this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));
+
+ $task_event = array(
+ 'project_id' => 1,
+ 'task_id' => 1,
+ 'src_column_id' => 1,
+ 'dst_column_id' => 2,
+ 'date_moved' => time() - 3600
+ );
+
+ $this->assertTrue($transitionModel->save(1, $task_event));
+
+ $transitions = $transitionModel->getAllByTask(1);
+ $this->assertCount(1, $transitions);
+ $this->assertEquals('Backlog', $transitions[0]['src_column']);
+ $this->assertEquals('Ready', $transitions[0]['dst_column']);
+ $this->assertEquals('', $transitions[0]['name']);
+ $this->assertEquals('admin', $transitions[0]['username']);
+ $this->assertEquals(1, $transitions[0]['user_id']);
+ $this->assertEquals(time(), $transitions[0]['date'], '', 3);
+ $this->assertEquals(3600, $transitions[0]['time_spent']);
+ }
+
+ public function testGetTimeSpentByTask()
+ {
+ $projectModel = new Project($this->container);
+ $taskCreationModel = new TaskCreation($this->container);
+ $transitionModel = new Transition($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'test')));
+ $this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));
+
+ $task_event = array(
+ 'project_id' => 1,
+ 'task_id' => 1,
+ 'src_column_id' => 1,
+ 'dst_column_id' => 2,
+ 'date_moved' => time() - 3600
+ );
+
+ $this->assertTrue($transitionModel->save(1, $task_event));
+
+ $task_event = array(
+ 'project_id' => 1,
+ 'task_id' => 1,
+ 'src_column_id' => 2,
+ 'dst_column_id' => 3,
+ 'date_moved' => time() - 1200
+ );
+
+ $this->assertTrue($transitionModel->save(1, $task_event));
+
+ $expected = array(
+ '1' => 3600,
+ '2' => 1200,
+ );
+
+ $this->assertEquals($expected, $transitionModel->getTimeSpentByTask(1));
+ }
+
+ public function testGetAllByProject()
+ {
+ $projectModel = new Project($this->container);
+ $taskCreationModel = new TaskCreation($this->container);
+ $transitionModel = new Transition($this->container);
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'test')));
+ $this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test1')));
+ $this->assertEquals(2, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test2')));
+
+ $task_event = array(
+ 'project_id' => 1,
+ 'src_column_id' => 1,
+ 'dst_column_id' => 2,
+ 'date_moved' => time() - 3600
+ );
+
+ $this->assertTrue($transitionModel->save(1, array('task_id' => 1) + $task_event));
+ $this->assertTrue($transitionModel->save(1, array('task_id' => 2) + $task_event));
+
+ $task_event = array(
+ 'project_id' => 1,
+ 'src_column_id' => 2,
+ 'dst_column_id' => 3,
+ 'date_moved' => time() - 1200
+ );
+
+ $this->assertTrue($transitionModel->save(1, array('task_id' => 1) + $task_event));
+ $this->assertTrue($transitionModel->save(1, array('task_id' => 2) + $task_event));
+
+ $transitions = $transitionModel->getAllByProjectAndDate(1, date('Y-m-d'), date('Y-m-d'));
+ $this->assertCount(4, $transitions);
+
+ $this->assertEquals(2, $transitions[0]['id']);
+ $this->assertEquals(1, $transitions[1]['id']);
+ $this->assertEquals(2, $transitions[2]['id']);
+ $this->assertEquals(1, $transitions[3]['id']);
+
+ $this->assertEquals('test2', $transitions[0]['title']);
+ $this->assertEquals('test1', $transitions[1]['title']);
+ $this->assertEquals('test2', $transitions[2]['title']);
+ $this->assertEquals('test1', $transitions[3]['title']);
+
+ $this->assertEquals('Ready', $transitions[0]['src_column']);
+ $this->assertEquals('Ready', $transitions[1]['src_column']);
+ $this->assertEquals('Backlog', $transitions[2]['src_column']);
+ $this->assertEquals('Backlog', $transitions[3]['src_column']);
+
+ $this->assertEquals('Work in progress', $transitions[0]['dst_column']);
+ $this->assertEquals('Work in progress', $transitions[1]['dst_column']);
+ $this->assertEquals('Ready', $transitions[2]['dst_column']);
+ $this->assertEquals('Ready', $transitions[3]['dst_column']);
+
+ $this->assertEquals('admin', $transitions[0]['username']);
+ $this->assertEquals('admin', $transitions[1]['username']);
+ $this->assertEquals('admin', $transitions[2]['username']);
+ $this->assertEquals('admin', $transitions[3]['username']);
+
+ $this->assertEquals(1200, $transitions[0]['time_spent']);
+ $this->assertEquals(1200, $transitions[1]['time_spent']);
+ $this->assertEquals(3600, $transitions[2]['time_spent']);
+ $this->assertEquals(3600, $transitions[3]['time_spent']);
+ }
+}
diff --git a/tests/units/Model/UserNotificationTest.php b/tests/units/Model/UserNotificationTest.php
index 8168a375..53034e20 100644
--- a/tests/units/Model/UserNotificationTest.php
+++ b/tests/units/Model/UserNotificationTest.php
@@ -4,12 +4,9 @@ require_once __DIR__.'/../Base.php';
use Kanboard\Model\TaskFinder;
use Kanboard\Model\TaskCreation;
-use Kanboard\Model\Subtask;
-use Kanboard\Model\Comment;
use Kanboard\Model\User;
use Kanboard\Model\Group;
use Kanboard\Model\GroupMember;
-use Kanboard\Model\File;
use Kanboard\Model\Project;
use Kanboard\Model\ProjectPermission;
use Kanboard\Model\Task;
@@ -17,7 +14,6 @@ use Kanboard\Model\ProjectUserRole;
use Kanboard\Model\ProjectGroupRole;
use Kanboard\Model\UserNotification;
use Kanboard\Model\UserNotificationFilter;
-use Kanboard\Model\UserNotificationType;
use Kanboard\Subscriber\UserNotificationSubscriber;
use Kanboard\Core\Security\Role;
diff --git a/tests/units/Model/UserTest.php b/tests/units/Model/UserTest.php
index 0987fa56..7501f2e0 100644
--- a/tests/units/Model/UserTest.php
+++ b/tests/units/Model/UserTest.php
@@ -5,7 +5,6 @@ require_once __DIR__.'/../Base.php';
use Kanboard\Model\User;
use Kanboard\Model\Subtask;
use Kanboard\Model\Comment;
-use Kanboard\Model\Task;
use Kanboard\Model\TaskCreation;
use Kanboard\Model\TaskFinder;
use Kanboard\Model\Project;
@@ -96,13 +95,14 @@ class UserTest extends Base
$this->assertEquals('you', $users[2]['username']);
}
- public function testGetList()
+ public function testGetActiveUsersList()
{
$u = new User($this->container);
$this->assertEquals(2, $u->create(array('username' => 'you')));
$this->assertEquals(3, $u->create(array('username' => 'me', 'name' => 'Me too')));
+ $this->assertEquals(4, $u->create(array('username' => 'foobar', 'is_active' => 0)));
- $users = $u->getList();
+ $users = $u->getActiveUsersList();
$expected = array(
1 => 'admin',
@@ -112,7 +112,7 @@ class UserTest extends Base
$this->assertEquals($expected, $users);
- $users = $u->getList(true);
+ $users = $u->getActiveUsersList(true);
$expected = array(
User::EVERYBODY_ID => 'Everybody',
@@ -391,4 +391,24 @@ class UserTest extends Base
$this->assertEquals('toto', $user['username']);
$this->assertEmpty($user['token']);
}
+
+ public function testEnableDisable()
+ {
+ $userModel = new User($this->container);
+ $this->assertEquals(2, $userModel->create(array('username' => 'toto')));
+
+ $this->assertTrue($userModel->isActive(2));
+ $user = $userModel->getById(2);
+ $this->assertEquals(1, $user['is_active']);
+
+ $this->assertTrue($userModel->disable(2));
+ $user = $userModel->getById(2);
+ $this->assertEquals(0, $user['is_active']);
+ $this->assertFalse($userModel->isActive(2));
+
+ $this->assertTrue($userModel->enable(2));
+ $user = $userModel->getById(2);
+ $this->assertEquals(1, $user['is_active']);
+ $this->assertTrue($userModel->isActive(2));
+ }
}
diff --git a/tests/units/Model/UserUnreadNotificationTest.php b/tests/units/Model/UserUnreadNotificationTest.php
index bf274d95..918ab411 100644
--- a/tests/units/Model/UserUnreadNotificationTest.php
+++ b/tests/units/Model/UserUnreadNotificationTest.php
@@ -4,10 +4,7 @@ require_once __DIR__.'/../Base.php';
use Kanboard\Model\TaskFinder;
use Kanboard\Model\TaskCreation;
-use Kanboard\Model\Subtask;
-use Kanboard\Model\Comment;
use Kanboard\Model\User;
-use Kanboard\Model\File;
use Kanboard\Model\Task;
use Kanboard\Model\Project;
use Kanboard\Model\UserUnreadNotification;
diff --git a/tests/units/Notification/MailTest.php b/tests/units/Notification/MailTest.php
index 8f343ba3..7dc6aaef 100644
--- a/tests/units/Notification/MailTest.php
+++ b/tests/units/Notification/MailTest.php
@@ -7,7 +7,7 @@ use Kanboard\Model\TaskCreation;
use Kanboard\Model\Subtask;
use Kanboard\Model\Comment;
use Kanboard\Model\User;
-use Kanboard\Model\File;
+use Kanboard\Model\TaskFile;
use Kanboard\Model\Project;
use Kanboard\Model\Task;
use Kanboard\Notification\Mail;
@@ -23,7 +23,7 @@ class MailTest extends Base
$tc = new TaskCreation($this->container);
$s = new Subtask($this->container);
$c = new Comment($this->container);
- $f = new File($this->container);
+ $f = new TaskFile($this->container);
$this->assertEquals(1, $p->create(array('name' => 'test')));
$this->assertEquals(1, $tc->create(array('title' => 'test', 'project_id' => 1)));
diff --git a/tests/units/Notification/WebhookTest.php b/tests/units/Notification/WebhookTest.php
index b55cd6e2..5984f303 100644
--- a/tests/units/Notification/WebhookTest.php
+++ b/tests/units/Notification/WebhookTest.php
@@ -3,11 +3,8 @@
require_once __DIR__.'/../Base.php';
use Kanboard\Model\Config;
-use Kanboard\Model\Task;
use Kanboard\Model\TaskCreation;
-use Kanboard\Model\TaskModification;
use Kanboard\Model\Project;
-use Kanboard\Model\Comment;
use Kanboard\Subscriber\NotificationSubscriber;
class WebhookTest extends Base
@@ -21,92 +18,12 @@ class WebhookTest extends Base
$c->save(array('webhook_url' => 'http://localhost/?task-creation'));
- $this->assertEquals(1, $p->create(array('name' => 'test')));
- $this->assertEquals(1, $tc->create(array('project_id' => 1, 'title' => 'test')));
-
- $this->assertStringStartsWith('http://localhost/?task-creation&token=', $this->container['httpClient']->getUrl());
-
- $event = $this->container['httpClient']->getData();
- $this->assertNotEmpty($event);
- $this->assertArrayHasKey('event_name', $event);
- $this->assertArrayHasKey('event_data', $event);
- $this->assertEquals('task.create', $event['event_name']);
- $this->assertNotEmpty($event['event_data']);
-
- $this->assertArrayHasKey('project_id', $event['event_data']['task']);
- $this->assertArrayHasKey('id', $event['event_data']['task']);
- $this->assertArrayHasKey('title', $event['event_data']['task']);
- $this->assertArrayHasKey('column_id', $event['event_data']['task']);
- $this->assertArrayHasKey('color_id', $event['event_data']['task']);
- $this->assertArrayHasKey('swimlane_id', $event['event_data']['task']);
- $this->assertArrayHasKey('date_creation', $event['event_data']['task']);
- $this->assertArrayHasKey('date_modification', $event['event_data']['task']);
- $this->assertArrayHasKey('date_moved', $event['event_data']['task']);
- $this->assertArrayHasKey('position', $event['event_data']['task']);
- }
-
- public function testTaskModification()
- {
- $c = new Config($this->container);
- $p = new Project($this->container);
- $tc = new TaskCreation($this->container);
- $tm = new TaskModification($this->container);
- $this->container['dispatcher']->addSubscriber(new NotificationSubscriber($this->container));
-
- $c->save(array('webhook_url' => 'http://localhost/modif/'));
-
- $this->assertEquals(1, $p->create(array('name' => 'test')));
- $this->assertEquals(1, $tc->create(array('project_id' => 1, 'title' => 'test')));
- $this->assertTrue($tm->update(array('id' => 1, 'title' => 'test update')));
-
- $this->assertStringStartsWith('http://localhost/modif/?token=', $this->container['httpClient']->getUrl());
-
- $event = $this->container['httpClient']->getData();
- $this->assertNotEmpty($event);
- $this->assertArrayHasKey('event_name', $event);
- $this->assertArrayHasKey('event_data', $event);
- $this->assertEquals('task.update', $event['event_name']);
- $this->assertNotEmpty($event['event_data']);
-
- $this->assertArrayHasKey('project_id', $event['event_data']['task']);
- $this->assertArrayHasKey('id', $event['event_data']['task']);
- $this->assertArrayHasKey('title', $event['event_data']['task']);
- $this->assertArrayHasKey('column_id', $event['event_data']['task']);
- $this->assertArrayHasKey('color_id', $event['event_data']['task']);
- $this->assertArrayHasKey('swimlane_id', $event['event_data']['task']);
- $this->assertArrayHasKey('date_creation', $event['event_data']['task']);
- $this->assertArrayHasKey('date_modification', $event['event_data']['task']);
- $this->assertArrayHasKey('date_moved', $event['event_data']['task']);
- $this->assertArrayHasKey('position', $event['event_data']['task']);
- }
-
- public function testCommentCreation()
- {
- $c = new Config($this->container);
- $p = new Project($this->container);
- $tc = new TaskCreation($this->container);
- $cm = new Comment($this->container);
- $this->container['dispatcher']->addSubscriber(new NotificationSubscriber($this->container));
-
- $c->save(array('webhook_url' => 'http://localhost/comment'));
+ $this->container['httpClient']
+ ->expects($this->once())
+ ->method('postJson')
+ ->with($this->stringContains('http://localhost/?task-creation&token='), $this->anything());
$this->assertEquals(1, $p->create(array('name' => 'test')));
$this->assertEquals(1, $tc->create(array('project_id' => 1, 'title' => 'test')));
- $this->assertEquals(1, $cm->create(array('task_id' => 1, 'comment' => 'test comment', 'user_id' => 1)));
-
- $this->assertStringStartsWith('http://localhost/comment?token=', $this->container['httpClient']->getUrl());
-
- $event = $this->container['httpClient']->getData();
- $this->assertNotEmpty($event);
- $this->assertArrayHasKey('event_name', $event);
- $this->assertArrayHasKey('event_data', $event);
- $this->assertEquals('comment.create', $event['event_name']);
- $this->assertNotEmpty($event['event_data']);
-
- $this->assertArrayHasKey('task_id', $event['event_data']['comment']);
- $this->assertArrayHasKey('user_id', $event['event_data']['comment']);
- $this->assertArrayHasKey('comment', $event['event_data']['comment']);
- $this->assertArrayHasKey('id', $event['event_data']['comment']);
- $this->assertEquals('test comment', $event['event_data']['comment']['comment']);
}
}
diff --git a/tests/units/Validator/ExternalLinkValidatorTest.php b/tests/units/Validator/ExternalLinkValidatorTest.php
new file mode 100644
index 00000000..b41b779a
--- /dev/null
+++ b/tests/units/Validator/ExternalLinkValidatorTest.php
@@ -0,0 +1,63 @@
+<?php
+
+require_once __DIR__.'/../Base.php';
+
+use Kanboard\Validator\ExternalLinkValidator;
+
+class ExternalLinkValidatorTest extends Base
+{
+ public function testValidateCreation()
+ {
+ $validator = new ExternalLinkValidator($this->container);
+
+ $result = $validator->validateCreation(array('url' => 'http://somewhere', 'task_id' => 1, 'title' => 'Title', 'link_type' => 'weblink', 'dependency' => 'related'));
+ $this->assertTrue($result[0]);
+
+ $result = $validator->validateCreation(array('url' => 'http://somewhere', 'task_id' => 'abc', 'title' => 'Title', 'link_type' => 'weblink', 'dependency' => 'related'));
+ $this->assertFalse($result[0]);
+
+ $result = $validator->validateCreation(array('url' => 'http://somewhere', 'task_id' => 1, 'title' => 'Title', 'link_type' => 'weblink'));
+ $this->assertFalse($result[0]);
+
+ $result = $validator->validateCreation(array('url' => 'http://somewhere', 'task_id' => 1, 'title' => 'Title', 'dependency' => 'related'));
+ $this->assertFalse($result[0]);
+
+ $result = $validator->validateCreation(array('url' => 'http://somewhere', 'task_id' => 1, 'link_type' => 'weblink', 'dependency' => 'related'));
+ $this->assertFalse($result[0]);
+
+ $result = $validator->validateCreation(array('url' => 'http://somewhere', 'title' => 'Title', 'link_type' => 'weblink', 'dependency' => 'related'));
+ $this->assertFalse($result[0]);
+
+ $result = $validator->validateCreation(array('task_id' => 1, 'title' => 'Title', 'link_type' => 'weblink', 'dependency' => 'related'));
+ $this->assertFalse($result[0]);
+ }
+
+ public function testValidateModification()
+ {
+ $validator = new ExternalLinkValidator($this->container);
+
+ $result = $validator->validateModification(array('id' => 1, 'url' => 'http://somewhere', 'task_id' => 1, 'title' => 'Title', 'link_type' => 'weblink', 'dependency' => 'related'));
+ $this->assertTrue($result[0]);
+
+ $result = $validator->validateModification(array('id' => 1, 'url' => 'http://somewhere', 'task_id' => 'abc', 'title' => 'Title', 'link_type' => 'weblink', 'dependency' => 'related'));
+ $this->assertFalse($result[0]);
+
+ $result = $validator->validateModification(array('id' => 1, 'url' => 'http://somewhere', 'task_id' => 1, 'title' => 'Title', 'link_type' => 'weblink'));
+ $this->assertFalse($result[0]);
+
+ $result = $validator->validateModification(array('id' => 1, 'url' => 'http://somewhere', 'task_id' => 1, 'title' => 'Title', 'dependency' => 'related'));
+ $this->assertFalse($result[0]);
+
+ $result = $validator->validateModification(array('id' => 1, 'url' => 'http://somewhere', 'task_id' => 1, 'link_type' => 'weblink', 'dependency' => 'related'));
+ $this->assertFalse($result[0]);
+
+ $result = $validator->validateModification(array('id' => 1, 'url' => 'http://somewhere', 'title' => 'Title', 'link_type' => 'weblink', 'dependency' => 'related'));
+ $this->assertFalse($result[0]);
+
+ $result = $validator->validateModification(array('id' => 1, 'task_id' => 1, 'title' => 'Title', 'link_type' => 'weblink', 'dependency' => 'related'));
+ $this->assertFalse($result[0]);
+
+ $result = $validator->validateModification(array('url' => 'http://somewhere', 'task_id' => 1, 'title' => 'Title', 'link_type' => 'weblink', 'dependency' => 'related'));
+ $this->assertFalse($result[0]);
+ }
+}
diff --git a/tests/units/Validator/PasswordResetValidatorTest.php b/tests/units/Validator/PasswordResetValidatorTest.php
index 4af6c75e..d26ad422 100644
--- a/tests/units/Validator/PasswordResetValidatorTest.php
+++ b/tests/units/Validator/PasswordResetValidatorTest.php
@@ -2,7 +2,6 @@
require_once __DIR__.'/../Base.php';
-use Kanboard\Model\User;
use Kanboard\Validator\PasswordResetValidator;
class PasswordResetValidatorTest extends Base