From af92a6bbf242d089b3af1cfaf948f96afd6e14f5 Mon Sep 17 00:00:00 2001 From: Guillermo Date: Thu, 2 Jan 2020 09:55:55 -0300 Subject: [PATCH] part 1 edit ticket title --- client/src/app-components/ticket-viewer.js | 15 ++++- server/controllers/ticket.php | 1 + server/controllers/ticket/edit-comment.php | 4 ++ server/controllers/ticket/edit-title.php | 65 ++++++++++++++++++++++ server/models/Ticket.php | 3 +- tests/init.rb | 1 + tests/ticket/edit-title.rb | 62 +++++++++++++++++++++ 7 files changed, 149 insertions(+), 2 deletions(-) create mode 100644 server/controllers/ticket/edit-title.php create mode 100644 tests/ticket/edit-title.rb diff --git a/client/src/app-components/ticket-viewer.js b/client/src/app-components/ticket-viewer.js index e965fe8e..dac48eda 100644 --- a/client/src/app-components/ticket-viewer.js +++ b/client/src/app-components/ticket-viewer.js @@ -73,10 +73,13 @@ class TicketViewer extends React.Component {
#{ticket.ticketNumber} - {ticket.title} + { false ? {ticket.title} : this.editTitle()} + + +
{this.props.editable ? this.renderEditableHeaders() : this.renderHeaders()}
@@ -104,6 +107,16 @@ class TicketViewer extends React.Component { ); } + editTitle(){ + return( + +
+ + +
+ ) + } + renderEditableHeaders() { const ticket = this.props.ticket; const departments = this.getDepartmentsForTransfer(); diff --git a/server/controllers/ticket.php b/server/controllers/ticket.php index e60c253e..bc046c51 100755 --- a/server/controllers/ticket.php +++ b/server/controllers/ticket.php @@ -4,6 +4,7 @@ $ticketControllers->setGroupPath('/ticket'); $ticketControllers->addController(new CreateController); $ticketControllers->addController(new EditCommentController); +$ticketControllers->addController(new EditTitleController); $ticketControllers->addController(new CommentController); $ticketControllers->addController(new TicketGetController); $ticketControllers->addController(new CheckTicketController); diff --git a/server/controllers/ticket/edit-comment.php b/server/controllers/ticket/edit-comment.php index c924694b..faa76539 100644 --- a/server/controllers/ticket/edit-comment.php +++ b/server/controllers/ticket/edit-comment.php @@ -36,6 +36,10 @@ class EditCommentController extends Controller { 'content' => [ 'validation' => DataValidator::length(10, 5000), 'error' => ERRORS::INVALID_CONTENT + ], + 'ticketNumber' => [ + 'validation' => DataValidator::validTicketNumber(), + 'error' => ERRORS::INVALID_TICKET ] ] ]; diff --git a/server/controllers/ticket/edit-title.php b/server/controllers/ticket/edit-title.php new file mode 100644 index 00000000..84450141 --- /dev/null +++ b/server/controllers/ticket/edit-title.php @@ -0,0 +1,65 @@ + 'user', + 'requestData' => [ + 'title' => [ + 'validation' => DataValidator::length(1, 200), + 'error' => ERRORS::INVALID_TITLE + ], + 'ticketNumber' => [ + 'validation' => DataValidator::validTicketNumber(), + 'error' => ERRORS::INVALID_TICKET + ] + ] + ]; + } + + public function handler() { + $user = Controller::getLoggedUser(); + $newtitle = Controller::request('title'); + $ticket = Ticket::getByTicketNumber(Controller::request('ticketNumber')); + + if(!$user->canManageTicket($ticket)) { + throw new RequestException(ERRORS::NO_PERMISSION); + } + + $ticket->title = $newtitle; + $ticket->editedTitle = true; + $ticket->store(); + + $ticketNumber = $ticket->ticketNumber; + Log::createLog('EDIT_TITLE', $ticketNumber); + + Response::respondSuccess(); + } +} diff --git a/server/models/Ticket.php b/server/models/Ticket.php index 5ad71589..c820c270 100755 --- a/server/models/Ticket.php +++ b/server/models/Ticket.php @@ -51,7 +51,8 @@ class Ticket extends DataStore { 'authorEmail', 'authorName', 'sharedTagList', - 'editedContent' + 'editedContent', + 'editedTitle' ); } diff --git a/tests/init.rb b/tests/init.rb index e86faea2..8c6cb9f4 100644 --- a/tests/init.rb +++ b/tests/init.rb @@ -70,6 +70,7 @@ require './ticket/delete-tag.rb' require './ticket/add-tag.rb' require './ticket/delete-tag.rb' require './ticket/edit-comment.rb' +require './ticket/edit-title.rb' require './system/disable-user-system.rb' require './ticket/search.rb' # require './system/get-stats.rb' diff --git a/tests/ticket/edit-title.rb b/tests/ticket/edit-title.rb new file mode 100644 index 00000000..095be590 --- /dev/null +++ b/tests/ticket/edit-title.rb @@ -0,0 +1,62 @@ +describe '/ticket/edit-title' do + + request('/user/logout') + Scripts.login(); + Scripts.createTicket('Valar Morghulis','content of the ticket made by an user') + ticket = $database.getRow('ticket', 'Valar Morghulis', 'title') + ticketNumber = ticket['ticket_number'] + + it 'should change title of the ticket if the author user tries it' do + result = request('/ticket/edit-title', { + csrf_userid: $csrf_userid, + csrf_token: $csrf_token, + title: 'Valar dohaeris', + ticketNumber: ticket['ticket_number'] + }) + + ticket = $database.getRow('ticket', ticketNumber, 'ticket_number') + + (result['status']).should.equal('success') + (ticket['title']).should.equal('Valar dohaeris') + (ticket['edited_title']).should.equal('1') + end + + it 'should change the title of the ticket if staff is logged' do + request('/user/logout') + Scripts.login($staff[:email], $staff[:password], true) + + result = request('/ticket/edit-title', { + csrf_userid: $csrf_userid, + csrf_token: $csrf_token, + title: 'Valar dohaeris by Staff', + ticketNumber: ticket['ticket_number'] + }) + + ticket = $database.getRow('ticket', ticketNumber, 'ticket_number') + + (result['status']).should.equal('success') + (ticket['title']).should.equal('Valar dohaeris by Staff') + (ticket['edited_title']).should.equal('1') + + end + + it 'should not change the title if the user is not the author' do + request('/user/logout') + Scripts.login($staff[:email], $staff[:password], true) + Scripts.createTicket('Winterfell') + ticket = $database.getRow('ticket', 'Winterfell', 'title') + + request('/user/logout') + Scripts.login() + + result = request('/ticket/edit-title', { + csrf_userid: $csrf_userid, + csrf_token: $csrf_token, + title: 'Casterly Rock', + ticketEventId: ticket['ticket_number'] + }) + (result['status']).should.equal('fail') + (result['message']).should.equal('NO_PERMISSION') + end + +end