Moved validation logic to its own class, working on createTicket tests
parent
044faa77f6
commit
1a8a989e87
@ -0,0 +1,127 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Mike
|
||||
* Date: 2/12/2017
|
||||
* Time: 1:01 AM
|
||||
*/
|
||||
|
||||
namespace BusinessLogic\Tickets;
|
||||
|
||||
|
||||
use BusinessLogic\Categories\CategoryRetriever;
|
||||
use BusinessLogic\Security\BanRetriever;
|
||||
use BusinessLogic\Tickets\CustomFields\CustomFieldValidator;
|
||||
use BusinessLogic\ValidationModel;
|
||||
use BusinessLogic\Validators;
|
||||
use Core\Constants\CustomField;
|
||||
|
||||
class NewTicketValidator {
|
||||
/**
|
||||
* @var $categoryRetriever CategoryRetriever
|
||||
*/
|
||||
private $categoryRetriever;
|
||||
/**
|
||||
* @var $banRetriever BanRetriever
|
||||
*/
|
||||
private $banRetriever;
|
||||
/**
|
||||
* @var $ticketValidators TicketValidators
|
||||
*/
|
||||
private $ticketValidators;
|
||||
|
||||
function __construct($categoryRetriever, $banRetriever, $ticketValidators) {
|
||||
$this->categoryRetriever = $categoryRetriever;
|
||||
$this->banRetriever = $banRetriever;
|
||||
$this->ticketValidators = $ticketValidators;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $ticketRequest CreateTicketByCustomerModel
|
||||
* @param $heskSettings array HESK settings
|
||||
* @return ValidationModel If errorKeys is empty, validation successful. Otherwise invalid ticket
|
||||
*/
|
||||
function validateNewTicketForCustomer($ticketRequest, $heskSettings, $userContext) {
|
||||
$TICKET_PRIORITY_CRITICAL = 0;
|
||||
|
||||
$validationModel = new ValidationModel();
|
||||
|
||||
if ($ticketRequest->name === NULL || $ticketRequest->name == '') {
|
||||
$validationModel->errorKeys[] = 'NO_NAME';
|
||||
}
|
||||
|
||||
if (!Validators::validateEmail($ticketRequest->email, $heskSettings['multi_eml'], false)) {
|
||||
$validationModel->errorKeys[] = 'INVALID_OR_MISSING_EMAIL';
|
||||
}
|
||||
|
||||
$categoryId = intval($ticketRequest->category);
|
||||
if ($categoryId < 1) {
|
||||
$validationModel->errorKeys[] = 'NO_CATEGORY';
|
||||
} else {
|
||||
$categoryExists = array_key_exists($categoryId, $this->categoryRetriever->getAllCategories($heskSettings, $userContext));
|
||||
if (!$categoryExists) {
|
||||
$validationModel->errorKeys[] = 'CATEGORY_DOES_NOT_EXIST';
|
||||
}
|
||||
}
|
||||
|
||||
//-- TODO assert priority exists
|
||||
|
||||
if ($heskSettings['cust_urgency'] && intval($ticketRequest->priority) === $TICKET_PRIORITY_CRITICAL) {
|
||||
$validationModel->errorKeys[] = 'CRITICAL_PRIORITY_FORBIDDEN';
|
||||
}
|
||||
|
||||
if ($heskSettings['require_subject'] === 1 &&
|
||||
($ticketRequest->subject === NULL || $ticketRequest->subject === '')) {
|
||||
$validationModel->errorKeys[] = 'SUBJECT_REQUIRED';
|
||||
}
|
||||
|
||||
if ($heskSettings['require_message'] === 1 &&
|
||||
($ticketRequest->message === NULL || $ticketRequest->message === '')) {
|
||||
$validationModel->errorKeys[] = 'MESSAGE_REQUIRED';
|
||||
}
|
||||
|
||||
foreach ($heskSettings['custom_fields'] as $key => $value) {
|
||||
$customFieldNumber = intval(str_replace('custom', '', $key));
|
||||
if ($value['use'] == 1 && CustomFieldValidator::isCustomFieldInCategory($customFieldNumber, intval($ticketRequest->category), false, $heskSettings)) {
|
||||
$custom_field_value = $ticketRequest->customFields[$customFieldNumber];
|
||||
if (empty($custom_field_value)) {
|
||||
$validationModel->errorKeys[] = "CUSTOM_FIELD_{$customFieldNumber}_INVALID::NO_VALUE";
|
||||
continue;
|
||||
}
|
||||
switch($value['type']) {
|
||||
case CustomField::DATE:
|
||||
if (!preg_match("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/", $custom_field_value)) {
|
||||
$validationModel->errorKeys[] = 'CUSTOM_FIELD_' . $customFieldNumber . '_INVALID::INVALID_DATE';
|
||||
} else {
|
||||
// Actually validate based on range
|
||||
$date = strtotime($custom_field_value . ' t00:00:00');
|
||||
$dmin = strlen($value['value']['dmin']) ? strtotime($value['value']['dmin'] . ' t00:00:00') : false;
|
||||
$dmax = strlen($value['value']['dmax']) ? strtotime($value['value']['dmax'] . ' t00:00:00') : false;
|
||||
|
||||
if ($dmin && $dmin > $date) {
|
||||
$validationModel->errorKeys[] = 'CUSTOM_FIELD_' . $customFieldNumber . '_INVALID::DATE_BEFORE_MIN::MIN:' . date('Y-m-d', $dmin) . '::ENTERED:' . date('Y-m-d', $date);
|
||||
} elseif ($dmax && $dmax < $date) {
|
||||
$validationModel->errorKeys[] = 'CUSTOM_FIELD_' . $customFieldNumber . '_INVALID::DATE_AFTER_MAX::MAX:' . date('Y-m-d', $dmax) . '::ENTERED:' . date('Y-m-d', $date);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case CustomField::EMAIL:
|
||||
if (!Validators::validateEmail($custom_field_value, $value['value']['multiple'], false)) {
|
||||
$validationModel->errorKeys[] = "CUSTOM_FIELD_{$customFieldNumber}_INVALID::INVALID_EMAIL";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($this->banRetriever->isEmailBanned($ticketRequest->email, $heskSettings)) {
|
||||
$validationModel->errorKeys[] = 'EMAIL_BANNED';
|
||||
}
|
||||
|
||||
if ($this->ticketValidators->isCustomerAtMaxTickets($ticketRequest->email, $heskSettings)) {
|
||||
$validationModel->errorKeys[] = 'EMAIL_AT_MAX_OPEN_TICKETS';
|
||||
}
|
||||
|
||||
return $validationModel;
|
||||
}
|
||||
}
|
@ -0,0 +1,432 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: mkoch
|
||||
* Date: 2/4/2017
|
||||
* Time: 9:32 PM
|
||||
*/
|
||||
|
||||
namespace BusinessLogic\Tickets\TicketCreatorTests;
|
||||
|
||||
|
||||
use BusinessLogic\Categories\Category;
|
||||
use BusinessLogic\Categories\CategoryRetriever;
|
||||
use BusinessLogic\Security\BanRetriever;
|
||||
use BusinessLogic\Security\UserContext;
|
||||
use BusinessLogic\Tickets\CreateTicketByCustomerModel;
|
||||
use BusinessLogic\Tickets\NewTicketValidator;
|
||||
use BusinessLogic\Tickets\TicketValidators;
|
||||
use Core\Constants\CustomField;
|
||||
use Core\Constants\Priority;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class NewTicketValidatorTest extends TestCase {
|
||||
/**
|
||||
* @var $newTicketValidator NewTicketValidator
|
||||
*/
|
||||
private $newTicketValidator;
|
||||
|
||||
/**
|
||||
* @var $banRetriever \PHPUnit_Framework_MockObject_MockObject
|
||||
*/
|
||||
private $banRetriever;
|
||||
|
||||
/**
|
||||
* @var $categoryRetriever \PHPUnit_Framework_MockObject_MockObject
|
||||
*/
|
||||
private $categoryRetriever;
|
||||
|
||||
/**
|
||||
* @var $ticketValidators \PHPUnit_Framework_MockObject_MockObject
|
||||
*/
|
||||
private $ticketValidators;
|
||||
|
||||
/**
|
||||
* @var $ticketRequest CreateTicketByCustomerModel
|
||||
*/
|
||||
private $ticketRequest;
|
||||
|
||||
/**
|
||||
* @var $userContext UserContext
|
||||
*/
|
||||
private $userContext;
|
||||
|
||||
private $heskSettings = array();
|
||||
|
||||
function setUp() {
|
||||
$this->banRetriever = $this->createMock(BanRetriever::class);
|
||||
$this->categoryRetriever = $this->createMock(CategoryRetriever::class);
|
||||
$this->ticketValidators = $this->createMock(TicketValidators::class);
|
||||
$this->newTicketValidator = new NewTicketValidator($this->categoryRetriever, $this->banRetriever, $this->ticketValidators);
|
||||
$this->userContext = new UserContext();
|
||||
|
||||
$this->ticketRequest = new CreateTicketByCustomerModel();
|
||||
$this->ticketRequest->name = 'Name';
|
||||
$this->ticketRequest->email = 'some@e.mail';
|
||||
$this->ticketRequest->category = 1;
|
||||
$this->ticketRequest->priority = Priority::HIGH;
|
||||
$this->ticketRequest->subject = 'Subject';
|
||||
$this->ticketRequest->message = 'Message';
|
||||
$this->ticketRequest->customFields = array();
|
||||
$this->heskSettings = array(
|
||||
'multi_eml' => false,
|
||||
'cust_urgency' => false,
|
||||
'require_subject' => 1,
|
||||
'require_message' => 1,
|
||||
'custom_fields' => array(),
|
||||
);
|
||||
|
||||
$category = new Category();
|
||||
$category->accessible = true;
|
||||
$category->id = 1;
|
||||
$categories = array();
|
||||
$categories[1] = $category;
|
||||
$this->categoryRetriever->method('getAllCategories')
|
||||
->willReturn($categories);
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenNameIsNull() {
|
||||
//-- Arrange
|
||||
$this->ticketRequest->name = null;
|
||||
|
||||
//-- Act
|
||||
$validationModel = $this->newTicketValidator->validateNewTicketForCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->userContext);
|
||||
|
||||
//-- Assert
|
||||
$this->assertArraySubset(['NO_NAME'], $validationModel->errorKeys);
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenNameIsBlank() {
|
||||
//-- Arrange
|
||||
$this->ticketRequest->name = '';
|
||||
|
||||
//-- Act
|
||||
$validationModel = $this->newTicketValidator->validateNewTicketForCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->userContext);
|
||||
|
||||
//-- Assert
|
||||
$this->assertArraySubset(['NO_NAME'], $validationModel->errorKeys);
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenEmailIsNull() {
|
||||
//-- Arrange
|
||||
$this->ticketRequest->email = null;
|
||||
|
||||
//-- Act
|
||||
$validationModel = $this->newTicketValidator->validateNewTicketForCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->userContext);
|
||||
|
||||
//-- Assert
|
||||
$this->assertArraySubset(['INVALID_OR_MISSING_EMAIL'], $validationModel->errorKeys);
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenEmailIsBlank() {
|
||||
//-- Arrange
|
||||
$this->ticketRequest->email = '';
|
||||
|
||||
//-- Act
|
||||
$validationModel = $this->newTicketValidator->validateNewTicketForCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->userContext);
|
||||
|
||||
//-- Assert
|
||||
$this->assertArraySubset(['INVALID_OR_MISSING_EMAIL'], $validationModel->errorKeys);
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenEmailIsInvalid() {
|
||||
//-- Arrange
|
||||
$this->ticketRequest->email = 'something@';
|
||||
|
||||
//-- Act
|
||||
$validationModel = $this->newTicketValidator->validateNewTicketForCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->userContext);
|
||||
|
||||
//-- Assert
|
||||
$this->assertArraySubset(['INVALID_OR_MISSING_EMAIL'], $validationModel->errorKeys);
|
||||
}
|
||||
|
||||
function testItSupportsMultipleEmails() {
|
||||
//-- Arrange
|
||||
$this->ticketRequest->email = 'something@email.com;another@valid.email';
|
||||
$this->heskSettings['multi_eml'] = true;
|
||||
|
||||
//-- Act
|
||||
$validationModel = $this->newTicketValidator->validateNewTicketForCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->userContext);
|
||||
|
||||
//-- Assert
|
||||
$this->assertThat($validationModel->valid, $this->isTrue());
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenCategoryIsNotANumber() {
|
||||
//-- Arrange
|
||||
$this->ticketRequest->category = 'something';
|
||||
|
||||
//-- Act
|
||||
$validationModel = $this->newTicketValidator->validateNewTicketForCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->userContext);
|
||||
|
||||
//-- Assert
|
||||
$this->assertArraySubset(['NO_CATEGORY'], $validationModel->errorKeys);
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenCategoryIsNegative() {
|
||||
//-- Arrange
|
||||
$this->ticketRequest->category = -5;
|
||||
|
||||
//-- Act
|
||||
$validationModel = $this->newTicketValidator->validateNewTicketForCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->userContext);
|
||||
|
||||
//-- Assert
|
||||
$this->assertArraySubset(['NO_CATEGORY'], $validationModel->errorKeys);
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenTheCategoryDoesNotExist() {
|
||||
//-- Arrange
|
||||
$this->ticketRequest->category = 10;
|
||||
|
||||
//-- Act
|
||||
$validationModel = $this->newTicketValidator->validateNewTicketForCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->userContext);
|
||||
|
||||
//-- Assert
|
||||
$this->assertArraySubset(['CATEGORY_DOES_NOT_EXIST'], $validationModel->errorKeys);
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenTheCustomerSubmitsTicketWithPriorityCritical() {
|
||||
//-- Arrange
|
||||
$this->ticketRequest->priority = Priority::CRITICAL;
|
||||
$this->heskSettings['cust_urgency'] = true;
|
||||
|
||||
//-- Act
|
||||
$validationModel = $this->newTicketValidator->validateNewTicketForCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->userContext);
|
||||
|
||||
//-- Assert
|
||||
$this->assertArraySubset(['CRITICAL_PRIORITY_FORBIDDEN'], $validationModel->errorKeys);
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenTheCustomerSubmitsTicketWithNullSubjectAndItIsRequired() {
|
||||
//-- Arrange
|
||||
$this->ticketRequest->subject = null;
|
||||
$this->heskSettings['require_subject'] = 1;
|
||||
|
||||
//-- Act
|
||||
$validationModel = $this->newTicketValidator->validateNewTicketForCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->userContext);
|
||||
|
||||
//-- Assert
|
||||
$this->assertArraySubset(['SUBJECT_REQUIRED'], $validationModel->errorKeys);
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenTheCustomerSubmitsTicketWithBlankSubjectAndItIsRequired() {
|
||||
//-- Arrange
|
||||
$this->ticketRequest->subject = '';
|
||||
$this->heskSettings['require_subject'] = 1;
|
||||
|
||||
//-- Act
|
||||
$validationModel = $this->newTicketValidator->validateNewTicketForCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->userContext);
|
||||
|
||||
//-- Assert
|
||||
$this->assertArraySubset(['SUBJECT_REQUIRED'], $validationModel->errorKeys);
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenTheCustomerSubmitsTicketWithNullMessageAndItIsRequired() {
|
||||
//-- Arrange
|
||||
$this->ticketRequest->message = null;
|
||||
$this->heskSettings['require_message'] = 1;
|
||||
|
||||
//-- Act
|
||||
$validationModel = $this->newTicketValidator->validateNewTicketForCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->userContext);
|
||||
|
||||
//-- Assert
|
||||
$this->assertArraySubset(['MESSAGE_REQUIRED'], $validationModel->errorKeys);
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenTheCustomerSubmitsTicketWithBlankMessageAndItIsRequired() {
|
||||
//-- Arrange
|
||||
$this->ticketRequest->message = '';
|
||||
$this->heskSettings['require_message'] = 1;
|
||||
|
||||
//-- Act
|
||||
$validationModel = $this->newTicketValidator->validateNewTicketForCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->userContext);
|
||||
|
||||
//-- Assert
|
||||
$this->assertArraySubset(['MESSAGE_REQUIRED'], $validationModel->errorKeys);
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenTheCustomerSubmitsTicketWithNullRequiredCustomField() {
|
||||
//-- Arrange
|
||||
$customField = array();
|
||||
$customField['req'] = 1;
|
||||
$customField['type'] = CustomField::TEXT;
|
||||
$customField['use'] = 1;
|
||||
$customField['category'] = array();
|
||||
$this->heskSettings['custom_fields']['custom1'] = $customField;
|
||||
$this->ticketRequest->customFields[1] = null;
|
||||
|
||||
//-- Act
|
||||
$validationModel = $this->newTicketValidator->validateNewTicketForCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->userContext);
|
||||
|
||||
//-- Assert
|
||||
$this->assertArraySubset(['CUSTOM_FIELD_1_INVALID::NO_VALUE'], $validationModel->errorKeys);
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenTheCustomerSubmitsTicketWithBlankRequiredCustomField() {
|
||||
//-- Arrange
|
||||
$customField = array();
|
||||
$customField['req'] = 1;
|
||||
$customField['type'] = CustomField::TEXT;
|
||||
$customField['use'] = 1;
|
||||
$customField['category'] = array();
|
||||
$this->heskSettings['custom_fields']['custom1'] = $customField;
|
||||
$this->ticketRequest->customFields[1] = '';
|
||||
|
||||
//-- Act
|
||||
$validationModel = $this->newTicketValidator->validateNewTicketForCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->userContext);
|
||||
|
||||
//-- Assert
|
||||
$this->assertArraySubset(['CUSTOM_FIELD_1_INVALID::NO_VALUE'], $validationModel->errorKeys);
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenTheCustomerSubmitsTicketWithDateCustomFieldThatIsInvalid() {
|
||||
//-- Arrange
|
||||
$customField = array();
|
||||
$customField['req'] = 1;
|
||||
$customField['type'] = CustomField::DATE;
|
||||
$customField['use'] = 1;
|
||||
$customField['category'] = array();
|
||||
$this->heskSettings['custom_fields']['custom1'] = $customField;
|
||||
$this->ticketRequest->customFields[1] = '2017-30-00';
|
||||
|
||||
//-- Act
|
||||
$validationModel = $this->newTicketValidator->validateNewTicketForCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->userContext);
|
||||
|
||||
//-- Assert
|
||||
$this->assertArraySubset(['CUSTOM_FIELD_1_INVALID::INVALID_DATE'], $validationModel->errorKeys);
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenTheCustomerSubmitsTicketWithDateThatIsBeforeMinDate() {
|
||||
//-- Arrange
|
||||
$customField = array();
|
||||
$customField['req'] = 1;
|
||||
$customField['type'] = CustomField::DATE;
|
||||
$customField['use'] = 1;
|
||||
$customField['category'] = array();
|
||||
$customField['value'] = array(
|
||||
'dmin' => '2017-01-01',
|
||||
'dmax' => ''
|
||||
);
|
||||
$this->heskSettings['custom_fields']['custom1'] = $customField;
|
||||
$this->ticketRequest->customFields[1] = '2016-12-31';
|
||||
|
||||
//-- Act
|
||||
$validationModel = $this->newTicketValidator->validateNewTicketForCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->userContext);
|
||||
|
||||
//-- Assert
|
||||
$this->assertArraySubset(['CUSTOM_FIELD_1_INVALID::DATE_BEFORE_MIN::MIN:2017-01-01::ENTERED:2016-12-31'], $validationModel->errorKeys);
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenTheCustomerSubmitsTicketWithDateThatIsAfterMaxDate() {
|
||||
//-- Arrange
|
||||
$customField = array();
|
||||
$customField['req'] = 1;
|
||||
$customField['type'] = CustomField::DATE;
|
||||
$customField['use'] = 1;
|
||||
$customField['category'] = array();
|
||||
$customField['value'] = array(
|
||||
'dmin' => '',
|
||||
'dmax' => '2017-01-01'
|
||||
);
|
||||
$this->heskSettings['custom_fields']['custom1'] = $customField;
|
||||
$this->ticketRequest->customFields[1] = '2017-01-02';
|
||||
|
||||
//-- Act
|
||||
$validationModel = $this->newTicketValidator->validateNewTicketForCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->userContext);
|
||||
|
||||
//-- Assert
|
||||
$this->assertArraySubset(['CUSTOM_FIELD_1_INVALID::DATE_AFTER_MAX::MAX:2017-01-01::ENTERED:2017-01-02'], $validationModel->errorKeys);
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenTheCustomerSubmitsTicketWithEmailThatIsInvalid() {
|
||||
//-- Arrange
|
||||
$customField = array();
|
||||
$customField['req'] = 1;
|
||||
$customField['type'] = CustomField::EMAIL;
|
||||
$customField['use'] = 1;
|
||||
$customField['category'] = array();
|
||||
$customField['value'] = array(
|
||||
'multiple' => 0
|
||||
);
|
||||
$this->heskSettings['custom_fields']['custom1'] = $customField;
|
||||
$this->ticketRequest->customFields[1] = 'invalid@';
|
||||
|
||||
//-- Act
|
||||
$validationModel = $this->newTicketValidator->validateNewTicketForCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->userContext);
|
||||
|
||||
//-- Assert
|
||||
$this->assertArraySubset(['CUSTOM_FIELD_1_INVALID::INVALID_EMAIL'], $validationModel->errorKeys);
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenTheCustomerSubmitsTicketWithABannedEmail() {
|
||||
//-- Arrange
|
||||
$this->ticketRequest->email = 'some@banned.email';
|
||||
$this->banRetriever->method('isEmailBanned')
|
||||
->with($this->ticketRequest->email, $this->heskSettings)
|
||||
->willReturn(true);
|
||||
|
||||
//-- Act
|
||||
$validationModel = $this->newTicketValidator->validateNewTicketForCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->userContext);
|
||||
|
||||
//-- Assert
|
||||
$this->assertArraySubset(['EMAIL_BANNED'], $validationModel->errorKeys);
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenTheCustomerSubmitsTicketWhenTheyAreMaxedOut() {
|
||||
//-- Arrange
|
||||
$this->ticketRequest->email = 'some@maxedout.email';
|
||||
$this->ticketValidators->method('isCustomerAtMaxTickets')
|
||||
->with($this->ticketRequest->email, $this->heskSettings)
|
||||
->willReturn(true);
|
||||
|
||||
//-- Act
|
||||
$validationModel = $this->newTicketValidator->validateNewTicketForCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->userContext);
|
||||
|
||||
//-- Assert
|
||||
$this->assertArraySubset(['EMAIL_AT_MAX_OPEN_TICKETS'], $validationModel->errorKeys);
|
||||
}
|
||||
}
|
@ -1,606 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: mkoch
|
||||
* Date: 2/4/2017
|
||||
* Time: 9:32 PM
|
||||
*/
|
||||
|
||||
namespace BusinessLogic\Tickets;
|
||||
|
||||
|
||||
use BusinessLogic\Categories\Category;
|
||||
use BusinessLogic\Categories\CategoryRetriever;
|
||||
use BusinessLogic\Exceptions\ValidationException;
|
||||
use BusinessLogic\Security\BanRetriever;
|
||||
use BusinessLogic\Security\UserContext;
|
||||
use Core\Constants\CustomField;
|
||||
use Core\Constants\Priority;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class TicketCreatorTest extends TestCase {
|
||||
/**
|
||||
* @var $ticketCreator TicketCreator
|
||||
*/
|
||||
private $ticketCreator;
|
||||
|
||||
/**
|
||||
* @var $banRetriever \PHPUnit_Framework_MockObject_MockObject
|
||||
*/
|
||||
private $banRetriever;
|
||||
|
||||
/**
|
||||
* @var $categoryRetriever \PHPUnit_Framework_MockObject_MockObject
|
||||
*/
|
||||
private $categoryRetriever;
|
||||
|
||||
/**
|
||||
* @var $ticketValidators \PHPUnit_Framework_MockObject_MockObject
|
||||
*/
|
||||
private $ticketValidators;
|
||||
|
||||
/**
|
||||
* @var $ticketRequest CreateTicketByCustomerModel
|
||||
*/
|
||||
private $ticketRequest;
|
||||
|
||||
/**
|
||||
* @var $userContext UserContext
|
||||
*/
|
||||
private $userContext;
|
||||
|
||||
private $heskSettings = array();
|
||||
private $modsForHeskSettings = array();
|
||||
|
||||
function setUp() {
|
||||
$this->banRetriever = $this->createMock(BanRetriever::class);
|
||||
$this->categoryRetriever = $this->createMock(CategoryRetriever::class);
|
||||
$this->ticketValidators = $this->createMock(TicketValidators::class);
|
||||
$this->ticketCreator = new TicketCreator($this->categoryRetriever, $this->banRetriever, $this->ticketValidators);
|
||||
$this->userContext = new UserContext();
|
||||
|
||||
$this->ticketRequest = new CreateTicketByCustomerModel();
|
||||
$this->ticketRequest->name = 'Name';
|
||||
$this->ticketRequest->email = 'some@e.mail';
|
||||
$this->ticketRequest->category = 1;
|
||||
$this->ticketRequest->priority = Priority::HIGH;
|
||||
$this->ticketRequest->subject = 'Subject';
|
||||
$this->ticketRequest->message = 'Message';
|
||||
$this->ticketRequest->customFields = array();
|
||||
$this->heskSettings = array(
|
||||
'multi_eml' => false,
|
||||
'cust_urgency' => false,
|
||||
'require_subject' => 1,
|
||||
'require_message' => 1,
|
||||
'custom_fields' => array(),
|
||||
);
|
||||
|
||||
$category = new Category();
|
||||
$category->accessible = true;
|
||||
$category->id = 1;
|
||||
$categories = array();
|
||||
$categories[1] = $category;
|
||||
$this->categoryRetriever->method('getAllCategories')
|
||||
->willReturn($categories);
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenNameIsNull() {
|
||||
//-- Arrange
|
||||
$this->ticketRequest->name = null;
|
||||
|
||||
//-- Act
|
||||
$exceptionThrown = false;
|
||||
try {
|
||||
$this->ticketCreator->createTicketByCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->modsForHeskSettings,
|
||||
$this->userContext);
|
||||
} catch (ValidationException $e) {
|
||||
//-- Assert (1/2)
|
||||
$exceptionThrown = true;
|
||||
$this->assertArraySubset(['NO_NAME'], $e->validationModel->errorKeys);
|
||||
}
|
||||
|
||||
//-- Assert (2/2)
|
||||
$this->assertThat($exceptionThrown, $this->equalTo(true));
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenNameIsBlank() {
|
||||
//-- Arrange
|
||||
$this->ticketRequest->name = '';
|
||||
|
||||
//-- Act
|
||||
$exceptionThrown = false;
|
||||
try {
|
||||
$this->ticketCreator->createTicketByCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->modsForHeskSettings,
|
||||
$this->userContext);
|
||||
} catch (ValidationException $e) {
|
||||
//-- Assert (1/2)
|
||||
$exceptionThrown = true;
|
||||
$this->assertArraySubset(['NO_NAME'], $e->validationModel->errorKeys);
|
||||
}
|
||||
|
||||
//-- Assert (2/2)
|
||||
$this->assertThat($exceptionThrown, $this->equalTo(true));
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenEmailIsNull() {
|
||||
//-- Arrange
|
||||
$this->ticketRequest->email = null;
|
||||
|
||||
//-- Act
|
||||
$exceptionThrown = false;
|
||||
try {
|
||||
$this->ticketCreator->createTicketByCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->modsForHeskSettings,
|
||||
$this->userContext);
|
||||
} catch (ValidationException $e) {
|
||||
//-- Assert (1/2)
|
||||
$exceptionThrown = true;
|
||||
$this->assertArraySubset(['INVALID_OR_MISSING_EMAIL'], $e->validationModel->errorKeys);
|
||||
}
|
||||
|
||||
//-- Assert (2/2)
|
||||
$this->assertThat($exceptionThrown, $this->equalTo(true));
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenEmailIsBlank() {
|
||||
//-- Arrange
|
||||
$this->ticketRequest->email = '';
|
||||
|
||||
//-- Act
|
||||
$exceptionThrown = false;
|
||||
try {
|
||||
$this->ticketCreator->createTicketByCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->modsForHeskSettings,
|
||||
$this->userContext);
|
||||
} catch (ValidationException $e) {
|
||||
//-- Assert (1/2)
|
||||
$exceptionThrown = true;
|
||||
$this->assertArraySubset(['INVALID_OR_MISSING_EMAIL'], $e->validationModel->errorKeys);
|
||||
}
|
||||
|
||||
//-- Assert (2/2)
|
||||
$this->assertThat($exceptionThrown, $this->equalTo(true));
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenEmailIsInvalid() {
|
||||
//-- Arrange
|
||||
$this->ticketRequest->email = 'something@';
|
||||
|
||||
//-- Act
|
||||
$exceptionThrown = false;
|
||||
try {
|
||||
$this->ticketCreator->createTicketByCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->modsForHeskSettings,
|
||||
$this->userContext);
|
||||
} catch (ValidationException $e) {
|
||||
//-- Assert (1/2)
|
||||
$exceptionThrown = true;
|
||||
$this->assertArraySubset(['INVALID_OR_MISSING_EMAIL'], $e->validationModel->errorKeys);
|
||||
}
|
||||
|
||||
//-- Assert (2/2)
|
||||
$this->assertThat($exceptionThrown, $this->equalTo(true));
|
||||
}
|
||||
|
||||
function testItSupportsMultipleEmails() {
|
||||
//-- Arrange
|
||||
$this->ticketRequest->email = 'something@email.com;another@valid.email';
|
||||
$this->heskSettings['multi_eml'] = true;
|
||||
|
||||
//-- Act
|
||||
$exceptionThrown = false;
|
||||
try {
|
||||
$this->ticketCreator->createTicketByCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->modsForHeskSettings,
|
||||
$this->userContext);
|
||||
} catch (ValidationException $e) {
|
||||
var_dump($e->validationModel->errorKeys);
|
||||
$this->fail('Should not have thrown a ValidationException! Validation error keys are above.');
|
||||
}
|
||||
|
||||
//-- Assert (2/2)
|
||||
$this->assertThat($exceptionThrown, $this->equalTo(false));
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenCategoryIsNotANumber() {
|
||||
//-- Arrange
|
||||
$this->ticketRequest->category = 'something';
|
||||
|
||||
//-- Act
|
||||
$exceptionThrown = false;
|
||||
try {
|
||||
$this->ticketCreator->createTicketByCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->modsForHeskSettings,
|
||||
$this->userContext);
|
||||
} catch (ValidationException $e) {
|
||||
//-- Assert (1/2)
|
||||
$exceptionThrown = true;
|
||||
$this->assertArraySubset(['NO_CATEGORY'], $e->validationModel->errorKeys);
|
||||
}
|
||||
|
||||
//-- Assert (2/2)
|
||||
$this->assertThat($exceptionThrown, $this->equalTo(true));
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenCategoryIsNegative() {
|
||||
//-- Arrange
|
||||
$this->ticketRequest->category = -5;
|
||||
|
||||
//-- Act
|
||||
$exceptionThrown = false;
|
||||
try {
|
||||
$this->ticketCreator->createTicketByCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->modsForHeskSettings,
|
||||
$this->userContext);
|
||||
} catch (ValidationException $e) {
|
||||
//-- Assert (1/2)
|
||||
$exceptionThrown = true;
|
||||
$this->assertArraySubset(['NO_CATEGORY'], $e->validationModel->errorKeys);
|
||||
}
|
||||
|
||||
//-- Assert (2/2)
|
||||
$this->assertThat($exceptionThrown, $this->equalTo(true));
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenTheCategoryDoesNotExist() {
|
||||
//-- Arrange
|
||||
$this->ticketRequest->category = 10;
|
||||
|
||||
//-- Act
|
||||
$exceptionThrown = false;
|
||||
try {
|
||||
$this->ticketCreator->createTicketByCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->modsForHeskSettings,
|
||||
$this->userContext);
|
||||
} catch (ValidationException $e) {
|
||||
//-- Assert (1/2)
|
||||
$exceptionThrown = true;
|
||||
$this->assertArraySubset(['CATEGORY_DOES_NOT_EXIST'], $e->validationModel->errorKeys);
|
||||
}
|
||||
|
||||
//-- Assert (2/2)
|
||||
$this->assertThat($exceptionThrown, $this->equalTo(true));
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenTheCustomerSubmitsTicketWithPriorityCritical() {
|
||||
//-- Arrange
|
||||
$this->ticketRequest->priority = Priority::CRITICAL;
|
||||
$this->heskSettings['cust_urgency'] = true;
|
||||
|
||||
//-- Act
|
||||
$exceptionThrown = false;
|
||||
try {
|
||||
$this->ticketCreator->createTicketByCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->modsForHeskSettings,
|
||||
$this->userContext);
|
||||
} catch (ValidationException $e) {
|
||||
//-- Assert (1/2)
|
||||
$exceptionThrown = true;
|
||||
$this->assertArraySubset(['CRITICAL_PRIORITY_FORBIDDEN'], $e->validationModel->errorKeys);
|
||||
}
|
||||
|
||||
//-- Assert (2/2)
|
||||
$this->assertThat($exceptionThrown, $this->equalTo(true));
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenTheCustomerSubmitsTicketWithNullSubjectAndItIsRequired() {
|
||||
//-- Arrange
|
||||
$this->ticketRequest->subject = null;
|
||||
$this->heskSettings['require_subject'] = 1;
|
||||
|
||||
//-- Act
|
||||
$exceptionThrown = false;
|
||||
try {
|
||||
$this->ticketCreator->createTicketByCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->modsForHeskSettings,
|
||||
$this->userContext);
|
||||
} catch (ValidationException $e) {
|
||||
//-- Assert (1/2)
|
||||
$exceptionThrown = true;
|
||||
$this->assertArraySubset(['SUBJECT_REQUIRED'], $e->validationModel->errorKeys);
|
||||
}
|
||||
|
||||
//-- Assert (2/2)
|
||||
$this->assertThat($exceptionThrown, $this->equalTo(true));
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenTheCustomerSubmitsTicketWithBlankSubjectAndItIsRequired() {
|
||||
//-- Arrange
|
||||
$this->ticketRequest->subject = '';
|
||||
$this->heskSettings['require_subject'] = 1;
|
||||
|
||||
//-- Act
|
||||
$exceptionThrown = false;
|
||||
try {
|
||||
$this->ticketCreator->createTicketByCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->modsForHeskSettings,
|
||||
$this->userContext);
|
||||
} catch (ValidationException $e) {
|
||||
//-- Assert (1/2)
|
||||
$exceptionThrown = true;
|
||||
$this->assertArraySubset(['SUBJECT_REQUIRED'], $e->validationModel->errorKeys);
|
||||
}
|
||||
|
||||
//-- Assert (2/2)
|
||||
$this->assertThat($exceptionThrown, $this->equalTo(true));
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenTheCustomerSubmitsTicketWithNullMessageAndItIsRequired() {
|
||||
//-- Arrange
|
||||
$this->ticketRequest->message = null;
|
||||
$this->heskSettings['require_message'] = 1;
|
||||
|
||||
//-- Act
|
||||
$exceptionThrown = false;
|
||||
try {
|
||||
$this->ticketCreator->createTicketByCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->modsForHeskSettings,
|
||||
$this->userContext);
|
||||
} catch (ValidationException $e) {
|
||||
//-- Assert (1/2)
|
||||
$exceptionThrown = true;
|
||||
$this->assertArraySubset(['MESSAGE_REQUIRED'], $e->validationModel->errorKeys);
|
||||
}
|
||||
|
||||
//-- Assert (2/2)
|
||||
$this->assertThat($exceptionThrown, $this->equalTo(true));
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenTheCustomerSubmitsTicketWithBlankMessageAndItIsRequired() {
|
||||
//-- Arrange
|
||||
$this->ticketRequest->message = '';
|
||||
$this->heskSettings['require_message'] = 1;
|
||||
|
||||
//-- Act
|
||||
$exceptionThrown = false;
|
||||
try {
|
||||
$this->ticketCreator->createTicketByCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->modsForHeskSettings,
|
||||
$this->userContext);
|
||||
} catch (ValidationException $e) {
|
||||
//-- Assert (1/2)
|
||||
$exceptionThrown = true;
|
||||
$this->assertArraySubset(['MESSAGE_REQUIRED'], $e->validationModel->errorKeys);
|
||||
}
|
||||
|
||||
//-- Assert (2/2)
|
||||
$this->assertThat($exceptionThrown, $this->equalTo(true));
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenTheCustomerSubmitsTicketWithNullRequiredCustomField() {
|
||||
//-- Arrange
|
||||
$customField = array();
|
||||
$customField['req'] = 1;
|
||||
$customField['type'] = CustomField::TEXT;
|
||||
$customField['use'] = 1;
|
||||
$customField['category'] = array();
|
||||
$this->heskSettings['custom_fields']['custom1'] = $customField;
|
||||
$this->ticketRequest->customFields[1] = null;
|
||||
|
||||
//-- Act
|
||||
$exceptionThrown = false;
|
||||
try {
|
||||
$this->ticketCreator->createTicketByCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->modsForHeskSettings,
|
||||
$this->userContext);
|
||||
} catch (ValidationException $e) {
|
||||
//-- Assert (1/2)
|
||||
$exceptionThrown = true;
|
||||
$this->assertArraySubset(['CUSTOM_FIELD_1_INVALID::NO_VALUE'], $e->validationModel->errorKeys);
|
||||
}
|
||||
|
||||
//-- Assert (2/2)
|
||||
$this->assertThat($exceptionThrown, $this->equalTo(true));
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenTheCustomerSubmitsTicketWithBlankRequiredCustomField() {
|
||||
//-- Arrange
|
||||
$customField = array();
|
||||
$customField['req'] = 1;
|
||||
$customField['type'] = CustomField::TEXT;
|
||||
$customField['use'] = 1;
|
||||
$customField['category'] = array();
|
||||
$this->heskSettings['custom_fields']['custom1'] = $customField;
|
||||
$this->ticketRequest->customFields[1] = '';
|
||||
|
||||
//-- Act
|
||||
$exceptionThrown = false;
|
||||
try {
|
||||
$this->ticketCreator->createTicketByCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->modsForHeskSettings,
|
||||
$this->userContext);
|
||||
} catch (ValidationException $e) {
|
||||
//-- Assert (1/2)
|
||||
$exceptionThrown = true;
|
||||
$this->assertArraySubset(['CUSTOM_FIELD_1_INVALID::NO_VALUE'], $e->validationModel->errorKeys);
|
||||
}
|
||||
|
||||
//-- Assert (2/2)
|
||||
$this->assertThat($exceptionThrown, $this->equalTo(true));
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenTheCustomerSubmitsTicketWithDateCustomFieldThatIsInvalid() {
|
||||
//-- Arrange
|
||||
$customField = array();
|
||||
$customField['req'] = 1;
|
||||
$customField['type'] = CustomField::DATE;
|
||||
$customField['use'] = 1;
|
||||
$customField['category'] = array();
|
||||
$this->heskSettings['custom_fields']['custom1'] = $customField;
|
||||
$this->ticketRequest->customFields[1] = '2017-30-00';
|
||||
|
||||
//-- Act
|
||||
$exceptionThrown = false;
|
||||
try {
|
||||
$this->ticketCreator->createTicketByCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->modsForHeskSettings,
|
||||
$this->userContext);
|
||||
} catch (ValidationException $e) {
|
||||
//-- Assert (1/2)
|
||||
$exceptionThrown = true;
|
||||
$this->assertArraySubset(['CUSTOM_FIELD_1_INVALID::INVALID_DATE'], $e->validationModel->errorKeys);
|
||||
}
|
||||
|
||||
//-- Assert (2/2)
|
||||
$this->assertThat($exceptionThrown, $this->equalTo(true));
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenTheCustomerSubmitsTicketWithDateThatIsBeforeMinDate() {
|
||||
//-- Arrange
|
||||
$customField = array();
|
||||
$customField['req'] = 1;
|
||||
$customField['type'] = CustomField::DATE;
|
||||
$customField['use'] = 1;
|
||||
$customField['category'] = array();
|
||||
$customField['value'] = array(
|
||||
'dmin' => '2017-01-01',
|
||||
'dmax' => ''
|
||||
);
|
||||
$this->heskSettings['custom_fields']['custom1'] = $customField;
|
||||
$this->ticketRequest->customFields[1] = '2016-12-31';
|
||||
|
||||
//-- Act
|
||||
$exceptionThrown = false;
|
||||
try {
|
||||
$this->ticketCreator->createTicketByCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->modsForHeskSettings,
|
||||
$this->userContext);
|
||||
} catch (ValidationException $e) {
|
||||
//-- Assert (1/2)
|
||||
$exceptionThrown = true;
|
||||
$this->assertArraySubset(['CUSTOM_FIELD_1_INVALID::DATE_BEFORE_MIN::MIN:2017-01-01::ENTERED:2016-12-31'], $e->validationModel->errorKeys);
|
||||
}
|
||||
|
||||
//-- Assert (2/2)
|
||||
$this->assertThat($exceptionThrown, $this->equalTo(true));
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenTheCustomerSubmitsTicketWithDateThatIsAfterMaxDate() {
|
||||
//-- Arrange
|
||||
$customField = array();
|
||||
$customField['req'] = 1;
|
||||
$customField['type'] = CustomField::DATE;
|
||||
$customField['use'] = 1;
|
||||
$customField['category'] = array();
|
||||
$customField['value'] = array(
|
||||
'dmin' => '',
|
||||
'dmax' => '2017-01-01'
|
||||
);
|
||||
$this->heskSettings['custom_fields']['custom1'] = $customField;
|
||||
$this->ticketRequest->customFields[1] = '2017-01-02';
|
||||
|
||||
//-- Act
|
||||
$exceptionThrown = false;
|
||||
try {
|
||||
$this->ticketCreator->createTicketByCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->modsForHeskSettings,
|
||||
$this->userContext);
|
||||
} catch (ValidationException $e) {
|
||||
//-- Assert (1/2)
|
||||
$exceptionThrown = true;
|
||||
$this->assertArraySubset(['CUSTOM_FIELD_1_INVALID::DATE_AFTER_MAX::MAX:2017-01-01::ENTERED:2017-01-02'], $e->validationModel->errorKeys);
|
||||
}
|
||||
|
||||
//-- Assert (2/2)
|
||||
$this->assertThat($exceptionThrown, $this->equalTo(true));
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenTheCustomerSubmitsTicketWithEmailThatIsInvalid() {
|
||||
//-- Arrange
|
||||
$customField = array();
|
||||
$customField['req'] = 1;
|
||||
$customField['type'] = CustomField::EMAIL;
|
||||
$customField['use'] = 1;
|
||||
$customField['category'] = array();
|
||||
$customField['value'] = array(
|
||||
'multiple' => 0
|
||||
);
|
||||
$this->heskSettings['custom_fields']['custom1'] = $customField;
|
||||
$this->ticketRequest->customFields[1] = 'invalid@';
|
||||
|
||||
//-- Act
|
||||
$exceptionThrown = false;
|
||||
try {
|
||||
$this->ticketCreator->createTicketByCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->modsForHeskSettings,
|
||||
$this->userContext);
|
||||
} catch (ValidationException $e) {
|
||||
//-- Assert (1/2)
|
||||
$exceptionThrown = true;
|
||||
$this->assertArraySubset(['CUSTOM_FIELD_1_INVALID::INVALID_EMAIL'], $e->validationModel->errorKeys);
|
||||
}
|
||||
|
||||
//-- Assert (2/2)
|
||||
$this->assertThat($exceptionThrown, $this->equalTo(true));
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenTheCustomerSubmitsTicketWithABannedEmail() {
|
||||
//-- Arrange
|
||||
$this->ticketRequest->email = 'some@banned.email';
|
||||
$this->banRetriever->method('isEmailBanned')
|
||||
->with($this->ticketRequest->email, $this->heskSettings)
|
||||
->willReturn(true);
|
||||
|
||||
//-- Act
|
||||
$exceptionThrown = false;
|
||||
try {
|
||||
$this->ticketCreator->createTicketByCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->modsForHeskSettings,
|
||||
$this->userContext);
|
||||
} catch (ValidationException $e) {
|
||||
//-- Assert (1/2)
|
||||
$exceptionThrown = true;
|
||||
$this->assertArraySubset(['EMAIL_BANNED'], $e->validationModel->errorKeys);
|
||||
}
|
||||
|
||||
//-- Assert (2/2)
|
||||
$this->assertThat($exceptionThrown, $this->equalTo(true));
|
||||
}
|
||||
|
||||
function testItAddsTheProperValidationErrorWhenTheCustomerSubmitsTicketWhenTheyAreMaxedOut() {
|
||||
//-- Arrange
|
||||
$this->ticketRequest->email = 'some@maxedout.email';
|
||||
$this->ticketValidators->method('isCustomerAtMaxTickets')
|
||||
->with($this->ticketRequest->email, $this->heskSettings)
|
||||
->willReturn(true);
|
||||
|
||||
//-- Act
|
||||
$exceptionThrown = false;
|
||||
try {
|
||||
$this->ticketCreator->createTicketByCustomer($this->ticketRequest,
|
||||
$this->heskSettings,
|
||||
$this->modsForHeskSettings,
|
||||
$this->userContext);
|
||||
} catch (ValidationException $e) {
|
||||
//-- Assert (1/2)
|
||||
$exceptionThrown = true;
|
||||
$this->assertArraySubset(['EMAIL_AT_MAX_OPEN_TICKETS'], $e->validationModel->errorKeys);
|
||||
}
|
||||
|
||||
//-- Assert (2/2)
|
||||
$this->assertThat($exceptionThrown, $this->equalTo(true));
|
||||
}
|
||||
}
|
@ -0,0 +1,108 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Mike
|
||||
* Date: 2/12/2017
|
||||
* Time: 12:52 AM
|
||||
*/
|
||||
|
||||
namespace BusinessLogic\Tickets\TicketCreatorTests;
|
||||
|
||||
|
||||
use BusinessLogic\Security\UserContext;
|
||||
use BusinessLogic\Tickets\CreateTicketByCustomerModel;
|
||||
use BusinessLogic\Tickets\NewTicketValidator;
|
||||
use BusinessLogic\Tickets\TicketCreator;
|
||||
use BusinessLogic\Tickets\TrackingIdGenerator;
|
||||
use BusinessLogic\ValidationModel;
|
||||
use Core\Constants\Priority;
|
||||
use DataAccess\Tickets\TicketGateway;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
|
||||
class CreateTicketTest extends TestCase {
|
||||
/**
|
||||
* @var $ticketGateway \PHPUnit_Framework_MockObject_MockObject
|
||||
*/
|
||||
private $ticketGateway;
|
||||
|
||||
/**
|
||||
* @var $newTicketValidator \PHPUnit_Framework_MockObject_MockObject
|
||||
*/
|
||||
private $newTicketValidator;
|
||||
|
||||
/**
|
||||
* @var $trackingIdGenerator \PHPUnit_Framework_MockObject_MockObject
|
||||
*/
|
||||
private $trackingIdGenerator;
|
||||
|
||||
/**
|
||||
* @var $ticketRequest CreateTicketByCustomerModel
|
||||
*/
|
||||
private $ticketRequest;
|
||||
|
||||
/**
|
||||
* @var $ticketCreator TicketCreator
|
||||
*/
|
||||
private $ticketCreator;
|
||||
|
||||
/**
|
||||
* @var $heskSettings array
|
||||
*/
|
||||
private $heskSettings;
|
||||
|
||||
/**
|
||||
* @var $modsForHeskSettings array
|
||||
*/
|
||||
private $modsForHeskSettings;
|
||||
|
||||
/**
|
||||
* @var $userContext UserContext
|
||||
*/
|
||||
private $userContext;
|
||||
|
||||
protected function setUp() {
|
||||
$this->ticketGateway = $this->createMock(TicketGateway::class);
|
||||
$this->newTicketValidator = $this->createMock(NewTicketValidator::class);
|
||||
$this->trackingIdGenerator = $this->createMock(TrackingIdGenerator::class);
|
||||
|
||||
$this->ticketCreator = new TicketCreator($this->newTicketValidator, $this->trackingIdGenerator, $this->ticketGateway);
|
||||
|
||||
$this->ticketRequest = new CreateTicketByCustomerModel();
|
||||
$this->ticketRequest->name = 'Name';
|
||||
$this->ticketRequest->email = 'some@e.mail';
|
||||
$this->ticketRequest->category = 1;
|
||||
$this->ticketRequest->priority = Priority::HIGH;
|
||||
$this->ticketRequest->subject = 'Subject';
|
||||
$this->ticketRequest->message = 'Message';
|
||||
$this->ticketRequest->customFields = array();
|
||||
$this->heskSettings = array(
|
||||
'multi_eml' => false,
|
||||
'cust_urgency' => false,
|
||||
'require_subject' => 1,
|
||||
'require_message' => 1,
|
||||
'custom_fields' => array(),
|
||||
);
|
||||
$this->modsForHeskSettings = array();
|
||||
$this->userContext = new UserContext();
|
||||
|
||||
$this->newTicketValidator->method('validateNewTicketForCustomer')->willReturn(new ValidationModel());
|
||||
$this->trackingIdGenerator->method('generateTrackingId')->willReturn('123-456-7890');
|
||||
}
|
||||
|
||||
function testItSavesTheTicketToTheDatabase() {
|
||||
//-- Assert
|
||||
$this->ticketGateway->expects($this->once())->method('createTicket');
|
||||
|
||||
//-- Act
|
||||
$this->ticketCreator->createTicketByCustomer($this->ticketRequest, $this->heskSettings, $this->modsForHeskSettings, $this->userContext);
|
||||
}
|
||||
|
||||
function testItSetsTheTrackingIdOnTheTicket() {
|
||||
//-- Act
|
||||
$ticket = $this->ticketCreator->createTicketByCustomer($this->ticketRequest, $this->heskSettings, $this->modsForHeskSettings, $this->userContext);
|
||||
|
||||
//-- Assert
|
||||
self::assertThat($ticket->trackingId, self::equalTo('123-456-7890'));
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue