|
21 | 21 | expect { User.from_omniauth(auth) }.to raise_error(Error::InvalidAuthProviderError) |
22 | 22 | end |
23 | 23 |
|
| 24 | + it 'rejects calnet when a required schema attribute is missing or renamed' do |
| 25 | + auth = { |
| 26 | + 'provider' => 'calnet', |
| 27 | + 'extra' => { |
| 28 | + 'berkeleyEduAffiliations' => 'expected affiliation', |
| 29 | + 'berkeleyEduCSID' => 'expected cs id', |
| 30 | + 'berkeleyEduIsMemberOf' => [], |
| 31 | + 'berkeleyEduUCPathID' => 'expected UC Path ID', |
| 32 | + 'berkeleyEduAlternatid' => 'expected email', # intentionally wrong case to simulate wrong attribute |
| 33 | + 'departmentNumber' => 'expected dept. number', |
| 34 | + 'displayName' => 'expected display name', |
| 35 | + 'employeeNumber' => 'expected employee ID', |
| 36 | + 'givenName' => 'expected given name', |
| 37 | + 'surname' => 'expected surname', |
| 38 | + 'uid' => 'expected UID' |
| 39 | + } |
| 40 | + } |
| 41 | + |
| 42 | + missing = %w[berkeleyEduAlternateID berkeleyEduAlternateId] |
| 43 | + actual = %w[berkeleyEduAffiliations berkeleyEduAlternatid berkeleyEduCSID berkeleyEduIsMemberOf berkeleyEduUCPathID departmentNumber |
| 44 | + displayName employeeNumber givenName surname uid] |
| 45 | + # rubocop:disable Layout/LineLength |
| 46 | + msg = "Expected CalNet attribute(s) not found (case-sensitive): #{missing.join(', ')}. The actual CalNet attributes: #{actual.join(', ')}. The user is expected display name" |
| 47 | + # rubocop:enable Layout/LineLength |
| 48 | + expect { User.from_omniauth(auth) }.to raise_error(Error::CalnetError, msg) |
| 49 | + end |
| 50 | + |
24 | 51 | it 'populates a User object' do |
25 | 52 | framework_admin_ldap = 'cn=edu:berkeley:org:libr:framework:LIBR-framework-admins,ou=campus groups,dc=berkeley,dc=edu' |
26 | 53 | auth = { |
|
32 | 59 | 'berkeleyEduAlternateID' => 'expected email', |
33 | 60 | 'employeeNumber' => 'expected employee ID', |
34 | 61 | 'givenName' => 'expected given name', |
35 | | - 'berkeleyEduStuID' => 'expected student ID', |
| 62 | + 'berkeleyEduCSID' => 'expected cs id', |
36 | 63 | 'surname' => 'expected surname', |
37 | 64 | 'berkeleyEduUCPathID' => 'expected UC Path ID', |
38 | 65 | 'uid' => 'expected UID', |
|
49 | 76 | expect(user.email).to eq('expected email') |
50 | 77 | expect(user.employee_id).to eq('expected employee ID') |
51 | 78 | expect(user.given_name).to eq('expected given name') |
52 | | - expect(user.student_id).to eq('expected student ID') |
| 79 | + expect(user.student_id).to eq(nil) |
53 | 80 | expect(user.surname).to eq('expected surname') |
54 | 81 | expect(user.ucpath_id).to eq('expected UC Path ID') |
55 | 82 | expect(user.uid).to eq('expected UID') |
|
67 | 94 | 'berkeleyEduAlternateID' => 'expected email', |
68 | 95 | 'employeeNumber' => 'expected employee ID', |
69 | 96 | 'givenName' => 'expected given name', |
70 | | - 'berkeleyEduStuID' => 'expected student ID', |
| 97 | + 'berkeleyEduCSID' => 'expected cs id', |
71 | 98 | 'surname' => 'expected surname', |
72 | 99 | 'berkeleyEduUCPathID' => 'expected UC Path ID', |
73 | 100 | 'uid' => 'expected UID' |
|
81 | 108 | expect(user.email).to eq('expected email') |
82 | 109 | expect(user.employee_id).to eq('expected employee ID') |
83 | 110 | expect(user.given_name).to eq('expected given name') |
84 | | - expect(user.student_id).to eq('expected student ID') |
| 111 | + expect(user.student_id).to eq(nil) |
85 | 112 | expect(user.surname).to eq('expected surname') |
86 | 113 | expect(user.ucpath_id).to eq('expected UC Path ID') |
87 | 114 | expect(user.uid).to eq('expected UID') |
|
102 | 129 | 'berkeleyEduStuID' => 'expected student ID', |
103 | 130 | 'surname' => 'expected surname', |
104 | 131 | 'berkeleyEduUCPathID' => 'expected UC Path ID', |
| 132 | + 'berkeleyEduCSID' => 'expected cs id', |
105 | 133 | 'uid' => 'expected UID' |
106 | 134 | } |
107 | 135 | } |
|
134 | 162 | end |
135 | 163 | end |
136 | 164 |
|
| 165 | + describe :verify_calnet_attributes! do |
| 166 | + it 'allows employee-affiliated users without berkeleyEduStuID' do |
| 167 | + auth_extra = { |
| 168 | + 'berkeleyEduAffiliations' => ['EMPLOYEE-TYPE-ACADEMIC'], |
| 169 | + 'berkeleyEduCSID' => 'cs123', |
| 170 | + 'berkeleyEduIsMemberOf' => [], |
| 171 | + 'berkeleyEduUCPathID' => 'ucpath456', |
| 172 | + 'berkeleyEduAlternateID' => 'email@berkeley.edu', |
| 173 | + 'departmentNumber' => 'dept1', |
| 174 | + 'displayName' => 'Test Faculty', |
| 175 | + 'employeeNumber' => 'emp789', |
| 176 | + 'givenName' => 'Test', |
| 177 | + 'surname' => 'Faculty', |
| 178 | + 'uid' => 'faculty1' |
| 179 | + } |
| 180 | + |
| 181 | + expect { User.from_omniauth({ 'provider' => 'calnet', 'extra' => auth_extra }) }.not_to raise_error |
| 182 | + end |
| 183 | + |
| 184 | + it 'allows student-affiliated users without employeeNumber and berkeleyEduUCPathID' do |
| 185 | + auth_extra = { |
| 186 | + 'berkeleyEduAffiliations' => ['STUDENT-TYPE-REGISTERED'], |
| 187 | + 'berkeleyEduCSID' => 'cs123', |
| 188 | + 'berkeleyEduIsMemberOf' => [], |
| 189 | + 'berkeleyEduStuID' => 'stu456', |
| 190 | + 'berkeleyEduAlternateID' => 'email@berkeley.edu', |
| 191 | + 'departmentNumber' => 'dept1', |
| 192 | + 'displayName' => 'Test Student', |
| 193 | + 'givenName' => 'Test', |
| 194 | + 'surname' => 'Student', |
| 195 | + 'uid' => 'student1' |
| 196 | + } |
| 197 | + |
| 198 | + expect { User.from_omniauth({ 'provider' => 'calnet', 'extra' => auth_extra }) }.not_to raise_error |
| 199 | + end |
| 200 | + |
| 201 | + it 'rejects student-affiliated users if berkeleyEduStuID is missing' do |
| 202 | + auth_extra = { |
| 203 | + 'berkeleyEduAffiliations' => ['STUDENT-TYPE-REGISTERED'], |
| 204 | + 'berkeleyEduCSID' => 'cs123', |
| 205 | + 'berkeleyEduIsMemberOf' => [], |
| 206 | + 'berkeleyEduAlternateID' => 'email@berkeley.edu', |
| 207 | + 'departmentNumber' => 'dept1', |
| 208 | + 'displayName' => 'Test Student', |
| 209 | + 'givenName' => 'Test', |
| 210 | + 'surname' => 'Student', |
| 211 | + 'uid' => 'student1' |
| 212 | + } |
| 213 | + |
| 214 | + expect { User.from_omniauth({ 'provider' => 'calnet', 'extra' => auth_extra }) }.to raise_error(Error::CalnetError) |
| 215 | + end |
| 216 | + |
| 217 | + it 'rejects employee-affiliated users if employeeNumber is missing' do |
| 218 | + auth_extra = { |
| 219 | + 'berkeleyEduAffiliations' => ['EMPLOYEE-TYPE-STAFF'], |
| 220 | + 'berkeleyEduCSID' => 'cs123', |
| 221 | + 'berkeleyEduIsMemberOf' => [], |
| 222 | + 'berkeleyEduUCPathID' => 'ucpath456', |
| 223 | + 'berkeleyEduAlternateID' => 'email@berkeley.edu', |
| 224 | + 'departmentNumber' => 'dept1', |
| 225 | + 'displayName' => 'Test Staff', |
| 226 | + 'givenName' => 'Test', |
| 227 | + 'surname' => 'Staff', |
| 228 | + 'uid' => 'staff1' |
| 229 | + } |
| 230 | + |
| 231 | + expect { User.from_omniauth({ 'provider' => 'calnet', 'extra' => auth_extra }) }.to raise_error(Error::CalnetError) |
| 232 | + end |
| 233 | + end |
| 234 | + |
137 | 235 | end |
0 commit comments