Refactoring: Migrate ticket_owner_reset_on_follow_up_test to RSpec
This commit is contained in:
parent
b65a84f95e
commit
f702b34891
2 changed files with 80 additions and 231 deletions
|
@ -258,6 +258,86 @@ RSpec.describe Ticket, type: :model do
|
|||
end
|
||||
|
||||
describe 'Attributes:' do
|
||||
describe '#owner' do
|
||||
let(:original_owner) { create(:agent_user, groups: [ticket.group]) }
|
||||
before { ticket.update(owner: original_owner) }
|
||||
|
||||
context 'when assigned directly' do
|
||||
context 'to an active agent belonging to ticket.group' do
|
||||
let(:agent) { create(:agent_user, groups: [ticket.group]) }
|
||||
|
||||
it 'can be set' do
|
||||
expect { ticket.update(owner: agent) }
|
||||
.to change { ticket.reload.owner }.to(agent)
|
||||
end
|
||||
end
|
||||
|
||||
context 'to an agent not belonging to ticket.group' do
|
||||
let(:agent) { create(:agent_user, groups: [other_group]) }
|
||||
let(:other_group) { create(:group) }
|
||||
|
||||
it 'resets to default user (id: 1) instead' do
|
||||
expect { ticket.update(owner: agent) }
|
||||
.to change { ticket.reload.owner }.to(User.first)
|
||||
end
|
||||
end
|
||||
|
||||
context 'to an inactive agent' do
|
||||
let(:agent) { create(:agent_user, groups: [ticket.group], active: false) }
|
||||
|
||||
it 'resets to default user (id: 1) instead' do
|
||||
expect { ticket.update(owner: agent) }
|
||||
.to change { ticket.reload.owner }.to(User.first)
|
||||
end
|
||||
end
|
||||
|
||||
context 'to a non-agent' do
|
||||
let(:agent) { create(:customer_user, groups: [ticket.group]) }
|
||||
|
||||
it 'resets to default user (id: 1) instead' do
|
||||
expect { ticket.update(owner: agent) }
|
||||
.to change { ticket.reload.owner }.to(User.first)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when the ticket is updated for any other reason' do
|
||||
context 'if original owner is still an active agent belonging to ticket.group' do
|
||||
it 'does not change' do
|
||||
expect { create(:ticket_article, ticket: ticket) }
|
||||
.not_to change { ticket.reload.owner }
|
||||
end
|
||||
end
|
||||
|
||||
context 'if original owner has left ticket.group' do
|
||||
before { original_owner.groups = [] }
|
||||
|
||||
it 'resets to default user (id: 1)' do
|
||||
expect { create(:ticket_article, ticket: ticket) }
|
||||
.to change { ticket.reload.owner }.to(User.first)
|
||||
end
|
||||
end
|
||||
|
||||
context 'if original owner has become inactive' do
|
||||
before { original_owner.update(active: false) }
|
||||
|
||||
it 'resets to default user (id: 1)' do
|
||||
expect { create(:ticket_article, ticket: ticket) }
|
||||
.to change { ticket.reload.owner }.to(User.first)
|
||||
end
|
||||
end
|
||||
|
||||
context 'if original owner has lost agent status' do
|
||||
before { original_owner.roles = [create(:role)] }
|
||||
|
||||
it 'resets to default user (id: 1)' do
|
||||
expect { create(:ticket_article, ticket: ticket) }
|
||||
.to change { ticket.reload.owner }.to(User.first)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#state' do
|
||||
context 'when originally "new"' do
|
||||
context 'and a non-customer article is added' do
|
||||
|
|
|
@ -1,231 +0,0 @@
|
|||
require 'test_helper'
|
||||
|
||||
class TicketOwnerResetOnFollowUpTest < ActiveSupport::TestCase
|
||||
|
||||
setup do
|
||||
UserInfo.current_user_id = 1
|
||||
Group.create_or_update(
|
||||
name: 'Disabled Group',
|
||||
follow_up_possible: 'yes',
|
||||
follow_up_assignment: true,
|
||||
active: false,
|
||||
)
|
||||
groups = Group.where(name: 'Users')
|
||||
roles = Role.where(name: 'Agent')
|
||||
@agent1 = User.create_or_update(
|
||||
login: 'ticket-customer-organization-update-agent1@example.com',
|
||||
firstname: 'FollowUpCheck',
|
||||
lastname: 'Agent1',
|
||||
email: 'ticket-customer-organization-update-agent1@example.com',
|
||||
password: 'agentpw',
|
||||
active: true,
|
||||
roles: roles,
|
||||
groups: groups,
|
||||
)
|
||||
roles = Role.where(name: 'Customer')
|
||||
@organization1 = Organization.create_if_not_exists(
|
||||
name: 'Customer Organization Update',
|
||||
)
|
||||
@customer1 = User.create_or_update(
|
||||
login: 'ticket-customer-organization-update-customer1@example.com',
|
||||
firstname: 'FollowUpCheck',
|
||||
lastname: 'Customer1',
|
||||
email: 'ticket-customer-organization-update-customer1@example.com',
|
||||
password: 'customerpw',
|
||||
active: true,
|
||||
organization_id: @organization1.id,
|
||||
roles: roles,
|
||||
)
|
||||
UserInfo.current_user_id = nil
|
||||
end
|
||||
|
||||
test 'create ticket, update owner to user with disabled group' do
|
||||
|
||||
ticket = Ticket.create!(
|
||||
title: "some title1\n äöüß",
|
||||
group: Group.lookup(name: 'Users'),
|
||||
customer_id: @customer1.id,
|
||||
owner_id: @agent1.id,
|
||||
updated_by_id: 1,
|
||||
created_by_id: 1,
|
||||
)
|
||||
assert(ticket, 'ticket created')
|
||||
assert_equal(@customer1.id, ticket.customer.id)
|
||||
assert_equal(@organization1.id, ticket.organization.id)
|
||||
|
||||
@agent1.groups = Group.where(name: 'Disabled Group')
|
||||
@agent1.save!
|
||||
|
||||
ticket.owner = @agent1
|
||||
ticket.save!
|
||||
|
||||
ticket.reload
|
||||
assert_equal('-', ticket.owner.login) # reassigned to default agent
|
||||
end
|
||||
|
||||
test 'create ticket, update owner to user which is inactive' do
|
||||
|
||||
ticket = Ticket.create!(
|
||||
title: "some title1\n äöüß",
|
||||
group: Group.lookup(name: 'Users'),
|
||||
customer_id: @customer1.id,
|
||||
owner_id: @agent1.id,
|
||||
updated_by_id: 1,
|
||||
created_by_id: 1,
|
||||
)
|
||||
assert(ticket, 'ticket created')
|
||||
assert_equal(@customer1.id, ticket.customer.id)
|
||||
assert_equal(@organization1.id, ticket.organization.id)
|
||||
|
||||
@agent1.active = false
|
||||
@agent1.save!
|
||||
|
||||
ticket.owner = @agent1
|
||||
ticket.save!
|
||||
|
||||
ticket.reload
|
||||
assert_equal('-', ticket.owner.login) # reassigned to default agent
|
||||
end
|
||||
|
||||
test 'create ticket, update owner to user which active and is in active group' do
|
||||
|
||||
ticket = Ticket.create!(
|
||||
title: "some title1\n äöüß",
|
||||
group: Group.lookup(name: 'Users'),
|
||||
customer_id: @customer1.id,
|
||||
owner_id: @agent1.id,
|
||||
updated_by_id: 1,
|
||||
created_by_id: 1,
|
||||
)
|
||||
assert(ticket, 'ticket created')
|
||||
assert_equal(@customer1.id, ticket.customer.id)
|
||||
assert_equal(@organization1.id, ticket.organization.id)
|
||||
|
||||
ticket.owner = @agent1
|
||||
ticket.save!
|
||||
|
||||
ticket.reload
|
||||
assert_equal(ticket.owner.login, 'ticket-customer-organization-update-agent1@example.com') # should not be reassigned
|
||||
end
|
||||
|
||||
test 'check if ticket is unassigned on follow up via model if owner in a group is inactive' do
|
||||
ticket = Ticket.create!(
|
||||
title: 'follow up check for invalid owner',
|
||||
group: Group.lookup(name: 'Users'),
|
||||
customer: @customer1,
|
||||
owner: @agent1,
|
||||
state: Ticket::State.lookup(name: 'closed'),
|
||||
updated_by_id: 1,
|
||||
created_by_id: 1,
|
||||
)
|
||||
article = Ticket::Article.create!(
|
||||
ticket_id: ticket.id,
|
||||
from: 'some_sender@example.com',
|
||||
to: 'some_recipient@example.com',
|
||||
subject: 'follow up check',
|
||||
body: 'some message article',
|
||||
internal: false,
|
||||
sender: Ticket::Article::Sender.lookup(name: 'Agent'),
|
||||
type: Ticket::Article::Type.lookup(name: 'email'),
|
||||
updated_by_id: 1,
|
||||
created_by_id: 1,
|
||||
)
|
||||
|
||||
@agent1.groups = Group.where(name: 'Disabled Group')
|
||||
@agent1.save!
|
||||
|
||||
email_raw = "From: me@example.com
|
||||
To: customer@example.com
|
||||
Subject: #{ticket.subject_build('some new subject')}
|
||||
|
||||
Some Text"
|
||||
|
||||
ticket_p, article_p, user_p = Channel::EmailParser.new.process({}, email_raw)
|
||||
assert_equal(ticket.id, ticket_p.id)
|
||||
|
||||
assert_equal('open', ticket_p.state.name)
|
||||
assert_equal('-', ticket_p.owner.login)
|
||||
|
||||
end
|
||||
|
||||
test 'check if ticket is unassigned on follow up via email if current owner is inactive' do
|
||||
|
||||
ticket = Ticket.create!(
|
||||
title: 'follow up check for invalid owner',
|
||||
group: Group.lookup(name: 'Users'),
|
||||
customer: @customer1,
|
||||
owner: @agent1,
|
||||
state: Ticket::State.lookup(name: 'closed'),
|
||||
updated_by_id: 1,
|
||||
created_by_id: 1,
|
||||
)
|
||||
article = Ticket::Article.create!(
|
||||
ticket_id: ticket.id,
|
||||
from: 'some_sender@example.com',
|
||||
to: 'some_recipient@example.com',
|
||||
subject: 'follow up check',
|
||||
body: 'some message article',
|
||||
internal: false,
|
||||
sender: Ticket::Article::Sender.lookup(name: 'Agent'),
|
||||
type: Ticket::Article::Type.lookup(name: 'email'),
|
||||
updated_by_id: 1,
|
||||
created_by_id: 1,
|
||||
)
|
||||
|
||||
@agent1.active = false
|
||||
@agent1.save!
|
||||
|
||||
email_raw = "From: me@example.com
|
||||
To: customer@example.com
|
||||
Subject: #{ticket.subject_build('some new subject')}
|
||||
|
||||
Some Text"
|
||||
|
||||
ticket_p, article_p, user_p = Channel::EmailParser.new.process({}, email_raw)
|
||||
assert_equal(ticket.id, ticket_p.id)
|
||||
|
||||
assert_equal('open', ticket_p.state.name)
|
||||
assert_equal('-', ticket_p.owner.login)
|
||||
end
|
||||
|
||||
test 'check if ticket is unassigned on follow up via email if current owner is customer now' do
|
||||
|
||||
ticket = Ticket.create!(
|
||||
title: 'follow up check for invalid owner is customer now',
|
||||
group: Group.lookup(name: 'Users'),
|
||||
customer: @customer1,
|
||||
owner: @agent1,
|
||||
state: Ticket::State.lookup(name: 'closed'),
|
||||
updated_by_id: 1,
|
||||
created_by_id: 1,
|
||||
)
|
||||
article = Ticket::Article.create!(
|
||||
ticket_id: ticket.id,
|
||||
from: 'some_sender@example.com',
|
||||
to: 'some_recipient@example.com',
|
||||
subject: 'follow up check',
|
||||
body: 'some message article',
|
||||
internal: false,
|
||||
sender: Ticket::Article::Sender.lookup(name: 'Agent'),
|
||||
type: Ticket::Article::Type.lookup(name: 'email'),
|
||||
updated_by_id: 1,
|
||||
created_by_id: 1,
|
||||
)
|
||||
|
||||
@agent1.roles = Role.where(name: 'Customer')
|
||||
@agent1.save!
|
||||
|
||||
email_raw = "From: me@example.com
|
||||
To: customer@example.com
|
||||
Subject: #{ticket.subject_build('some new subject')}
|
||||
|
||||
Some Text"
|
||||
|
||||
ticket_p, article_p, user_p = Channel::EmailParser.new.process({}, email_raw)
|
||||
assert_equal(ticket.id, ticket_p.id)
|
||||
|
||||
assert_equal('open', ticket_p.state.name)
|
||||
assert_equal('-', ticket_p.owner.login)
|
||||
end
|
||||
|
||||
end
|
Loading…
Reference in a new issue