diff --git a/plugins/newsletter/lib/newsletter_plugin/newsletter.rb b/plugins/newsletter/lib/newsletter_plugin/newsletter.rb index a6a25ed..05fdda2 100644 --- a/plugins/newsletter/lib/newsletter_plugin/newsletter.rb +++ b/plugins/newsletter/lib/newsletter_plugin/newsletter.rb @@ -154,11 +154,14 @@ class NewsletterPlugin::Newsletter < Noosfero::Plugin::ActiveRecord headers ||= false if File.extname(file.original_filename) == '.csv' - parsed_recipients = [] - CSV.foreach(file.path, headers: headers) do |row| - parsed_recipients << {name: row[name_column.to_i - 1], email: row[email_column.to_i - 1]} + [",", ";", "\t"].each do |sep| + parsed_recipients = [] + CSV.foreach(file.path, { headers: headers, col_sep: sep }) do |row| + parsed_recipients << {name: row[name_column.to_i - 1], email: row[email_column.to_i - 1]} + end + self.additional_recipients = parsed_recipients + break if self.valid? || !self.errors.include?(:additional_recipients) end - self.additional_recipients = parsed_recipients else #FIXME find a better way to deal with errors self.errors.add(:additional_recipients, _("have unknown file type: %s" % file.original_filename)) diff --git a/plugins/newsletter/test/unit/newsletter_plugin_newsletter_test.rb b/plugins/newsletter/test/unit/newsletter_plugin_newsletter_test.rb index 94faefe..e5d9b3b 100644 --- a/plugins/newsletter/test/unit/newsletter_plugin_newsletter_test.rb +++ b/plugins/newsletter/test/unit/newsletter_plugin_newsletter_test.rb @@ -29,7 +29,7 @@ class NewsletterPluginNewsletterTest < ActiveSupport::TestCase :person => fast_create(Person)) enabled_newsletters << newsletter.id if enabled end - assert_equal enabled_newsletters, NewsletterPlugin::Newsletter.enabled.map(&:id) + assert_equivalent enabled_newsletters, NewsletterPlugin::Newsletter.enabled.map(&:id) end should 'people of newsletters are the same environment members' do @@ -214,6 +214,35 @@ EOS assert_equivalent ["Coop1", "Coop2", "Coop3"], newsletter.additional_recipients.map { |recipient| recipient[:name] } end + should 'provide flexibility for CSV file when parsing additional recipients' do + content_semicolon = <<-EOS +Coop1;name1@example.com +Coop2;name2@example.com +Coop3;name3@example.com +EOS + + content_tab = <<-EOS +Coop1\tname1@example.com +Coop2\tname2@example.com +Coop3\tname3@example.com +EOS + [content_semicolon, content_tab].each do |content| + file = Tempfile.new(['recipients', '.csv']) + file.write(content) + file.rewind + + environment = fast_create Environment + newsletter = NewsletterPlugin::Newsletter.create!(:environment => environment, :person => fast_create(Person)) + newsletter.import_recipients(Rack::Test::UploadedFile.new(file, 'text/csv')) + + file.close + file.unlink + + assert_equivalent ["name1@example.com", "name2@example.com", "name3@example.com"], newsletter.additional_recipients.map { |recipient| recipient[:email] } + assert_equivalent ["Coop1", "Coop2", "Coop3"], newsletter.additional_recipients.map { |recipient| recipient[:name] } + end + end + should 'retrieve blogs related to newsletter' do environment = fast_create Environment community = fast_create(Community, :environment_id => environment.id) -- libgit2 0.21.2