Skip to content

Commit

Permalink
Fix bugs in change ticket department. (#828)
Browse files Browse the repository at this point in the history
* fix change department in ticket viewer (FE).

* fix bug change departmet. (BE)

* fix unassigned ticket for any level staff can use it (BE) and add ruby test

* fix ticket department change to un assign ticket correctly (BE) and add ruby test

* fix an error with author id in ticket viewer

* Use get departments for transder in change department params.

* Rename test in change department rb.
  • Loading branch information
LautaroCesso committed Jul 21, 2020
1 parent 9634fdf commit 03df572
Show file tree
Hide file tree
Showing 5 changed files with 219 additions and 15 deletions.
16 changes: 11 additions & 5 deletions client/src/app-components/ticket-viewer.js
Original file line number Diff line number Diff line change
Expand Up @@ -393,7 +393,7 @@ class TicketViewer extends React.Component {
}

onDepartmentDropdownChanged(event) {
AreYouSure.openModal(null, this.changeDepartment.bind(this, event.index));
AreYouSure.openModal(null, this.changeDepartment.bind(this, this.getDepartmentsForTransfer()[event.index].id));
}

onAssignmentChange(event) {
Expand Down Expand Up @@ -492,14 +492,20 @@ class TicketViewer extends React.Component {
});
}

changeDepartment(index) {
changeDepartment(departmentId) {
const {
userId,
userDepartments,
ticket
} = this.props;

return API.call({
path: '/ticket/change-department',
data: {
ticketNumber: this.props.ticket.ticketNumber,
departmentId: this.getDepartmentsForTransfer()[index].id
ticketNumber: ticket.ticketNumber,
departmentId
}
}).then(this.onTicketModification.bind(this));
}).then((_.some(userDepartments, {id: departmentId}) || (userId === (ticket.author.id*1))) ? this.onTicketModification.bind(this) : history.goBack());
}

