opensupports/tests/ticket/search.rb

682 lines
24 KiB
Ruby

describe '/ticket/search' do
Scripts.logout()
Scripts.login($staff[:email], $staff[:password], true)
Scripts.createTicket('test ticket1')
@ticketNumber1 = $database.getRow('ticket', 'test ticket1', 'title')['ticket_number']
Scripts.createTicket('test ticket2')
@ticketNumber2 = $database.getRow('ticket', 'test ticket2', 'title')['ticket_number']
Scripts.createTicket('test ticket3')
@ticketNumber3 = $database.getRow('ticket', 'test ticket3', 'title')['ticket_number']
$pages = 1..10
it 'should fail if the page is invalid' do
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
end
it 'should fail if the tags are invalid' do
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
end
it 'should fail if the closed value is invalid' do
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
end
it 'should fail if the unreadStaff value is invalid' do
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
end
it 'should fail if the dateRange values are invalid' do
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
end
it 'should fail if the departments are invalid' do
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
end
it 'should fail if the authors are invalid' do
authorsFilterList = [
'[{id:30001, staff: 1},{id:30,staff: 3}]',
'[{id:"delete all)", staff: 1},{id:30,staff: 3}]',
'1, 2, 3',
'[1, 2, 3]'
]
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
end
it 'should fail if the assigned value is invalid' do
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', {
csrf_userid: $csrf_userid,
csrf_token: $csrf_token
})
(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
result = request('/ticket/search', {
csrf_userid: $csrf_userid,
csrf_token: $csrf_token,
page: 1,
tags: '[2, 3]'
})
(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
end
it 'should fail if the orderBy values are invalid' do
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
end
it 'should success if the page size is valid' do
pageSizeList = [5, 10, 20, 50]
for pageSize in pageSizeList
result = request('/ticket/search', {
csrf_userid: $csrf_userid,
csrf_token: $csrf_token,
page: 1,
pageSize: pageSize
})
(result['status'].should.equal('success'))
end
end
it 'should fail if page size is not among validation options' do
pageSizeList = [0, 51, 'string', true]
for pageSize in pageSizeList
result = request('/ticket/search', {
csrf_userid: $csrf_userid,
csrf_token: $csrf_token,
page: 1,
pageSize: pageSize
})
(result['status'].should.equal('fail'))
(result['message']).should.equal('INVALID_PAGE_SIZE')
end
end
end