Improved performance of ticket zoom and reduced cpu load scheduler.
This commit is contained in:
parent
686f56828d
commit
6f87ebf7c7
6 changed files with 696 additions and 55 deletions
|
@ -143,7 +143,7 @@ module Channel::Filter::IdentifySender
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.user_create(data)
|
def self.user_create(data, role_ids = nil)
|
||||||
if data[:email] !~ /@/
|
if data[:email] !~ /@/
|
||||||
data[:email] += '@local'
|
data[:email] += '@local'
|
||||||
end
|
end
|
||||||
|
@ -166,7 +166,7 @@ module Channel::Filter::IdentifySender
|
||||||
end
|
end
|
||||||
|
|
||||||
# create new user
|
# create new user
|
||||||
role_ids = Role.signup_role_ids
|
role_ids ||= Role.signup_role_ids
|
||||||
|
|
||||||
# fillup
|
# fillup
|
||||||
%w[firstname lastname].each do |item|
|
%w[firstname lastname].each do |item|
|
||||||
|
|
|
@ -28,7 +28,7 @@ module HasGroups
|
||||||
# #=> [#<Group id: 1, access="full", ...>, ...]
|
# #=> [#<Group id: 1, access="full", ...>, ...]
|
||||||
#
|
#
|
||||||
# @example Groups for given access(es)es plus 'full'
|
# @example Groups for given access(es)es plus 'full'
|
||||||
# user.groups.access('read', 'write')
|
# user.groups.access('read', 'change')
|
||||||
# #=> [#<Group id: 1, access="full", ...>, ...]
|
# #=> [#<Group id: 1, access="full", ...>, ...]
|
||||||
#
|
#
|
||||||
# @return [ActiveRecord::AssociationRelation<[<Group]>] List of Groups with :through attributes
|
# @return [ActiveRecord::AssociationRelation<[<Group]>] List of Groups with :through attributes
|
||||||
|
@ -139,7 +139,7 @@ module HasGroups
|
||||||
#
|
#
|
||||||
# @example
|
# @example
|
||||||
# user.group_names_access_map
|
# user.group_names_access_map
|
||||||
# #=> {'Users' => 'full', 'Support' => ['read', 'write']}
|
# #=> {'Users' => 'full', 'Support' => ['read', 'change']}
|
||||||
#
|
#
|
||||||
# @return [Hash<String=>String,Array<String>>] The map of Group name to access
|
# @return [Hash<String=>String,Array<String>>] The map of Group name to access
|
||||||
def group_names_access_map
|
def group_names_access_map
|
||||||
|
@ -149,8 +149,8 @@ module HasGroups
|
||||||
# Stores a map of Group ID to access. Deletes all other relations.
|
# Stores a map of Group ID to access. Deletes all other relations.
|
||||||
#
|
#
|
||||||
# @example
|
# @example
|
||||||
# user.group_names_access_map = {'Users' => 'full', 'Support' => ['read', 'write']}
|
# user.group_names_access_map = {'Users' => 'full', 'Support' => ['read', 'change']}
|
||||||
# #=> {'Users' => 'full', 'Support' => ['read', 'write']}
|
# #=> {'Users' => 'full', 'Support' => ['read', 'change']}
|
||||||
#
|
#
|
||||||
# @return [Hash<String=>String,Array<String>>] The given map
|
# @return [Hash<String=>String,Array<String>>] The given map
|
||||||
def group_names_access_map=(name_access_map)
|
def group_names_access_map=(name_access_map)
|
||||||
|
@ -163,7 +163,7 @@ module HasGroups
|
||||||
#
|
#
|
||||||
# @example
|
# @example
|
||||||
# user.group_ids_access_map
|
# user.group_ids_access_map
|
||||||
# #=> {1 => 'full', 42 => ['read', 'write']}
|
# #=> {1 => 'full', 42 => ['read', 'change']}
|
||||||
#
|
#
|
||||||
# @return [Hash<Integer=>String,Array<String>>] The map of Group ID to access
|
# @return [Hash<Integer=>String,Array<String>>] The map of Group ID to access
|
||||||
def group_ids_access_map
|
def group_ids_access_map
|
||||||
|
@ -173,8 +173,8 @@ module HasGroups
|
||||||
# Stores a map of Group ID to access. Deletes all other relations.
|
# Stores a map of Group ID to access. Deletes all other relations.
|
||||||
#
|
#
|
||||||
# @example
|
# @example
|
||||||
# user.group_ids_access_map = {1 => 'full', 42 => ['read', 'write']}
|
# user.group_ids_access_map = {1 => 'full', 42 => ['read', 'change']}
|
||||||
# #=> {1 => 'full', 42 => ['read', 'write']}
|
# #=> {1 => 'full', 42 => ['read', 'change']}
|
||||||
#
|
#
|
||||||
# @return [Hash<Integer=>String,Array<String>>] The given map
|
# @return [Hash<Integer=>String,Array<String>>] The given map
|
||||||
def group_ids_access_map=(id_access_map)
|
def group_ids_access_map=(id_access_map)
|
||||||
|
|
|
@ -7,46 +7,59 @@ list attributes
|
||||||
|
|
||||||
result = Ticket::ScreenOptions.attributes_to_change(
|
result = Ticket::ScreenOptions.attributes_to_change(
|
||||||
ticket_id: 123,
|
ticket_id: 123,
|
||||||
article_id: 123,
|
|
||||||
|
|
||||||
ticket: ticket_model,
|
ticket: ticket_model,
|
||||||
current_user: User.find(123),
|
current_user: User.find(123),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
or only with user
|
||||||
|
|
||||||
|
result = Ticket::ScreenOptions.attributes_to_change(
|
||||||
|
current_user: User.find(123),
|
||||||
|
)
|
||||||
|
|
||||||
returns
|
returns
|
||||||
|
|
||||||
result = {
|
result = {
|
||||||
type_id: type_ids,
|
:form_meta => {
|
||||||
state_id: state_ids,
|
:filter => {
|
||||||
priority_id: priority_ids,
|
:state_id => [1, 2, 4, 7, 3],
|
||||||
owner_id: owner_ids,
|
:priority_id => [2, 1, 3],
|
||||||
group_id: group_ids,
|
:type_id => [10, 5],
|
||||||
group_id__owner_id: groups_users,
|
:group_id => [12]
|
||||||
}
|
},
|
||||||
|
},
|
||||||
|
:dependencies => {
|
||||||
|
:group_id => {
|
||||||
|
"" => {
|
||||||
|
: owner_id => []
|
||||||
|
},
|
||||||
|
12 => {
|
||||||
|
: owner_id => [4, 5, 6, 7]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
=end
|
=end
|
||||||
|
|
||||||
def self.attributes_to_change(params)
|
def self.attributes_to_change(params)
|
||||||
raise 'current_user param needed' if !params[:current_user]
|
raise 'current_user param needed' if !params[:current_user]
|
||||||
|
|
||||||
if params[:ticket_id]
|
if params[:ticket].blank? && params[:ticket_id].present?
|
||||||
params[:ticket] = Ticket.find(params[:ticket_id])
|
params[:ticket] = Ticket.find(params[:ticket_id])
|
||||||
end
|
end
|
||||||
if params[:article_id]
|
|
||||||
params[:article] = Ticket::Article.find(params[:article_id])
|
|
||||||
end
|
|
||||||
|
|
||||||
filter = {}
|
filter = {}
|
||||||
assets = {}
|
assets = {}
|
||||||
|
|
||||||
# get ticket states
|
# get ticket states
|
||||||
state_ids = []
|
state_ids = []
|
||||||
if params[:ticket]
|
if params[:ticket].present?
|
||||||
state_type = params[:ticket].state.state_type
|
state_type = params[:ticket].state.state_type
|
||||||
end
|
end
|
||||||
state_types = ['open', 'closed', 'pending action', 'pending reminder']
|
state_types = ['open', 'closed', 'pending action', 'pending reminder']
|
||||||
if state_type && !state_types.include?(state_type.name)
|
if state_type && !state_types.include?(state_type.name)
|
||||||
state_ids.push params[:ticket].state.id
|
state_ids.push params[:ticket].state_id
|
||||||
end
|
end
|
||||||
state_types.each do |type|
|
state_types.each do |type|
|
||||||
state_type = Ticket::StateType.find_by(name: type)
|
state_type = Ticket::StateType.find_by(name: type)
|
||||||
|
@ -81,32 +94,54 @@ returns
|
||||||
filter[:type_id] = type_ids
|
filter[:type_id] = type_ids
|
||||||
|
|
||||||
# get group / user relations
|
# get group / user relations
|
||||||
agents = {}
|
|
||||||
User.with_permissions('ticket.agent').each do |user|
|
|
||||||
agents[ user.id ] = 1
|
|
||||||
end
|
|
||||||
|
|
||||||
dependencies = { group_id: { '' => { owner_id: [] } } }
|
dependencies = { group_id: { '' => { owner_id: [] } } }
|
||||||
|
|
||||||
filter[:group_id] = []
|
filter[:group_id] = []
|
||||||
groups = if params[:current_user].permissions?('ticket.agent')
|
groups = if params[:current_user].permissions?('ticket.agent')
|
||||||
params[:current_user].groups_access(%w[create edit])
|
if params[:ticket].present?
|
||||||
|
params[:current_user].groups_access(%w[edit])
|
||||||
|
else
|
||||||
|
params[:current_user].groups_access(%w[create])
|
||||||
|
end
|
||||||
else
|
else
|
||||||
Group.where(active: true)
|
Group.where(active: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
agents = {}
|
||||||
|
agent_role_ids = Role.with_permissions('ticket.agent').pluck(:id)
|
||||||
|
agent_user_ids = User.joins(:roles).where(users: { active: true }).where('roles_users.role_id IN (?)', agent_role_ids).pluck(:id)
|
||||||
|
groups.each do |group|
|
||||||
|
filter[:group_id].push group.id
|
||||||
|
assets = group.assets(assets)
|
||||||
|
dependencies[:group_id][group.id] = { owner_id: [] }
|
||||||
|
|
||||||
|
group_agent_user_ids = User.joins(', groups_users').where("users.id = groups_users.user_id AND groups_users.access = 'full' AND groups_users.group_id = ? AND users.id IN (?)", group.id, agent_user_ids).pluck(:id)
|
||||||
|
group_agent_roles_ids = Role.joins(', roles_groups').where("roles.id = roles_groups.role_id AND roles_groups.access = 'full' AND roles_groups.group_id = ? AND roles.id IN (?)", group.id, agent_role_ids).pluck(:id)
|
||||||
|
group_agent_role_user_ids = User.joins(:roles).where(roles: { id: group_agent_roles_ids }).pluck(:id)
|
||||||
|
|
||||||
|
User.where(id: group_agent_user_ids.concat(group_agent_role_user_ids).uniq, active: true).each do |user|
|
||||||
|
dependencies[:group_id][group.id][:owner_id].push user.id
|
||||||
|
next if agents[user.id]
|
||||||
|
agents[user.id] = true
|
||||||
|
assets = user.assets(assets)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
=begin
|
||||||
|
# for performance reasons we moved from api calls to optimized sql queries
|
||||||
groups.each do |group|
|
groups.each do |group|
|
||||||
filter[:group_id].push group.id
|
filter[:group_id].push group.id
|
||||||
assets = group.assets(assets)
|
assets = group.assets(assets)
|
||||||
dependencies[:group_id][group.id] = { owner_id: [] }
|
dependencies[:group_id][group.id] = { owner_id: [] }
|
||||||
|
|
||||||
User.group_access(group.id, 'full').each do |user|
|
User.group_access(group.id, 'full').each do |user|
|
||||||
next if !agents[ user.id ]
|
dependencies[:group_id][ group.id ][:owner_id].push user.id
|
||||||
|
next if agents[user.id]
|
||||||
|
agents[user.id] = true
|
||||||
assets = user.assets(assets)
|
assets = user.assets(assets)
|
||||||
dependencies[:group_id][ group.id ][ :owner_id ].push user.id
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
=end
|
||||||
{
|
{
|
||||||
assets: assets,
|
assets: assets,
|
||||||
form_meta: {
|
form_meta: {
|
||||||
|
|
|
@ -55,7 +55,7 @@ RSpec.shared_examples 'HasGroups' do
|
||||||
group_access_instance.group_names_access_map = {
|
group_access_instance.group_names_access_map = {
|
||||||
group_full.name => 'full',
|
group_full.name => 'full',
|
||||||
group_read.name => 'read',
|
group_read.name => 'read',
|
||||||
group_inactive.name => 'write',
|
group_inactive.name => 'change',
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -72,7 +72,7 @@ RSpec.shared_examples 'HasGroups' do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'filters for given access list parameter' do
|
it 'filters for given access list parameter' do
|
||||||
expect(group_access_instance.groups.access('read', 'write')).to include(group_read, group_inactive)
|
expect(group_access_instance.groups.access('read', 'change')).to include(group_read, group_inactive)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'always includes full access groups' do
|
it 'always includes full access groups' do
|
||||||
|
@ -161,7 +161,7 @@ RSpec.shared_examples 'HasGroups' do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't list for no access" do
|
it "doesn't list for no access" do
|
||||||
result = group_access_instance.group_ids_access('write')
|
result = group_access_instance.group_ids_access('change')
|
||||||
expect(result).not_to include(group_read.id)
|
expect(result).not_to include(group_read.id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -169,12 +169,12 @@ RSpec.shared_examples 'HasGroups' do
|
||||||
context 'access list' do
|
context 'access list' do
|
||||||
|
|
||||||
it 'lists access Group IDs' do
|
it 'lists access Group IDs' do
|
||||||
result = group_access_instance.group_ids_access(%w[read write])
|
result = group_access_instance.group_ids_access(%w[read edit])
|
||||||
expect(result).to include(group_read.id)
|
expect(result).to include(group_read.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't list for no access" do
|
it "doesn't list for no access" do
|
||||||
result = group_access_instance.group_ids_access(%w[write create])
|
result = group_access_instance.group_ids_access(%w[edit create])
|
||||||
expect(result).not_to include(group_read.id)
|
expect(result).not_to include(group_read.id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -223,7 +223,7 @@ RSpec.shared_examples 'HasGroups' do
|
||||||
expect do
|
expect do
|
||||||
group_access_instance.group_names_access_map = {
|
group_access_instance.group_names_access_map = {
|
||||||
group_full.name => 'full',
|
group_full.name => 'full',
|
||||||
group_read.name => %w[read write],
|
group_read.name => %w[read edit],
|
||||||
}
|
}
|
||||||
end.to change {
|
end.to change {
|
||||||
described_class.group_through.klass.count
|
described_class.group_through.klass.count
|
||||||
|
@ -309,7 +309,7 @@ RSpec.shared_examples 'HasGroups' do
|
||||||
expect do
|
expect do
|
||||||
group_access_instance.group_ids_access_map = {
|
group_access_instance.group_ids_access_map = {
|
||||||
group_full.id => 'full',
|
group_full.id => 'full',
|
||||||
group_read.id => %w[read write],
|
group_read.id => %w[read edit],
|
||||||
}
|
}
|
||||||
end.to change {
|
end.to change {
|
||||||
described_class.group_through.klass.count
|
described_class.group_through.klass.count
|
||||||
|
@ -497,7 +497,7 @@ RSpec.shared_examples 'HasGroups' do
|
||||||
group_access_instance.group_names_access_map = {
|
group_access_instance.group_names_access_map = {
|
||||||
group_full.name => 'full',
|
group_full.name => 'full',
|
||||||
group_read.name => 'read',
|
group_read.name => 'read',
|
||||||
group_inactive.name => 'write',
|
group_inactive.name => 'change',
|
||||||
}
|
}
|
||||||
expect do
|
expect do
|
||||||
group_access_instance.destroy
|
group_access_instance.destroy
|
||||||
|
@ -516,18 +516,18 @@ RSpec.shared_examples '#group_access? call' do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'checks negative' do
|
it 'checks negative' do
|
||||||
expect(group_access_instance.group_access?(group_parameter, 'write')).to be false
|
expect(group_access_instance.group_access?(group_parameter, 'change')).to be false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'access list' do
|
context 'access list' do
|
||||||
|
|
||||||
it 'checks positive' do
|
it 'checks positive' do
|
||||||
expect(group_access_instance.group_access?(group_parameter, %w[read write])).to be true
|
expect(group_access_instance.group_access?(group_parameter, %w[read edit])).to be true
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'checks negative' do
|
it 'checks negative' do
|
||||||
expect(group_access_instance.group_access?(group_parameter, %w[write create])).to be false
|
expect(group_access_instance.group_access?(group_parameter, %w[edit create])).to be false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -540,18 +540,18 @@ RSpec.shared_examples '.group_access call' do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'excludes non access IDs' do
|
it 'excludes non access IDs' do
|
||||||
expect(described_class.group_access(group_parameter, 'write')).not_to include(group_access_instance)
|
expect(described_class.group_access(group_parameter, 'change')).not_to include(group_access_instance)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'access list' do
|
context 'access list' do
|
||||||
|
|
||||||
it 'lists access IDs' do
|
it 'lists access IDs' do
|
||||||
expect(described_class.group_access(group_parameter, %w[read write])).to include(group_access_instance)
|
expect(described_class.group_access(group_parameter, %w[read edit])).to include(group_access_instance)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'excludes non access IDs' do
|
it 'excludes non access IDs' do
|
||||||
expect(described_class.group_access(group_parameter, %w[write create])).not_to include(group_access_instance)
|
expect(described_class.group_access(group_parameter, %w[edit create])).not_to include(group_access_instance)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -165,7 +165,7 @@ RSpec.shared_examples 'HasRoles' do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't list for no access" do
|
it "doesn't list for no access" do
|
||||||
result = group_access_instance.group_ids_access('write')
|
result = group_access_instance.group_ids_access('change')
|
||||||
expect(result).not_to include(group_role.id)
|
expect(result).not_to include(group_role.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -182,12 +182,12 @@ RSpec.shared_examples 'HasRoles' do
|
||||||
context 'access list' do
|
context 'access list' do
|
||||||
|
|
||||||
it 'lists access Group IDs' do
|
it 'lists access Group IDs' do
|
||||||
result = group_access_instance.group_ids_access(%w[read write])
|
result = group_access_instance.group_ids_access(%w[read change])
|
||||||
expect(result).to include(group_role.id)
|
expect(result).to include(group_role.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't list for no access" do
|
it "doesn't list for no access" do
|
||||||
result = group_access_instance.group_ids_access(%w[write create])
|
result = group_access_instance.group_ids_access(%w[change create])
|
||||||
expect(result).not_to include(group_role.id)
|
expect(result).not_to include(group_role.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -230,18 +230,18 @@ RSpec.shared_examples '#role_access? call' do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'checks negative' do
|
it 'checks negative' do
|
||||||
expect(group_access_instance.role_access?(group_parameter, 'write')).to be false
|
expect(group_access_instance.role_access?(group_parameter, 'change')).to be false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'access list' do
|
context 'access list' do
|
||||||
|
|
||||||
it 'checks positive' do
|
it 'checks positive' do
|
||||||
expect(group_access_instance.role_access?(group_parameter, %w[read write])).to be true
|
expect(group_access_instance.role_access?(group_parameter, %w[read change])).to be true
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'checks negative' do
|
it 'checks negative' do
|
||||||
expect(group_access_instance.role_access?(group_parameter, %w[write create])).to be false
|
expect(group_access_instance.role_access?(group_parameter, %w[change create])).to be false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -254,18 +254,18 @@ RSpec.shared_examples '.role_access_ids call' do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'excludes non access IDs' do
|
it 'excludes non access IDs' do
|
||||||
expect(described_class.role_access_ids(group_parameter, 'write')).not_to include(group_access_instance.id)
|
expect(described_class.role_access_ids(group_parameter, 'change')).not_to include(group_access_instance.id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'access list' do
|
context 'access list' do
|
||||||
|
|
||||||
it 'lists access IDs' do
|
it 'lists access IDs' do
|
||||||
expect(described_class.role_access_ids(group_parameter, %w[read write])).to include(group_access_instance.id)
|
expect(described_class.role_access_ids(group_parameter, %w[read change])).to include(group_access_instance.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'excludes non access IDs' do
|
it 'excludes non access IDs' do
|
||||||
expect(described_class.role_access_ids(group_parameter, %w[write create])).not_to include(group_access_instance.id)
|
expect(described_class.role_access_ids(group_parameter, %w[change create])).not_to include(group_access_instance.id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
606
test/unit/ticket_screen_options_test.rb
Normal file
606
test/unit/ticket_screen_options_test.rb
Normal file
|
@ -0,0 +1,606 @@
|
||||||
|
|
||||||
|
require 'test_helper'
|
||||||
|
|
||||||
|
class TicketScreenOptionsTest < ActiveSupport::TestCase
|
||||||
|
|
||||||
|
test 'base' do
|
||||||
|
|
||||||
|
group1 = Group.create!(
|
||||||
|
name: 'Group 1',
|
||||||
|
active: true,
|
||||||
|
email_address: EmailAddress.first,
|
||||||
|
created_by_id: 1,
|
||||||
|
updated_by_id: 1,
|
||||||
|
)
|
||||||
|
group2 = Group.create!(
|
||||||
|
name: 'Group 2',
|
||||||
|
active: true,
|
||||||
|
created_by_id: 1,
|
||||||
|
updated_by_id: 1,
|
||||||
|
)
|
||||||
|
group3 = Group.create!(
|
||||||
|
name: 'Group 3',
|
||||||
|
active: true,
|
||||||
|
created_by_id: 1,
|
||||||
|
updated_by_id: 1,
|
||||||
|
)
|
||||||
|
|
||||||
|
agent1 = User.create!(
|
||||||
|
login: 'agent1@example.com',
|
||||||
|
firstname: 'Role',
|
||||||
|
lastname: 'Agent1',
|
||||||
|
email: 'agent1@example.com',
|
||||||
|
password: 'agentpw',
|
||||||
|
active: true,
|
||||||
|
roles: Role.where(name: %w[Admin Agent]),
|
||||||
|
updated_by_id: 1,
|
||||||
|
created_by_id: 1,
|
||||||
|
)
|
||||||
|
agent1.group_names_access_map = {
|
||||||
|
group1.name => 'full',
|
||||||
|
group2.name => %w[read change],
|
||||||
|
group3.name => 'full',
|
||||||
|
}
|
||||||
|
|
||||||
|
agent2 = User.create!(
|
||||||
|
login: 'agent2@example.com',
|
||||||
|
firstname: 'Role',
|
||||||
|
lastname: 'Agent2',
|
||||||
|
email: 'agent2@example.com',
|
||||||
|
password: 'agentpw',
|
||||||
|
active: true,
|
||||||
|
roles: Role.where(name: %w[Admin Agent]),
|
||||||
|
updated_by_id: 1,
|
||||||
|
created_by_id: 1,
|
||||||
|
)
|
||||||
|
agent2.group_names_access_map = {
|
||||||
|
group1.name => 'full',
|
||||||
|
group2.name => %w[read change],
|
||||||
|
group3.name => ['create'],
|
||||||
|
}
|
||||||
|
|
||||||
|
agent3 = User.create!(
|
||||||
|
login: 'agent3@example.com',
|
||||||
|
firstname: 'Role',
|
||||||
|
lastname: 'Agent3',
|
||||||
|
email: 'agent3@example.com',
|
||||||
|
password: 'agentpw',
|
||||||
|
active: true,
|
||||||
|
roles: Role.where(name: %w[Admin Agent]),
|
||||||
|
updated_by_id: 1,
|
||||||
|
created_by_id: 1,
|
||||||
|
)
|
||||||
|
agent3.group_names_access_map = {
|
||||||
|
group1.name => 'full',
|
||||||
|
group2.name => ['full'],
|
||||||
|
}
|
||||||
|
|
||||||
|
agent4 = User.create!(
|
||||||
|
login: 'agent4@example.com',
|
||||||
|
firstname: 'Role',
|
||||||
|
lastname: 'Agent4',
|
||||||
|
email: 'agent4@example.com',
|
||||||
|
password: 'agentpw',
|
||||||
|
active: true,
|
||||||
|
roles: Role.where(name: %w[Admin Agent]),
|
||||||
|
updated_by_id: 1,
|
||||||
|
created_by_id: 1,
|
||||||
|
)
|
||||||
|
agent4.group_names_access_map = {
|
||||||
|
group1.name => 'full',
|
||||||
|
group2.name => %w[read overview change],
|
||||||
|
}
|
||||||
|
|
||||||
|
agent5 = User.create!(
|
||||||
|
login: 'agent5@example.com',
|
||||||
|
firstname: 'Role',
|
||||||
|
lastname: 'Agent5',
|
||||||
|
email: 'agent5@example.com',
|
||||||
|
password: 'agentpw',
|
||||||
|
active: true,
|
||||||
|
roles: Role.where(name: %w[Admin Agent]),
|
||||||
|
updated_by_id: 1,
|
||||||
|
created_by_id: 1,
|
||||||
|
)
|
||||||
|
agent5.group_names_access_map = {
|
||||||
|
group3.name => 'full',
|
||||||
|
}
|
||||||
|
|
||||||
|
agent6 = User.create!(
|
||||||
|
login: 'agent6@example.com',
|
||||||
|
firstname: 'Role',
|
||||||
|
lastname: 'Agent6',
|
||||||
|
email: 'agent6@example.com',
|
||||||
|
password: 'agentpw',
|
||||||
|
active: true,
|
||||||
|
roles: Role.where(name: %w[Admin Agent]),
|
||||||
|
updated_by_id: 1,
|
||||||
|
created_by_id: 1,
|
||||||
|
)
|
||||||
|
|
||||||
|
result = Ticket::ScreenOptions.attributes_to_change(
|
||||||
|
current_user: agent1,
|
||||||
|
)
|
||||||
|
|
||||||
|
assert(result[:form_meta])
|
||||||
|
assert(result[:form_meta][:filter])
|
||||||
|
assert(result[:form_meta][:filter][:state_id])
|
||||||
|
assert_equal([
|
||||||
|
Ticket::State.lookup(name: 'open').id,
|
||||||
|
Ticket::State.lookup(name: 'pending reminder').id,
|
||||||
|
Ticket::State.lookup(name: 'closed').id,
|
||||||
|
Ticket::State.lookup(name: 'pending close').id,
|
||||||
|
], result[:form_meta][:filter][:state_id].sort)
|
||||||
|
assert(result[:form_meta][:filter][:priority_id])
|
||||||
|
assert_equal([
|
||||||
|
Ticket::Priority.lookup(name: '1 low').id,
|
||||||
|
Ticket::Priority.lookup(name: '2 normal').id,
|
||||||
|
Ticket::Priority.lookup(name: '3 high').id,
|
||||||
|
], result[:form_meta][:filter][:priority_id].sort)
|
||||||
|
assert(result[:form_meta][:filter][:type_id])
|
||||||
|
assert_equal([], result[:form_meta][:filter][:type_id].sort)
|
||||||
|
assert(result[:form_meta][:filter][:group_id])
|
||||||
|
assert_equal([group1.id, group3.id], result[:form_meta][:filter][:group_id].sort)
|
||||||
|
assert(result[:form_meta][:dependencies])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id])
|
||||||
|
assert_equal(3, result[:form_meta][:dependencies][:group_id].count)
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][''])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][''][:owner_id])
|
||||||
|
assert_equal([], result[:form_meta][:dependencies][:group_id][''][:owner_id])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id])
|
||||||
|
assert_equal(4, result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].count)
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent1.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent2.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent3.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent4.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group3.id])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group3.id][:owner_id])
|
||||||
|
assert_equal(2, result[:form_meta][:dependencies][:group_id][group3.id][:owner_id].count)
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group3.id][:owner_id].include?(agent1.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group3.id][:owner_id].include?(agent5.id))
|
||||||
|
|
||||||
|
result = Ticket::ScreenOptions.attributes_to_change(
|
||||||
|
current_user: agent2,
|
||||||
|
)
|
||||||
|
|
||||||
|
assert(result[:form_meta])
|
||||||
|
assert(result[:form_meta][:filter])
|
||||||
|
assert(result[:form_meta][:filter][:state_id])
|
||||||
|
assert_equal([
|
||||||
|
Ticket::State.lookup(name: 'open').id,
|
||||||
|
Ticket::State.lookup(name: 'pending reminder').id,
|
||||||
|
Ticket::State.lookup(name: 'closed').id,
|
||||||
|
Ticket::State.lookup(name: 'pending close').id,
|
||||||
|
], result[:form_meta][:filter][:state_id].sort)
|
||||||
|
assert(result[:form_meta][:filter][:priority_id])
|
||||||
|
assert_equal([
|
||||||
|
Ticket::Priority.lookup(name: '1 low').id,
|
||||||
|
Ticket::Priority.lookup(name: '2 normal').id,
|
||||||
|
Ticket::Priority.lookup(name: '3 high').id,
|
||||||
|
], result[:form_meta][:filter][:priority_id].sort)
|
||||||
|
assert(result[:form_meta][:filter][:type_id])
|
||||||
|
assert_equal([], result[:form_meta][:filter][:type_id].sort)
|
||||||
|
assert(result[:form_meta][:filter][:group_id])
|
||||||
|
assert_equal([group1.id, group3.id], result[:form_meta][:filter][:group_id].sort)
|
||||||
|
assert(result[:form_meta][:dependencies])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id])
|
||||||
|
assert_equal(3, result[:form_meta][:dependencies][:group_id].count)
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][''])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][''][:owner_id])
|
||||||
|
assert_equal([], result[:form_meta][:dependencies][:group_id][''][:owner_id])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id])
|
||||||
|
assert_equal(4, result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].count)
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent1.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent2.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent3.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent4.id))
|
||||||
|
assert_equal(2, result[:form_meta][:dependencies][:group_id][group3.id][:owner_id].count)
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group3.id][:owner_id].include?(agent1.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group3.id][:owner_id].include?(agent5.id))
|
||||||
|
|
||||||
|
result = Ticket::ScreenOptions.attributes_to_change(
|
||||||
|
current_user: agent3,
|
||||||
|
)
|
||||||
|
|
||||||
|
assert(result[:form_meta])
|
||||||
|
assert(result[:form_meta][:filter])
|
||||||
|
assert(result[:form_meta][:filter][:state_id])
|
||||||
|
assert_equal([
|
||||||
|
Ticket::State.lookup(name: 'open').id,
|
||||||
|
Ticket::State.lookup(name: 'pending reminder').id,
|
||||||
|
Ticket::State.lookup(name: 'closed').id,
|
||||||
|
Ticket::State.lookup(name: 'pending close').id,
|
||||||
|
], result[:form_meta][:filter][:state_id].sort)
|
||||||
|
assert(result[:form_meta][:filter][:priority_id])
|
||||||
|
assert_equal([
|
||||||
|
Ticket::Priority.lookup(name: '1 low').id,
|
||||||
|
Ticket::Priority.lookup(name: '2 normal').id,
|
||||||
|
Ticket::Priority.lookup(name: '3 high').id,
|
||||||
|
], result[:form_meta][:filter][:priority_id].sort)
|
||||||
|
assert(result[:form_meta][:filter][:type_id])
|
||||||
|
assert_equal([], result[:form_meta][:filter][:type_id].sort)
|
||||||
|
assert(result[:form_meta][:filter][:group_id])
|
||||||
|
assert_equal([group1.id, group2.id], result[:form_meta][:filter][:group_id].sort)
|
||||||
|
assert(result[:form_meta][:dependencies])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id])
|
||||||
|
assert_equal(3, result[:form_meta][:dependencies][:group_id].count)
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][''])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][''][:owner_id])
|
||||||
|
assert_equal([], result[:form_meta][:dependencies][:group_id][''][:owner_id])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id])
|
||||||
|
assert_equal(4, result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].count)
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent1.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent2.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent3.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent4.id))
|
||||||
|
assert_equal(1, result[:form_meta][:dependencies][:group_id][group2.id][:owner_id].count)
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group2.id][:owner_id].include?(agent3.id))
|
||||||
|
|
||||||
|
ticket1 = Ticket.create!(
|
||||||
|
title: 'some title 1',
|
||||||
|
group: group1,
|
||||||
|
customer_id: 2,
|
||||||
|
state: Ticket::State.lookup(name: 'new'),
|
||||||
|
priority: Ticket::Priority.lookup(name: '2 normal'),
|
||||||
|
updated_by_id: 1,
|
||||||
|
created_by_id: 1,
|
||||||
|
)
|
||||||
|
article1 = Ticket::Article.create!(
|
||||||
|
ticket_id: ticket1.id,
|
||||||
|
from: 'some_sender@example.com',
|
||||||
|
to: 'some_recipient@example.com',
|
||||||
|
subject: 'some subject',
|
||||||
|
message_id: 'some@id',
|
||||||
|
body: 'some message',
|
||||||
|
internal: false,
|
||||||
|
sender: Ticket::Article::Sender.find_by(name: 'Customer'),
|
||||||
|
type: Ticket::Article::Type.find_by(name: 'email'),
|
||||||
|
updated_by_id: 1,
|
||||||
|
created_by_id: 1,
|
||||||
|
)
|
||||||
|
|
||||||
|
ticket2 = Ticket.create!(
|
||||||
|
title: 'some title 2',
|
||||||
|
group: group2,
|
||||||
|
customer_id: 2,
|
||||||
|
state: Ticket::State.lookup(name: 'new'),
|
||||||
|
priority: Ticket::Priority.lookup(name: '2 normal'),
|
||||||
|
updated_by_id: 1,
|
||||||
|
created_by_id: 1,
|
||||||
|
)
|
||||||
|
article2 = Ticket::Article.create!(
|
||||||
|
ticket_id: ticket2.id,
|
||||||
|
from: 'some_sender@example.com',
|
||||||
|
to: 'some_recipient@example.com',
|
||||||
|
subject: 'some subject',
|
||||||
|
message_id: 'some@id',
|
||||||
|
body: 'some message',
|
||||||
|
internal: false,
|
||||||
|
sender: Ticket::Article::Sender.find_by(name: 'Customer'),
|
||||||
|
type: Ticket::Article::Type.find_by(name: 'email'),
|
||||||
|
updated_by_id: 1,
|
||||||
|
created_by_id: 1,
|
||||||
|
)
|
||||||
|
|
||||||
|
result = Ticket::ScreenOptions.attributes_to_change(
|
||||||
|
ticket_id: ticket1.id,
|
||||||
|
current_user: agent1,
|
||||||
|
)
|
||||||
|
|
||||||
|
assert(result[:form_meta])
|
||||||
|
assert(result[:form_meta][:filter])
|
||||||
|
assert(result[:form_meta][:filter][:state_id])
|
||||||
|
assert_equal([
|
||||||
|
Ticket::State.lookup(name: 'new').id,
|
||||||
|
Ticket::State.lookup(name: 'open').id,
|
||||||
|
Ticket::State.lookup(name: 'pending reminder').id,
|
||||||
|
Ticket::State.lookup(name: 'closed').id,
|
||||||
|
Ticket::State.lookup(name: 'pending close').id,
|
||||||
|
], result[:form_meta][:filter][:state_id].sort)
|
||||||
|
assert(result[:form_meta][:filter][:priority_id])
|
||||||
|
assert_equal([
|
||||||
|
Ticket::Priority.lookup(name: '1 low').id,
|
||||||
|
Ticket::Priority.lookup(name: '2 normal').id,
|
||||||
|
Ticket::Priority.lookup(name: '3 high').id,
|
||||||
|
], result[:form_meta][:filter][:priority_id].sort)
|
||||||
|
assert(result[:form_meta][:filter][:type_id])
|
||||||
|
assert_equal([
|
||||||
|
Ticket::Article::Type.lookup(name: 'email').id,
|
||||||
|
Ticket::Article::Type.lookup(name: 'phone').id,
|
||||||
|
Ticket::Article::Type.lookup(name: 'note').id,
|
||||||
|
], result[:form_meta][:filter][:type_id].sort)
|
||||||
|
assert(result[:form_meta][:filter][:group_id])
|
||||||
|
assert_equal([group1.id, group3.id], result[:form_meta][:filter][:group_id].sort)
|
||||||
|
assert(result[:form_meta][:dependencies])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id])
|
||||||
|
assert_equal(3, result[:form_meta][:dependencies][:group_id].count)
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][''])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][''][:owner_id])
|
||||||
|
assert_equal([], result[:form_meta][:dependencies][:group_id][''][:owner_id])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id])
|
||||||
|
assert_equal(4, result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].count)
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent1.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent2.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent3.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent4.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group3.id])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group3.id][:owner_id])
|
||||||
|
assert_equal(2, result[:form_meta][:dependencies][:group_id][group3.id][:owner_id].count)
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group3.id][:owner_id].include?(agent1.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group3.id][:owner_id].include?(agent5.id))
|
||||||
|
|
||||||
|
result = Ticket::ScreenOptions.attributes_to_change(
|
||||||
|
ticket_id: ticket2.id,
|
||||||
|
current_user: agent1,
|
||||||
|
)
|
||||||
|
|
||||||
|
assert(result[:form_meta])
|
||||||
|
assert(result[:form_meta][:filter])
|
||||||
|
assert(result[:form_meta][:filter][:state_id])
|
||||||
|
assert_equal([
|
||||||
|
Ticket::State.lookup(name: 'new').id,
|
||||||
|
Ticket::State.lookup(name: 'open').id,
|
||||||
|
Ticket::State.lookup(name: 'pending reminder').id,
|
||||||
|
Ticket::State.lookup(name: 'closed').id,
|
||||||
|
Ticket::State.lookup(name: 'pending close').id,
|
||||||
|
], result[:form_meta][:filter][:state_id].sort)
|
||||||
|
assert(result[:form_meta][:filter][:priority_id])
|
||||||
|
assert_equal([
|
||||||
|
Ticket::Priority.lookup(name: '1 low').id,
|
||||||
|
Ticket::Priority.lookup(name: '2 normal').id,
|
||||||
|
Ticket::Priority.lookup(name: '3 high').id,
|
||||||
|
], result[:form_meta][:filter][:priority_id].sort)
|
||||||
|
assert(result[:form_meta][:filter][:type_id])
|
||||||
|
assert_equal([
|
||||||
|
Ticket::Article::Type.lookup(name: 'phone').id,
|
||||||
|
Ticket::Article::Type.lookup(name: 'note').id,
|
||||||
|
], result[:form_meta][:filter][:type_id].sort)
|
||||||
|
assert(result[:form_meta][:filter][:group_id])
|
||||||
|
assert_equal([group1.id, group3.id], result[:form_meta][:filter][:group_id].sort)
|
||||||
|
assert(result[:form_meta][:dependencies])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id])
|
||||||
|
assert_equal(3, result[:form_meta][:dependencies][:group_id].count)
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][''])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][''][:owner_id])
|
||||||
|
assert_equal([], result[:form_meta][:dependencies][:group_id][''][:owner_id])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id])
|
||||||
|
assert_equal(4, result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].count)
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent1.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent2.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent3.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent4.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group3.id])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group3.id][:owner_id])
|
||||||
|
assert_equal(2, result[:form_meta][:dependencies][:group_id][group3.id][:owner_id].count)
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group3.id][:owner_id].include?(agent1.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group3.id][:owner_id].include?(agent5.id))
|
||||||
|
|
||||||
|
result = Ticket::ScreenOptions.attributes_to_change(
|
||||||
|
ticket_id: ticket2.id,
|
||||||
|
current_user: agent1,
|
||||||
|
)
|
||||||
|
|
||||||
|
assert(result[:form_meta])
|
||||||
|
assert(result[:form_meta][:filter])
|
||||||
|
assert(result[:form_meta][:filter][:state_id])
|
||||||
|
assert_equal([
|
||||||
|
Ticket::State.lookup(name: 'new').id,
|
||||||
|
Ticket::State.lookup(name: 'open').id,
|
||||||
|
Ticket::State.lookup(name: 'pending reminder').id,
|
||||||
|
Ticket::State.lookup(name: 'closed').id,
|
||||||
|
Ticket::State.lookup(name: 'pending close').id,
|
||||||
|
], result[:form_meta][:filter][:state_id].sort)
|
||||||
|
assert(result[:form_meta][:filter][:priority_id])
|
||||||
|
assert_equal([
|
||||||
|
Ticket::Priority.lookup(name: '1 low').id,
|
||||||
|
Ticket::Priority.lookup(name: '2 normal').id,
|
||||||
|
Ticket::Priority.lookup(name: '3 high').id,
|
||||||
|
], result[:form_meta][:filter][:priority_id].sort)
|
||||||
|
assert(result[:form_meta][:filter][:type_id])
|
||||||
|
assert_equal([
|
||||||
|
Ticket::Article::Type.lookup(name: 'phone').id,
|
||||||
|
Ticket::Article::Type.lookup(name: 'note').id,
|
||||||
|
], result[:form_meta][:filter][:type_id].sort)
|
||||||
|
assert(result[:form_meta][:filter][:group_id])
|
||||||
|
assert_equal([group1.id, group3.id], result[:form_meta][:filter][:group_id].sort)
|
||||||
|
assert(result[:form_meta][:dependencies])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id])
|
||||||
|
assert_equal(3, result[:form_meta][:dependencies][:group_id].count)
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][''])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][''][:owner_id])
|
||||||
|
assert_equal([], result[:form_meta][:dependencies][:group_id][''][:owner_id])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id])
|
||||||
|
assert_equal(4, result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].count)
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent1.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent2.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent3.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent4.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group3.id])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group3.id][:owner_id])
|
||||||
|
assert_equal(2, result[:form_meta][:dependencies][:group_id][group3.id][:owner_id].count)
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group3.id][:owner_id].include?(agent1.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group3.id][:owner_id].include?(agent5.id))
|
||||||
|
|
||||||
|
result = Ticket::ScreenOptions.attributes_to_change(
|
||||||
|
ticket_id: ticket1.id,
|
||||||
|
current_user: agent2,
|
||||||
|
)
|
||||||
|
|
||||||
|
assert(result[:form_meta])
|
||||||
|
assert(result[:form_meta][:filter])
|
||||||
|
assert(result[:form_meta][:filter][:state_id])
|
||||||
|
assert_equal([
|
||||||
|
Ticket::State.lookup(name: 'new').id,
|
||||||
|
Ticket::State.lookup(name: 'open').id,
|
||||||
|
Ticket::State.lookup(name: 'pending reminder').id,
|
||||||
|
Ticket::State.lookup(name: 'closed').id,
|
||||||
|
Ticket::State.lookup(name: 'pending close').id,
|
||||||
|
], result[:form_meta][:filter][:state_id].sort)
|
||||||
|
assert(result[:form_meta][:filter][:priority_id])
|
||||||
|
assert_equal([
|
||||||
|
Ticket::Priority.lookup(name: '1 low').id,
|
||||||
|
Ticket::Priority.lookup(name: '2 normal').id,
|
||||||
|
Ticket::Priority.lookup(name: '3 high').id,
|
||||||
|
], result[:form_meta][:filter][:priority_id].sort)
|
||||||
|
assert(result[:form_meta][:filter][:type_id])
|
||||||
|
assert_equal([
|
||||||
|
Ticket::Article::Type.lookup(name: 'email').id,
|
||||||
|
Ticket::Article::Type.lookup(name: 'phone').id,
|
||||||
|
Ticket::Article::Type.lookup(name: 'note').id,
|
||||||
|
], result[:form_meta][:filter][:type_id].sort)
|
||||||
|
assert(result[:form_meta][:filter][:group_id])
|
||||||
|
assert_equal([group1.id], result[:form_meta][:filter][:group_id].sort)
|
||||||
|
assert(result[:form_meta][:dependencies])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id])
|
||||||
|
assert_equal(2, result[:form_meta][:dependencies][:group_id].count)
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][''])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][''][:owner_id])
|
||||||
|
assert_equal([], result[:form_meta][:dependencies][:group_id][''][:owner_id])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id])
|
||||||
|
assert_equal(4, result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].count)
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent1.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent2.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent3.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent4.id))
|
||||||
|
|
||||||
|
result = Ticket::ScreenOptions.attributes_to_change(
|
||||||
|
ticket_id: ticket2.id,
|
||||||
|
current_user: agent2,
|
||||||
|
)
|
||||||
|
|
||||||
|
assert(result[:form_meta])
|
||||||
|
assert(result[:form_meta][:filter])
|
||||||
|
assert(result[:form_meta][:filter][:state_id])
|
||||||
|
assert_equal([
|
||||||
|
Ticket::State.lookup(name: 'new').id,
|
||||||
|
Ticket::State.lookup(name: 'open').id,
|
||||||
|
Ticket::State.lookup(name: 'pending reminder').id,
|
||||||
|
Ticket::State.lookup(name: 'closed').id,
|
||||||
|
Ticket::State.lookup(name: 'pending close').id,
|
||||||
|
], result[:form_meta][:filter][:state_id].sort)
|
||||||
|
assert(result[:form_meta][:filter][:priority_id])
|
||||||
|
assert_equal([
|
||||||
|
Ticket::Priority.lookup(name: '1 low').id,
|
||||||
|
Ticket::Priority.lookup(name: '2 normal').id,
|
||||||
|
Ticket::Priority.lookup(name: '3 high').id,
|
||||||
|
], result[:form_meta][:filter][:priority_id].sort)
|
||||||
|
assert(result[:form_meta][:filter][:type_id])
|
||||||
|
assert_equal([
|
||||||
|
Ticket::Article::Type.lookup(name: 'phone').id,
|
||||||
|
Ticket::Article::Type.lookup(name: 'note').id,
|
||||||
|
], result[:form_meta][:filter][:type_id].sort)
|
||||||
|
assert(result[:form_meta][:filter][:group_id])
|
||||||
|
assert_equal([group1.id], result[:form_meta][:filter][:group_id].sort)
|
||||||
|
assert(result[:form_meta][:dependencies])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id])
|
||||||
|
assert_equal(2, result[:form_meta][:dependencies][:group_id].count)
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][''])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][''][:owner_id])
|
||||||
|
assert_equal([], result[:form_meta][:dependencies][:group_id][''][:owner_id])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id])
|
||||||
|
assert_equal(4, result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].count)
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent1.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent2.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent3.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent4.id))
|
||||||
|
|
||||||
|
result = Ticket::ScreenOptions.attributes_to_change(
|
||||||
|
ticket_id: ticket1.id,
|
||||||
|
current_user: agent3,
|
||||||
|
)
|
||||||
|
|
||||||
|
assert(result[:form_meta])
|
||||||
|
assert(result[:form_meta][:filter])
|
||||||
|
assert(result[:form_meta][:filter][:state_id])
|
||||||
|
assert_equal([
|
||||||
|
Ticket::State.lookup(name: 'new').id,
|
||||||
|
Ticket::State.lookup(name: 'open').id,
|
||||||
|
Ticket::State.lookup(name: 'pending reminder').id,
|
||||||
|
Ticket::State.lookup(name: 'closed').id,
|
||||||
|
Ticket::State.lookup(name: 'pending close').id,
|
||||||
|
], result[:form_meta][:filter][:state_id].sort)
|
||||||
|
assert(result[:form_meta][:filter][:priority_id])
|
||||||
|
assert_equal([
|
||||||
|
Ticket::Priority.lookup(name: '1 low').id,
|
||||||
|
Ticket::Priority.lookup(name: '2 normal').id,
|
||||||
|
Ticket::Priority.lookup(name: '3 high').id,
|
||||||
|
], result[:form_meta][:filter][:priority_id].sort)
|
||||||
|
assert(result[:form_meta][:filter][:type_id])
|
||||||
|
assert_equal([
|
||||||
|
Ticket::Article::Type.lookup(name: 'email').id,
|
||||||
|
Ticket::Article::Type.lookup(name: 'phone').id,
|
||||||
|
Ticket::Article::Type.lookup(name: 'note').id,
|
||||||
|
], result[:form_meta][:filter][:type_id].sort)
|
||||||
|
assert(result[:form_meta][:filter][:group_id])
|
||||||
|
assert_equal([group1.id, group2.id], result[:form_meta][:filter][:group_id].sort)
|
||||||
|
assert(result[:form_meta][:dependencies])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id])
|
||||||
|
assert_equal(3, result[:form_meta][:dependencies][:group_id].count)
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][''])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][''][:owner_id])
|
||||||
|
assert_equal([], result[:form_meta][:dependencies][:group_id][''][:owner_id])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id])
|
||||||
|
assert_equal(4, result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].count)
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent1.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent2.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent3.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent4.id))
|
||||||
|
assert_equal(1, result[:form_meta][:dependencies][:group_id][group2.id][:owner_id].count)
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group2.id][:owner_id].include?(agent3.id))
|
||||||
|
|
||||||
|
result = Ticket::ScreenOptions.attributes_to_change(
|
||||||
|
ticket_id: ticket2.id,
|
||||||
|
current_user: agent3,
|
||||||
|
)
|
||||||
|
|
||||||
|
assert(result[:form_meta])
|
||||||
|
assert(result[:form_meta][:filter])
|
||||||
|
assert(result[:form_meta][:filter][:state_id])
|
||||||
|
assert_equal([
|
||||||
|
Ticket::State.lookup(name: 'new').id,
|
||||||
|
Ticket::State.lookup(name: 'open').id,
|
||||||
|
Ticket::State.lookup(name: 'pending reminder').id,
|
||||||
|
Ticket::State.lookup(name: 'closed').id,
|
||||||
|
Ticket::State.lookup(name: 'pending close').id,
|
||||||
|
], result[:form_meta][:filter][:state_id].sort)
|
||||||
|
assert(result[:form_meta][:filter][:priority_id])
|
||||||
|
assert_equal([
|
||||||
|
Ticket::Priority.lookup(name: '1 low').id,
|
||||||
|
Ticket::Priority.lookup(name: '2 normal').id,
|
||||||
|
Ticket::Priority.lookup(name: '3 high').id,
|
||||||
|
], result[:form_meta][:filter][:priority_id].sort)
|
||||||
|
assert(result[:form_meta][:filter][:type_id])
|
||||||
|
assert_equal([
|
||||||
|
Ticket::Article::Type.lookup(name: 'phone').id,
|
||||||
|
Ticket::Article::Type.lookup(name: 'note').id,
|
||||||
|
], result[:form_meta][:filter][:type_id].sort)
|
||||||
|
assert(result[:form_meta][:filter][:group_id])
|
||||||
|
assert_equal([group1.id, group2.id], result[:form_meta][:filter][:group_id].sort)
|
||||||
|
assert(result[:form_meta][:dependencies])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id])
|
||||||
|
assert_equal(3, result[:form_meta][:dependencies][:group_id].count)
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][''])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][''][:owner_id])
|
||||||
|
assert_equal([], result[:form_meta][:dependencies][:group_id][''][:owner_id])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id])
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id])
|
||||||
|
assert_equal(4, result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].count)
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent1.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent2.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent3.id))
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group1.id][:owner_id].include?(agent4.id))
|
||||||
|
assert_equal(1, result[:form_meta][:dependencies][:group_id][group2.id][:owner_id].count)
|
||||||
|
assert(result[:form_meta][:dependencies][:group_id][group2.id][:owner_id].include?(agent3.id))
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
Loading…
Reference in a new issue