Autoassign logic is finished

remotes/upstream/api-rewrite
Mike Koch 7 years ago
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…
Cancel
Save