# encoding: utf-8
#
# This file is a part of Redmine CRM (redmine_contacts) plugin,
# customer relationship management plugin for Redmine
#
# Copyright (C) 2010-2018 RedmineUP
# http://www.redmineup.com/
#
# redmine_contacts is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# redmine_contacts is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with redmine_contacts. If not, see .
# encoding: utf-8
require File.expand_path('../../test_helper', __FILE__)
class ContactsControllerTest < ActionController::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
RedmineContacts::TestCase.create_fixtures(Redmine::Plugin.find(:redmine_contacts).directory + '/test/fixtures/', [:contacts,
:contacts_projects,
:contacts_issues,
:deals,
:notes,
:tags,
:taggings,
:queries,
:addresses])
def setup
RedmineContacts::TestCase.prepare
User.current = nil
end
def test_get_index
@request.session[:user_id] = 1
assert_not_nil Contact.find(1)
compatible_request :get, :index
assert_response :success
assert_not_nil contacts_in_list
assert_select 'a', :html => /Domoway/
assert_select 'a', :html => /Marat/
assert_select 'h3', :html => /Tags/
assert_select 'h3', :html => /Recently viewed/
assert_select 'div#tags span#single_tags span.tag-label-color a', 'test'
assert_select 'div#tags span#single_tags span.tag-label-color a', 'main'
end
test 'should get index in project' do
@request.session[:user_id] = 1
Setting.default_language = 'en'
compatible_request :get, :index, :project_id => 1
assert_response :success
assert_not_nil contacts_in_list
assert_select 'a', :html => /Domoway/
assert_select 'a', :html => /Marat/
assert_select 'h3', :html => /Tags/
assert_select 'h3', :html => /Recently viewed/
end
test 'should get index with filters and sorting' do
field = ContactCustomField.create!(:name => 'Test custom field', :is_filter => true, :field_format => 'string')
contact = Contact.find(1)
contact.custom_field_values = { field.id => "This is custom значение" }
contact.save
@request.session[:user_id] = 1
Setting.default_language = 'en'
compatible_request :get, :index, :sort => 'assigned_to,cf_1,last_name,first_name',
:v => { 'first_name' => ['Ivan'] },
:f => ['first_name', ''],
:op => { 'first_name' => '~' }
assert_response :success
assert_not_nil contacts_in_list
assert_select 'div#content div#contact_list table.contacts td.name h1', 'Ivan Ivanov'
end
def test_get_index_with_all_fields
@request.session[:user_id] = 1
compatible_request :get,
:index,
:set_filter => 1,
:project_id => 1,
:c => ContactQuery.available_columns.map(&:name),
:contacts_list_style => 'list'
assert_response :success
assert_select 'tr#contact-1 td.id a[href=?]', '/contacts/1'
assert_select 'tr#contact-1 td.tags', 'main'
end
def test_index_with_short_filters
@request.session[:user_id] = 1
to_test = {
'tags' => {
'main|test' => { :op => '=', :values => ['main', 'test'] },
'=main' => { :op => '=', :values => ['main'] },
'!test' => { :op => '!', :values => ['test'] } },
'country' => {
'*' => { :op => '*', :values => [''] },
'!*' => { :op => '!*', :values => [''] },
'US|RU' => { :op => '=', :values => ['US', 'RU'] } },
'first_name' => {
'Marat' => { :op => '=', :values => ['Marat'] },
'~Mara' => { :op => '~', :values => ['Mara'] },
'!~Mara' => { :op => '!~', :values => ['Mara'] } },
'created_on' => {
'>=2011-10-12' => { :op => '>=', :values => ['2011-10-12'] },
' { :op => ' ['2'] },
'>t-2' => { :op => '>t-', :values => ['2'] },
't-2' => { :op => 't-', :values => ['2'] } },
'last_note' => {
'>=2011-10-12' => { :op => '>=', :values => ['2011-10-12'] },
' { :op => ' ['2'] },
'>t-2' => { :op => '>t-', :values => ['2'] },
't-2' => { :op => 't-', :values => ['2'] } },
'has_deals' => {
'c' => { :op => '=', :values => ['c'] },
'!c' => { :op => '!', :values => ['c'] } },
'has_open_issues' => {
'=4' => { :op => '=', :values => ['4'] },
'!*' => { :op => '!*', :values => [''] },
'*' => { :op => '*', :values => [''] } }
}
default_filter = { 'status_id' => { :operator => 'o', :values => [''] } }
to_test.each do |field, expression_and_expected|
expression_and_expected.each do |filter_expression, expected|
compatible_request :get, :index, :set_filter => 1, field => filter_expression
assert_response :success
assert_not_nil contacts_in_list
end
end
end
def test_filter_by_ids_equal
@request.session[:user_id] = 1
ids = [1, 2]
compatible_request :get, :index, :project_id => 1, :set_filter => 1, 'f' => ['ids', ''], 'op' => { 'ids' => '=' }, 'v' => { 'ids' => [ids.join(',')] }
assert_response :success
assert_equal ids.sort, contacts_in_list.map(&:id).sort
end if Redmine::VERSION.to_s >= '3.3'
def test_filter_by_ids_any
@request.session[:user_id] = 1
compatible_request :get, :index, :project_id => 1, :set_filter => 1, 'f' => ['ids', ''], 'op' => { 'ids' => '*' }
assert_response :success
assert_equal Project.find(1).contacts.map(&:id).sort, contacts_in_list.map(&:id).sort
end if Redmine::VERSION.to_s >= '3.3'
def test_filter_by_ids_more_than
@request.session[:user_id] = 1
compatible_request :get, :index, :project_id => 1, :set_filter => 1, 'f' => ['ids', ''], 'op' => { 'ids' => '>=' }, 'v' => { 'ids' => [3] }
assert_response :success
assert_equal [3, 4, 5], contacts_in_list.map(&:id).sort
end if Redmine::VERSION.to_s >= '3.3'
def test_filter_by_ids_less_than
@request.session[:user_id] = 1
compatible_request :get, :index, :project_id => 1, :set_filter => 1, 'f' => ['ids', ''], 'op' => { 'ids' => '<=' }, 'v' => { 'ids' => [2] }
assert_response :success
assert_equal [1, 2], contacts_in_list.map(&:id).sort
end if Redmine::VERSION.to_s >= '3.3'
def test_filter_by_ids_between
@request.session[:user_id] = 1
compatible_request :get, :index, :project_id => 1, :set_filter => 1, 'f' => ['ids', ''], 'op' => { 'ids' => '><' }, 'v' => { 'ids' => ['1', '3'] }
assert_response :success
assert_equal [1, 2, 3], contacts_in_list.map(&:id).sort
end if Redmine::VERSION.to_s >= '3.3'
def test_index_sort_by_custom_field
@request.session[:user_id] = 1
cf = ContactCustomField.create!(:name => 'Contact test cf', :is_for_all => true, :field_format => 'string')
CustomValue.create!(:custom_field => cf, :customized => Contact.find(1), :value => 'test_1')
CustomValue.create!(:custom_field => cf, :customized => Contact.find(2), :value => 'test_2')
CustomValue.create!(:custom_field => cf, :customized => Contact.find(3), :value => 'test_3')
compatible_request :get, :index, :set_filter => 1, :sort => "cf_#{cf.id},id"
assert_response :success
assert_equal [1, 2, 3], contacts_in_list.select { |contact| contact.custom_field_value(cf).present? }.map(&:id).sort
end
def test_should_not_absolute_links
@request.session[:user_id] = 1
compatible_request :get, :index
assert_response :success
assert_no_match %r{localhost}, @response.body
end
def test_should_get_index_deny_user_in_project
@request.session[:user_id] = 5
compatible_request :get, :index, :project_id => 1
assert_response :redirect
end
def test_should_get_index_with_filters
@request.session[:user_id] = 1
compatible_request :get, :index, :is_company => ActiveRecord::Base.connection.quoted_true.gsub(/'/, '')
assert_response :success
assert_select 'div#content div#contact_list table.contacts td.name h1 a', 'Domoway'
end
def test_should_get_index_as_csv
field = ContactCustomField.create!(:name => 'Test custom field', :is_filter => true, :field_format => 'string')
contact = Contact.find(1)
contact.custom_field_values = { field.id => "This is custom значение" }
contact.save
@request.session[:user_id] = 1
compatible_request :get, :index, :format => 'csv'
assert_response :success
assert_not_nil contacts_in_list
assert_equal 'text/csv; header=present', @response.content_type
assert_match /Domoway/, @response.body
end
def test_should_get_index_as_VCF
@request.session[:user_id] = 1
compatible_request :get, :index, :format => 'vcf'
assert_response :success
assert_not_nil contacts_in_list
assert_equal 'text/x-vcard', @response.content_type
assert @response.body.starts_with?('BEGIN:VCARD')
assert_match /^N:;Domoway/, @response.body
end
def test_should_get_contacts_notes_as_csv
@request.session[:user_id] = 1
compatible_request :get, :contacts_notes, :format => 'csv'
assert_response :success
assert_equal 'text/csv; header=present', @response.content_type
assert @response.body.starts_with?('#,')
end
def test_get_show
@request.session[:user_id] = 2
Setting.default_language = 'en'
compatible_request :get, :show, :id => 3, :project_id => 1
assert_response :success
assert_not_nil contacts_in_list
assert_select 'h1', :html => /Domoway/
assert_select 'div#tags_data span.tag-label-color a', 'main'
assert_select 'div#tags_data span.tag-label-color a', 'test'
assert_select 'div#tab-placeholder-contacts'
assert_select 'div#comments div#notes table.note_data td.name h4', 4
assert_select 'h3', 'Recently viewed'
end
def test_get_show_with_long_note
long_note = 'A' * 1500
Contact.find(3).notes.create(:content => long_note, :author_id => 1)
@request.session[:user_id] = 2
Setting.default_language = 'en'
compatible_request :get, :show, :id => 3, :project_id => 1
assert_response :success
assert_select '.note a', '(read more)'
end
def test_get_show_tab_deals
@request.session[:user_id] = 2
Setting.default_language = 'en'
compatible_request :get, :show, :id => 3, :project_id => 1, :tab => 'deals'
assert_response :success
assert_not_nil contacts_in_list
assert_select 'h1', :html => /Domoway/
assert_select 'div#deals a', 'Delevelop redmine plugin'
assert_select 'div#deals a', 'Second deal with contacts'
end
def test_get_show_without_deals
@request.session[:user_id] = 4
Setting.default_language = 'en'
compatible_request :get, :show, :id => 3, :project_id => 1, :tab => 'deals'
assert_response :success
assert_not_nil contacts_in_list
assert_select 'div#deals a', { :count => 0, :text => /Delevelop redmine plugin/ }
assert_select 'div#deals a', { :count => 0, :text => /Second deal with contacts/ }
end
def test_get_new
@request.session[:user_id] = 2
compatible_request :get, :new, :project_id => 1
assert_response :success
assert_select 'input#contact_first_name'
end
def test_get_new_without_permission
@request.session[:user_id] = 4
compatible_request :get, :new, :project_id => 1
assert_response :forbidden
end
def test_post_create
@request.session[:user_id] = 1
assert_difference 'Contact.count' do
compatible_request :post, :create, :project_id => 1, :contact => { :company => 'OOO "GKR"',
:is_company => 0,
:job_title => 'CFO',
:assigned_to_id => 3,
:tag_list => 'test,new',
:last_name => 'New',
:middle_name => 'Ivanovich',
:first_name => 'Created' }
end
assert_redirected_to :controller => 'contacts', :action => 'show', :id => Contact.last.id, :project_id => Contact.last.project
contact = Contact.where(:first_name => 'Created', :last_name => 'New', :middle_name => 'Ivanovich').first
assert_not_nil contact
assert_equal 'CFO', contact.job_title
assert_equal ['new', 'test'], contact.tag_list.sort
assert_equal 3, contact.assigned_to_id
end
def test_post_create_with_custom_fields
field = ContactCustomField.create!(:name => 'Test', :is_filter => true, :field_format => 'string')
@request.session[:user_id] = 1
assert_difference 'Contact.count' do
compatible_request :post, :create, :project_id => 1, :contact => { :company => 'OOO "GKR"',
:is_company => 0,
:job_title => 'CFO',
:assigned_to_id => 3,
:tag_list => 'test,new',
:last_name => 'New',
:middle_name => 'Ivanovich',
:first_name => 'Created',
:custom_field_values => { "#{field.id}" => 'contact one' } }
end
assert_redirected_to :controller => 'contacts', :action => 'show', :id => Contact.last.id, :project_id => Contact.last.project
contact = Contact.where(:first_name => 'Created', :last_name => 'New', :middle_name => 'Ivanovich').first
assert_equal 'contact one', contact.custom_field_values.last.value
end
def test_post_create_without_permission
@request.session[:user_id] = 4
compatible_request :post, :create, :project_id => 1, :contact => { :company => 'OOO "GKR"',
:is_company => 0,
:job_title => 'CFO',
:assigned_to_id => 3,
:tag_list => 'test,new',
:last_name => 'New',
:middle_name => 'Ivanovich',
:first_name => 'Created' }
assert_response :forbidden
end
def test_get_edit
@request.session[:user_id] = 1
compatible_request :get, :edit, :id => 1
assert_response :success
assert_select 'h2', /Editing Contact Information/
end
def test_get_edit_with_duplicates
contact = Contact.find(3)
contact_clone = contact.dup
contact_clone.project = contact.project
contact_clone.save!
@request.session[:user_id] = 2
Setting.default_language = 'en'
compatible_request :get, :edit, :id => 3
assert_response :success
assert_select 'div#duplicates', 1
assert_select 'div#duplicates h3', /Possible duplicates/
ensure
contact_clone.delete
end
def test_put_update
@request.session[:user_id] = 1
contact = Contact.find(1)
new_firstname = 'Fist name modified by ContactsControllerTest#test_put_update'
compatible_request :put, :update, :id => 1, :project_id => 1, :contact => { :first_name => new_firstname }
assert_redirected_to :action => 'show', :id => '1', :project_id => 1
contact.reload
assert_equal new_firstname, contact.first_name
end
def test_post_destroy
@request.session[:user_id] = 1
compatible_request :post, :destroy, :id => 1, :project_id => 'ecookbook'
assert_redirected_to :action => 'index', :project_id => 'ecookbook'
assert_equal 0, Contact.where(:id => [1]).count
end
def test_post_bulk_destroy
@request.session[:user_id] = 1
compatible_request :post, :bulk_destroy, :ids => [1, 2, 3]
assert_redirected_to :controller => 'contacts', :action => 'index'
assert_equal 0, Contact.where(:id => [1, 2, 3]).count
end
def test_post_bulk_destroy_without_permission
@request.session[:user_id] = 4
assert_raises ActiveRecord::RecordNotFound do
compatible_request :post, :bulk_destroy, :ids => [1, 2]
end
end
def test_bulk_edit_mails
@request.session[:user_id] = 1
compatible_request :post, :edit_mails, :ids => [1, 2]
assert_response :success
assert_not_nil contacts_in_list
end
def test_bulk_edit_mails_by_deny_user
@request.session[:user_id] = 4
compatible_request :post, :edit_mails, :ids => [1, 2]
assert_response 403
end
def test_bulk_send_mails_by_deny_user
@request.session[:user_id] = 4
compatible_request :post, :send_mails, :ids => [1, 2], :message => 'test message', :subject => 'test subject'
assert_response 403
end
def test_bulk_send_mails
ActionMailer::Base.deliveries.clear
@request.session[:user_id] = 1
compatible_request :post, :send_mails, :ids => [2], :from => 'test@mail.from', :bcc => 'test@mail.bcc', :"message-content" => "Hello %%NAME%%\ntest message", :subject => 'test subject'
mail = ActionMailer::Base.deliveries.last
assert_not_nil mail
assert_match /Hello Marat/, mail.text_part.body.to_s
assert_equal 'test subject', mail.subject
assert_equal 'test@mail.from', mail.from.first
assert_equal 'test@mail.bcc', mail.bcc.first
note = Note.last
assert_equal 'test subject', note.subject
assert_equal note.type_id, Note.note_types[:email]
assert_equal "Hello Marat\ntest message", note.content
end
def test_post_bulk_edit
@request.session[:user_id] = 1
compatible_request :post, :bulk_edit, :ids => [1, 2]
assert_response :success
assert_not_nil contacts_in_list
end
def test_post_bulk_edit_without_permission
@request.session[:user_id] = 4
assert_raises ActiveRecord::RecordNotFound do
compatible_request :post, :bulk_edit, :ids => [1, 2]
end
end
def test_put_bulk_update
@request.session[:user_id] = 1
compatible_request :put, :bulk_update, :ids => [1, 2],
:add_tag_list => 'bulk, edit, tags',
:delete_tag_list => 'main',
:add_projects_list => ['1', '2', '3'],
:delete_projects_list => ['3', '4', '5'],
:note => { :content => 'Bulk note content' },
:contact => { :company => 'Bulk company', :job_title => '' }
assert_redirected_to :controller => 'contacts', :action => 'index', :project_id => nil
contacts = Contact.find([1, 2])
contacts.each do |contact|
assert_equal 'Bulk company', contact.company
tag_list = contact.tag_list # Need for 4 rails
assert tag_list.include?('bulk')
assert tag_list.include?('edit')
assert tag_list.include?('tags')
assert !tag_list.include?('main')
assert contact.project_ids.include?(1) && contact.project_ids.include?(2)
assert_equal 'Bulk note content', contact.notes.find_by_content('Bulk note content').content
end
end
def test_put_bulk_update_without_permission
@request.session[:user_id] = 4
compatible_request :put, :bulk_update, :ids => [1, 2],
:add_tag_list => 'bulk, edit, tags',
:delete_tag_list => 'main',
:note => { :content => 'Bulk note content' },
:contact => { :company => 'Bulk company', :job_title => '' }
assert_response 403
end
def test_get_contacts_notes
@request.session[:user_id] = 2
compatible_request :get, :contacts_notes
assert_response :success
assert_select 'h2', /All notes/
assert_select 'div#contacts_notes table.note_data div.note.content.preview', /Note 1/
end
def test_get_context_menu
@request.session[:user_id] = 1
compatible_xhr_request :get, :context_menu, :back_url => '/projects/contacts-plugin/contacts', :project_id => 'ecookbook', :ids => ['1', '2']
assert_response :success
end
def test_post_index_with_search
@request.session[:user_id] = 1
compatible_xhr_request :post, :index, :search => 'Domoway'
assert_response :success
assert_match 'contacts?search=Domoway', response.body
assert_select 'a', :html => /Domoway/
end
def test_post_index_with_search_in_project
@request.session[:user_id] = 1
compatible_xhr_request :post, :index, :search => 'Domoway', :project_id => 'ecookbook'
assert_response :success
assert_match 'contacts?search=Domoway', response.body
assert_select 'a', :html => /Domoway/
end
def test_post_contacts_notes_with_search
@request.session[:user_id] = 1
compatible_xhr_request :post, :contacts_notes, :search_note => 'Note 1'
assert_response :success
assert_match 'note_data', response.body
assert_select 'table.note_data div.note.content.preview', /Note 1/
assert_select 'table.note_data div.note.content.preview', { :count => 0, :text => /Note 2/ }
end
def test_post_contacts_notes_with_search_in_project
@request.session[:user_id] = 1
compatible_xhr_request :post, :contacts_notes, :search_note => 'Note 2', :project_id => 'ecookbook'
assert_response :success
assert_match 'note_data', response.body
assert_select 'table.note_data div.note.content.preview', /Note 2/
end
def test_should_have_import_csv_link_if_authorized_to
@request.session[:user_id] = 1
compatible_request :get, :index, :project_id => 1
assert_response :success
assert_select 'a#import_from_csv'
end
def test_should_not_have_import_csv_link_if_unauthorized
@request.session[:user_id] = 4
compatible_request :get, :index, :project_id => 1
assert_response :success
assert_select 'a#import_from_csv', false, 'Should not see CSV import link'
end
def test_index_should_omit_page_param_in_csv_export_link
@request.session[:user_id] = 1
compatible_request :get, :index, :page => 2
assert_response :success
assert_select 'a.csv[href=?]', '/contacts.csv'
assert_select 'form#csv-export-form[action=?]', '/contacts.csv'
end
def test_index_should_include_query_params_in_csv_export_form
@request.session[:user_id] = 1
compatible_request :get,
:index,
{:project_id => 1,
:set_filter => 1,
:has_deals => 1,
:c => ['name', 'job_title'],
:sort => 'name'}
assert_select '#csv-export-form[action=?]', '/projects/ecookbook/contacts.csv'
assert_select '#csv-export-form[method=?]', 'get'
assert_select '#csv-export-form' do
assert_select 'input[name=?][value=?]', 'set_filter', '1'
assert_select 'input[name=?][value=?]', 'f[]', 'has_deals'
assert_select 'input[name=?][value=?]', 'op[has_deals]', '='
assert_select 'input[name=?][value=?]', 'v[has_deals][]', '1'
assert_select 'input[name=?][value=?]', 'c[]', 'name'
assert_select 'input[name=?][value=?]', 'c[]', 'job_title'
assert_select 'input[name=?][value=?]', 'sort', 'name'
end
end if Redmine::VERSION::STRING > '3.2.1'
def test_index_csv_without_filters
@request.session[:user_id] = 1
compatible_request :get,
:index,
{:format => 'csv',
:set_filter => 1,
:f => ['']}
assert_response :success
# -1 for headers
lines = @response.body.chomp.lines.count - 1
assert_equal Contact.count, lines
end if Redmine::VERSION::STRING > '3.3'
def test_index_csv_with_some_filters
@request.session[:user_id] = 1
filter = {:job_title => 'CEO'}
params = {:format => 'csv', :set_filter => 1}.merge(filter)
compatible_request :get, :index, params
assert_response :success
# -1 for headers
lines = @response.body.chomp.lines.count - 1
assert_equal Contact.where(filter).count, lines
end if Redmine::VERSION::STRING > '3.3'
def test_index_csv_with_few_columns
@request.session[:user_id] = 1
columns = ['id', 'name', 'company', 'job_title']
compatible_request :get,
:index,
:format => 'csv',
:c => columns
assert_response :success
assert_equal 'text/csv; header=present', @response.content_type
assert response.body.starts_with?("#,")
actual_columns = response.body.chomp.lines.first.split(',').count
assert_equal columns.count, actual_columns
end
def test_index_csv_with_all_available_columns
@request.session[:user_id] = 1
all_columns = if Redmine::VERSION::STRING < '3.2'
{:columns => 'all'}
elsif Redmine::VERSION::STRING < '3.4'
{:csv => {:columns => 'all'}}
else
{:c => ['all_inline']}
end
params = {:format => 'csv'}.merge(all_columns)
compatible_request :get, :index, params
assert_response :success
assert_equal 'text/csv; header=present', @response.content_type
assert response.body.starts_with?("#,")
available_columns = ContactQuery.new.available_columns.count
actual_columns = response.body.chomp.lines.first.split(',').count
assert_equal available_columns, actual_columns
end
def test_index_with_contacts_as_cards_exports_all_columns
@request.session[:user_id] = 1
compatible_request :get, :index, :contacts_list_style => 'list_cards'
assert_response :success
assert_select 'a[href^="/contacts.csv"][onclick^=?]', 'showModal', false
end
def test_index_with_contacts_as_list_allows_to_choose_columns
@request.session[:user_id] = 1
compatible_request :get, :index, :contacts_list_style => 'list'
assert_response :success
assert_select 'a[href^="/contacts.csv"][onclick^=?]', 'showModal'
end
def test_index_properly_exports_tags_as_text_in_csv
@request.session[:user_id] = 1
contact = Contact.find(1)
contact.tags = [RedmineCrm::Tag.new(:name => 'foo')]
contact.save
compatible_request :get,
:index,
:format => 'csv',
:c => ['tags']
assert_response :success
assert_include "foo\n", @response.body.chomp.lines
end
def test_render_tab_partial_on_load_tab
@request.session[:user_id] = 4
compatible_xhr_request :get, :load_tab, :id => 3, :tab_name => 'notes', :partial => 'notes', :format => :js
assert_response :success
assert_match 'note_data', response.body
end
def test_post_create_with_avatar
image = Redmine::Plugin.find(:redmine_contacts).directory + '/test/fixtures/files/image.jpg'
attach = Attachment.create!(:file => Rack::Test::UploadedFile.new(image, 'image/jpeg'), :author => User.find(1))
@request.session[:user_id] = 1
assert_difference 'Contact.count' do
compatible_request :post, :create, :project_id => 1,
:attachments => { '0' => { 'filename' => 'image.jpg', 'description' => 'avatar', 'token' => attach.token } },
:contact => { :last_name => 'Testov',
:middle_name => 'Test',
:first_name => 'Testovich' }
end
assert_redirected_to :controller => 'contacts', :action => 'show', :id => Contact.last.id, :project_id => Contact.last.project
assert_equal 'Contact', Attachment.last.container_type
assert_equal Contact.last.id, Attachment.last.container_id
assert_equal 'image.jpg', Attachment.last.diskfile[/image\.jpg/]
end
def test_last_notes_for_contact
contact = Contact.find(1)
note = contact.notes.create(:content => 'note for contact', :author_id => 1)
@request.session[:user_id] = 1
compatible_request :get, :index
assert_response :success
assert_select '.note.content', :text => note.content
end
end