diff --git a/app/Model/TaskDuplicationModel.php b/app/Model/TaskDuplicationModel.php index cb32baab1..24845dae9 100644 --- a/app/Model/TaskDuplicationModel.php +++ b/app/Model/TaskDuplicationModel.php @@ -58,9 +58,21 @@ class TaskDuplicationModel extends Base if ($new_task_id !== false) { $this->tagDuplicationModel->duplicateTaskTags($task_id, $new_task_id); $this->taskLinkModel->create($new_task_id, $task_id, 4); + + $externalLinks = $this->taskExternalLinkModel->getAll($task_id); + foreach ($externalLinks as $externalLink) { + $this->taskExternalLinkModel->create([ + 'task_id' => $new_task_id, + 'creator_id' => $externalLink['creator_id'], + 'dependency' => $externalLink['dependency'], + 'title' => $externalLink['title'], + 'link_type' => $externalLink['link_type'], + 'url' => $externalLink['url'], + ]); + } } - $hook_values = [ 'source_task_id' => $task_id, 'destination_task_id' => $new_task_id]; + $hook_values = ['source_task_id' => $task_id, 'destination_task_id' => $new_task_id]; $this->hook->reference('model:task:duplication:aftersave', $hook_values); return $new_task_id; diff --git a/app/Model/TaskRecurrenceModel.php b/app/Model/TaskRecurrenceModel.php index ffe43f8c2..201a3407e 100644 --- a/app/Model/TaskRecurrenceModel.php +++ b/app/Model/TaskRecurrenceModel.php @@ -92,6 +92,18 @@ class TaskRecurrenceModel extends TaskDuplicationModel if ($recurring_task_id !== false) { $this->tagDuplicationModel->duplicateTaskTags($task_id, $recurring_task_id); + $externalLinks = $this->taskExternalLinkModel->getAll($task_id); + foreach ($externalLinks as $externalLink) { + $this->taskExternalLinkModel->create([ + 'task_id' => $recurring_task_id, + 'creator_id' => $externalLink['creator_id'], + 'dependency' => $externalLink['dependency'], + 'title' => $externalLink['title'], + 'link_type' => $externalLink['link_type'], + 'url' => $externalLink['url'], + ]); + } + $parent_update = $this->db ->table(TaskModel::TABLE) ->eq('id', $task_id) diff --git a/tests/units/Action/TaskDuplicateAnotherProjectTest.php b/tests/units/Action/TaskDuplicateAnotherProjectTest.php index 676240ee0..5cd0c9778 100644 --- a/tests/units/Action/TaskDuplicateAnotherProjectTest.php +++ b/tests/units/Action/TaskDuplicateAnotherProjectTest.php @@ -13,12 +13,6 @@ class TaskDuplicateAnotherProjectTest extends Base { public function testSuccess() { - $this->container['externalLinkManager'] = $this - ->getMockBuilder('Kanboard\Core\ExternalLink\ExternalLinkManager') - ->setConstructorArgs(array($this->container)) - ->setMethods(['push']) - ->getMock(); - $projectModel = new ProjectModel($this->container); $taskCreationModel = new TaskCreationModel($this->container); $taskFinderModel = new TaskFinderModel($this->container); diff --git a/tests/units/Base.php b/tests/units/Base.php index 2af1e4dd6..041e191c7 100644 --- a/tests/units/Base.php +++ b/tests/units/Base.php @@ -87,6 +87,11 @@ abstract class Base extends PHPUnit\Framework\TestCase $this->container['db']->getStatementHandler()->withLogging(); $this->container['cli'] = new \Symfony\Component\Console\Application('Kanboard', 'test'); + $this->container['externalLinkManager'] = $this + ->getMockBuilder('Kanboard\Core\ExternalLink\ExternalLinkManager') + ->setConstructorArgs(array($this->container)) + ->getMock(); + $this->container['httpClient'] = $this ->getMockBuilder('\Kanboard\Core\Http\Client') ->setConstructorArgs(array($this->container)) diff --git a/tests/units/Model/ProjectDuplicationModelTest.php b/tests/units/Model/ProjectDuplicationModelTest.php index 859b1ec3a..c0d954d8e 100644 --- a/tests/units/Model/ProjectDuplicationModelTest.php +++ b/tests/units/Model/ProjectDuplicationModelTest.php @@ -498,12 +498,6 @@ class ProjectDuplicationModelTest extends Base public function testCloneProjectWithTasks() { - $this->container['externalLinkManager'] = $this - ->getMockBuilder('Kanboard\Core\ExternalLink\ExternalLinkManager') - ->setConstructorArgs(array($this->container)) - ->setMethods(['push']) - ->getMock(); - $projectModel = new ProjectModel($this->container); $projectDuplicationModel = new ProjectDuplicationModel($this->container); $taskCreationModel = new TaskCreationModel($this->container); @@ -528,12 +522,6 @@ class ProjectDuplicationModelTest extends Base public function testCloneProjectWithSwimlanesAndTasks() { - $this->container['externalLinkManager'] = $this - ->getMockBuilder('Kanboard\Core\ExternalLink\ExternalLinkManager') - ->setConstructorArgs(array($this->container)) - ->setMethods(['push']) - ->getMock(); - $projectModel = new ProjectModel($this->container); $projectDuplicationModel = new ProjectDuplicationModel($this->container); $swimlaneModel = new SwimlaneModel($this->container); @@ -584,12 +572,6 @@ class ProjectDuplicationModelTest extends Base public function testCloneProjectWithTags() { - $this->container['externalLinkManager'] = $this - ->getMockBuilder('Kanboard\Core\ExternalLink\ExternalLinkManager') - ->setConstructorArgs(array($this->container)) - ->setMethods(['push']) - ->getMock(); - $projectModel = new ProjectModel($this->container); $projectDuplicationModel = new ProjectDuplicationModel($this->container); $taskCreationModel = new TaskCreationModel($this->container); diff --git a/tests/units/Model/TaskProjectDuplicationModelTest.php b/tests/units/Model/TaskProjectDuplicationModelTest.php index 8043b2577..8c4a0d473 100644 --- a/tests/units/Model/TaskProjectDuplicationModelTest.php +++ b/tests/units/Model/TaskProjectDuplicationModelTest.php @@ -17,17 +17,6 @@ use Kanboard\Model\UserModel; class TaskProjectDuplicationModelTest extends Base { - protected function setUp(): void - { - parent::setUp(); - - $this->container['externalLinkManager'] = $this - ->getMockBuilder('Kanboard\Core\ExternalLink\ExternalLinkManager') - ->setConstructorArgs(array($this->container)) - ->setMethods(['push']) - ->getMock(); - } - public function testDuplicateAnotherProject() { $taskProjectDuplicationModel = new TaskProjectDuplicationModel($this->container);