Feature #22913 » 22913_auto_mapping.patch
| app/controllers/imports_controller.rb | ||
|---|---|---|
| 65 | 65 | |
| 66 | 66 |
def mapping |
| 67 | 67 |
@custom_fields = @import.mappable_custom_fields |
| 68 |
if @import.mapping.empty? |
|
| 69 |
@import.settings['mapping'] = {}
|
|
| 70 |
headers = @import.headers |
|
| 71 |
# Core fields |
|
| 72 |
core_fields = |
|
| 73 |
case @import |
|
| 74 |
when IssueImport |
|
| 75 |
%w(tracker subject description status priority category assigned_to fixed_version is_private parent_issue_id start_date due_date estimated_hours done_ratio) |
|
| 76 |
when TimeEntryImport |
|
| 77 |
%w(activity user_id issue_id spent_on hours comments) |
|
| 78 |
else |
|
| 79 |
[] |
|
| 80 |
end |
|
| 81 |
core_fields.each do |field| |
|
| 82 |
label = l(:"field_#{field.gsub(/\_id$/, '')}")
|
|
| 83 |
@import.mapping[field] = headers.index(label) |
|
| 84 |
end |
|
| 85 |
# Custom fields |
|
| 86 |
@custom_fields.each do |field| |
|
| 87 |
@import.mapping["cf_#{field.id}"] = headers.index(field.name)
|
|
| 88 |
end |
|
| 89 |
end |
|
| 68 | 90 | |
| 69 | 91 |
if request.post? |
| 70 | 92 |
respond_to do |format| |
| app/views/imports/_issues_fields_mapping.html.erb | ||
|---|---|---|
| 7 | 7 |
:id => 'import_mapping_project_id' %> |
| 8 | 8 |
</p> |
| 9 | 9 |
<p> |
| 10 |
<label for="import_mapping_tracker"><%= l(:label_tracker) %></label>
|
|
| 10 |
<label for="import_mapping_tracker"><%= l(:field_tracker) %></label>
|
|
| 11 | 11 |
<%= mapping_select_tag @import, 'tracker', :required => true, |
| 12 | 12 |
:values => @import.allowed_target_trackers.sorted.map {|t| [t.name, t.id]} %>
|
| 13 | 13 |
</p> |
| ... | ... | |
| 99 | 99 |
</p> |
| 100 | 100 |
</div> |
| 101 | 101 |
</div> |
| 102 | ||
| test/fixtures/files/import_auto_mapping.csv | ||
|---|---|---|
| 1 |
Column 0;Column 1;Column 2;Subject;Column 4;Database;Column 6 |
|
| 2 |
0;1;2;3;4;5;6 |
|
| test/fixtures/files/import_time_entries_auto_mapping.csv | ||
|---|---|---|
| 1 |
Column 0;Column 1;Activity;Column 3;Overtime;Column 5;Column 6 |
|
| 2 |
0;1;2;3;4;5;6 |
|
| test/functional/imports_controller_test.rb | ||
|---|---|---|
| 166 | 166 |
end |
| 167 | 167 |
end |
| 168 | 168 | |
| 169 |
def test_get_mapping_should_auto_select_by_column_name |
|
| 170 |
import = generate_import('import_auto_mapping.csv')
|
|
| 171 |
import.settings = {'separator' => ';', 'wrapper'=> '"', 'encoding' => 'ISO-8859-1'}
|
|
| 172 |
import.save! |
|
| 173 | ||
| 174 |
get :mapping, :params => {
|
|
| 175 |
:id => import.to_param |
|
| 176 |
} |
|
| 177 |
assert_response :success |
|
| 178 | ||
| 179 |
assert_select 'select[name=?]', 'import_settings[mapping][subject]' do |
|
| 180 |
assert_select 'option[value="3"][selected="selected"]', :text => 'Subject' |
|
| 181 |
end |
|
| 182 |
assert_select 'select[name=?]', 'import_settings[mapping][cf_1]' do |
|
| 183 |
assert_select 'option[value="5"][selected="selected"]', :text => 'Database' |
|
| 184 |
end |
|
| 185 |
end |
|
| 186 | ||
| 169 | 187 |
def test_post_mapping_should_update_mapping |
| 170 | 188 |
import = generate_import('import_iso8859-1.csv')
|
| 171 | 189 | |
| ... | ... | |
| 222 | 240 |
assert_select 'select[name=?]', 'import_settings[mapping][user_id]', 0 |
| 223 | 241 |
end |
| 224 | 242 | |
| 243 |
def test_get_mapping_time_entry_should_auto_select_by_column_name |
|
| 244 |
import = generate_time_entry_import('import_time_entries_auto_mapping.csv')
|
|
| 245 |
import.settings = {'separator' => ";", 'wrapper' => '"', 'encoding' => "ISO-8859-1"}
|
|
| 246 |
import.save! |
|
| 247 | ||
| 248 |
get :mapping, :params => {
|
|
| 249 |
:id => import.to_param |
|
| 250 |
} |
|
| 251 |
assert_response :success |
|
| 252 | ||
| 253 |
assert_select 'select[name=?]', 'import_settings[mapping][activity]' do |
|
| 254 |
assert_select 'option[value="2"][selected="selected"]', :text => 'Activity' |
|
| 255 |
end |
|
| 256 |
assert_select 'select[name=?]', 'import_settings[mapping][cf_10]' do |
|
| 257 |
assert_select 'option[value="4"][selected="selected"]', :text => 'Overtime' |
|
| 258 |
end |
|
| 259 |
end |
|
| 260 | ||
| 225 | 261 |
def test_get_run |
| 226 | 262 |
import = generate_import_with_mapping |
| 227 | 263 | |