Autoassign logic is finished
This commit is contained in:
parent
af789a7060
commit
06a38e9383
@ -4,30 +4,55 @@ namespace BusinessLogic\Security;
|
||||
|
||||
|
||||
class UserContext {
|
||||
/* @var $id int */
|
||||
public $id;
|
||||
|
||||
/* @var $username string */
|
||||
public $username;
|
||||
|
||||
/* @var $admin bool */
|
||||
public $admin;
|
||||
|
||||
/* @var $name string */
|
||||
public $name;
|
||||
|
||||
/* @var $email string */
|
||||
public $email;
|
||||
|
||||
/* @var $signature string */
|
||||
public $signature;
|
||||
|
||||
/* @var $language string|null */
|
||||
public $language;
|
||||
|
||||
/* @var $categories int[] */
|
||||
public $categories;
|
||||
|
||||
/* @var $permissions string[] */
|
||||
public $permissions;
|
||||
|
||||
/**
|
||||
* @var UserContextPreferences
|
||||
*/
|
||||
/* @var UserContextPreferences */
|
||||
public $preferences;
|
||||
|
||||
/**
|
||||
* @var UserContextNotifications
|
||||
*/
|
||||
/* @var UserContextNotifications */
|
||||
public $notificationSettings;
|
||||
|
||||
/* @var $autoAssign bool */
|
||||
public $autoAssign;
|
||||
|
||||
/* @var $ratingNegative int */
|
||||
public $ratingNegative;
|
||||
|
||||
/* @var $ratingPositive int */
|
||||
public $ratingPositive;
|
||||
|
||||
/* @var $rating float */
|
||||
public $rating;
|
||||
|
||||
/* @var $totalNumberOfReplies int */
|
||||
public $totalNumberOfReplies;
|
||||
|
||||
/* @var $active bool */
|
||||
public $active;
|
||||
|
||||
/**
|
||||
|
@ -31,7 +31,16 @@ class Autoassigner {
|
||||
|
||||
$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'];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $heskSettings array
|
||||
* @return UserContext[]
|
||||
*/
|
||||
function getUsersByNumberOfOpenTickets($heskSettings) {
|
||||
$this->init();
|
||||
|
||||
|
@ -47,14 +47,20 @@ class AutoassignerTest extends TestCase {
|
||||
self::assertThat($owner, self::isNull());
|
||||
}
|
||||
|
||||
function getPermissionsForUser() {
|
||||
return array('can_view_tickets', 'can_reply_tickets');
|
||||
}
|
||||
|
||||
function testItReturnsTheUsersWithLeastOpenTickets() {
|
||||
//-- 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
|
||||
@ -70,4 +76,109 @@ class AutoassignerTest extends TestCase {
|
||||
//-- Assert
|
||||
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