diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-04-20 23:50:22 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-04-20 23:50:22 +0000 |
commit | 9dc93a4519d9d5d7be48ff274127136236a3adb3 (patch) | |
tree | 70467ae3692a0e35e5ea56bcb803eb512a10bedb /spec/models/concerns/subscribable_spec.rb | |
parent | 4b0f34b6d759d6299322b3a54453e930c6121ff0 (diff) | |
download | gitlab-ce-9dc93a4519d9d5d7be48ff274127136236a3adb3.tar.gz |
Add latest changes from gitlab-org/gitlab@13-11-stable-eev13.11.0-rc43
Diffstat (limited to 'spec/models/concerns/subscribable_spec.rb')
-rw-r--r-- | spec/models/concerns/subscribable_spec.rb | 51 |
1 files changed, 39 insertions, 12 deletions
diff --git a/spec/models/concerns/subscribable_spec.rb b/spec/models/concerns/subscribable_spec.rb index 3e52ca5cf63..a60a0a5e26d 100644 --- a/spec/models/concerns/subscribable_spec.rb +++ b/spec/models/concerns/subscribable_spec.rb @@ -7,50 +7,54 @@ RSpec.describe Subscribable, 'Subscribable' do let(:resource) { create(:issue, project: project) } let(:user_1) { create(:user) } - describe '#subscribed?' do + shared_examples 'returns expected values' do |method| context 'without user' do it 'returns false' do - expect(resource.subscribed?(nil, project)).to be_falsey + expect(resource.public_send(method, nil, project)).to be_falsey end end context 'without project' do it 'returns false when no subscription exists' do - expect(resource.subscribed?(user_1)).to be_falsey + expect(resource.public_send(method, user_1)).to be_falsey end - it 'returns true when a subcription exists and subscribed is true' do + it 'returns true when a subscription exists and subscribed is true' do resource.subscriptions.create!(user: user_1, subscribed: true) - expect(resource.subscribed?(user_1)).to be_truthy + expect(resource.public_send(method, user_1)).to be_truthy end - it 'returns false when a subcription exists and subscribed is false' do + it 'returns false when a subscription exists and subscribed is false' do resource.subscriptions.create!(user: user_1, subscribed: false) - expect(resource.subscribed?(user_1)).to be_falsey + expect(resource.public_send(method, user_1)).to be_falsey end end context 'with project' do it 'returns false when no subscription exists' do - expect(resource.subscribed?(user_1, project)).to be_falsey + expect(resource.public_send(method, user_1, project)).to be_falsey end - it 'returns true when a subcription exists and subscribed is true' do + it 'returns true when a subscription exists and subscribed is true' do resource.subscriptions.create!(user: user_1, project: project, subscribed: true) - expect(resource.subscribed?(user_1, project)).to be_truthy + expect(resource.public_send(method, user_1, project)).to be_truthy end - it 'returns false when a subcription exists and subscribed is false' do + it 'returns false when a subscription exists and subscribed is false' do resource.subscriptions.create!(user: user_1, project: project, subscribed: false) - expect(resource.subscribed?(user_1, project)).to be_falsey + expect(resource.public_send(method, user_1, project)).to be_falsey end end end + describe '#subscribed?' do + it_behaves_like 'returns expected values', :subscribed? + end + describe '#subscribers' do it 'returns [] when no subcribers exists' do expect(resource.subscribers(project)).to be_empty @@ -189,4 +193,27 @@ RSpec.describe Subscribable, 'Subscribable' do it_behaves_like 'setting subscriptions' end end + + describe '#lazy_subscription' do + let(:labels) { create_list(:group_label, 5) } + + before do + labels.each do |label| + create(:subscription, :group_label, user: user_1, subscribable: label) + end + end + + it 'executes only one SQL query' do + lazy_queries = ActiveRecord::QueryRecorder.new do + labels.each { |label| label.lazy_subscription(user_1) } + end + + preloaded_queries = ActiveRecord::QueryRecorder.new do + labels.each { |label| label.lazy_subscription(user_1)&.subscribed? } + end + + expect(lazy_queries.count).to eq(0) + expect(preloaded_queries.count).to eq(1) + end + end end |