Add unit tests for last automatic actions
This commit is contained in:
@@ -2,8 +2,6 @@
|
|||||||
|
|
||||||
namespace Kanboard\Controller;
|
namespace Kanboard\Controller;
|
||||||
|
|
||||||
use Kanboard\Model\Project as ProjectModel;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Task Duplication controller
|
* Task Duplication controller
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -193,7 +193,8 @@ class Category extends Base
|
|||||||
*/
|
*/
|
||||||
public function duplicate($src_project_id, $dst_project_id)
|
public function duplicate($src_project_id, $dst_project_id)
|
||||||
{
|
{
|
||||||
$categories = $this->db->table(self::TABLE)
|
$categories = $this->db
|
||||||
|
->table(self::TABLE)
|
||||||
->columns('name')
|
->columns('name')
|
||||||
->eq('project_id', $src_project_id)
|
->eq('project_id', $src_project_id)
|
||||||
->asc('name')
|
->asc('name')
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ class ProjectDuplication extends Base
|
|||||||
* Get list of optional models to duplicate
|
* Get list of optional models to duplicate
|
||||||
*
|
*
|
||||||
* @access public
|
* @access public
|
||||||
* @return array
|
* @return string[]
|
||||||
*/
|
*/
|
||||||
public function getOptionalSelection()
|
public function getOptionalSelection()
|
||||||
{
|
{
|
||||||
@@ -28,7 +28,7 @@ class ProjectDuplication extends Base
|
|||||||
* Get list of all possible models to duplicate
|
* Get list of all possible models to duplicate
|
||||||
*
|
*
|
||||||
* @access public
|
* @access public
|
||||||
* @return array
|
* @return string[]
|
||||||
*/
|
*/
|
||||||
public function getPossibleSelection()
|
public function getPossibleSelection()
|
||||||
{
|
{
|
||||||
@@ -71,7 +71,7 @@ class ProjectDuplication extends Base
|
|||||||
// Get the cloned project Id
|
// Get the cloned project Id
|
||||||
$dst_project_id = $this->copy($src_project_id, $owner_id, $name, $private);
|
$dst_project_id = $this->copy($src_project_id, $owner_id, $name, $private);
|
||||||
|
|
||||||
if (! $dst_project_id) {
|
if ($dst_project_id === false) {
|
||||||
$this->db->cancelTransaction();
|
$this->db->cancelTransaction();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -96,7 +96,8 @@ class Swimlane extends Base
|
|||||||
*/
|
*/
|
||||||
public function getDefault($project_id)
|
public function getDefault($project_id)
|
||||||
{
|
{
|
||||||
$result = $this->db->table(Project::TABLE)
|
$result = $this->db
|
||||||
|
->table(Project::TABLE)
|
||||||
->eq('id', $project_id)
|
->eq('id', $project_id)
|
||||||
->columns('id', 'default_swimlane', 'show_default_swimlane')
|
->columns('id', 'default_swimlane', 'show_default_swimlane')
|
||||||
->findOne();
|
->findOne();
|
||||||
@@ -117,7 +118,8 @@ class Swimlane extends Base
|
|||||||
*/
|
*/
|
||||||
public function getAll($project_id)
|
public function getAll($project_id)
|
||||||
{
|
{
|
||||||
return $this->db->table(self::TABLE)
|
return $this->db
|
||||||
|
->table(self::TABLE)
|
||||||
->eq('project_id', $project_id)
|
->eq('project_id', $project_id)
|
||||||
->orderBy('position', 'asc')
|
->orderBy('position', 'asc')
|
||||||
->findAll();
|
->findAll();
|
||||||
@@ -133,7 +135,8 @@ class Swimlane extends Base
|
|||||||
*/
|
*/
|
||||||
public function getAllByStatus($project_id, $status = self::ACTIVE)
|
public function getAllByStatus($project_id, $status = self::ACTIVE)
|
||||||
{
|
{
|
||||||
$query = $this->db->table(self::TABLE)
|
$query = $this->db
|
||||||
|
->table(self::TABLE)
|
||||||
->eq('project_id', $project_id)
|
->eq('project_id', $project_id)
|
||||||
->eq('is_active', $status);
|
->eq('is_active', $status);
|
||||||
|
|
||||||
@@ -155,14 +158,16 @@ class Swimlane extends Base
|
|||||||
*/
|
*/
|
||||||
public function getSwimlanes($project_id)
|
public function getSwimlanes($project_id)
|
||||||
{
|
{
|
||||||
$swimlanes = $this->db->table(self::TABLE)
|
$swimlanes = $this->db
|
||||||
|
->table(self::TABLE)
|
||||||
->columns('id', 'name', 'description')
|
->columns('id', 'name', 'description')
|
||||||
->eq('project_id', $project_id)
|
->eq('project_id', $project_id)
|
||||||
->eq('is_active', self::ACTIVE)
|
->eq('is_active', self::ACTIVE)
|
||||||
->orderBy('position', 'asc')
|
->orderBy('position', 'asc')
|
||||||
->findAll();
|
->findAll();
|
||||||
|
|
||||||
$default_swimlane = $this->db->table(Project::TABLE)
|
$default_swimlane = $this->db
|
||||||
|
->table(Project::TABLE)
|
||||||
->eq('id', $project_id)
|
->eq('id', $project_id)
|
||||||
->eq('show_default_swimlane', 1)
|
->eq('show_default_swimlane', 1)
|
||||||
->findOneColumn('default_swimlane');
|
->findOneColumn('default_swimlane');
|
||||||
@@ -200,7 +205,8 @@ class Swimlane extends Base
|
|||||||
$swimlanes[0] = $default === 'Default swimlane' ? t($default) : $default;
|
$swimlanes[0] = $default === 'Default swimlane' ? t($default) : $default;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $swimlanes + $this->db->hashtable(self::TABLE)
|
return $swimlanes + $this->db
|
||||||
|
->hashtable(self::TABLE)
|
||||||
->eq('project_id', $project_id)
|
->eq('project_id', $project_id)
|
||||||
->in('is_active', $only_active ? array(self::ACTIVE) : array(self::ACTIVE, self::INACTIVE))
|
->in('is_active', $only_active ? array(self::ACTIVE) : array(self::ACTIVE, self::INACTIVE))
|
||||||
->orderBy('position', 'asc')
|
->orderBy('position', 'asc')
|
||||||
@@ -232,7 +238,8 @@ class Swimlane extends Base
|
|||||||
*/
|
*/
|
||||||
public function update(array $values)
|
public function update(array $values)
|
||||||
{
|
{
|
||||||
return $this->db->table(self::TABLE)
|
return $this->db
|
||||||
|
->table(self::TABLE)
|
||||||
->eq('id', $values['id'])
|
->eq('id', $values['id'])
|
||||||
->update($values);
|
->update($values);
|
||||||
}
|
}
|
||||||
@@ -264,7 +271,8 @@ class Swimlane extends Base
|
|||||||
*/
|
*/
|
||||||
public function getLastPosition($project_id)
|
public function getLastPosition($project_id)
|
||||||
{
|
{
|
||||||
return $this->db->table(self::TABLE)
|
return $this->db
|
||||||
|
->table(self::TABLE)
|
||||||
->eq('project_id', $project_id)
|
->eq('project_id', $project_id)
|
||||||
->eq('is_active', 1)
|
->eq('is_active', 1)
|
||||||
->count() + 1;
|
->count() + 1;
|
||||||
@@ -353,7 +361,8 @@ class Swimlane extends Base
|
|||||||
public function updatePositions($project_id)
|
public function updatePositions($project_id)
|
||||||
{
|
{
|
||||||
$position = 0;
|
$position = 0;
|
||||||
$swimlanes = $this->db->table(self::TABLE)
|
$swimlanes = $this->db
|
||||||
|
->table(self::TABLE)
|
||||||
->eq('project_id', $project_id)
|
->eq('project_id', $project_id)
|
||||||
->eq('is_active', 1)
|
->eq('is_active', 1)
|
||||||
->asc('position')
|
->asc('position')
|
||||||
|
|||||||
43
tests/units/Action/TaskCloseNoActivityTest.php
Normal file
43
tests/units/Action/TaskCloseNoActivityTest.php
Normal file
@@ -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']);
|
||||||
|
}
|
||||||
|
}
|
||||||
103
tests/units/Action/TaskEmailNoActivityTest.php
Normal file
103
tests/units/Action/TaskEmailNoActivityTest.php
Normal file
@@ -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));
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user