Fix bug: task references are not unique

This commit is contained in:
Frederic Guillot 2015-05-03 11:48:18 -04:00
parent fa59a1487c
commit 46d711cf51
4 changed files with 15 additions and 11 deletions

View File

@ -139,7 +139,7 @@ class GithubWebhook extends Base
*/
public function parseCommentIssueEvent(array $payload)
{
$task = $this->taskFinder->getByReference($payload['issue']['number']);
$task = $this->taskFinder->getByReference($this->project_id, $payload['issue']['number']);
$user = $this->user->getByUsername($payload['comment']['user']['login']);
if (! empty($task) && ! empty($user)) {
@ -196,7 +196,7 @@ class GithubWebhook extends Base
*/
public function handleIssueClosed(array $issue)
{
$task = $this->taskFinder->getByReference($issue['number']);
$task = $this->taskFinder->getByReference($this->project_id, $issue['number']);
if (! empty($task)) {
$event = array(
@ -225,7 +225,7 @@ class GithubWebhook extends Base
*/
public function handleIssueReopened(array $issue)
{
$task = $this->taskFinder->getByReference($issue['number']);
$task = $this->taskFinder->getByReference($this->project_id, $issue['number']);
if (! empty($task)) {
$event = array(
@ -255,7 +255,7 @@ class GithubWebhook extends Base
public function handleIssueAssigned(array $issue)
{
$user = $this->user->getByUsername($issue['assignee']['login']);
$task = $this->taskFinder->getByReference($issue['number']);
$task = $this->taskFinder->getByReference($this->project_id, $issue['number']);
if (! empty($user) && ! empty($task)) {
@ -286,7 +286,7 @@ class GithubWebhook extends Base
*/
public function handleIssueUnassigned(array $issue)
{
$task = $this->taskFinder->getByReference($issue['number']);
$task = $this->taskFinder->getByReference($this->project_id, $issue['number']);
if (! empty($task)) {
@ -318,7 +318,7 @@ class GithubWebhook extends Base
*/
public function handleIssueLabeled(array $issue, array $label)
{
$task = $this->taskFinder->getByReference($issue['number']);
$task = $this->taskFinder->getByReference($this->project_id, $issue['number']);
if (! empty($task)) {
@ -350,7 +350,7 @@ class GithubWebhook extends Base
*/
public function handleIssueUnlabeled(array $issue, array $label)
{
$task = $this->taskFinder->getByReference($issue['number']);
$task = $this->taskFinder->getByReference($this->project_id, $issue['number']);
if (! empty($task)) {

View File

@ -191,7 +191,7 @@ class GitlabWebhook extends Base
*/
public function handleIssueClosed(array $issue)
{
$task = $this->taskFinder->getByReference($issue['id']);
$task = $this->taskFinder->getByReference($this->project_id, $issue['id']);
if (! empty($task)) {
$event = array(

View File

@ -204,12 +204,13 @@ class TaskFinder extends Base
* Fetch a task by the reference (external id)
*
* @access public
* @param integer $project_id Project id
* @param string $reference Task reference
* @return array
*/
public function getByReference($reference)
public function getByReference($project_id, $reference)
{
return $this->db->table(Task::TABLE)->eq('reference', $reference)->findOne();
return $this->db->table(Task::TABLE)->eq('project_id', $project_id)->eq('reference', $reference)->findOne();
}
/**

View File

@ -88,9 +88,12 @@ class GitlabWebhookTest extends Base
// Create a task with the issue reference
$this->assertEquals(1, $tc->create(array('title' => 'A', 'project_id' => 1, 'reference' => 103361)));
$task = $tf->getByReference(103361);
$task = $tf->getByReference(1, 103361);
$this->assertNotEmpty($task);
$task = $tf->getByReference(2, 103361);
$this->assertEmpty($task);
$this->assertTrue($g->handleIssueClosed($event['object_attributes']));
$called = $this->container['dispatcher']->getCalledListeners();