Make user mentions great again
This commit is contained in:
parent
be83821ef7
commit
f73d0d2ac9
|
|
@ -6,6 +6,7 @@ Improvements:
|
|||
* Add button to close inline popups
|
||||
* Simplify `.htaccess` to avoid potential issues with possible specific Apache configurations
|
||||
* Replace notifications Javascript code by CSS
|
||||
* Refactoring of user mentions job
|
||||
|
||||
Breaking changes:
|
||||
|
||||
|
|
@ -14,6 +15,7 @@ Breaking changes:
|
|||
Bug fixes:
|
||||
|
||||
* Fix link generation when user mention is followed by a punctuation mark
|
||||
* Make user mentions works again
|
||||
|
||||
Version 1.0.34
|
||||
--------------
|
||||
|
|
|
|||
|
|
@ -126,7 +126,6 @@ use Pimple\Container;
|
|||
* @property \Kanboard\Model\TransitionModel $transitionModel
|
||||
* @property \Kanboard\Model\UserModel $userModel
|
||||
* @property \Kanboard\Model\UserLockingModel $userLockingModel
|
||||
* @property \Kanboard\Model\UserMentionModel $userMentionModel
|
||||
* @property \Kanboard\Model\UserNotificationModel $userNotificationModel
|
||||
* @property \Kanboard\Model\UserNotificationTypeModel $userNotificationTypeModel
|
||||
* @property \Kanboard\Model\UserNotificationFilterModel $userNotificationFilterModel
|
||||
|
|
@ -178,6 +177,7 @@ use Pimple\Container;
|
|||
* @property \Kanboard\Job\ProjectFileEventJob $projectFileEventJob
|
||||
* @property \Kanboard\Job\NotificationJob $notificationJob
|
||||
* @property \Kanboard\Job\ProjectMetricJob $projectMetricJob
|
||||
* @property \Kanboard\Job\UserMentionJob $userMentionJob
|
||||
* @property \Psr\Log\LoggerInterface $logger
|
||||
* @property \PicoDb\Database $db
|
||||
* @property \Symfony\Component\EventDispatcher\EventDispatcher $dispatcher
|
||||
|
|
|
|||
|
|
@ -90,7 +90,7 @@ class Markdown extends Parsedown
|
|||
$user_id = $this->container['userModel']->getIdByUsername($matches[1]);
|
||||
|
||||
if (! empty($user_id)) {
|
||||
$url = $this->container['helper']->url->href('UserViewController', 'profile', array('user_id' => $user_id));
|
||||
$url = $this->container['helper']->url->href('UserViewController', 'profile', array('user_id' => $user_id), false, '', true);
|
||||
|
||||
return array(
|
||||
'extent' => strlen($matches[0]),
|
||||
|
|
|
|||
|
|
@ -14,6 +14,28 @@ class GenericEvent extends BaseEvent implements ArrayAccess
|
|||
$this->container = $values;
|
||||
}
|
||||
|
||||
public function getTaskId()
|
||||
{
|
||||
if (isset($this->container['task']['id'])) {
|
||||
return $this->container['task']['id'];
|
||||
}
|
||||
|
||||
if (isset($this->container['task_id'])) {
|
||||
return $this->container['task_id'];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public function getProjectId()
|
||||
{
|
||||
if (isset($this->container['task']['project_id'])) {
|
||||
return $this->container['task']['project_id'];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public function getAll()
|
||||
{
|
||||
return $this->container;
|
||||
|
|
|
|||
|
|
@ -4,4 +4,12 @@ namespace Kanboard\Event;
|
|||
|
||||
class ProjectFileEvent extends GenericEvent
|
||||
{
|
||||
public function getProjectId()
|
||||
{
|
||||
if (isset($this->container['file']['project_id'])) {
|
||||
return $this->container['file']['project_id'];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@ class CommentEventJob extends BaseJob
|
|||
*
|
||||
* @param int $commentId
|
||||
* @param string $eventName
|
||||
* @return $this
|
||||
*/
|
||||
public function execute($commentId, $eventName)
|
||||
{
|
||||
|
|
@ -43,7 +42,8 @@ class CommentEventJob extends BaseJob
|
|||
$this->dispatcher->dispatch($eventName, $event);
|
||||
|
||||
if ($eventName === CommentModel::EVENT_CREATE) {
|
||||
$this->userMentionModel->fireEvents($event['comment']['comment'], CommentModel::EVENT_USER_MENTION, $event);
|
||||
$userMentionJob = $this->userMentionJob->withParams($event['comment']['comment'], CommentModel::EVENT_USER_MENTION, $event);
|
||||
$this->queueManager->push($userMentionJob);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -69,7 +69,8 @@ class TaskEventJob extends BaseJob
|
|||
$this->dispatcher->dispatch($eventName, $event);
|
||||
|
||||
if ($eventName === TaskModel::EVENT_CREATE) {
|
||||
$this->userMentionModel->fireEvents($event['task']['description'], TaskModel::EVENT_USER_MENTION, $event);
|
||||
$userMentionJob = $this->userMentionJob->withParams($event['task']['description'], TaskModel::EVENT_USER_MENTION, $event);
|
||||
$this->queueManager->push($userMentionJob);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,71 @@
|
|||
<?php
|
||||
|
||||
namespace Kanboard\Job;
|
||||
|
||||
use Kanboard\Event\GenericEvent;
|
||||
use Kanboard\Model\UserModel;
|
||||
|
||||
/**
|
||||
* Class UserMentionJob
|
||||
*
|
||||
* @package Kanboard\Job
|
||||
* @author Frederic Guillot
|
||||
*/
|
||||
class UserMentionJob extends BaseJob
|
||||
{
|
||||
/**
|
||||
* Set job parameters
|
||||
*
|
||||
* @param string $text
|
||||
* @param string $eventName
|
||||
* @param GenericEvent $event
|
||||
* @return $this
|
||||
*/
|
||||
public function withParams($text, $eventName, GenericEvent $event)
|
||||
{
|
||||
$this->jobParams = array($text, $eventName, $event);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute job
|
||||
*
|
||||
* @param string $text
|
||||
* @param string $eventName
|
||||
* @param GenericEvent $event
|
||||
*/
|
||||
public function execute($text, $eventName, GenericEvent $event)
|
||||
{
|
||||
$users = $this->getMentionedUsers($text);
|
||||
|
||||
foreach ($users as $user) {
|
||||
if ($this->projectPermissionModel->isMember($event->getProjectId(), $user['id'])) {
|
||||
$event['mention'] = $user;
|
||||
$this->dispatcher->dispatch($eventName, $event);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get list of mentioned users
|
||||
*
|
||||
* @access public
|
||||
* @param string $text
|
||||
* @return array
|
||||
*/
|
||||
public function getMentionedUsers($text)
|
||||
{
|
||||
$users = array();
|
||||
|
||||
if (preg_match_all('/@([^\s,!.:?]+)/', $text, $matches)) {
|
||||
$users = $this->db->table(UserModel::TABLE)
|
||||
->columns('id', 'username', 'name', 'email', 'language')
|
||||
->eq('notifications_enabled', 1)
|
||||
->neq('id', $this->userSession->getId())
|
||||
->in('username', array_unique($matches[1]))
|
||||
->findAll();
|
||||
}
|
||||
|
||||
return $users;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,62 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace Kanboard\Model;
|
||||
|
||||
use Kanboard\Core\Base;
|
||||
use Kanboard\Event\GenericEvent;
|
||||
|
||||
/**
|
||||
* User Mention
|
||||
*
|
||||
* @package Kanboard\Model
|
||||
* @author Frederic Guillot
|
||||
*/
|
||||
class UserMentionModel extends Base
|
||||
{
|
||||
/**
|
||||
* Get list of mentioned users
|
||||
*
|
||||
* @access public
|
||||
* @param string $content
|
||||
* @return array
|
||||
*/
|
||||
public function getMentionedUsers($content)
|
||||
{
|
||||
$users = array();
|
||||
|
||||
if (preg_match_all('/@([^\s]+)/', $content, $matches)) {
|
||||
$users = $this->db->table(UserModel::TABLE)
|
||||
->columns('id', 'username', 'name', 'email', 'language')
|
||||
->eq('notifications_enabled', 1)
|
||||
->neq('id', $this->userSession->getId())
|
||||
->in('username', array_unique($matches[1]))
|
||||
->findAll();
|
||||
}
|
||||
|
||||
return $users;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fire events for user mentions
|
||||
*
|
||||
* @access public
|
||||
* @param string $content
|
||||
* @param string $eventName
|
||||
* @param GenericEvent $event
|
||||
*/
|
||||
public function fireEvents($content, $eventName, GenericEvent $event)
|
||||
{
|
||||
if (empty($event['project_id'])) {
|
||||
$event['project_id'] = $this->taskFinderModel->getProjectId($event['task_id']);
|
||||
}
|
||||
|
||||
$users = $this->getMentionedUsers($content);
|
||||
|
||||
foreach ($users as $user) {
|
||||
if ($this->projectPermissionModel->isMember($event['project_id'], $user['id'])) {
|
||||
$event['mention'] = $user;
|
||||
$this->dispatcher->dispatch($eventName, $event);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -91,7 +91,6 @@ class ClassProvider implements ServiceProviderInterface
|
|||
'TransitionModel',
|
||||
'UserModel',
|
||||
'UserLockingModel',
|
||||
'UserMentionModel',
|
||||
'UserNotificationModel',
|
||||
'UserNotificationFilterModel',
|
||||
'UserUnreadNotificationModel',
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ use Kanboard\Job\SubtaskEventJob;
|
|||
use Kanboard\Job\TaskEventJob;
|
||||
use Kanboard\Job\TaskFileEventJob;
|
||||
use Kanboard\Job\TaskLinkEventJob;
|
||||
use Kanboard\Job\UserMentionJob;
|
||||
use Pimple\Container;
|
||||
use Pimple\ServiceProviderInterface;
|
||||
|
||||
|
|
@ -62,6 +63,10 @@ class JobProvider implements ServiceProviderInterface
|
|||
return new ProjectMetricJob($c);
|
||||
});
|
||||
|
||||
$container['userMentionJob'] = $container->factory(function ($c) {
|
||||
return new UserMentionJob($c);
|
||||
});
|
||||
|
||||
return $container;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,5 +33,7 @@ class CommentEventBuilderTest extends Base
|
|||
$this->assertInstanceOf('Kanboard\Event\CommentEvent', $event);
|
||||
$this->assertNotEmpty($event['comment']);
|
||||
$this->assertNotEmpty($event['task']);
|
||||
$this->assertEquals(1, $event->getTaskId());
|
||||
$this->assertEquals(1, $event->getProjectId());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,5 +29,7 @@ class ProjectFileEventBuilderTest extends Base
|
|||
$this->assertInstanceOf('Kanboard\Event\ProjectFileEvent', $event);
|
||||
$this->assertNotEmpty($event['file']);
|
||||
$this->assertNotEmpty($event['project']);
|
||||
$this->assertNull($event->getTaskId());
|
||||
$this->assertEquals(1, $event->getProjectId());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -58,5 +58,7 @@ class SubtaskEventBuilderTest extends Base
|
|||
$this->assertCount(2, $event['changes']);
|
||||
$this->assertEquals('new title', $event['changes']['title']);
|
||||
$this->assertEquals(1, $event['changes']['user_id']);
|
||||
$this->assertEquals(1, $event->getTaskId());
|
||||
$this->assertEquals(1, $event->getProjectId());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,6 +33,8 @@ class TaskEventBuilderTest extends Base
|
|||
$this->assertInstanceOf('Kanboard\Event\TaskEvent', $event);
|
||||
$this->assertNotEmpty($event['task']);
|
||||
$this->assertEquals(1, $event['task_id']);
|
||||
$this->assertEquals(1, $event->getTaskId());
|
||||
$this->assertEquals(1, $event->getProjectId());
|
||||
$this->assertEquals(array('title' => 'after'), $event['changes']);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -32,5 +32,7 @@ class TaskFileEventBuilderTest extends Base
|
|||
$this->assertInstanceOf('Kanboard\Event\TaskFileEvent', $event);
|
||||
$this->assertNotEmpty($event['file']);
|
||||
$this->assertNotEmpty($event['task']);
|
||||
$this->assertEquals(1, $event->getTaskId());
|
||||
$this->assertEquals(1, $event->getProjectId());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,6 +33,8 @@ class TaskLinkEventBuilderTest extends Base
|
|||
$this->assertInstanceOf('Kanboard\Event\TaskLinkEvent', $event);
|
||||
$this->assertNotEmpty($event['task_link']);
|
||||
$this->assertNotEmpty($event['task']);
|
||||
$this->assertEquals(1, $event->getTaskId());
|
||||
$this->assertEquals(1, $event->getProjectId());
|
||||
}
|
||||
|
||||
public function testBuildTitle()
|
||||
|
|
|
|||
|
|
@ -47,12 +47,12 @@ class TextHelperTest extends Base
|
|||
public function testMarkdownUserLink()
|
||||
{
|
||||
$h = new TextHelper($this->container);
|
||||
$this->assertEquals('<p>Text <a href="?controller=UserViewController&action=profile&user_id=1" class="user-mention-link">@admin</a> @notfound</p>', $h->markdown('Text @admin @notfound'));
|
||||
$this->assertEquals('<p>Text <a href="?controller=UserViewController&action=profile&user_id=1" class="user-mention-link">@admin</a>,</p>', $h->markdown('Text @admin,'));
|
||||
$this->assertEquals('<p>Text <a href="?controller=UserViewController&action=profile&user_id=1" class="user-mention-link">@admin</a>!</p>', $h->markdown('Text @admin!'));
|
||||
$this->assertEquals('<p>Text <a href="?controller=UserViewController&action=profile&user_id=1" class="user-mention-link">@admin</a>? </p>', $h->markdown('Text @admin? '));
|
||||
$this->assertEquals('<p>Text <a href="?controller=UserViewController&action=profile&user_id=1" class="user-mention-link">@admin</a>.</p>', $h->markdown('Text @admin.'));
|
||||
$this->assertEquals('<p>Text <a href="?controller=UserViewController&action=profile&user_id=1" class="user-mention-link">@admin</a>: test</p>', $h->markdown('Text @admin: test'));
|
||||
$this->assertEquals('<p>Text <a href="http://localhost/?controller=UserViewController&action=profile&user_id=1" class="user-mention-link">@admin</a> @notfound</p>', $h->markdown('Text @admin @notfound'));
|
||||
$this->assertEquals('<p>Text <a href="http://localhost/?controller=UserViewController&action=profile&user_id=1" class="user-mention-link">@admin</a>,</p>', $h->markdown('Text @admin,'));
|
||||
$this->assertEquals('<p>Text <a href="http://localhost/?controller=UserViewController&action=profile&user_id=1" class="user-mention-link">@admin</a>!</p>', $h->markdown('Text @admin!'));
|
||||
$this->assertEquals('<p>Text <a href="http://localhost/?controller=UserViewController&action=profile&user_id=1" class="user-mention-link">@admin</a>? </p>', $h->markdown('Text @admin? '));
|
||||
$this->assertEquals('<p>Text <a href="http://localhost/?controller=UserViewController&action=profile&user_id=1" class="user-mention-link">@admin</a>.</p>', $h->markdown('Text @admin.'));
|
||||
$this->assertEquals('<p>Text <a href="http://localhost/?controller=UserViewController&action=profile&user_id=1" class="user-mention-link">@admin</a>: test</p>', $h->markdown('Text @admin: test'));
|
||||
$this->assertEquals('<p>Text @admin @notfound</p>', $h->markdown('Text @admin @notfound', true));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -49,4 +49,46 @@ class CommentEventJobTest extends Base
|
|||
$this->assertArrayHasKey(CommentModel::EVENT_UPDATE.'.closure', $called);
|
||||
$this->assertArrayHasKey(CommentModel::EVENT_DELETE.'.closure', $called);
|
||||
}
|
||||
|
||||
public function testThatUserMentionJobIsCalled()
|
||||
{
|
||||
$comment = 'some comment';
|
||||
|
||||
$this->container['queueManager'] = $this
|
||||
->getMockBuilder('\Kanboard\Core\Queue\QueueManager')
|
||||
->setConstructorArgs(array($this->container))
|
||||
->setMethods(array(
|
||||
'push',
|
||||
))
|
||||
->getMock();
|
||||
|
||||
$this->container['userMentionJob'] = $this
|
||||
->getMockBuilder('\Kanboard\Job\UserMentionJob')
|
||||
->setConstructorArgs(array($this->container))
|
||||
->setMethods(array(
|
||||
'withParams',
|
||||
))
|
||||
->getMock();
|
||||
|
||||
$this->container['queueManager']
|
||||
->expects($this->any())
|
||||
->method('push');
|
||||
|
||||
$this->container['userMentionJob']
|
||||
->expects($this->once())
|
||||
->method('withParams')
|
||||
->with($comment, CommentModel::EVENT_USER_MENTION, $this->anything())
|
||||
->will($this->returnValue($this->container['userMentionJob']));
|
||||
|
||||
$commentModel = new CommentModel($this->container);
|
||||
$taskCreationModel = new TaskCreationModel($this->container);
|
||||
$projectModel = new ProjectModel($this->container);
|
||||
$commentEventJob = new CommentEventJob($this->container);
|
||||
|
||||
$this->assertEquals(1, $projectModel->create(array('name' => 'test1')));
|
||||
$this->assertEquals(1, $taskCreationModel->create(array('title' => 'test', 'project_id' => 1)));
|
||||
$this->assertEquals(1, $commentModel->create(array('task_id' => 1, 'comment' => $comment, 'user_id' => 1)));
|
||||
|
||||
$commentEventJob->execute(1, CommentModel::EVENT_CREATE);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -186,4 +186,44 @@ class TaskEventJobTest extends Base
|
|||
$called = $this->container['dispatcher']->getCalledListeners();
|
||||
$this->assertArrayHasKey(TaskModel::EVENT_MOVE_PROJECT.'.closure', $called);
|
||||
}
|
||||
|
||||
public function testThatUserMentionJobIsCalled()
|
||||
{
|
||||
$description = 'something';
|
||||
|
||||
$this->container['queueManager'] = $this
|
||||
->getMockBuilder('\Kanboard\Core\Queue\QueueManager')
|
||||
->setConstructorArgs(array($this->container))
|
||||
->setMethods(array(
|
||||
'push',
|
||||
))
|
||||
->getMock();
|
||||
|
||||
$this->container['userMentionJob'] = $this
|
||||
->getMockBuilder('\Kanboard\Job\UserMentionJob')
|
||||
->setConstructorArgs(array($this->container))
|
||||
->setMethods(array(
|
||||
'withParams',
|
||||
))
|
||||
->getMock();
|
||||
|
||||
$this->container['queueManager']
|
||||
->expects($this->any())
|
||||
->method('push');
|
||||
|
||||
$this->container['userMentionJob']
|
||||
->expects($this->once())
|
||||
->method('withParams')
|
||||
->with($description, TaskModel::EVENT_USER_MENTION, $this->anything())
|
||||
->will($this->returnValue($this->container['userMentionJob']));
|
||||
|
||||
$taskCreationModel = new TaskCreationModel($this->container);
|
||||
$projectModel = new ProjectModel($this->container);
|
||||
$taskEventJob = new TaskEventJob($this->container);
|
||||
|
||||
$this->assertEquals(1, $projectModel->create(array('name' => 'test1')));
|
||||
$this->assertEquals(1, $taskCreationModel->create(array('title' => 'test', 'description' => $description, 'project_id' => 1)));
|
||||
|
||||
$taskEventJob->execute(1, array(TaskModel::EVENT_CREATE));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,45 +1,60 @@
|
|||
<?php
|
||||
|
||||
use Kanboard\Core\Security\Role;
|
||||
use Kanboard\Event\TaskEvent;
|
||||
use Kanboard\Job\UserMentionJob;
|
||||
use Kanboard\Model\ProjectModel;
|
||||
use Kanboard\Model\ProjectUserRoleModel;
|
||||
use Kanboard\Model\TaskModel;
|
||||
use Kanboard\Model\UserModel;
|
||||
|
||||
require_once __DIR__.'/../Base.php';
|
||||
|
||||
use Kanboard\Core\Security\Role;
|
||||
use Kanboard\Event\GenericEvent;
|
||||
use Kanboard\Model\UserModel;
|
||||
use Kanboard\Model\TaskModel;
|
||||
use Kanboard\Model\TaskCreationModel;
|
||||
use Kanboard\Model\ProjectModel;
|
||||
use Kanboard\Model\ProjectUserRoleModel;
|
||||
use Kanboard\Model\UserMentionModel;
|
||||
|
||||
class UserMentionTest extends Base
|
||||
class UserMentionJobTest extends Base
|
||||
{
|
||||
public function testGetMentionedUsersWithNoMentions()
|
||||
{
|
||||
$userModel = new UserModel($this->container);
|
||||
$userMentionModel = new UserMentionModel($this->container);
|
||||
$userMentionJob = new UserMentionJob($this->container);
|
||||
|
||||
$this->assertNotFalse($userModel->create(array('username' => 'user1')));
|
||||
$this->assertEmpty($userMentionModel->getMentionedUsers('test'));
|
||||
$this->assertEmpty($userMentionJob->getMentionedUsers('test'));
|
||||
}
|
||||
|
||||
public function testGetMentionedUsersWithNotficationDisabled()
|
||||
{
|
||||
$userModel = new UserModel($this->container);
|
||||
$userMentionModel = new UserMentionModel($this->container);
|
||||
$userMentionJob = new UserMentionJob($this->container);
|
||||
|
||||
$this->assertNotFalse($userModel->create(array('username' => 'user1')));
|
||||
$this->assertEmpty($userMentionModel->getMentionedUsers('test @user1'));
|
||||
$this->assertEmpty($userMentionJob->getMentionedUsers('test @user1'));
|
||||
}
|
||||
|
||||
public function testGetMentionedUsersWithNotficationEnabled()
|
||||
{
|
||||
$userModel = new UserModel($this->container);
|
||||
$userMentionModel = new UserMentionModel($this->container);
|
||||
$userMentionJob = new UserMentionJob($this->container);
|
||||
|
||||
$this->assertNotFalse($userModel->create(array('username' => 'user1')));
|
||||
$this->assertNotFalse($userModel->create(array('username' => 'user2', 'name' => 'Foobar', 'notifications_enabled' => 1)));
|
||||
|
||||
$users = $userMentionModel->getMentionedUsers('test @user2');
|
||||
$users = $userMentionJob->getMentionedUsers('test @user2');
|
||||
$this->assertCount(1, $users);
|
||||
$this->assertEquals('user2', $users[0]['username']);
|
||||
$this->assertEquals('Foobar', $users[0]['name']);
|
||||
$this->assertEquals('', $users[0]['email']);
|
||||
$this->assertEquals('', $users[0]['language']);
|
||||
}
|
||||
|
||||
public function testGetMentionedUsersWithNotficationEnabledAndPunctuationMarks()
|
||||
{
|
||||
$userModel = new UserModel($this->container);
|
||||
$userMentionJob = new UserMentionJob($this->container);
|
||||
|
||||
$this->assertNotFalse($userModel->create(array('username' => 'user1')));
|
||||
$this->assertNotFalse($userModel->create(array('username' => 'user2', 'name' => 'Foobar', 'notifications_enabled' => 1)));
|
||||
|
||||
$users = $userMentionJob->getMentionedUsers('test @user2, test');
|
||||
$this->assertCount(1, $users);
|
||||
$this->assertEquals('user2', $users[0]['username']);
|
||||
$this->assertEquals('Foobar', $users[0]['name']);
|
||||
|
|
@ -51,12 +66,12 @@ class UserMentionTest extends Base
|
|||
{
|
||||
$this->container['sessionStorage']->user = array('id' => 3);
|
||||
$userModel = new UserModel($this->container);
|
||||
$userMentionModel = new UserMentionModel($this->container);
|
||||
$userMentionJob = new UserMentionJob($this->container);
|
||||
|
||||
$this->assertNotFalse($userModel->create(array('username' => 'user1')));
|
||||
$this->assertNotFalse($userModel->create(array('username' => 'user2', 'name' => 'Foobar', 'notifications_enabled' => 1)));
|
||||
|
||||
$this->assertEmpty($userMentionModel->getMentionedUsers('test @user2'));
|
||||
$this->assertEmpty($userMentionJob->getMentionedUsers('test @user2'));
|
||||
}
|
||||
|
||||
public function testFireEventsWithMultipleMentions()
|
||||
|
|
@ -64,8 +79,8 @@ class UserMentionTest extends Base
|
|||
$projectUserRoleModel = new ProjectUserRoleModel($this->container);
|
||||
$projectModel = new ProjectModel($this->container);
|
||||
$userModel = new UserModel($this->container);
|
||||
$userMentionModel = new UserMentionModel($this->container);
|
||||
$event = new GenericEvent(array('project_id' => 1));
|
||||
$userMentionJob = new UserMentionJob($this->container);
|
||||
$event = new TaskEvent(array('task' => array('project_id' => 1)));
|
||||
|
||||
$this->assertEquals(2, $userModel->create(array('username' => 'user1', 'name' => 'User 1', 'notifications_enabled' => 1)));
|
||||
$this->assertEquals(3, $userModel->create(array('username' => 'user2', 'name' => 'User 2', 'notifications_enabled' => 1)));
|
||||
|
|
@ -75,35 +90,10 @@ class UserMentionTest extends Base
|
|||
|
||||
$this->container['dispatcher']->addListener(TaskModel::EVENT_USER_MENTION, array($this, 'onUserMention'));
|
||||
|
||||
$userMentionModel->fireEvents('test @user1 @user2', TaskModel::EVENT_USER_MENTION, $event);
|
||||
$userMentionJob->execute('test @user1 @user2', TaskModel::EVENT_USER_MENTION, $event);
|
||||
|
||||
$called = $this->container['dispatcher']->getCalledListeners();
|
||||
$this->assertArrayHasKey(TaskModel::EVENT_USER_MENTION.'.UserMentionTest::onUserMention', $called);
|
||||
}
|
||||
|
||||
public function testFireEventsWithNoProjectId()
|
||||
{
|
||||
$projectUserRoleModel = new ProjectUserRoleModel($this->container);
|
||||
$projectModel = new ProjectModel($this->container);
|
||||
$taskCreationModel = new TaskCreationModel($this->container);
|
||||
$userModel = new UserModel($this->container);
|
||||
$userMentionModel = new UserMentionModel($this->container);
|
||||
$event = new GenericEvent(array('task_id' => 1));
|
||||
|
||||
$this->assertEquals(2, $userModel->create(array('username' => 'user1', 'name' => 'User 1', 'notifications_enabled' => 1)));
|
||||
$this->assertEquals(3, $userModel->create(array('username' => 'user2', 'name' => 'User 2', 'notifications_enabled' => 1)));
|
||||
|
||||
$this->assertEquals(1, $projectModel->create(array('name' => 'P1')));
|
||||
$this->assertTrue($projectUserRoleModel->addUser(1, 3, Role::PROJECT_MEMBER));
|
||||
|
||||
$this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'Task 1')));
|
||||
|
||||
$this->container['dispatcher']->addListener(TaskModel::EVENT_USER_MENTION, array($this, 'onUserMention'));
|
||||
|
||||
$userMentionModel->fireEvents('test @user1 @user2', TaskModel::EVENT_USER_MENTION, $event);
|
||||
|
||||
$called = $this->container['dispatcher']->getCalledListeners();
|
||||
$this->assertArrayHasKey(TaskModel::EVENT_USER_MENTION.'.UserMentionTest::onUserMention', $called);
|
||||
$this->assertArrayHasKey(TaskModel::EVENT_USER_MENTION.'.UserMentionJobTest::onUserMention', $called);
|
||||
}
|
||||
|
||||
public function onUserMention($event)
|
||||
Loading…
Reference in New Issue