Skip to content

Commit 479db7c

Browse files
committed
don't enroll users with deleted pseudonyms in sis imports
test plan: * import the sis .zip package referenced in the ticket * should have a warning * should not create an active enrollment in the new course closes #CNVS-19829 Change-Id: I1f1aa23da7a7a8aab09026bc974945f8f3fc5743 Reviewed-on: https://gerrit.instructure.com/52576 Reviewed-by: Jeremy Stanley <jeremy@instructure.com> Tested-by: Jenkins QA-Review: Jahnavi Yetukuri <jyetukuri@instructure.com> Product-Review: James Williams <jamesw@instructure.com>
1 parent 8e134c6 commit 479db7c

2 files changed

Lines changed: 28 additions & 4 deletions

File tree

lib/sis/enrollment_importer.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -195,9 +195,9 @@ def process_batch
195195
'TaEnrollment'
196196
elsif role_name =~ /\Aobserver\z/i
197197
if associated_sis_user_id
198-
pseudo = root_account.pseudonyms.where(sis_user_id: associated_sis_user_id).first
199-
if pseudo
200-
associated_user_id = pseudo.user_id
198+
a_pseudo = root_account.pseudonyms.where(sis_user_id: associated_sis_user_id).first
199+
if a_pseudo
200+
associated_user_id = a_pseudo.user_id
201201
else
202202
@messages << "An enrollment referenced a non-existent associated user #{associated_sis_user_id}"
203203
next
@@ -229,7 +229,7 @@ def process_batch
229229
enrollment.course_section = @section
230230

231231
if status =~ /\Aactive/i
232-
if user.workflow_state != 'deleted'
232+
if user.workflow_state != 'deleted' && pseudo.workflow_state != 'deleted'
233233
enrollment.workflow_state = 'active'
234234
else
235235
enrollment.workflow_state = 'deleted'

spec/lib/sis/csv/enrollment_importer_spec.rb

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -751,4 +751,28 @@
751751
expect(observer.enrollments.first.workflow_state).to eq 'deleted'
752752
end
753753

754+
it "should not create enrollments for deleted users" do
755+
process_csv_data_cleanly(
756+
"course_id,short_name,long_name,account_id,term_id,status",
757+
"test_1,TC 101,Test Course 101,,,active"
758+
)
759+
process_csv_data_cleanly(
760+
"user_id,login_id,first_name,last_name,email,status",
761+
"student_user,user1,User,Uno,user@example.com,active"
762+
)
763+
process_csv_data_cleanly(
764+
"user_id,login_id,first_name,last_name,email,status",
765+
"student_user,user1,User,Uno,user@example.com,deleted"
766+
)
767+
importer = process_csv_data(
768+
"course_id,user_id,role,section_id,status,associated_user_id",
769+
"test_1,student_user,student,,active,",
770+
)
771+
warnings = importer.warnings.map { |r| r.last }
772+
expect(warnings).to eq ["Attempted enrolling of deleted user student_user in course test_1"]
773+
774+
student = Pseudonym.where(:sis_user_id => "student_user").first.user
775+
expect(student.enrollments.count).to eq 1
776+
expect(student.enrollments.first).to be_deleted
777+
end
754778
end

0 commit comments

Comments
 (0)