Skip to content

Commit 133f2a1

Browse files
committed
make Pseudonym#unique_id sis sticky refs #5897
Change-Id: If969d8bfd8844a2dcd5263a11c9bc06dcaa47c55 Reviewed-on: https://gerrit.instructure.com/6092 Tested-by: Hudson <hudson@instructure.com> Reviewed-by: JT Olds <jt@instructure.com>
1 parent 9c6a4f1 commit 133f2a1

4 files changed

Lines changed: 46 additions & 5 deletions

File tree

app/models/pseudonym.rb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,10 @@ class Pseudonym < ActiveRecord::Base
4141
has_a_broadcast_policy
4242

4343
attr_accessor :path, :path_type
44-
44+
45+
include StickySisFields
46+
are_sis_sticky :unique_id
47+
4548
acts_as_authentic do |config|
4649
config.validates_format_of_login_field_options = {:with => /\A\w[\w\.\+\-_@ =]*\z/}
4750
config.login_field :unique_id
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class AddPseudonymSisStickiness < ActiveRecord::Migration
2+
def self.up
3+
add_column :pseudonyms, :stuck_sis_fields, :text
4+
execute("UPDATE pseudonyms SET stuck_sis_fields='unique_id' WHERE sis_source_id<>unique_id")
5+
end
6+
7+
def self.down
8+
drop_column :pseudonyms, :stuck_sis_fields
9+
end
10+
end

lib/sis/user_importer.rb

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,11 @@ def process(updates_every, messages)
3030
importer = Work.new(@batch_id, @root_account, @logger, updates_every, messages)
3131
User.skip_updating_account_associations do
3232
User.process_as_sis(@override_sis_stickiness) do
33-
yield importer
34-
while importer.any_left_to_process?
35-
importer.process_batch
33+
Pseudonym.process_as_sis(@override_sis_stickiness) do
34+
yield importer
35+
while importer.any_left_to_process?
36+
importer.process_batch
37+
end
3638
end
3739
end
3840
end
@@ -123,7 +125,7 @@ def process_batch
123125
end
124126

125127
pseudo ||= Pseudonym.new
126-
pseudo.unique_id = login_id
128+
pseudo.unique_id = login_id unless pseudo.stuck_sis_fields.include?(:unique_id)
127129
pseudo.sis_source_id = login_id
128130
pseudo.sis_user_id = user_id
129131
pseudo.account = @root_account

spec/lib/sis_csv_importer_spec.rb

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1032,6 +1032,32 @@ def gen_ssha_password(password)
10321032
p.communication_channel_id.should == user1.communication_channels.unretired.first.id
10331033
end
10341034

1035+
it "should handle stickiness" do
1036+
process_csv_data_cleanly(
1037+
"user_id,login_id,first_name,last_name,email,status",
1038+
"user_1,user1,User,Uno,,active"
1039+
)
1040+
p = Pseudonym.find_by_unique_id('user1')
1041+
p.unique_id = 'user5'
1042+
p.save!
1043+
process_csv_data_cleanly(
1044+
"user_id,login_id,first_name,last_name,email,status",
1045+
"user_1,user3,User,Uno,,active"
1046+
)
1047+
p.reload
1048+
p.unique_id.should == 'user5'
1049+
Pseudonym.find_by_unique_id('user1').should be_nil
1050+
Pseudonym.find_by_unique_id('user3').should be_nil
1051+
process_csv_data_cleanly(
1052+
"user_id,login_id,first_name,last_name,email,status",
1053+
"user_1,user3,User,Uno,,active",
1054+
{:override_sis_stickiness => true}
1055+
)
1056+
p.reload
1057+
p.unique_id.should == 'user3'
1058+
Pseudonym.find_by_unique_id('user1').should be_nil
1059+
Pseudonym.find_by_unique_id('user5').should be_nil
1060+
end
10351061
end
10361062

10371063
context 'enrollment importing' do

0 commit comments

Comments
 (0)