2019-12-27 23:59:23 +01:00
describe '/ticket/search' do
request ( '/user/logout' )
Scripts . login ( $staff [ :email ] , $staff [ :password ] , true )
2020-10-14 20:08:14 +02:00
Scripts . createTicket ( 'test ticket1' )
@ticketNumber1 = $database . getRow ( 'ticket' , 'test ticket1' , 'title' ) [ 'ticket_number' ]
2020-08-28 10:19:47 +02:00
2020-10-14 20:08:14 +02:00
Scripts . createTicket ( 'test ticket2' )
@ticketNumber2 = $database . getRow ( 'ticket' , 'test ticket2' , 'title' ) [ 'ticket_number' ]
2020-08-28 10:19:47 +02:00
2020-10-14 20:08:14 +02:00
Scripts . createTicket ( 'test ticket3' )
@ticketNumber3 = $database . getRow ( 'ticket' , 'test ticket3' , 'title' ) [ 'ticket_number' ]
2020-08-28 10:19:47 +02:00
$pages = 1 .. 10
2019-12-27 23:59:23 +01:00
it 'should fail if the page is invalid' do
2020-08-28 10:19:47 +02:00
pageFilterList = [ - 1 , '-1' , 'one' ]
for pageFilter in pageFilterList
result = request ( '/ticket/search' , {
csrf_userid : $csrf_userid ,
csrf_token : $csrf_token ,
page : pageFilter
} )
( result [ 'status' ] ) . should . equal ( 'fail' )
( result [ 'message' ] ) . should . equal ( 'INVALID_PAGE' )
end
2019-12-27 23:59:23 +01:00
end
it 'should fail if the tags are invalid' do
2020-08-28 10:19:47 +02:00
tagsFilterList = [
'[1, 11, 111, 1111, 11111, 111111, 1111111, 11111111]' ,
'[-1]' ,
'this is not a tag id list' ,
2 ,
'{tags: "[2, 3]"}'
]
for tagsFilter in tagsFilterList
result = request ( '/ticket/search' , {
csrf_userid : $csrf_userid ,
csrf_token : $csrf_token ,
page : 1 ,
tags : tagsFilter
} )
( result [ 'status' ] ) . should . equal ( 'fail' )
( result [ 'message' ] ) . should . equal ( 'INVALID_TAG_FILTER' )
end
2019-12-27 23:59:23 +01:00
end
it 'should fail if the closed value is invalid' do
2020-08-28 10:19:47 +02:00
closedFilterList = [ 3 , - 1 , '-1' , '&123' ]
for closedFilter in closedFilterList
result = request ( '/ticket/search' , {
csrf_userid : $csrf_userid ,
csrf_token : $csrf_token ,
page : 1 ,
closed : closedFilter
} )
( result [ 'status' ] ) . should . equal ( 'fail' )
( result [ 'message' ] ) . should . equal ( 'INVALID_CLOSED_FILTER' )
end
2019-12-27 23:59:23 +01:00
end
it 'should fail if the unreadStaff value is invalid' do
2020-08-28 10:19:47 +02:00
unreadStaffFilterList = [ 3 , 'hola' , - 1 , { unreadStaff : 1 } ]
for unreadStaffFilter in unreadStaffFilterList
result = request ( '/ticket/search' , {
csrf_userid : $csrf_userid ,
csrf_token : $csrf_token ,
page : 1 ,
unreadStaff : unreadStaffFilter
} )
( result [ 'status' ] ) . should . equal ( 'fail' )
( result [ 'message' ] ) . should . equal ( 'INVALID_UNREAD_STAFF_FILTER' )
end
2019-12-27 23:59:23 +01:00
end
it 'should fail if the dateRange values are invalid' do
2020-08-28 10:19:47 +02:00
dateRangeFilterList = [ '[11, 69, ())]' , '[startDate, endDate]' , '[500, 123]' ]
for dateRangeFilter in dateRangeFilterList
result = request ( '/ticket/search' , {
csrf_userid : $csrf_userid ,
csrf_token : $csrf_token ,
page : 1 ,
dateRange : dateRangeFilter
} )
( result [ 'status' ] ) . should . equal ( 'fail' )
( result [ 'message' ] ) . should . equal ( 'INVALID_DATE_RANGE_FILTER' )
end
2019-12-27 23:59:23 +01:00
end
it 'should fail if the departments are invalid' do
2020-08-28 10:19:47 +02:00
departmentFilterList = [ '[-1,-2,99]' , '1' , 'departmentId1' , '' ]
for departmentFilter in departmentFilterList
result = request ( '/ticket/search' , {
csrf_userid : $csrf_userid ,
csrf_token : $csrf_token ,
page : 1 ,
departments : departmentFilter
} )
( result [ 'status' ] ) . should . equal ( 'fail' )
( result [ 'message' ] ) . should . equal ( 'INVALID_DEPARTMENT_FILTER' )
end
2019-12-27 23:59:23 +01:00
end
it 'should fail if the authors are invalid' do
2020-08-28 10:19:47 +02:00
authorsFilterList = [
'[{id:30001, staff: 1},{id:30,staff: 3}]' ,
'[{id:"delete all)", staff: 1},{id:30,staff: 3}]' ,
'1, 2, 3' ,
'[1, 2, 3]'
]
2019-12-28 00:51:22 +01:00
2020-08-28 10:19:47 +02:00
for authorsFilter in authorsFilterList
result = request ( '/ticket/search' , {
csrf_userid : $csrf_userid ,
csrf_token : $csrf_token ,
page : 1 ,
authors : authorsFilter
} )
( result [ 'status' ] ) . should . equal ( 'fail' )
( result [ 'message' ] ) . should . equal ( 'INVALID_AUTHOR_FILTER' )
end
2019-12-27 23:59:23 +01:00
end
it 'should fail if the assigned value is invalid' do
2020-08-28 10:19:47 +02:00
assignedFilterList = [ 3 , 11113 , '[1]' , 'assigned?' ]
for assignedFilter in assignedFilterList
result = request ( '/ticket/search' , {
csrf_userid : $csrf_userid ,
csrf_token : $csrf_token ,
page : 1 ,
assigned : assignedFilter
} )
( result [ 'status' ] ) . should . equal ( 'fail' )
( result [ 'message' ] ) . should . equal ( 'INVALID_ASSIGNED_FILTER' )
end
end
it 'should fail if the owners are invalid' do
ownersFilterList = [ '[{id: 1}]' , '[30, 25]' , 'ownerList' , - 1 , '{1, 3}' ]
for ownersFilter in ownersFilterList
result = request ( '/ticket/search' , {
csrf_userid : $csrf_userid ,
csrf_token : $csrf_token ,
page : 1 ,
owners : ownersFilter
} )
( result [ 'status' ] ) . should . equal ( 'fail' )
( result [ 'message' ] ) . should . equal ( 'INVALID_OWNER_FILTER' )
end
end
it 'should get tickets from the owner passaged' do
ownerIdList = [ 8 , 1 , 2 ]
ownerIdFilterList = [
[ ownerIdList [ 0 ] ] ,
[ ownerIdList [ 1 ] , ownerIdList [ 2 ] , ownerIdList [ 0 ] ] ,
[ ownerIdList [ 2 ] , ownerIdList [ 0 ] ]
]
ownerIdFilterList = ownerIdFilterList . map { | ownerFilter | ownerFilter . to_json }
for page in $pages
for ownerFilter in ownerIdFilterList
result = request ( '/ticket/search' , {
csrf_userid : $csrf_userid ,
csrf_token : $csrf_token ,
page : page ,
owners : ownerFilter
} )
( result [ 'status' ] ) . should . equal ( 'success' )
tickets = result [ 'data' ] [ 'tickets' ]
for ticket in tickets
( ownerFilter . include? ( ticket [ 'owner' ] [ 'id' ] ) ) . should . equal ( true )
end
end
end
end
it 'should get tickets from the closed passaged' do
closedFilterList = [ 1 , 0 ]
for page in $pages
for closedFilter in closedFilterList
result = request ( '/ticket/search' , {
csrf_userid : $csrf_userid ,
csrf_token : $csrf_token ,
page : page ,
closed : closedFilter
} )
( result [ 'status' ] ) . should . equal ( 'success' )
tickets = result [ 'data' ] [ 'tickets' ]
for ticket in tickets
( ticket [ 'closed' ] ) . should . equal ( closedFilter === 1 )
end
end
end
end
it 'should success if the page is valid' do
for page in $pages
result = request ( '/ticket/search' , {
csrf_userid : $csrf_userid ,
csrf_token : $csrf_token ,
page : page
} )
( result [ 'status' ] ) . should . equal ( 'success' )
end
end
it 'should get tickets from the tags passaged' do
ticketNumberList1 = [ @ticketNumber1 , @ticketNumber3 ]
ticketNumberList2 = [ @ticketNumber2 , @ticketNumber3 ]
result = request ( '/ticket/get-tags' , {
2019-12-27 23:59:23 +01:00
csrf_userid : $csrf_userid ,
2020-08-28 10:19:47 +02:00
csrf_token : $csrf_token
2019-12-27 23:59:23 +01:00
} )
2020-08-28 10:19:47 +02:00
( result [ 'status' ] ) . should . equal ( 'success' )
tags = result [ 'data' ]
for tag in tags
if tag [ 'id' ] === '2'
tagNameOfId2 = tag [ 'name' ]
end
if tag [ 'id' ] === '3'
tagNameOfId3 = tag [ 'name' ]
end
end
for ticketNumber in ticketNumberList1
result = request ( '/ticket/add-tag' , {
csrf_userid : $csrf_userid ,
csrf_token : $csrf_token ,
tagId : 2 ,
ticketNumber : ticketNumber
} )
( result [ 'status' ] ) . should . equal ( 'success' )
end
for ticketNumber in ticketNumberList2
result = request ( '/ticket/add-tag' , {
csrf_userid : $csrf_userid ,
csrf_token : $csrf_token ,
tagId : 3 ,
ticketNumber : ticketNumber
} )
( result [ 'status' ] ) . should . equal ( 'success' )
end
tagObjectList = [
{ 'tagIdFilter' = > '[2]' , 'tagName' = > tagNameOfId2 } ,
{ 'tagIdFilter' = > '[3]' , 'tagName' = > tagNameOfId3 } ,
]
for tagObject in tagObjectList
result = request ( '/ticket/search' , {
csrf_userid : $csrf_userid ,
csrf_token : $csrf_token ,
page : 1 ,
tags : tagObject [ 'tagIdFilter' ]
} )
( result [ 'status' ] ) . should . equal ( 'success' )
tickets = result [ 'data' ] [ 'tickets' ]
for ticket in tickets
ticketTags = ticket [ 'tags' ]
( ticketTags . include? ( tagObject [ 'tagName' ] ) ) . should . equal ( true )
end
end
2019-12-27 23:59:23 +01:00
2019-12-28 00:51:22 +01:00
result = request ( '/ticket/search' , {
csrf_userid : $csrf_userid ,
csrf_token : $csrf_token ,
page : 1 ,
2020-08-28 10:19:47 +02:00
tags : '[2, 3]'
2019-12-28 00:51:22 +01:00
} )
2020-08-28 10:19:47 +02:00
( result [ 'status' ] ) . should . equal ( 'success' )
for ticket in tickets
ticketTags = ticket [ 'tags' ]
(
( ticketTags . include? ( tagNameOfId2 ) && ticketTags . include? ( tagNameOfId3 ) ) ||
ticketTags . include? ( tagNameOfId3 ) ||
ticketTags . include? ( tagNameOfId2 )
) . should . equal ( true )
end
end
it 'should get tickets from the departments passaged' do
departmentIdList = [ 1 , 2 , 7 ]
departmentIdFilterList = [
[ departmentIdList [ 0 ] ] ,
[ departmentIdList [ 1 ] ] ,
[ departmentIdList [ 1 ] , departmentIdList [ 0 ] , departmentIdList [ 2 ] ]
]
departmentIdFilterList = departmentIdFilterList . map { | departmentFilter | departmentFilter . to_json }
for page in $pages
for departmentFilter in departmentIdFilterList
result = request ( '/ticket/search' , {
csrf_userid : $csrf_userid ,
csrf_token : $csrf_token ,
page : page ,
departments : departmentFilter
} )
( result [ 'status' ] ) . should . equal ( 'success' )
tickets = result [ 'data' ] [ 'tickets' ]
for ticket in tickets
( departmentFilter . include? ( ticket [ 'department' ] [ 'id' ] ) ) . should . equal ( true )
end
end
end
end
it 'should get tickets from the authors passaged' do
authorIdList = [ 1 , 2 , 8 ]
authorIsStaffList = [ true , true , false ]
authorsFilterList = [
[ ] ,
[ { 'id' = > authorIdList [ 0 ] , 'isStaff' = > authorIsStaffList [ 0 ] } ] ,
[
{ 'id' = > authorIdList [ 1 ] , 'isStaff' = > authorIsStaffList [ 1 ] } ,
{ 'id' = > authorIdList [ 2 ] , 'isStaff' = > authorIsStaffList [ 2 ] } ,
{ 'id' = > authorIdList [ 0 ] , 'isStaff' = > authorIsStaffList [ 0 ] }
]
]
authorsFilterList = authorsFilterList . map { | authorsFilter | authorsFilter . to_json }
authorIdList = authorIdList . map { | authorId | authorId . to_s }
for page in $pages
for authorsFilter in authorsFilterList
result = request ( '/ticket/search' , {
csrf_userid : $csrf_userid ,
csrf_token : $csrf_token ,
page : page ,
authors : authorsFilter
} )
( result [ 'status' ] ) . should . equal ( 'success' )
if authorsFilter != '[]'
tickets = result [ 'data' ] [ 'tickets' ]
for ticket in tickets
ticketAuthor = ticket [ 'author' ]
author = ( JSON . parse ( authorsFilter ) ) . find { | author | author [ 'id' ] . to_s === ticketAuthor [ 'id' ] }
( author [ 'isStaff' ] ) . should . equal ( ticketAuthor [ 'staff' ] )
end
end
end
end
2019-12-28 00:51:22 +01:00
end
2019-12-27 23:59:23 +01:00
it 'should fail if the orderBy values are invalid' do
2020-08-28 10:19:47 +02:00
orderByFilterList = [ '{value: "closeddd", asc: 11}' , '' , 'orderBy' , - 1 ]
for orderByFilter in orderByFilterList
result = request ( '/ticket/search' , {
csrf_userid : $csrf_userid ,
csrf_token : $csrf_token ,
page : 1 ,
orderBy : orderByFilter
} )
( result [ 'status' ] ) . should . equal ( 'fail' )
( result [ 'message' ] ) . should . equal ( 'INVALID_ORDER_BY' )
end
end
it 'should get tickets from the unreadStaff passaged' do
unreadStaffList = [ 1 , 0 ]
for page in $pages
for unreadStaff in unreadStaffList
result = request ( '/ticket/search' , {
csrf_userid : $csrf_userid ,
csrf_token : $csrf_token ,
page : page ,
unreadStaff : unreadStaff
} )
( result [ 'status' ] ) . should . equal ( 'success' )
tickets = result [ 'data' ] [ 'tickets' ]
for ticket in tickets
ticket [ 'unreadStaff' ] . should . equal ( unreadStaff === 1 )
end
end
end
end
it 'should get tickets from the assigned passaged' do
assignedFilterList = [ 1 , 0 ]
for page in $pages
for assignedFilter in assignedFilterList
result = request ( '/ticket/search' , {
csrf_userid : $csrf_userid ,
csrf_token : $csrf_token ,
page : page ,
assigned : assignedFilter
} )
( result [ 'status' ] ) . should . equal ( 'success' )
tickets = result [ 'data' ] [ 'tickets' ]
for ticket in tickets
( ticket [ 'owner' ] != nil ) . should . equal ( assignedFilter === 1 )
end
end
end
end
it 'should success if the dateRange values are valid' do
dateRangeList = [ [ 0 , 1 ] , [ 201701010000 , 202001081735 ] , [ 201701010000 , 201701010001 ] ]
dateRangeFilterList = dateRangeList . map { | dateRange | dateRange . to_json }
for page in $pages
for dateRangeFilter in dateRangeFilterList
result = request ( '/ticket/search' , {
csrf_userid : $csrf_userid ,
csrf_token : $csrf_token ,
page : page ,
dateRange : dateRangeFilter
} )
( result [ 'status' ] ) . should . equal ( 'success' )
end
end
end
it 'should get tickets from the orderBy passaged' do
orderByClosedDesc = '{"value": "closed", "asc": 0}'
orderByClosedAsc = '{"value": "closed", "asc": 1}'
orderByOwnerIdDesc = '{"value": "owner_id", "asc": 0}'
orderByOwnerIdAsc = '{"value": "owner_id", "asc": 1}'
for page in $pages
result = request ( '/ticket/search' , {
csrf_userid : $csrf_userid ,
csrf_token : $csrf_token ,
page : page ,
orderBy : orderByClosedDesc
} )
( result [ 'status' ] ) . should . equal ( 'success' )
tickets = result [ 'data' ] [ 'tickets' ]
currentTicketClosedValue = ( tickets != [ ] ) ? ( ( tickets . first ( ) ) [ 'closed' ] ? 1 : 0 ) : nil
for ticket in tickets
ticketStatus = ticket [ 'closed' ]
( ( ticketStatus ? 1 : 0 ) < = currentTicketClosedValue ) . should . equal ( true )
currentTicketClosedValue = ticketStatus ? 1 : 0
end
result = request ( '/ticket/search' , {
csrf_userid : $csrf_userid ,
csrf_token : $csrf_token ,
page : page ,
orderBy : orderByClosedAsc
} )
( result [ 'status' ] ) . should . equal ( 'success' )
tickets = result [ 'data' ] [ 'tickets' ]
currentTicketClosedValue = ( tickets != [ ] ) ? ( ( tickets . first ( ) ) [ 'closed' ] ? 1 : 0 ) : nil
for ticket in tickets
ticketStatus = ticket [ 'closed' ]
( ( ticketStatus ? 1 : 0 ) > = currentTicketClosedValue ) . should . equal ( true )
currentTicketClosedValue = ticketStatus ? 1 : 0
end
result = request ( '/ticket/search' , {
csrf_userid : $csrf_userid ,
csrf_token : $csrf_token ,
page : page ,
orderBy : orderByOwnerIdDesc
} )
( result [ 'status' ] ) . should . equal ( 'success' )
tickets = result [ 'data' ] [ 'tickets' ]
firstTicket = tickets . first ( )
firstTicketOwner = firstTicket ? firstTicket [ 'owner' ] : nil
firstTicketOwnerId = firstTicketOwner ? firstTicketOwner [ 'id' ] : '-1'
currentTicketOwnerIdValue = ( tickets != [ ] ) ? firstTicketOwnerId : nil
for ticket in tickets
ticketOwner = ticket [ 'owner' ]
ticketOwnerId = ticketOwner ? ticketOwner [ 'id' ] : '-1'
( ticketOwnerId < = currentTicketOwnerIdValue ) . should . equal ( true )
currentTicketOwnerIdValue = ticketOwnerId
end
result = request ( '/ticket/search' , {
csrf_userid : $csrf_userid ,
csrf_token : $csrf_token ,
page : page ,
orderBy : orderByOwnerIdAsc
} )
( result [ 'status' ] ) . should . equal ( 'success' )
tickets = result [ 'data' ] [ 'tickets' ]
firstTicket = tickets . first ( )
firstTicketOwner = firstTicket ? firstTicket [ 'owner' ] : nil
firstTicketOwnerId = firstTicketOwner ? firstTicketOwner [ 'id' ] : '-1'
currentTicketOwnerIdValue = ( tickets != [ ] ) ? firstTicketOwnerId : nil
for ticket in tickets
ticketOwner = ticket [ 'owner' ]
ticketOwnerId = ticketOwner ? ticketOwner [ 'id' ] : '-1'
( ticketOwnerId > = currentTicketOwnerIdValue ) . should . equal ( true )
currentTicketOwnerIdValue = ticketOwnerId
end
end
end
it 'should fail if the query values are invalid' do
queryList = [ '' , ' ' , ' ' ]
for page in $pages
for query in queryList
result = request ( '/ticket/search' , {
csrf_userid : $csrf_userid ,
csrf_token : $csrf_token ,
page : page ,
query : query
} )
( result [ 'status' ] ) . should . equal ( 'fail' )
end
end
end
#
# it 'should success if the query values are valid' do
# queryList = ['Hola?', '223121', '1', 'xD']
# for page in $pages
# for query in queryList
# result = request('/ticket/search', {
# csrf_userid: $csrf_userid,
# csrf_token: $csrf_token,
# page: page,
# query: query
# })
# if result['status'] === 'fail'
# puts "Esto es result #{result}"
# end
# result is {
# "status"=>"fail",
# "message"=>"SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'development.ticketevent.content' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by",
# "data"=>nil
# }
# (result['status']).should.equal('success')
# end
# end
# end
it 'should get tickets from the assigned and the author passaged' do
assignedFilterList = [ 1 , 0 ]
authorIdList = [ 1 , 2 , 8 ]
authorIsStaffList = [ true , true , false ]
authorsFilterList = [
[ ] ,
[ { 'id' = > authorIdList [ 0 ] , 'isStaff' = > authorIsStaffList [ 0 ] } ] ,
[
{ 'id' = > authorIdList [ 1 ] , 'isStaff' = > authorIsStaffList [ 1 ] } ,
{ 'id' = > authorIdList [ 2 ] , 'isStaff' = > authorIsStaffList [ 2 ] } ,
{ 'id' = > authorIdList [ 0 ] , 'isStaff' = > authorIsStaffList [ 0 ] }
]
]
authorsFilterList = authorsFilterList . map { | authorsFilter | authorsFilter . to_json }
authorIdList = authorIdList . map { | authorId | authorId . to_s }
for page in $pages
for authorsFilter in authorsFilterList
for assignedFilter in assignedFilterList
result = request ( '/ticket/search' , {
csrf_userid : $csrf_userid ,
csrf_token : $csrf_token ,
page : page ,
assigned : assignedFilter ,
authors : authorsFilter
} )
( result [ 'status' ] ) . should . equal ( 'success' )
if authorsFilter != '[]'
tickets = result [ 'data' ] [ 'tickets' ]
for ticket in tickets
ticketAuthor = ticket [ 'author' ]
author = ( JSON . parse ( authorsFilter ) ) . find { | author | author [ 'id' ] . to_s === ticketAuthor [ 'id' ] }
( author [ 'isStaff' ] ) . should . equal ( ticketAuthor [ 'staff' ] )
( ticket [ 'owner' ] != nil ) . should . equal ( assignedFilter === 1 )
end
end
end
end
end
end
it 'should get tickets from the closed and the owners passaged' do
closedFilterList = [ 1 , 0 ]
ownerIdList = [ 8 , 1 , 2 ]
ownerIdFilterList = [
[ ownerIdList [ 0 ] ] ,
[ ownerIdList [ 1 ] , ownerIdList [ 2 ] , ownerIdList [ 0 ] ] ,
[ ownerIdList [ 2 ] , ownerIdList [ 0 ] ]
]
ownerIdFilterList = ownerIdFilterList . map { | ownerFilter | ownerFilter . to_json }
for page in $pages
for ownerFilter in ownerIdFilterList
for closedFilter in closedFilterList
result = request ( '/ticket/search' , {
csrf_userid : $csrf_userid ,
csrf_token : $csrf_token ,
page : page ,
closed : closedFilter ,
owners : ownerFilter
} )
( result [ 'status' ] ) . should . equal ( 'success' )
tickets = result [ 'data' ] [ 'tickets' ]
for ticket in tickets
( ticket [ 'closed' ] ) . should . equal ( closedFilter === 1 )
( ownerFilter . include? ( ticket [ 'owner' ] [ 'id' ] ) ) . should . equal ( true )
end
end
end
end
2019-12-27 23:59:23 +01:00
end
end