51 lines
1.6 KiB
Ruby
51 lines
1.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'spec_helper'
|
|
|
|
RSpec.describe Gitlab::PrivateCommitEmail do
|
|
let(:hostname) { Gitlab::CurrentSettings.current_application_settings.commit_email_hostname }
|
|
let(:id) { 1 }
|
|
let(:valid_email) { "#{id}-foo@#{hostname}" }
|
|
let(:invalid_email) { "#{id}-foo@users.noreply.bar.com" }
|
|
|
|
describe '.regex' do
|
|
subject { described_class.regex }
|
|
|
|
it { is_expected.to match("1-foo@#{hostname}") }
|
|
it { is_expected.not_to match("1-foo@#{hostname}.foo") }
|
|
it { is_expected.not_to match('1-foo@users.noreply.gitlab.com') }
|
|
it { is_expected.not_to match('foo-1@users.noreply.gitlab.com') }
|
|
it { is_expected.not_to match('foobar@gitlab.com') }
|
|
end
|
|
|
|
describe '.user_id_for_email' do
|
|
it 'parses user id from email' do
|
|
expect(described_class.user_id_for_email(valid_email)).to eq(id)
|
|
end
|
|
|
|
it 'returns nil on invalid commit email' do
|
|
expect(described_class.user_id_for_email(invalid_email)).to be_nil
|
|
end
|
|
end
|
|
|
|
describe '.user_ids_for_email' do
|
|
it 'returns deduplicated user IDs for each valid email' do
|
|
result = described_class.user_ids_for_emails([valid_email, valid_email, invalid_email])
|
|
|
|
expect(result).to eq([id])
|
|
end
|
|
|
|
it 'returns an empty array with no valid emails' do
|
|
result = described_class.user_ids_for_emails([invalid_email])
|
|
expect(result).to eq([])
|
|
end
|
|
end
|
|
|
|
describe '.for_user' do
|
|
it 'returns email in the format id-username@hostname' do
|
|
user = create(:user)
|
|
|
|
expect(described_class.for_user(user)).to eq("#{user.id}-#{user.username}@#{hostname}")
|
|
end
|
|
end
|
|
end
|