addTag(tag) {
Expand Down
2 changes: 1 addition & 1 deletion server/controllers/staff/un-assign-ticket.php
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ public function handler() {
throw new RequestException(ERRORS::NO_PERMISSION);
}

if($owner && ($ticket->isOwner($user) || $user->level > 2)) {
if($owner) {
if(!$ticket->isAuthor($owner)) {
$owner->sharedTicketList->remove($ticket);
$owner->store();
Expand Down
14 changes: 8 additions & 6 deletions server/controllers/ticket/change-department.php
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,14 @@ public function handler() {
throw new RequestException(ERRORS::NO_PERMISSION);
}

if($ticket->owner && !$ticket->owner->sharedDepartmentList->includesId($department->id)) {
$unAssignTicketController = new UnAssignStaffController($user);
$unAssignTicketController->validate();
$unAssignTicketController->handler();
}

$ticket = Ticket::getByTicketNumber($ticketNumber);

$event = Ticketevent::getEvent(Ticketevent::DEPARTMENT_CHANGED);
$event->setProperties(array(
'authorStaff' => $user,
Expand All @@ -71,12 +79,6 @@ public function handler() {
$ticket->unread = !$ticket->isAuthor($user);
$ticket->store();

if($ticket->owner && !$ticket->owner->sharedDepartmentList->includesId($department->id)) {
$unAssignTicketController = new UnAssignStaffController($ticket->owner);
$unAssignTicketController->validate();
$unAssignTicketController->handler();
}

Log::createLog('DEPARTMENT_CHANGED', $ticket->ticketNumber);

Response::respondSuccess();
Expand Down
53 changes: 50 additions & 3 deletions tests/staff/un-assign-ticket.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

it 'should unassign ticket if it is the current owner' do
ticket = $database.getRow('ticket', 1 , 'id')

result = request('/staff/un-assign-ticket', {
ticketNumber: ticket['ticket_number'],
csrf_userid: $csrf_userid,
Expand All @@ -28,8 +29,9 @@
(staff_ticket).should.equal(nil)
end

it 'should fail if ticket is not yours and you are a staff level 1' do
it 'should unassign ticket if you are a staff level 1' do
$database.query('update staff set level="1" where id="1";')

ticket = $database.getRow('ticket', 1 , 'id')

Scripts.logout()
Expand All @@ -40,6 +42,7 @@
csrf_userid: $csrf_userid,
csrf_token: $csrf_token
})

(result['status']).should.equal('success')

ticket = $database.getRow('ticket', 1 , 'id')
Expand All @@ -53,15 +56,59 @@
csrf_token: $csrf_token
})

(result['status']).should.equal('fail')
(result['message']).should.equal('NO_PERMISSION')
(result['status']).should.equal('success')

$database.query('update staff set level="3" where id="1";')
end

it 'should unassign ticket if you are a staff level 2' do
$database.query('update staff set level="2" where id="1";')

ticket = $database.getRow('ticket', 1 , 'id')

Scripts.logout()
Scripts.login('ayra2@opensupports.com', 'starkpassword', true)

result = request('/staff/assign-ticket', {
ticketNumber: ticket['ticket_number'],
csrf_userid: $csrf_userid,
csrf_token: $csrf_token
})

(result['status']).should.equal('success')

ticket = $database.getRow('ticket', 1 , 'id')

Scripts.logout()
Scripts.login($staff[:email], $staff[:password], true)

result = request('/staff/un-assign-ticket', {
ticketNumber: ticket['ticket_number'],
csrf_userid: $csrf_userid,
csrf_token: $csrf_token
})

(result['status']).should.equal('success')

$database.query('update staff set level="3" where id="1";')
end

it 'should unassign ticket if you are a staff level 3' do
ticket = $database.getRow('ticket', 1 , 'id')

Scripts.logout()
Scripts.login($staff[:email], $staff[:password], true)

result = request('/staff/assign-ticket', {
ticketNumber: ticket['ticket_number'],
csrf_userid: $csrf_userid,
csrf_token: $csrf_token
})

(result['status']).should.equal('success')

ticket = $database.getRow('ticket', 1 , 'id')

result = request('/staff/un-assign-ticket', {
ticketNumber: ticket['ticket_number'],
csrf_userid: $csrf_userid,
Expand Down
149 changes: 149 additions & 0 deletions tests/ticket/change-department.rb
Original file line number Diff line number Diff line change
Expand Up @@ -103,4 +103,153 @@
staffId: 1
})
end
it 'should not unassing ticket if owner has the new ticket department and staff does not have it' do
request('/user/logout')
Scripts.login($staff[:email], $staff[:password], true)

result = request('/staff/edit', {
csrf_userid: $csrf_userid,
csrf_token: $csrf_token,
departments: '[1, 2]',
staffId: 1
})
(result['status']).should.equal('success')

result = request('/staff/invite', {
csrf_userid: $csrf_userid,
csrf_token: $csrf_token,
name: 'Jon Snow',
email: 'jon_snow@opensupports.com',
level: 2,
profilePic: '',
departments: '[1, 3]'
})

(result['status']).should.equal('success')

Scripts.createTicket('title of the ticket to change department', 'this is the content of the ticket to change department', 1)

staffId = $database.getRow('staff','jon_snow@opensupports.com','email')['id']
ticket = $database.getRow('ticket', 'title of the ticket to change department', 'title')

(ticket['owner_id']).should.equal(nil)

result = request('/staff/assign-ticket', {
ticketNumber: ticket['ticket_number'],
staffId: staffId,
csrf_userid: $csrf_userid,
csrf_token: $csrf_token
})

(result['status']).should.equal('success')

ticket = $database.getRow('ticket', 'title of the ticket to change department', 'title')

(ticket['owner_id']).should.equal(staffId)

result = request('/ticket/change-department', {
ticketNumber: ticket['ticket_number'],
departmentId: 3,
csrf_userid: $csrf_userid,
csrf_token: $csrf_token
})

(result['status']).should.equal('success')

ticket = $database.getRow('ticket', 'title of the ticket to change department', 'title')

(ticket['owner_id']).should.equal(staffId)

result = request('/staff/un-assign-ticket', {
ticketNumber: ticket['ticket_number'],
csrf_userid: $csrf_userid,
csrf_token: $csrf_token
})

(result['status']).should.equal('success')

ticket = $database.getRow('ticket', 'title of the ticket to change department', 'title')

(ticket['owner_id']).should.equal(nil)

result = request('/ticket/delete', {
csrf_userid: $csrf_userid,
csrf_token: $csrf_token,
ticketNumber: ticket['ticket_number']
})

(result['status']).should.equal('success')

staff = $database.getRow('staff', 'jon_snow@opensupports.com', 'email')
Scripts.deleteStaff(staff['id'])
end
it 'should unassing ticket if owner has not the new ticket department' do
request('/user/logout')
Scripts.login($staff[:email], $staff[:password], true)

result = request('/staff/edit', {
csrf_userid: $csrf_userid,
csrf_token: $csrf_token,
departments: '[1, 2, 3]',
staffId: 1
})
(result['status']).should.equal('success')

result = request('/staff/invite', {
csrf_userid: $csrf_userid,
csrf_token: $csrf_token,
name: 'Oberyn',
email: 'Oberyn_martel@opensupports.com',
level: 2,
profilePic: '',
departments: '[1, 2]'
})

(result['status']).should.equal('success')

Scripts.createTicket('title of the ticket to change department', 'this is the content of the ticket to change department', 1)

staffId = $database.getRow('staff','Oberyn_martel@opensupports.com','email')['id']
ticket = $database.getRow('ticket', 'title of the ticket to change department', 'title')

(ticket['owner_id']).should.equal(nil)

result = request('/staff/assign-ticket', {
ticketNumber: ticket['ticket_number'],
staffId: staffId,
csrf_userid: $csrf_userid,
csrf_token: $csrf_token
})

(result['status']).should.equal('success')

ticket = $database.getRow('ticket', 'title of the ticket to change department', 'title')

(ticket['owner_id']).should.equal(staffId)

result = request('/ticket/change-department', {
ticketNumber: ticket['ticket_number'],
departmentId: 3,
csrf_userid: $csrf_userid,
csrf_token: $csrf_token
})

(result['status']).should.equal('success')

ticket = $database.getRow('ticket', 'title of the ticket to change department', 'title')

(ticket['owner_id']).should.equal(nil)

result = request('/ticket/delete', {
csrf_userid: $csrf_userid,
csrf_token: $csrf_token,
ticketNumber: ticket['ticket_number']
})

(result['status']).should.equal('success')

staff = $database.getRow('staff', 'Oberyn_martel@opensupports.com', 'email')

Scripts.deleteStaff(staff['id'])
end
end

0 comments on commit 03df572

Please sign in to comment.