trabajo-afectivo/spec/lib/report/ticket_generic_time_spec.rb
2022-01-01 14:38:12 +01:00

416 lines
13 KiB
Ruby

# Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
require 'rails_helper'
require 'lib/report_examples'
RSpec.describe Report::TicketGenericTime, searchindex: true do
include_examples 'with report examples'
describe '.aggs' do
it 'gets monthly aggregated results by created_at' do
result = described_class.aggs(
range_start: Time.zone.parse('2015-01-01T00:00:00Z'),
range_end: Time.zone.parse('2015-12-31T23:59:59Z'),
interval: 'month', # year, quarter, month, week, day, hour, minute, second
selector: {}, # ticket selector to get only a collection of tickets
params: { field: 'created_at' },
)
expect(result).to eq [0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 1, 0]
end
it 'gets monthly aggregated results by created_at not merged' do
result = described_class.aggs(
range_start: Time.zone.parse('2015-01-01T00:00:00Z'),
range_end: Time.zone.parse('2015-12-31T23:59:59Z'),
interval: 'month', # year, quarter, month, week, day, hour, minute, second
selector: {
'state' => {
'operator' => 'is not',
'value' => 'merged'
}
},
params: { field: 'created_at' },
)
expect(result).to eq [0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 1, 0]
end
end
describe '.items' do
it 'gets items in year range by created_at' do
result = described_class.items(
range_start: Time.zone.parse('2015-01-01T00:00:00Z'),
range_end: Time.zone.parse('2015-12-31T23:59:59Z'),
selector: {}, # ticket selector to get only a collection of tickets
params: { field: 'created_at' },
)
expect(result).to match_tickets ticket_7, ticket_6, ticket_5, ticket_4, ticket_3, ticket_2, ticket_1
end
it 'gets items in year range by created_at not merged' do
result = described_class.items(
range_start: Time.zone.parse('2015-01-01T00:00:00Z'),
range_end: Time.zone.parse('2015-12-31T23:59:59Z'),
selector: {
'state' => {
'operator' => 'is not',
'value' => 'merged'
}
},
params: { field: 'created_at' },
)
expect(result).to match_tickets ticket_7, ticket_6, ticket_5, ticket_4, ticket_3, ticket_2, ticket_1
end
it 'gets items in year range by created_at before oct 31st' do
result = described_class.items(
range_start: Time.zone.parse('2015-01-01T00:00:00Z'),
range_end: Time.zone.parse('2015-12-31T23:59:59Z'),
selector: {
'created_at' => {
'operator' => 'before (absolute)',
'value' => '2015-10-31T00:00:00Z'
}
},
params: { field: 'created_at' },
)
expect(result).to match_tickets ticket_5, ticket_4, ticket_3, ticket_2, ticket_1
end
it 'gets items in year range by created_at after oct 31st' do
result = described_class.items(
range_start: Time.zone.parse('2015-01-01T00:00:00Z'),
range_end: Time.zone.parse('2015-12-31T23:59:59Z'),
selector: {
'created_at' => {
'operator' => 'after (absolute)',
'value' => '2015-10-31T00:00:00Z'
}
},
params: { field: 'created_at' },
)
expect(result).to match_tickets ticket_7, ticket_6
end
it 'gets items in 1 day from now' do
result = described_class.items(
range_start: 1.year.ago.beginning_of_year,
range_end: 1.year.from_now.at_end_of_year,
selector: {
'created_at' => {
'operator' => 'after (relative)',
'range' => 'day',
'value' => '1'
}
}, # ticket selector to get only a collection of tickets
params: { field: 'created_at' },
)
expect(result).to match_tickets ticket_after_72h
end
it 'gets items in 1 month from now' do
result = described_class.items(
range_start: 1.year.ago.beginning_of_year,
range_end: 1.year.from_now.at_end_of_year,
selector: {
'created_at' => {
'operator' => 'after (relative)',
'range' => 'month',
'value' => '1'
}
}, # ticket selector to get only a collection of tickets
params: { field: 'created_at' },
)
expect(result).to match_tickets []
end
it 'gets items in 1 month ago' do
result = described_class.items(
range_start: 1.year.ago.beginning_of_year,
range_end: 1.year.from_now.at_end_of_year,
selector: {
'created_at' => {
'operator' => 'before (relative)',
'range' => 'month',
'value' => '1'
}
}, # ticket selector to get only a collection of tickets
params: { field: 'created_at' },
)
expect(result).to match_tickets ticket_before_40d
end
it 'gets items in 5 months ago' do
result = described_class.items(
range_start: 1.year.ago.beginning_of_year,
range_end: 1.year.from_now.at_end_of_year,
selector: {
'created_at' => {
'operator' => 'before (relative)',
'range' => 'month',
'value' => '5'
}
}, # ticket selector to get only a collection of tickets
params: { field: 'created_at' },
)
expect(result).to match_tickets []
end
it 'gets items with aaa+bbb' do
result = described_class.items(
range_start: Time.zone.parse('2015-01-01T00:00:00Z'),
range_end: Time.zone.parse('2015-12-31T23:59:59Z'),
selector: {
'tags' => {
'operator' => 'contains all',
'value' => 'aaa, bbb'
}
},
params: { field: 'created_at' },
)
expect(result).to match_tickets ticket_1
end
it 'gets items with not aaa+bbb' do
result = described_class.items(
range_start: Time.zone.parse('2015-01-01T00:00:00Z'),
range_end: Time.zone.parse('2015-12-31T23:59:59Z'),
selector: {
'tags' => {
'operator' => 'contains all not',
'value' => 'aaa, bbb'
}
},
params: { field: 'created_at' },
)
expect(result).to match_tickets ticket_7, ticket_6, ticket_5, ticket_4, ticket_3, ticket_2
end
it 'gets items with aaa' do
result = described_class.items(
range_start: Time.zone.parse('2015-01-01T00:00:00Z'),
range_end: Time.zone.parse('2015-12-31T23:59:59Z'),
selector: {
'tags' => {
'operator' => 'contains all',
'value' => 'aaa'
}
},
params: { field: 'created_at' },
)
expect(result).to match_tickets ticket_2, ticket_1
end
it 'gets items with not aaa' do
result = described_class.items(
range_start: Time.zone.parse('2015-01-01T00:00:00Z'),
range_end: Time.zone.parse('2015-12-31T23:59:59Z'),
selector: {
'tags' => {
'operator' => 'contains all not',
'value' => 'aaa'
}
},
params: { field: 'created_at' },
)
expect(result).to match_tickets ticket_7, ticket_6, ticket_5, ticket_4, ticket_3
end
it 'gets items with one not aaa' do
result = described_class.items(
range_start: Time.zone.parse('2015-01-01T00:00:00Z'),
range_end: Time.zone.parse('2015-12-31T23:59:59Z'),
selector: {
'tags' => {
'operator' => 'contains one not',
'value' => 'aaa'
}
},
params: { field: 'created_at' },
)
expect(result).to match_tickets ticket_7, ticket_6, ticket_5, ticket_4, ticket_3
end
it 'gets items with one not aaa+bbb' do
result = described_class.items(
range_start: Time.zone.parse('2015-01-01T00:00:00Z'),
range_end: Time.zone.parse('2015-12-31T23:59:59Z'),
selector: {
'tags' => {
'operator' => 'contains one not',
'value' => 'aaa, bbb'
}
},
params: { field: 'created_at' },
)
expect(result).to match_tickets ticket_7, ticket_6, ticket_4, ticket_3
end
it 'gets items with one aaa' do
result = described_class.items(
range_start: Time.zone.parse('2015-01-01T00:00:00Z'),
range_end: Time.zone.parse('2015-12-31T23:59:59Z'),
selector: {
'tags' => {
'operator' => 'contains one',
'value' => 'aaa'
}
},
params: { field: 'created_at' },
)
expect(result).to match_tickets ticket_2, ticket_1
end
it 'gets items with one aaa+bbb' do
result = described_class.items(
range_start: Time.zone.parse('2015-01-01T00:00:00Z'),
range_end: Time.zone.parse('2015-12-31T23:59:59Z'),
selector: {
'tags' => {
'operator' => 'contains one',
'value' => 'aaa, bbb'
}
},
params: { field: 'created_at' },
)
expect(result).to match_tickets ticket_5, ticket_2, ticket_1
end
it 'gets items with test' do
result = described_class.items(
range_start: Time.zone.parse('2015-01-01T00:00:00Z'),
range_end: Time.zone.parse('2015-12-31T23:59:59Z'),
selector: {
'title' => {
'operator' => 'contains',
'value' => 'Test'
}
},
params: { field: 'created_at' },
)
expect(result).to match_tickets ticket_7, ticket_6, ticket_5, ticket_4, ticket_3, ticket_2, ticket_1
end
it 'gets items with not test' do
result = described_class.items(
range_start: Time.zone.parse('2015-01-01T00:00:00Z'),
range_end: Time.zone.parse('2015-12-31T23:59:59Z'),
selector: {
'title' => {
'operator' => 'contains not',
'value' => 'Test'
}
},
params: { field: 'created_at' },
)
expect(result).to match_tickets []
end
# Regression test for issue #2246 - Records in Reporting not updated when single ActiveRecord can not be found
it 'correctly handles missing tickets', searchindex: false do
class_double('SearchIndexBackend', selectors: { ticket_ids: [-1] }, drop_index: nil, drop_pipeline: nil).as_stubbed_const
expect do
described_class.items(
range_start: Time.zone.parse('2015-01-01T00:00:00Z'),
range_end: Time.zone.parse('2015-12-31T23:59:59Z'),
selector: {}, # ticket selector to get only a collection of tickets
params: { field: 'created_at' },
)
end.not_to raise_error
end
end
context 'when additional attribute exists', db_strategy: :reset do
before do
ObjectManager::Attribute.add(
object: 'Ticket',
name: 'test_category',
display: 'Test 1',
data_type: 'tree_select',
data_option: {
maxlength: 200,
null: false,
default: '',
options: [
{ 'name' => 'aa', 'value' => 'aa', 'children' => [{ 'name' => 'aa', 'value' => 'aa::aa' }, { 'name' => 'bb', 'value' => 'aa::bb' }, { 'name' => 'cc', 'value' => 'aa::cc' }] },
{ 'name' => 'bb', 'value' => 'bb', 'children' => [{ 'name' => 'aa', 'value' => 'bb::aa' }, { 'name' => 'bb', 'value' => 'bb::bb' }, { 'name' => 'cc', 'value' => 'bb::cc' }] },
{ 'name' => 'cc', 'value' => 'cc', 'children' => [{ 'name' => 'aa', 'value' => 'cc::aa' }, { 'name' => 'bb', 'value' => 'cc::bb' }, { 'name' => 'cc', 'value' => 'cc::cc' }] },
]
},
active: true,
screens: {},
position: 20,
created_by_id: 1,
updated_by_id: 1,
editable: false,
to_migrate: false,
)
ObjectManager::Attribute.migration_execute
ticket_with_category
rebuild_searchindex
end
let(:ticket_with_category) do
travel_to DateTime.new 2015, 10, 28, 9, 30
ticket = create(:ticket,
group: group_2,
customer: customer,
test_category: 'cc::bb',
state_name: 'new',
priority_name: '2 normal')
ticket.tag_add('aaa', 1)
ticket.tag_add('bbb', 1)
create(:ticket_article,
:inbound_email,
ticket: ticket)
travel 5.hours
ticket.update! group: group_1
travel_back
ticket
end
describe '.items' do
it 'gets items with test_category cc:bb' do
result = described_class.items(
range_start: Time.zone.parse('2015-01-01T00:00:00Z'),
range_end: Time.zone.parse('2015-12-31T23:59:59Z'),
selector: {
'test_category' => {
'operator' => 'is',
'value' => 'cc::bb'
},
},
params: { field: 'created_at' },
)
expect(result).to match_tickets ticket_with_category
end
end
end
end