diff --git a/app/controllers/imports_controller.rb b/app/controllers/imports_controller.rb index 721d08fa2..2b9edfc31 100644 --- a/app/controllers/imports_controller.rb +++ b/app/controllers/imports_controller.rb @@ -50,7 +50,11 @@ class ImportsController < ApplicationController def settings if request.post? && @import.parse_file - redirect_to import_mapping_path(@import) + if @import.total_items == 0 + flash.now[:error] = l(:error_no_data_import_file) + else + redirect_to import_mapping_path(@import) + end end rescue CSV::MalformedCSVError, EncodingError => e diff --git a/config/locales/en.yml b/config/locales/en.yml index 9d779a2fe..c948d40ff 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -223,6 +223,7 @@ en: error_invalid_file_encoding: "The file is not a valid %{encoding} encoded file" error_invalid_csv_file_or_settings: "The file is not a CSV file or does not match the settings below (%{value})" error_can_not_read_import_file: "An error occurred while reading the file to import" + error_no_data_import_file: "There is no data to import into the file" error_attachment_extension_not_allowed: "Attachment extension %{extension} is not allowed" error_ldap_bind_credentials: "Invalid LDAP Account/Password" error_no_tracker_allowed_for_new_issue_in_project: "The project doesn't have any trackers for which you can create an issue" diff --git a/test/fixtures/files/import_issues_only_header_row.csv b/test/fixtures/files/import_issues_only_header_row.csv new file mode 100644 index 000000000..269117bba --- /dev/null +++ b/test/fixtures/files/import_issues_only_header_row.csv @@ -0,0 +1 @@ +priority;Subject;start_date;parent;private;progress;custom;"target version";category;user;estimated_hours;tracker;status;database;cf_6; diff --git a/test/functional/imports_controller_test.rb b/test/functional/imports_controller_test.rb index 7097d8185..2c09c4898 100644 --- a/test/functional/imports_controller_test.rb +++ b/test/functional/imports_controller_test.rb @@ -180,6 +180,27 @@ class ImportsControllerTest < Redmine::ControllerTest assert_select 'div#flash_error', /The file is not a CSV file or does not match the settings below \([[:print:]]+\)/ end + def test_post_settings_with_only_header_row_should_display_error + import = generate_import('import_issues_only_header_row.csv') + + post( + :settings, + :params => { + :id => import.to_param, + :import_settings => { + :separator => ';', + :wrapper => '"', + :encoding => 'ISO-8859-1' + } + } + ) + assert_response 200 + import.reload + assert_equal 0, import.total_items + + assert_select 'div#flash_error', /There is no data to import into the file/ + end + def test_get_mapping_should_display_mapping_form import = generate_import('import_iso8859-1.csv') import.settings = {'separator' => ";", 'wrapper' => '"', 'encoding' => "ISO-8859-1"}