debian-mirror-gitlab/spec/lib/bulk_imports/groups/transformers/member_attributes_transformer_spec.rb
2021-09-30 23:02:18 +05:30

129 lines
3.8 KiB
Ruby

# frozen_string_literal: true
require 'spec_helper'
RSpec.describe BulkImports::Groups::Transformers::MemberAttributesTransformer do
let_it_be(:user) { create(:user) }
let_it_be(:secondary_email) { 'secondary@email.com' }
let_it_be(:group) { create(:group) }
let_it_be(:bulk_import) { create(:bulk_import, user: user) }
let_it_be(:entity) { create(:bulk_import_entity, bulk_import: bulk_import, group: group) }
let_it_be(:tracker) { create(:bulk_import_tracker, entity: entity) }
let_it_be(:context) { BulkImports::Pipeline::Context.new(tracker) }
it 'returns nil when receives no data' do
expect(subject.transform(context, nil)).to eq(nil)
end
it 'returns nil when no user is found' do
expect(subject.transform(context, member_data)).to eq(nil)
expect(subject.transform(context, member_data(email: 'inexistent@email.com'))).to eq(nil)
end
context 'when the user is not confirmed' do
before do
user.update!(confirmed_at: nil)
end
it 'returns nil even when the primary email match' do
data = member_data(email: user.email)
expect(subject.transform(context, data)).to eq(nil)
end
it 'returns nil even when a secondary email match' do
user.emails << Email.new(email: secondary_email)
data = member_data(email: secondary_email)
expect(subject.transform(context, data)).to eq(nil)
end
end
context 'when the user is confirmed' do
before do
user.update!(confirmed_at: Time.now.utc)
end
it 'finds the user by the primary email' do
data = member_data(email: user.email)
expect(subject.transform(context, data)).to eq(
'access_level' => 30,
'user_id' => user.id,
'created_by_id' => user.id,
'created_at' => '2020-01-01T00:00:00Z',
'updated_at' => '2020-01-01T00:00:00Z',
'expires_at' => nil
)
end
it 'finds the user by the secondary email' do
user.emails << Email.new(email: secondary_email, confirmed_at: Time.now.utc)
data = member_data(email: secondary_email)
expect(subject.transform(context, data)).to eq(
'access_level' => 30,
'user_id' => user.id,
'created_by_id' => user.id,
'created_at' => '2020-01-01T00:00:00Z',
'updated_at' => '2020-01-01T00:00:00Z',
'expires_at' => nil
)
end
context 'format access level' do
it 'ignores record if no access level is given' do
data = member_data(email: user.email, access_level: nil)
expect(subject.transform(context, data)).to be_nil
end
it 'ignores record if is not a valid access level' do
data = member_data(email: user.email, access_level: 999)
expect(subject.transform(context, data)).to be_nil
end
end
context 'source user id caching' do
context 'when user gid is present' do
it 'caches source user id' do
gid = 'gid://gitlab/User/7'
data = member_data(email: user.email, gid: gid)
expect_next_instance_of(BulkImports::UsersMapper) do |mapper|
expect(mapper).to receive(:cache_source_user_id).with('7', user.id)
end
subject.transform(context, data)
end
end
context 'when user gid is missing' do
it 'does not use caching' do
data = member_data(email: user.email)
expect(BulkImports::UsersMapper).not_to receive(:new)
subject.transform(context, data)
end
end
end
end
def member_data(email: '', gid: nil, access_level: 30)
{
'created_at' => '2020-01-01T00:00:00Z',
'updated_at' => '2020-01-01T00:00:00Z',
'expires_at' => nil,
'access_level' => {
'integer_value' => access_level
},
'user' => {
'user_gid' => gid,
'public_email' => email
}
}
end
end