Merge pull-request #1523

This commit is contained in:
Frederic Guillot
2015-12-04 21:28:11 -05:00
6 changed files with 103 additions and 1 deletions

View File

@@ -3,6 +3,7 @@
namespace Kanboard\Action; namespace Kanboard\Action;
use Kanboard\Integration\GithubWebhook; use Kanboard\Integration\GithubWebhook;
use Kanboard\Integration\GitlabWebhook;
use Kanboard\Integration\BitbucketWebhook; use Kanboard\Integration\BitbucketWebhook;
/** /**
@@ -23,6 +24,7 @@ class TaskOpen extends Base
{ {
return array( return array(
GithubWebhook::EVENT_ISSUE_REOPENED, GithubWebhook::EVENT_ISSUE_REOPENED,
GitlabWebhook::EVENT_ISSUE_REOPENED,
BitbucketWebhook::EVENT_ISSUE_REOPENED, BitbucketWebhook::EVENT_ISSUE_REOPENED,
); );
} }

View File

@@ -19,6 +19,7 @@ class GitlabWebhook extends \Kanboard\Core\Base
*/ */
const EVENT_ISSUE_OPENED = 'gitlab.webhook.issue.opened'; const EVENT_ISSUE_OPENED = 'gitlab.webhook.issue.opened';
const EVENT_ISSUE_CLOSED = 'gitlab.webhook.issue.closed'; const EVENT_ISSUE_CLOSED = 'gitlab.webhook.issue.closed';
const EVENT_ISSUE_REOPENED = 'gitlab.webhook.issue.reopened';
const EVENT_COMMIT = 'gitlab.webhook.commit'; const EVENT_COMMIT = 'gitlab.webhook.commit';
const EVENT_ISSUE_COMMENT = 'gitlab.webhook.issue.commented'; const EVENT_ISSUE_COMMENT = 'gitlab.webhook.issue.commented';
@@ -164,6 +165,8 @@ class GitlabWebhook extends \Kanboard\Core\Base
return $this->handleIssueOpened($payload['object_attributes']); return $this->handleIssueOpened($payload['object_attributes']);
case 'close': case 'close':
return $this->handleIssueClosed($payload['object_attributes']); return $this->handleIssueClosed($payload['object_attributes']);
case 'reopen':
return $this->handleIssueReopened($payload['object_attributes']);
} }
return false; return false;
@@ -193,6 +196,36 @@ class GitlabWebhook extends \Kanboard\Core\Base
return true; return true;
} }
/**
* Handle issue reopening
*
* @access public
* @param array $issue Issue data
* @return boolean
*/
public function handleIssueReopened(array $issue)
{
$task = $this->taskFinder->getByReference($this->project_id, $issue['id']);
if (! empty($task)) {
$event = array(
'project_id' => $this->project_id,
'task_id' => $task['id'],
'reference' => $issue['id'],
);
$this->container['dispatcher']->dispatch(
self::EVENT_ISSUE_REOPENED,
new GenericEvent($event)
);
return true;
}
return false;
}
/** /**
* Handle issue closing * Handle issue closing
* *

View File

@@ -118,6 +118,7 @@ class Action extends Base
GithubWebhook::EVENT_ISSUE_COMMENT => t('Github issue comment created'), GithubWebhook::EVENT_ISSUE_COMMENT => t('Github issue comment created'),
GitlabWebhook::EVENT_COMMIT => t('Gitlab commit received'), GitlabWebhook::EVENT_COMMIT => t('Gitlab commit received'),
GitlabWebhook::EVENT_ISSUE_OPENED => t('Gitlab issue opened'), GitlabWebhook::EVENT_ISSUE_OPENED => t('Gitlab issue opened'),
GitlabWebhook::EVENT_ISSUE_REOPENED => t('Gitlab issue reopened'),
GitlabWebhook::EVENT_ISSUE_CLOSED => t('Gitlab issue closed'), GitlabWebhook::EVENT_ISSUE_CLOSED => t('Gitlab issue closed'),
GitlabWebhook::EVENT_ISSUE_COMMENT => t('Gitlab issue comment created'), GitlabWebhook::EVENT_ISSUE_COMMENT => t('Gitlab issue comment created'),
BitbucketWebhook::EVENT_COMMIT => t('Bitbucket commit received'), BitbucketWebhook::EVENT_COMMIT => t('Bitbucket commit received'),

View File

@@ -56,6 +56,11 @@ When a task is created from a Gitlab issue, the link to the issue is added to th
- Choose the event: **Gitlab issue closed** - Choose the event: **Gitlab issue closed**
- Choose the action: **Close the task** - Choose the action: **Close the task**
### Reopen a Kanboard task when a closed issue is reopened on Gitlab
- Choose the event: **Gitlab issue reopened**
- Choose the action: **Open a task**
### Create a comment on Kanboard when an issue is commented on Gitlab ### Create a comment on Kanboard when an issue is commented on Gitlab
- Choose the event: **Gitlab issue comment created** - Choose the event: **Gitlab issue comment created**

View File

@@ -64,6 +64,35 @@ class GitlabWebhookTest extends Base
$this->assertArrayHasKey(GitlabWebhook::EVENT_ISSUE_OPENED.'.GitlabWebhookTest::onOpen', $called); $this->assertArrayHasKey(GitlabWebhook::EVENT_ISSUE_OPENED.'.GitlabWebhookTest::onOpen', $called);
} }
public function testHandleIssueReopened()
{
$g = new GitlabWebhook($this->container);
$p = new Project($this->container);
$tc = new TaskCreation($this->container);
$tf = new TaskFinder($this->container);
$this->assertEquals(1, $p->create(array('name' => 'test')));
$g->setProjectId(1);
$this->container['dispatcher']->addListener(GitlabWebhook::EVENT_ISSUE_REOPENED, array($this, 'onReopen'));
$event = json_decode(file_get_contents(__DIR__.'/../fixtures/gitlab_issue_reopened.json'), true);
// Issue not there
$this->assertFalse($g->handleIssueReopened($event['object_attributes']));
$called = $this->container['dispatcher']->getCalledListeners();
$this->assertEmpty($called);
$this->assertEquals(1, $tc->create(array('title' => 'A', 'project_id' => 1, 'reference' => 355691)));
$task = $tf->getByReference(1, 355691);
$this->assertTrue($g->handleIssueReopened($event['object_attributes']));
$called = $this->container['dispatcher']->getCalledListeners();
$this->assertArrayHasKey(GitlabWebhook::EVENT_ISSUE_REOPENED.'.GitlabWebhookTest::onReopen', $called);
}
public function testHandleIssueClosed() public function testHandleIssueClosed()
{ {
$g = new GitlabWebhook($this->container); $g = new GitlabWebhook($this->container);
@@ -170,6 +199,13 @@ class GitlabWebhookTest extends Base
$this->assertEquals("There is a bug somewhere.\r\n\r\nBye\n\n[Gitlab Issue](https://gitlab.com/minicoders/test-webhook/issues/1)", $data['description']); $this->assertEquals("There is a bug somewhere.\r\n\r\nBye\n\n[Gitlab Issue](https://gitlab.com/minicoders/test-webhook/issues/1)", $data['description']);
} }
public function onReopen($event)
{
$data = $event->getAll();
$this->assertEquals(1, $data['project_id']);
$this->assertEquals(1, $data['task_id']);
$this->assertEquals(355691, $data['reference']);
}
public function onClose($event) public function onClose($event)
{ {
$data = $event->getAll(); $data = $event->getAll();

View File

@@ -0,0 +1,25 @@
{
"object_kind": "issue",
"user": {
"name": "Fred",
"username": "minicoders",
"avatar_url": "https://secure.gravatar.com/avatar/3c44936e5a56f80711bff14987d2733f?s=40&d=identicon"
},
"object_attributes": {
"id": 355691,
"title": "Bug",
"assignee_id": null,
"author_id": 74067,
"project_id": 320820,
"created_at": "2015-07-17 21:31:47 UTC",
"updated_at": "2015-07-17 21:31:47 UTC",
"position": 0,
"branch_name": null,
"description": "There is a bug somewhere.\r\n\r\nBye",
"milestone_id": null,
"state": "opened",
"iid": 1,
"url": "https://gitlab.com/minicoders/test-webhook/issues/1",
"action": "reopen"
}
}