diff --git a/lib/sis/course_importer.rb b/lib/sis/course_importer.rb index 85e1506510b..69e42f068d4 100644 --- a/lib/sis/course_importer.rb +++ b/lib/sis/course_importer.rb @@ -89,6 +89,9 @@ module SIS account = nil account = @root_account.all_accounts.where(sis_source_id: account_id).take if account_id.present? account ||= @root_account.all_accounts.where(sis_source_id: fallback_account_id).take if fallback_account_id.present? + if account_id.present? && !account + raise ImportError, "Account not found \"#{account_id}\" for course #{course_id}" + end course_account_stuck = course.stuck_sis_fields.include?(:account_id) unless course_account_stuck course.account = account if account diff --git a/spec/lib/sis/csv/course_importer_spec.rb b/spec/lib/sis/csv/course_importer_spec.rb index 4cac0c0e361..518a5a88241 100644 --- a/spec/lib/sis/csv/course_importer_spec.rb +++ b/spec/lib/sis/csv/course_importer_spec.rb @@ -25,12 +25,12 @@ describe SIS::CSV::CourseImporter do it 'should skip bad content' do before_count = Course.count importer = process_csv_data( - "course_id,short_name,long_name,account_id,term_id,status", - "C001,Hum101,Humanities,A001,T001,active", - ",Hum102,Humanities 2,A001,T001,active", - "C003,Hum102,Humanities 2,A001,T001,inactive", - "C004,,Humanities 2,A001,T001,active", - "C005,Hum102,,A001,T001,active" + "course_id,short_name,long_name,term_id,status", + "C001,Hum101,Humanities,T001,active", + ",Hum102,Humanities 2,T001,active", + "C003,Hum102,Humanities 2,T001,inactive", + "C004,,Humanities 2,T001,active", + "C005,Hum102,,T001,active" ) expect(Course.count).to eq before_count + 1 @@ -52,6 +52,15 @@ describe SIS::CSV::CourseImporter do expect(course.associated_accounts.map(&:id).sort).to eq [@account.id] end + it "should throw an error when account is not found" do + importer = process_csv_data( + "course_id,short_name,long_name,account_id,term_id,status", + "test_1,TC 101,Test Course 101,VERY_INVALID_ACCOUNT,,active" + ) + errors = importer.errors.map { |r| r.last } + expect(errors).to eq ["Account not found \"VERY_INVALID_ACCOUNT\" for course test_1"] + end + it "should support term stickiness" do process_csv_data_cleanly( "term_id,name,status,start_date,end_date", @@ -642,7 +651,7 @@ describe SIS::CSV::CourseImporter do it 'should allow unpublished to be passed for active' do process_csv_data_cleanly( "course_id,short_name,long_name,account_id,term_id,status", - "c1,TC 101,Test Course 1,A001,T001,unpublished" + "c1,TC 101,Test Course 1,,T001,unpublished" ) expect(Course.active.where(sis_source_id: 'c1').take).to be_present end