Files
2026-04-24 22:01:18 +00:00

201 lines
7.9 KiB
Ruby

require File.expand_path('../../test_helper', __FILE__)
include RedmineHelpdesk::TestHelper
class HelpdeskTicketTest < ActiveSupport::TestCase
fixtures :projects,
:users,
:roles,
:members,
:member_roles,
:issues,
:issue_statuses,
:versions,
:trackers,
:projects_trackers,
:issue_categories,
:enabled_modules,
:enumerations,
:attachments,
:workflows,
:custom_fields,
:custom_values,
:custom_fields_projects,
:custom_fields_trackers,
:time_entries,
:journals,
:journal_details,
:queries
RedmineHelpdesk::TestCase.create_fixtures(Redmine::Plugin.find(:redmine_contacts).directory + '/test/fixtures/', [:contacts,
:contacts_projects,
:contacts_issues,
:deals,
:notes,
:tags,
:taggings,
:queries])
RedmineHelpdesk::TestCase.create_fixtures(Redmine::Plugin.find(:redmine_contacts_helpdesk).directory + '/test/fixtures/', [:journal_messages,
:helpdesk_tickets])
def setup
Setting.default_language = 'en'
RedmineHelpdesk::TestCase.prepare
ActionMailer::Base.deliveries.clear
Setting.host_name = 'mydomain.foo'
Setting.protocol = 'http'
Setting.plain_text_mail = '0'
end
def test_should_calculate_reaction_date_from_first_journal
helpdesk_ticket = HelpdeskTicket.find(1)
issue = helpdesk_ticket.issue
journal_message = issue.journals.order(:created_on).last.build_journal_message(:contact => helpdesk_ticket.customer, :to_address => helpdesk_ticket.customer.primary_email)
journal_message.save
helpdesk_ticket.reload
helpdesk_ticket.calculate_metrics
assert_equal 2, issue.journals.count
assert_equal helpdesk_ticket.reaction_time, issue.journals.order(:created_on).first.created_on - helpdesk_ticket.ticket_date.utc
end
def test_ticket_token
helpdesk_ticket = HelpdeskTicket.find(1)
first_user = User.find(1)
second_user = User.find(2)
second_user.pref['time_zone'] = 'Monterrey'
User.current = first_user
first_token = helpdesk_ticket.token
User.current = second_user
second_token = helpdesk_ticket.token
assert_equal first_token, second_token
end
def test_should_change_default_destination_form_outgoing_email
helpdesk_ticket = HelpdeskTicket.find(1)
issue = helpdesk_ticket.issue
other_contact = Contact.find(2)
journal_message = issue.journals.order(:created_on).last.build_journal_message(:contact => other_contact,
:from_address => other_contact.primary_email,
:is_incoming => true,
:message_date => Time.now)
journal_message.save
helpdesk_ticket.reload
assert_equal helpdesk_ticket.default_to_address, other_contact.primary_email
journal_message = issue.journals.order(:created_on).last.build_journal_message(:contact => helpdesk_ticket.customer,
:from_address => helpdesk_ticket.customer.primary_email,
:is_incoming => true,
:message_date => Time.now)
journal_message.save
helpdesk_ticket.reload
assert_equal helpdesk_ticket.default_to_address, helpdesk_ticket.customer.primary_email
end
def test_create_assigned_ticket
user = User.find(2)
contact = Contact.find(1)
contact.assigned_to = user
contact.save
with_helpdesk_settings("helpdesk_assign_contact_user" => 1) do
issue = submit_helpdesk_email('new_issue_to_contact.eml', :issue => { :project_id => 'onlinestore' })
assert_not_nil issue
assert_equal issue.is_private?, false
assert_equal issue.assigned_to, user
end
end
def test_create_private_assigned_ticket
user = User.find(2)
contact = Contact.find(1)
contact.assigned_to = user
contact.save
with_helpdesk_settings("helpdesk_assign_contact_user" => 1, "helpdesk_create_private_tickets" => 1) do
issue = submit_helpdesk_email('new_issue_to_contact.eml', :issue => { :project_id => 'onlinestore' })
assert_not_nil issue
assert_equal issue.reload.is_private?, true
assert_equal issue.reload.assigned_to, user
end
end
def test_create_not_assigned_ticket_if_project_not_visible
user = User.find(9)
contact = Contact.find(2)
contact.assigned_to = user
contact.save
with_helpdesk_settings("helpdesk_assign_contact_user" => 1, "helpdesk_create_private_tickets" => 0) do
issue = submit_helpdesk_email('new_issue_to_contact.eml', :issue => { :project_id => 'onlinestore' })
assert_not_nil issue
assert_equal issue.is_private?, false
assert_nil issue.assigned_to
end
end
def test_autoclose
issue = Issue.find(1)
initial_status = issue.status
issue.status = IssueStatus.find(2)
issue.created_on = issue.created_on - 2.hours
issue.save!
issue.reload
status_to = IssueStatus.last
with_helpdesk_settings("helpdesk_autoclose_tickets_after" => 1,
"helpdesk_autoclose_from_status" => issue.status_id,
"helpdesk_autoclose_to_status" => status_to.id,
"helpdesk_autoclose_tickets_time_unit" => 'hour') do
HelpdeskTicket.autoclose(issue.project)
issue.reload
assert_equal status_to, issue.status
end
ensure
issue.update_attributes(:status => initial_status)
end
def test_dont_autoclose_new_ticket
issue = Issue.find(1).copy
# change status
issue.status = IssueStatus.find(2)
issue.save!
status_to = IssueStatus.last
with_helpdesk_settings("helpdesk_autoclose_tickets_after" => 1,
"helpdesk_autoclose_from_status" => issue.status_id,
"helpdesk_autoclose_to_status" => status_to.id,
"helpdesk_autoclose_tickets_time_unit" => 'hour') do
HelpdeskTicket.autoclose(issue.project)
issue.reload
assert status_to != issue.status
end
end
def test_autoclose_off
issue = Issue.find(1)
initial_status = issue.status
issue.status = IssueStatus.find(2)
issue.save
issue.reload
status_to = IssueStatus.last
with_helpdesk_settings("helpdesk_autoclose_tickets_after" => nil,
"helpdesk_autoclose_from_status" => issue.status_id,
"helpdesk_autoclose_to_status" => status_to.id,
"helpdesk_autoclose_tickets_time_unit" => 'hour') do
HelpdeskTicket.autoclose(issue.project)
issue.reload
assert status_to != issue.status
end
ensure
issue.update_attributes(:status => initial_status)
end
end