diff options
Diffstat (limited to 'spec/lib/gitlab/auth/o_auth/auth_hash_spec.rb')
-rw-r--r-- | spec/lib/gitlab/auth/o_auth/auth_hash_spec.rb | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/spec/lib/gitlab/auth/o_auth/auth_hash_spec.rb b/spec/lib/gitlab/auth/o_auth/auth_hash_spec.rb new file mode 100644 index 00000000000..40001cea22e --- /dev/null +++ b/spec/lib/gitlab/auth/o_auth/auth_hash_spec.rb @@ -0,0 +1,111 @@ +require 'spec_helper' + +describe Gitlab::Auth::OAuth::AuthHash do + let(:provider) { 'ldap'.freeze } + let(:auth_hash) do + described_class.new( + OmniAuth::AuthHash.new( + provider: provider, + uid: uid_ascii, + info: info_hash + ) + ) + end + + let(:uid_raw) do + "CN=Onur K\xC3\xBC\xC3\xA7\xC3\xBCk,OU=Test,DC=example,DC=net" + end + let(:email_raw) { "onur.k\xC3\xBC\xC3\xA7\xC3\xBCk_ABC-123@example.net" } + let(:nickname_raw) { "ok\xC3\xBC\xC3\xA7\xC3\xBCk" } + let(:first_name_raw) { 'Onur' } + let(:last_name_raw) { "K\xC3\xBC\xC3\xA7\xC3\xBCk" } + let(:name_raw) { "Onur K\xC3\xBC\xC3\xA7\xC3\xBCk" } + + let(:uid_ascii) { uid_raw.force_encoding(Encoding::ASCII_8BIT) } + let(:email_ascii) { email_raw.force_encoding(Encoding::ASCII_8BIT) } + let(:nickname_ascii) { nickname_raw.force_encoding(Encoding::ASCII_8BIT) } + let(:first_name_ascii) { first_name_raw.force_encoding(Encoding::ASCII_8BIT) } + let(:last_name_ascii) { last_name_raw.force_encoding(Encoding::ASCII_8BIT) } + let(:name_ascii) { name_raw.force_encoding(Encoding::ASCII_8BIT) } + + let(:uid_utf8) { uid_ascii.force_encoding(Encoding::UTF_8) } + let(:email_utf8) { email_ascii.force_encoding(Encoding::UTF_8) } + let(:nickname_utf8) { nickname_ascii.force_encoding(Encoding::UTF_8) } + let(:name_utf8) { name_ascii.force_encoding(Encoding::UTF_8) } + + let(:info_hash) do + { + email: email_ascii, + first_name: first_name_ascii, + last_name: last_name_ascii, + name: name_ascii, + nickname: nickname_ascii, + uid: uid_ascii + } + end + + context 'defaults' do + it { expect(auth_hash.provider).to eq provider } + it { expect(auth_hash.uid).to eql uid_utf8 } + it { expect(auth_hash.email).to eql email_utf8 } + it { expect(auth_hash.username).to eql nickname_utf8 } + it { expect(auth_hash.name).to eql name_utf8 } + it { expect(auth_hash.password).not_to be_empty } + end + + context 'email not provided' do + before do + info_hash.delete(:email) + end + + it 'generates a temp email' do + expect( auth_hash.email).to start_with('temp-email-for-oauth') + end + end + + context 'username not provided' do + before do + info_hash.delete(:nickname) + end + + it 'takes the first part of the email as username' do + expect(auth_hash.username).to eql 'onur.kucuk_ABC-123' + end + end + + context 'name not provided' do + before do + info_hash.delete(:name) + end + + it 'concats first and lastname as the name' do + expect(auth_hash.name).to eql name_utf8 + end + end + + context 'auth_hash constructed with ASCII-8BIT encoding' do + it 'forces utf8 encoding on uid' do + expect(auth_hash.uid.encoding).to eql Encoding::UTF_8 + end + + it 'forces utf8 encoding on provider' do + expect(auth_hash.provider.encoding).to eql Encoding::UTF_8 + end + + it 'forces utf8 encoding on name' do + expect(auth_hash.name.encoding).to eql Encoding::UTF_8 + end + + it 'forces utf8 encoding on username' do + expect(auth_hash.username.encoding).to eql Encoding::UTF_8 + end + + it 'forces utf8 encoding on email' do + expect(auth_hash.email.encoding).to eql Encoding::UTF_8 + end + + it 'forces utf8 encoding on password' do + expect(auth_hash.password.encoding).to eql Encoding::UTF_8 + end + end +end |