Autoassign logic is finished
This commit is contained in:
parent
af789a7060
commit
06a38e9383
@ -4,30 +4,55 @@ namespace BusinessLogic\Security;
|
|||||||
|
|
||||||
|
|
||||||
class UserContext {
|
class UserContext {
|
||||||
|
/* @var $id int */
|
||||||
public $id;
|
public $id;
|
||||||
|
|
||||||
|
/* @var $username string */
|
||||||
public $username;
|
public $username;
|
||||||
|
|
||||||
|
/* @var $admin bool */
|
||||||
public $admin;
|
public $admin;
|
||||||
|
|
||||||
|
/* @var $name string */
|
||||||
public $name;
|
public $name;
|
||||||
|
|
||||||
|
/* @var $email string */
|
||||||
public $email;
|
public $email;
|
||||||
|
|
||||||
|
/* @var $signature string */
|
||||||
public $signature;
|
public $signature;
|
||||||
|
|
||||||
|
/* @var $language string|null */
|
||||||
public $language;
|
public $language;
|
||||||
|
|
||||||
|
/* @var $categories int[] */
|
||||||
public $categories;
|
public $categories;
|
||||||
|
|
||||||
|
/* @var $permissions string[] */
|
||||||
public $permissions;
|
public $permissions;
|
||||||
|
|
||||||
/**
|
/* @var UserContextPreferences */
|
||||||
* @var UserContextPreferences
|
|
||||||
*/
|
|
||||||
public $preferences;
|
public $preferences;
|
||||||
|
|
||||||
/**
|
/* @var UserContextNotifications */
|
||||||
* @var UserContextNotifications
|
|
||||||
*/
|
|
||||||
public $notificationSettings;
|
public $notificationSettings;
|
||||||
|
|
||||||
|
/* @var $autoAssign bool */
|
||||||
public $autoAssign;
|
public $autoAssign;
|
||||||
|
|
||||||
|
/* @var $ratingNegative int */
|
||||||
public $ratingNegative;
|
public $ratingNegative;
|
||||||
|
|
||||||
|
/* @var $ratingPositive int */
|
||||||
public $ratingPositive;
|
public $ratingPositive;
|
||||||
|
|
||||||
|
/* @var $rating float */
|
||||||
public $rating;
|
public $rating;
|
||||||
|
|
||||||
|
/* @var $totalNumberOfReplies int */
|
||||||
public $totalNumberOfReplies;
|
public $totalNumberOfReplies;
|
||||||
|
|
||||||
|
/* @var $active bool */
|
||||||
public $active;
|
public $active;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -31,7 +31,16 @@ class Autoassigner {
|
|||||||
|
|
||||||
$potentialUsers = $this->userGateway->getUsersByNumberOfOpenTickets($heskSettings);
|
$potentialUsers = $this->userGateway->getUsersByNumberOfOpenTickets($heskSettings);
|
||||||
|
|
||||||
|
foreach ($potentialUsers as $potentialUser) {
|
||||||
|
if ($potentialUser->admin ||
|
||||||
|
(in_array($categoryId, $potentialUser->categories) &&
|
||||||
|
in_array('can_view_tickets', $potentialUser->permissions) &&
|
||||||
|
in_array('can_reply_tickets', $potentialUser->permissions))) {
|
||||||
|
return $potentialUser;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return $potentialUsers[0];
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -63,6 +63,10 @@ class UserGateway extends CommonDao {
|
|||||||
return $row['email'];
|
return $row['email'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $heskSettings array
|
||||||
|
* @return UserContext[]
|
||||||
|
*/
|
||||||
function getUsersByNumberOfOpenTickets($heskSettings) {
|
function getUsersByNumberOfOpenTickets($heskSettings) {
|
||||||
$this->init();
|
$this->init();
|
||||||
|
|
||||||
|
@ -47,14 +47,20 @@ class AutoassignerTest extends TestCase {
|
|||||||
self::assertThat($owner, self::isNull());
|
self::assertThat($owner, self::isNull());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getPermissionsForUser() {
|
||||||
|
return array('can_view_tickets', 'can_reply_tickets');
|
||||||
|
}
|
||||||
|
|
||||||
function testItReturnsTheUsersWithLeastOpenTickets() {
|
function testItReturnsTheUsersWithLeastOpenTickets() {
|
||||||
//-- Arrange
|
//-- Arrange
|
||||||
$userWithNoOpenTickets = new UserContext();
|
$userWithNoOpenTickets = new UserContext();
|
||||||
$userWithNoOpenTickets->id = 1;
|
$userWithNoOpenTickets->id = 1;
|
||||||
$userWithNoOpenTickets->categories = array(1);
|
$userWithNoOpenTickets->categories = array(1);
|
||||||
|
$userWithNoOpenTickets->permissions = $this->getPermissionsForUser();
|
||||||
$userWithOneOpenTicket = new UserContext();
|
$userWithOneOpenTicket = new UserContext();
|
||||||
$userWithOneOpenTicket->id = 2;
|
$userWithOneOpenTicket->id = 2;
|
||||||
$userWithOneOpenTicket->categories = array(1);
|
$userWithOneOpenTicket->categories = array(1);
|
||||||
|
$userWithOneOpenTicket->permissions = $this->getPermissionsForUser();
|
||||||
$usersToReturn = array(
|
$usersToReturn = array(
|
||||||
$userWithNoOpenTickets,
|
$userWithNoOpenTickets,
|
||||||
$userWithOneOpenTicket
|
$userWithOneOpenTicket
|
||||||
@ -70,4 +76,109 @@ class AutoassignerTest extends TestCase {
|
|||||||
//-- Assert
|
//-- Assert
|
||||||
self::assertThat($actual, self::equalTo($userWithNoOpenTickets));
|
self::assertThat($actual, self::equalTo($userWithNoOpenTickets));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function testItOnlyReturnsUsersWhoCanAccessTheCategory() {
|
||||||
|
//-- Arrange
|
||||||
|
$userWithNoOpenTickets = new UserContext();
|
||||||
|
$userWithNoOpenTickets->id = 1;
|
||||||
|
$userWithNoOpenTickets->categories = array(1);
|
||||||
|
$userWithNoOpenTickets->permissions = $this->getPermissionsForUser();
|
||||||
|
$userWithOneOpenTicket = new UserContext();
|
||||||
|
$userWithOneOpenTicket->id = 2;
|
||||||
|
$userWithOneOpenTicket->categories = array(2);
|
||||||
|
$userWithOneOpenTicket->permissions = $this->getPermissionsForUser();
|
||||||
|
$usersToReturn = array(
|
||||||
|
$userWithNoOpenTickets,
|
||||||
|
$userWithOneOpenTicket
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->userGateway->method('getUsersByNumberOfOpenTickets')
|
||||||
|
->with($this->heskSettings)
|
||||||
|
->willReturn($usersToReturn);
|
||||||
|
|
||||||
|
//-- Act
|
||||||
|
$actual = $this->autoassigner->getNextUserForTicket(2, $this->heskSettings);
|
||||||
|
|
||||||
|
//-- Assert
|
||||||
|
self::assertThat($actual, self::equalTo($userWithOneOpenTicket));
|
||||||
|
}
|
||||||
|
|
||||||
|
function testItReturnsAdminUsers() {
|
||||||
|
//-- Arrange
|
||||||
|
$userWithNoOpenTickets = new UserContext();
|
||||||
|
$userWithNoOpenTickets->id = 1;
|
||||||
|
$userWithNoOpenTickets->categories = array(1);
|
||||||
|
$userWithNoOpenTickets->permissions = $this->getPermissionsForUser();
|
||||||
|
$userWithNoOpenTickets->admin = true;
|
||||||
|
$userWithOneOpenTicket = new UserContext();
|
||||||
|
$userWithOneOpenTicket->id = 2;
|
||||||
|
$userWithOneOpenTicket->categories = array(2);
|
||||||
|
$userWithOneOpenTicket->permissions = $this->getPermissionsForUser();
|
||||||
|
$usersToReturn = array(
|
||||||
|
$userWithNoOpenTickets,
|
||||||
|
$userWithOneOpenTicket
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->userGateway->method('getUsersByNumberOfOpenTickets')
|
||||||
|
->with($this->heskSettings)
|
||||||
|
->willReturn($usersToReturn);
|
||||||
|
|
||||||
|
//-- Act
|
||||||
|
$actual = $this->autoassigner->getNextUserForTicket(2, $this->heskSettings);
|
||||||
|
|
||||||
|
//-- Assert
|
||||||
|
self::assertThat($actual, self::equalTo($userWithNoOpenTickets));
|
||||||
|
}
|
||||||
|
|
||||||
|
function testItOnlyReturnsUsersWhoCanViewAndRespondToTickets() {
|
||||||
|
//-- Arrange
|
||||||
|
$userWithNoOpenTickets = new UserContext();
|
||||||
|
$userWithNoOpenTickets->id = 1;
|
||||||
|
$userWithNoOpenTickets->categories = array(1);
|
||||||
|
$userWithNoOpenTickets->permissions = array();
|
||||||
|
$userWithOneOpenTicket = new UserContext();
|
||||||
|
$userWithOneOpenTicket->id = 2;
|
||||||
|
$userWithOneOpenTicket->categories = array(1);
|
||||||
|
$userWithOneOpenTicket->permissions = $this->getPermissionsForUser();
|
||||||
|
$usersToReturn = array(
|
||||||
|
$userWithNoOpenTickets,
|
||||||
|
$userWithOneOpenTicket
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->userGateway->method('getUsersByNumberOfOpenTickets')
|
||||||
|
->with($this->heskSettings)
|
||||||
|
->willReturn($usersToReturn);
|
||||||
|
|
||||||
|
//-- Act
|
||||||
|
$actual = $this->autoassigner->getNextUserForTicket(1, $this->heskSettings);
|
||||||
|
|
||||||
|
//-- Assert
|
||||||
|
self::assertThat($actual, self::equalTo($userWithOneOpenTicket));
|
||||||
|
}
|
||||||
|
|
||||||
|
function testItReturnsNullWhenNoOneCanHandleTheTicket() {
|
||||||
|
//-- Arrange
|
||||||
|
$userWithNoOpenTickets = new UserContext();
|
||||||
|
$userWithNoOpenTickets->id = 1;
|
||||||
|
$userWithNoOpenTickets->categories = array(1);
|
||||||
|
$userWithNoOpenTickets->permissions = $this->getPermissionsForUser();
|
||||||
|
$userWithOneOpenTicket = new UserContext();
|
||||||
|
$userWithOneOpenTicket->id = 2;
|
||||||
|
$userWithOneOpenTicket->categories = array(1);
|
||||||
|
$userWithOneOpenTicket->permissions = $this->getPermissionsForUser();
|
||||||
|
$usersToReturn = array(
|
||||||
|
$userWithNoOpenTickets,
|
||||||
|
$userWithOneOpenTicket
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->userGateway->method('getUsersByNumberOfOpenTickets')
|
||||||
|
->with($this->heskSettings)
|
||||||
|
->willReturn($usersToReturn);
|
||||||
|
|
||||||
|
//-- Act
|
||||||
|
$actual = $this->autoassigner->getNextUserForTicket(2, $this->heskSettings);
|
||||||
|
|
||||||
|
//-- Assert
|
||||||
|
self::assertThat($actual, self::isNull());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user