Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions app/lib/importers/volunteer_importer.rb
Original file line number Diff line number Diff line change
@@ -1,22 +1,24 @@
class VolunteerImporter < FileImporter
IMPORT_HEADER = ["display_name", "email"]
IMPORT_HEADER = ["display_name", "email", "phone_number"]

def self.import_volunteers(csv_filespec, org_id)
new(csv_filespec, org_id).import_volunteers
end

def initialize(csv_filespec, org_id)
super(csv_filespec, org_id, "volunteers", ["display_name", "email"])
super(csv_filespec, org_id, "volunteers", ["display_name", "email", "phone_number"])
end

def import_volunteers
import do |row|
volunteer_params = row.to_hash.slice(:display_name, :email).compact
volunteer_params = row.to_hash.slice(:display_name, :email, :phone_number).compact

unless volunteer_params.key?(:email)
raise "Row does not contain an e-mail address."
end

volunteer_params[:phone_number] = volunteer_params.key?(:phone_number) ? "+#{volunteer_params[:phone_number]}" : ""

volunteer = Volunteer.find_by(email: volunteer_params[:email])

if volunteer # Volunteer exists try to update it
Expand Down
8 changes: 4 additions & 4 deletions public/volunteers.csv
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
display_name,email
Volunteer One,volunteer1@example.net
Volunteer Two,volunteer2@example.net
Volunteer Three,volunteer3@example.net
display_name,email,phone_number
Volunteer One,volunteer1@example.net,11234567890
Volunteer Two,volunteer2@example.net,11234567891
Volunteer Three,volunteer3@example.net,11234567892
8 changes: 4 additions & 4 deletions spec/fixtures/volunteers.csv
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
display_name,email
Volunteer One,volunteer1@example.net
Volunteer Two,volunteer2@example.net
Volunteer Three,volunteer3@example.net
display_name,email,phone_number
Volunteer One,volunteer1@example.net,11234567890
Volunteer Two,volunteer2@example.net,11234567891
Volunteer Three,volunteer3@example.net,11234567892
4 changes: 4 additions & 0 deletions spec/fixtures/volunteers_invalid_phone_numbers.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
display_name,email,phone_number
Volunteer One,volunteer1@example.net,22222222222
Volunteer Two,volunteer2@example.net,1bc12345678
Volunteer Three,volunteer3@example.net,1111111111
7 changes: 4 additions & 3 deletions spec/fixtures/volunteers_without_email.csv
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
display_name,email
Volunteer One,volunteer1@example.net
Volunteer Two,
display_name,email,phone_number
Volunteer One,volunteer1@example.net,11111111111
Volunteer Two,11111111111
Volunteer Three,,11111111111
3 changes: 3 additions & 0 deletions spec/fixtures/volunteers_without_phone_numbers.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
display_name,email,phone_number
Volunteer One,volunteer1@example.net,11111111111
Volunteer Two,volunteer2@example.net,
32 changes: 32 additions & 0 deletions spec/lib/importers/volunteer_importer_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,13 @@
existing_volunteer.reload
}.to change(existing_volunteer, :display_name).to("Volunteer One")
end

it "updates phone number to valid number" do
expect {
volunteer_importer.call
existing_volunteer.reload
}.to change(existing_volunteer, :phone_number).to("+11234567890")
end
end

context "when row doesn't have e-mail address" do
Expand All @@ -62,4 +69,29 @@
expect(alert[:exported_rows]).to include("Row does not contain an e-mail address.")
end
end

context "when row doesn't have phone number" do
let(:import_file_path) { Rails.root.join("spec", "fixtures", "volunteers_without_phone_numbers.csv") }

let!(:existing_volunteer_with_number) { create(:volunteer, display_name: "#", email: "volunteer2@example.net", phone_number: "+11111111111") }

it "updates phone number to be deleted" do
expect {
volunteer_importer.call
existing_volunteer_with_number.reload
}.to change(existing_volunteer_with_number, :phone_number).to("")
end
end

context "when phone number in row is invalid" do
let(:import_file_path) { Rails.root.join("spec", "fixtures", "volunteers_invalid_phone_numbers.csv") }

it "returns an error message" do
alert = volunteer_importer.call

expect(alert[:type]).to eq(:error)
expect(alert[:message]).to eq("Not all rows were imported.")
expect(alert[:exported_rows]).to include("Phone number is not in correct format: 1XXXXXXXXXX")
end
end
end