Ivan - Fix authorUser/authorStaff issues, fix date, add tests for ticket events [skip ci]
This commit is contained in:
parent
66281df491
commit
8b3c8bf284
|
@ -5,6 +5,8 @@ DataValidator::with('CustomValidations', true);
|
|||
class CloseController extends Controller {
|
||||
const PATH = '/close';
|
||||
|
||||
private $ticket;
|
||||
|
||||
public function validations() {
|
||||
return [
|
||||
'permission' => 'user',
|
||||
|
@ -18,34 +20,48 @@ class CloseController extends Controller {
|
|||
}
|
||||
|
||||
public function handler() {
|
||||
$ticketNumber = Controller::request('ticketNumber');
|
||||
$ticket = Ticket::getByTicketNumber($ticketNumber);
|
||||
$user = Controller::getLoggedUser();
|
||||
$this->ticket = Ticket::getByTicketNumber(Controller::request('ticketNumber'));
|
||||
|
||||
if(!Controller::isStaffLogged() && $ticket->author->id !== $user->id){
|
||||
if($this->shouldDenyPermission()) {
|
||||
Response::respondError(ERRORS::NO_PERMISSION);
|
||||
return;
|
||||
}
|
||||
|
||||
if(Controller::isStaffLogged() && $ticket->owner && $ticket->owner->id !== $user->id){
|
||||
Response::respondError(ERRORS::NO_PERMISSION);
|
||||
return;
|
||||
}
|
||||
|
||||
if(Controller::isStaffLogged()) {
|
||||
$ticket->unread = true;
|
||||
} else {
|
||||
$ticket->unreadStaff = true;
|
||||
}
|
||||
$event = Ticketevent::getEvent(Ticketevent::CLOSE);
|
||||
$event->setProperties(array(
|
||||
'authorStaff' => Controller::getLoggedUser(),
|
||||
'date' => Date::getCurrentDate()
|
||||
));
|
||||
|
||||
$ticket->addEvent($event);
|
||||
$ticket->closed = true;
|
||||
$ticket->store();
|
||||
$this->markAsUnread();
|
||||
$this->addCloseEvent();
|
||||
$this->ticket->closed = true;
|
||||
|
||||
$this->ticket->store();
|
||||
Response::respondSuccess();
|
||||
}
|
||||
|
||||
private function shouldDenyPermission() {
|
||||
$user = Controller::getLoggedUser();
|
||||
|
||||
return (!Controller::isStaffLogged() && $this->ticket->author->id !== $user->id) ||
|
||||
(Controller::isStaffLogged() && $this->ticket->owner && $this->ticket->owner->id !== $user->id);
|
||||
}
|
||||
|
||||
private function markAsUnread() {
|
||||
if(Controller::isStaffLogged()) {
|
||||
$this->ticket->unread = true;
|
||||
} else {
|
||||
$this->ticket->unreadStaff = true;
|
||||
}
|
||||
}
|
||||
|
||||
private function addCloseEvent() {
|
||||
$event = Ticketevent::getEvent(Ticketevent::CLOSE);
|
||||
$event->setProperties(array(
|
||||
'date' => Date::getCurrentDate()
|
||||
));
|
||||
|
||||
if(Controller::isStaffLogged()) {
|
||||
$event->authorStaff = Controller::getLoggedUser();
|
||||
} else {
|
||||
$event->authorUser = Controller::getLoggedUser();
|
||||
}
|
||||
|
||||
$this->ticket->addEvent($event);
|
||||
}
|
||||
}
|
|
@ -52,10 +52,12 @@ class CommentController extends Controller {
|
|||
|
||||
if(Controller::isStaffLogged()) {
|
||||
$this->ticket->unread = true;
|
||||
$comment->authorStaff = Controller::getLoggedUser();
|
||||
} else {
|
||||
$this->ticket->unreadStaff = true;
|
||||
$comment->authorUser = Controller::getLoggedUser();
|
||||
}
|
||||
$comment->authorUser = Controller::getLoggedUser();
|
||||
|
||||
$this->ticket->addEvent($comment);
|
||||
$this->ticket->store();
|
||||
}
|
||||
|
|
|
@ -4,6 +4,8 @@ use Respect\Validation\Validator as DataValidator;
|
|||
class ReOpenController extends Controller {
|
||||
const PATH = '/re-open';
|
||||
|
||||
private $ticket;
|
||||
|
||||
public function validations() {
|
||||
return [
|
||||
'permission' => 'user',
|
||||
|
@ -17,32 +19,49 @@ class ReOpenController extends Controller {
|
|||
}
|
||||
|
||||
public function handler() {
|
||||
$ticketNumber = Controller::request('ticketNumber');
|
||||
$ticket = Ticket::getByTicketNumber($ticketNumber);
|
||||
$user = Controller::getLoggedUser();
|
||||
$this->ticket = Ticket::getByTicketNumber(Controller::request('ticketNumber'));
|
||||
|
||||
if(!Controller::isStaffLogged() && $ticket->author->id !== $user->id){
|
||||
if($this->shouldDenyPermission()) {
|
||||
Response::respondError(ERRORS::NO_PERMISSION);
|
||||
return;
|
||||
}
|
||||
|
||||
if(Controller::isStaffLogged() && $ticket->owner && $ticket->owner->id !== $user->id){
|
||||
Response::respondError(ERRORS::NO_PERMISSION);
|
||||
return;
|
||||
}
|
||||
if(Controller::isStaffLogged()) {
|
||||
$ticket->unread = true;
|
||||
} else {
|
||||
$ticket->unreadStaff = true;
|
||||
}
|
||||
$event = Ticketevent::getEvent(Ticketevent::RE_OPEN);
|
||||
$event->setProperties(array(
|
||||
'authorUser' => Controller::getLoggedUser(),
|
||||
'date' => Date::getCurrentDate()
|
||||
));
|
||||
$ticket->addEvent($event);
|
||||
$ticket->closed = false;
|
||||
$ticket->store();
|
||||
$this->markAsUnread();
|
||||
$this->addReopenEvent();
|
||||
$this->ticket->closed = false;
|
||||
|
||||
$this->ticket->store();
|
||||
Response::respondSuccess();
|
||||
}
|
||||
|
||||
|
||||
private function shouldDenyPermission() {
|
||||
$user = Controller::getLoggedUser();
|
||||
|
||||
return (!Controller::isStaffLogged() && $this->ticket->author->id !== $user->id) ||
|
||||
(Controller::isStaffLogged() && $this->ticket->owner && $this->ticket->owner->id !== $user->id);
|
||||
}
|
||||
|
||||
private function markAsUnread() {
|
||||
if(Controller::isStaffLogged()) {
|
||||
$this->ticket->unread = true;
|
||||
} else {
|
||||
$this->ticket->unreadStaff = true;
|
||||
}
|
||||
}
|
||||
|
||||
private function addReopenEvent() {
|
||||
$event = Ticketevent::getEvent(Ticketevent::RE_OPEN);
|
||||
$event->setProperties(array(
|
||||
'date' => Date::getCurrentDate()
|
||||
));
|
||||
|
||||
if(Controller::isStaffLogged()) {
|
||||
$event->authorStaff = Controller::getLoggedUser();
|
||||
} else {
|
||||
$event->authorUser = Controller::getLoggedUser();
|
||||
}
|
||||
|
||||
$this->ticket->addEvent($event);
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
<?php
|
||||
class Date {
|
||||
public static function getCurrentDate() {
|
||||
return date('F j, Y, g:i a');
|
||||
return date('Ymd');
|
||||
}
|
||||
}
|
|
@ -31,5 +31,6 @@ require './staff/un-assign-ticket.rb'
|
|||
require './staff/get-tickets.rb'
|
||||
require './ticket/change-priority.rb'
|
||||
require './staff/get-new-tickets.rb'
|
||||
require './ticket/events.rb'
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,117 @@
|
|||
describe 'Ticket Events' do
|
||||
request('/user/logout')
|
||||
Scripts.createUser('tyrion@opensupports.com', 'tyrionl', 'Tyrion Lannister')
|
||||
|
||||
it 'should add events correctly' do
|
||||
Scripts.login('tyrion@opensupports.com', 'tyrionl')
|
||||
response = request('/ticket/create', {
|
||||
title: 'Ticket with many events',
|
||||
content: 'This is a ticket with many events',
|
||||
departmentId: 1,
|
||||
csrf_userid: $csrf_userid,
|
||||
csrf_token: $csrf_token
|
||||
})
|
||||
ticketNumber = response['data']['ticketNumber']
|
||||
|
||||
request('/user/logout')
|
||||
Scripts.login($staff[:email], $staff[:password], true)
|
||||
request('/staff/assign-ticket', {
|
||||
ticketNumber: ticketNumber,
|
||||
csrf_userid: $csrf_userid,
|
||||
csrf_token: $csrf_token
|
||||
})
|
||||
request('/ticket/comment', {
|
||||
content: 'This is a comment made by a staff',
|
||||
ticketNumber: ticketNumber,
|
||||
csrf_userid: $csrf_userid,
|
||||
csrf_token: $csrf_token
|
||||
})
|
||||
request('/staff/un-assign-ticket', {
|
||||
ticketNumber: ticketNumber,
|
||||
csrf_userid: $csrf_userid,
|
||||
csrf_token: $csrf_token
|
||||
})
|
||||
request('/staff/assign-ticket', {
|
||||
ticketNumber: ticketNumber,
|
||||
csrf_userid: $csrf_userid,
|
||||
csrf_token: $csrf_token
|
||||
})
|
||||
request('/ticket/change-priority', {
|
||||
priority: 'medium',
|
||||
ticketNumber: ticketNumber,
|
||||
csrf_userid: $csrf_userid,
|
||||
csrf_token: $csrf_token
|
||||
})
|
||||
request('/ticket/change-department', {
|
||||
departmentId: 2,
|
||||
ticketNumber: ticketNumber,
|
||||
csrf_userid: $csrf_userid,
|
||||
csrf_token: $csrf_token
|
||||
})
|
||||
request('/ticket/close', {
|
||||
ticketNumber: ticketNumber,
|
||||
csrf_userid: $csrf_userid,
|
||||
csrf_token: $csrf_token
|
||||
})
|
||||
|
||||
request('/user/logout')
|
||||
Scripts.login('tyrion@opensupports.com', 'tyrionl')
|
||||
request('/ticket/re-open', {
|
||||
ticketNumber: ticketNumber,
|
||||
csrf_userid: $csrf_userid,
|
||||
csrf_token: $csrf_token
|
||||
})
|
||||
request('/ticket/comment', {
|
||||
content: 'This is a comment made by a regular user',
|
||||
ticketNumber: ticketNumber,
|
||||
csrf_userid: $csrf_userid,
|
||||
csrf_token: $csrf_token
|
||||
})
|
||||
|
||||
result = request('/ticket/get', {
|
||||
ticketNumber: ticketNumber,
|
||||
csrf_userid: $csrf_userid,
|
||||
csrf_token: $csrf_token
|
||||
})
|
||||
|
||||
(result['data']['events'][0]['type']).should.equal('ASSIGN')
|
||||
(result['data']['events'][0]['author']['name']).should.equal('Emilia Clarke')
|
||||
(result['data']['events'][0]['author']['staff']).should.equal(true)
|
||||
|
||||
(result['data']['events'][1]['type']).should.equal('COMMENT')
|
||||
(result['data']['events'][1]['content']).should.equal('This is a comment made by a staff')
|
||||
(result['data']['events'][1]['author']['name']).should.equal('Emilia Clarke')
|
||||
(result['data']['events'][1]['author']['staff']).should.equal(true)
|
||||
|
||||
(result['data']['events'][2]['type']).should.equal('UN_ASSIGN')
|
||||
(result['data']['events'][2]['author']['name']).should.equal('Emilia Clarke')
|
||||
(result['data']['events'][2]['author']['staff']).should.equal(true)
|
||||
|
||||
(result['data']['events'][3]['type']).should.equal('ASSIGN')
|
||||
(result['data']['events'][3]['author']['name']).should.equal('Emilia Clarke')
|
||||
(result['data']['events'][3]['author']['staff']).should.equal(true)
|
||||
|
||||
(result['data']['events'][4]['type']).should.equal('PRIORITY_CHANGED')
|
||||
(result['data']['events'][4]['content']).should.equal('medium')
|
||||
(result['data']['events'][4]['author']['name']).should.equal('Emilia Clarke')
|
||||
(result['data']['events'][4]['author']['staff']).should.equal(true)
|
||||
|
||||
(result['data']['events'][5]['type']).should.equal('DEPARTMENT_CHANGED')
|
||||
(result['data']['events'][5]['content']).should.equal('Suggestions')
|
||||
(result['data']['events'][5]['author']['name']).should.equal('Emilia Clarke')
|
||||
(result['data']['events'][5]['author']['staff']).should.equal(true)
|
||||
|
||||
(result['data']['events'][6]['type']).should.equal('CLOSE')
|
||||
(result['data']['events'][6]['author']['name']).should.equal('Emilia Clarke')
|
||||
(result['data']['events'][6]['author']['staff']).should.equal(true)
|
||||
|
||||
(result['data']['events'][7]['type']).should.equal('RE_OPEN')
|
||||
(result['data']['events'][7]['author']['name']).should.equal('Tyrion Lannister')
|
||||
(result['data']['events'][7]['author']['staff']).should.equal(false)
|
||||
|
||||
(result['data']['events'][8]['type']).should.equal('COMMENT')
|
||||
(result['data']['events'][8]['content']).should.equal('This is a comment made by a regular user')
|
||||
(result['data']['events'][8]['author']['name']).should.equal('Tyrion Lannister')
|
||||
(result['data']['events'][8]['author']['staff']).should.equal(false)
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue