debian-mirror-gitlab/spec/support/shared_examples/models/concerns/bulk_users_by_email_load_shared_examples.rb
2022-06-21 17:19:12 +05:30

39 lines
1.4 KiB
Ruby

# frozen_string_literal: true
RSpec.shared_examples 'a BulkUsersByEmailLoad model' do
describe '#users_by_emails' do
let_it_be(:user1) { create(:user, emails: [create(:email, email: 'user1@example.com')]) }
let_it_be(:user2) { create(:user, emails: [create(:email, email: 'user2@example.com')]) }
subject(:model) { described_class.new(id: non_existing_record_id) }
context 'when nothing is loaded' do
let(:passed_emails) { [user1.emails.first.email, user2.email] }
it 'preforms the yielded query and supplies the data with only emails desired' do
expect(model.users_by_emails(passed_emails).keys).to contain_exactly(*passed_emails)
end
end
context 'when store is preloaded', :request_store do
let(:passed_emails) { [user1.emails.first.email, user2.email, user1.email] }
let(:resource_data) do
{
user1.emails.first.email => instance_double('User'),
user2.email => instance_double('User')
}
end
before do
Gitlab::SafeRequestStore["user_by_email_for_users:#{model.class.name}:#{model.id}"] = resource_data
end
it 'passes back loaded data and does not update the items that already exist' do
users_by_emails = model.users_by_emails(passed_emails)
expect(users_by_emails.keys).to contain_exactly(*passed_emails)
expect(users_by_emails).to include(resource_data.merge(user1.email => user1))
end
end
end
end