Initial Redmine tooling and local plugin forks
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
require File.expand_path('../../test_helper', __FILE__)
|
||||
|
||||
class CannedResponseTest < ActiveSupport::TestCase
|
||||
|
||||
# Replace this with your real tests.
|
||||
def test_truth
|
||||
assert true
|
||||
end
|
||||
end
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,200 @@
|
||||
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
|
||||
@@ -0,0 +1,38 @@
|
||||
require File.expand_path('../../test_helper', __FILE__)
|
||||
|
||||
class IssueQueryPatchTest < ActiveSupport::TestCase
|
||||
fixtures :projects, :users, :members, :member_roles, :roles,
|
||||
:groups_users,
|
||||
:trackers, :projects_trackers,
|
||||
:enabled_modules,
|
||||
:issue_statuses, :issue_categories, :issue_relations, :workflows,
|
||||
:enumerations,
|
||||
:issues, :journals, :journal_details,
|
||||
:custom_fields, :custom_fields_projects, :custom_fields_trackers, :custom_values
|
||||
|
||||
RedmineHelpdesk::TestCase.create_fixtures(Redmine::Plugin.find(:redmine_contacts).directory + '/test/fixtures/', [:contacts,
|
||||
:contacts_projects,
|
||||
])
|
||||
|
||||
RedmineHelpdesk::TestCase.create_fixtures(Redmine::Plugin.find(:redmine_contacts_helpdesk).directory + '/test/fixtures/', [:journal_messages,
|
||||
:helpdesk_tickets])
|
||||
|
||||
|
||||
def test_issues_with_company_filter
|
||||
# Equals
|
||||
@query = IssueQuery.new(:name => '_', :filters => { 'customer_company' => {:operator => '=', :values => ['Domoway']}})
|
||||
assert_equal [1,2,5].sort, @query.issues.map(&:id).sort
|
||||
# Contains
|
||||
@query = IssueQuery.new(:name => '_', :filters => { 'customer_company' => {:operator => '~', :values => ['omowa']}})
|
||||
assert_equal [1,2,5].sort, @query.issues.map(&:id).sort
|
||||
# Is not null
|
||||
@query = IssueQuery.new(:name => '_', :filters => { 'customer_company' => {:operator => '*', :values => ['']}})
|
||||
assert_equal [1,2,5].sort, @query.issues.map(&:id).sort
|
||||
|
||||
# Is null
|
||||
Contact.find(3).update_attribute(:company, 'company_name')
|
||||
@query = IssueQuery.new(:name => '_', :filters => { 'customer_company' => {:operator => '!*', :values => ['']}})
|
||||
assert (not @query.issues.any?)
|
||||
end
|
||||
|
||||
end
|
||||
@@ -0,0 +1,10 @@
|
||||
require File.expand_path('../../test_helper', __FILE__)
|
||||
|
||||
class JournalMessageTest < ActiveSupport::TestCase
|
||||
fixtures :journal_messages
|
||||
|
||||
# Replace this with your real tests.
|
||||
def test_truth
|
||||
assert true
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,177 @@
|
||||
require File.expand_path('../../test_helper', __FILE__)
|
||||
|
||||
class MailHandlerPatchTest < 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])
|
||||
|
||||
fixtures :email_addresses if ActiveRecord::VERSION::MAJOR >= 4
|
||||
|
||||
include RedmineHelpdesk::TestHelper
|
||||
|
||||
def setup
|
||||
RedmineHelpdesk::TestCase.prepare
|
||||
|
||||
ActionMailer::Base.deliveries.clear
|
||||
Setting.host_name = 'mydomain.foo'
|
||||
Setting.protocol = 'http'
|
||||
Setting.plain_text_mail = '0'
|
||||
|
||||
Setting.notified_events = Redmine::Notifiable.all.collect(&:name)
|
||||
end
|
||||
|
||||
def test_send_mail_to_contact
|
||||
issue = Issue.find(5)
|
||||
contact = Contact.find(1)
|
||||
issue.helpdesk_ticket = HelpdeskTicket.new(:customer => contact,
|
||||
:issue => issue,
|
||||
:from_address => contact.primary_email,
|
||||
:ticket_date => Time.now)
|
||||
issue.save!
|
||||
RedmineHelpdesk.settings["send_note_by_default"] = false
|
||||
journal = submit_email('reply_from_mail.eml')
|
||||
assert_instance_of Journal, journal
|
||||
assert !journal.new_record?
|
||||
assert last_email.to.include?(contact.emails.first)
|
||||
assert !last_email.parts.first.body.to_s.blank?
|
||||
journal.reload
|
||||
assert_no_match /^@@sendmail@@\s*/, journal.notes
|
||||
assert_match /This is a reply from mail/, journal.notes
|
||||
end
|
||||
|
||||
def test_send_mail_to_contact_by_default
|
||||
issue = Issue.find(5)
|
||||
contact = Contact.find(1)
|
||||
issue.helpdesk_ticket = HelpdeskTicket.new(:customer => contact,
|
||||
:issue => issue,
|
||||
:from_address => contact.primary_email,
|
||||
:ticket_date => Time.now)
|
||||
issue.save!
|
||||
RedmineHelpdesk.settings["send_note_by_default"] = true
|
||||
journal = submit_email('reply_from_mail_by_default.eml')
|
||||
assert_instance_of Journal, journal
|
||||
assert !journal.new_record?
|
||||
assert_equal issue.helpdesk_ticket.from_address, last_email.to.first.to_s
|
||||
assert !last_email.parts.first.body.to_s.blank?
|
||||
journal.reload
|
||||
assert_match /This is a reply from mail by default/, journal.notes
|
||||
end
|
||||
|
||||
def test_should_assign_user_to_unassigned_issue
|
||||
issue = Issue.find(5)
|
||||
issue.assigned_to = nil
|
||||
contact = Contact.find(1)
|
||||
issue.helpdesk_ticket = HelpdeskTicket.new(:customer => contact,
|
||||
:issue => issue,
|
||||
:from_address => contact.primary_email,
|
||||
:ticket_date => Time.now)
|
||||
issue.save!
|
||||
RedmineHelpdesk.settings["send_note_by_default"] = true
|
||||
journal = submit_email('reply_from_mail_by_default.eml')
|
||||
assert_instance_of Journal, journal
|
||||
assert_equal journal.user, journal.issue.assigned_to
|
||||
end
|
||||
|
||||
def test_should_assign_new_status
|
||||
issue = Issue.find(5)
|
||||
issue.assigned_to = User.find(2)
|
||||
issue.status_id = IssueStatus.last.id
|
||||
ContactsSetting[:helpdesk_new_status, issue.project_id] = IssueStatus.first.id
|
||||
contact = Contact.find(1)
|
||||
issue.helpdesk_ticket = HelpdeskTicket.new(:customer => contact,
|
||||
:issue => issue,
|
||||
:from_address => contact.primary_email,
|
||||
:ticket_date => Time.now)
|
||||
issue.save!
|
||||
RedmineHelpdesk.settings["send_note_by_default"] = true
|
||||
journal = submit_email('reply_from_mail_by_default.eml')
|
||||
assert_instance_of Journal, journal
|
||||
journal.reload
|
||||
assert_equal IssueStatus.first, journal.issue.status
|
||||
end
|
||||
|
||||
def test_should_not_send_mail_to_contact_by_default
|
||||
issue = Issue.find(5)
|
||||
contact = Contact.find(1)
|
||||
issue.helpdesk_ticket = HelpdeskTicket.new(:customer => contact,
|
||||
:issue => issue,
|
||||
:from_address => contact.primary_email,
|
||||
:ticket_date => Time.now)
|
||||
issue.save!
|
||||
RedmineHelpdesk.settings["send_note_by_default"] = false
|
||||
journal = submit_email('reply_from_mail_by_default.eml')
|
||||
assert_instance_of Journal, journal
|
||||
assert_equal "", last_email.to.first.to_s
|
||||
end
|
||||
|
||||
def test_should_not_send_mail_to_contact_by_default_with_empty_body
|
||||
issue = Issue.find(5)
|
||||
contact = Contact.find(1)
|
||||
issue.helpdesk_ticket = HelpdeskTicket.new(:customer => contact,
|
||||
:issue => issue,
|
||||
:from_address => contact.primary_email,
|
||||
:ticket_date => Time.now)
|
||||
issue.save!
|
||||
assert_not_equal 'Closed', issue.status.name
|
||||
RedmineHelpdesk.settings["send_note_by_default"] = true
|
||||
Setting.mail_handler_body_delimiters = "---- This should be cutted ----"
|
||||
journal = submit_email('reply_from_mail_with_keywords.eml', :allow_override => ['status'])
|
||||
assert_instance_of Journal, journal
|
||||
assert_nil ActionMailer::Base.deliveries.last
|
||||
assert_nil journal.journal_message
|
||||
end
|
||||
|
||||
def test_should_receive_to_tagged_response_to_issue
|
||||
ActionMailer::Base.deliveries.clear
|
||||
issue = Issue.find(1)
|
||||
journal = submit_email('reply_from_mail_with_tag.eml', :issue => { :project_id => 'ecookbook' })
|
||||
assert_equal Journal, journal.class
|
||||
assert !journal.new_record?
|
||||
journal.reload
|
||||
issue.reload
|
||||
assert_equal issue, journal.issue
|
||||
end
|
||||
|
||||
def test_should_receive_cc_tagged_response_to_issue
|
||||
ActionMailer::Base.deliveries.clear
|
||||
issue = Issue.find(2)
|
||||
journal = submit_email('reply_from_mail_with_tag_in_cc.eml', :issue => { :project_id => 'ecookbook' })
|
||||
assert_equal Journal, journal.class
|
||||
assert !journal.new_record?
|
||||
journal.reload
|
||||
issue.reload
|
||||
assert_equal issue, journal.issue
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user