diff options
author | Robert Speicher <robert@gitlab.com> | 2017-09-01 21:39:12 +0300 |
---|---|---|
committer | Robert Speicher <robert@gitlab.com> | 2017-09-01 21:39:12 +0300 |
commit | dd825c0f5d00cef3cac89480bcf2027064c5d89d (patch) | |
tree | 70ea0d2a238516e9b082bbce487ed6ea66b836a7 /spec | |
parent | 6fffddab70825f5a0b63be39de0d332a79d42479 (diff) | |
parent | e7817fc1e0877efd59f0442934bbb0ad91fbb20a (diff) |
Merge branch 'remove-finder-caching' into 'master'
Remove issuable finder count caching
See merge request !13959
Diffstat (limited to 'spec')
-rw-r--r-- | spec/features/projects/issuable_counts_caching_spec.rb | 132 | ||||
-rw-r--r-- | spec/helpers/issuables_helper_spec.rb | 106 |
2 files changed, 0 insertions, 238 deletions
diff --git a/spec/features/projects/issuable_counts_caching_spec.rb b/spec/features/projects/issuable_counts_caching_spec.rb deleted file mode 100644 index 1804d9dc244..00000000000 --- a/spec/features/projects/issuable_counts_caching_spec.rb +++ /dev/null @@ -1,132 +0,0 @@ -require 'spec_helper' - -describe 'Issuable counts caching', :use_clean_rails_memory_store_caching do - let!(:member) { create(:user) } - let!(:member_2) { create(:user) } - let!(:non_member) { create(:user) } - let!(:project) { create(:project, :public) } - let!(:open_issue) { create(:issue, project: project) } - let!(:confidential_issue) { create(:issue, :confidential, project: project, author: non_member) } - let!(:closed_issue) { create(:issue, :closed, project: project) } - - before do - project.add_developer(member) - project.add_developer(member_2) - end - - it 'caches issuable counts correctly for non-members' do - # We can't use expect_any_instance_of because that uses a single instance. - counts = 0 - - allow_any_instance_of(IssuesFinder).to receive(:count_by_state).and_wrap_original do |m, *args| - counts += 1 - - m.call(*args) - end - - aggregate_failures 'only counts once on first load with no params, and caches for later loads' do - expect { visit project_issues_path(project) } - .to change { counts }.by(1) - - expect { visit project_issues_path(project) } - .not_to change { counts } - end - - aggregate_failures 'uses counts from cache on load from non-member' do - sign_in(non_member) - - expect { visit project_issues_path(project) } - .not_to change { counts } - - sign_out(non_member) - end - - aggregate_failures 'does not use the same cache for a member' do - sign_in(member) - - expect { visit project_issues_path(project) } - .to change { counts }.by(1) - - sign_out(member) - end - - aggregate_failures 'uses the same cache for all members' do - sign_in(member_2) - - expect { visit project_issues_path(project) } - .not_to change { counts } - - sign_out(member_2) - end - - aggregate_failures 'shares caches when params are passed' do - expect { visit project_issues_path(project, author_username: non_member.username) } - .to change { counts }.by(1) - - sign_in(member) - - expect { visit project_issues_path(project, author_username: non_member.username) } - .to change { counts }.by(1) - - sign_in(non_member) - - expect { visit project_issues_path(project, author_username: non_member.username) } - .not_to change { counts } - - sign_in(member_2) - - expect { visit project_issues_path(project, author_username: non_member.username) } - .not_to change { counts } - - sign_out(member_2) - end - - aggregate_failures 'resets caches on issue close' do - Issues::CloseService.new(project, member).execute(open_issue) - - expect { visit project_issues_path(project) } - .to change { counts }.by(1) - - sign_in(member) - - expect { visit project_issues_path(project) } - .to change { counts }.by(1) - - sign_in(non_member) - - expect { visit project_issues_path(project) } - .not_to change { counts } - - sign_in(member_2) - - expect { visit project_issues_path(project) } - .not_to change { counts } - - sign_out(member_2) - end - - aggregate_failures 'does not reset caches on issue update' do - Issues::UpdateService.new(project, member, title: 'new title').execute(open_issue) - - expect { visit project_issues_path(project) } - .not_to change { counts } - - sign_in(member) - - expect { visit project_issues_path(project) } - .not_to change { counts } - - sign_in(non_member) - - expect { visit project_issues_path(project) } - .not_to change { counts } - - sign_in(member_2) - - expect { visit project_issues_path(project) } - .not_to change { counts } - - sign_out(member_2) - end - end -end diff --git a/spec/helpers/issuables_helper_spec.rb b/spec/helpers/issuables_helper_spec.rb index 7789cfa3554..ead3e28438e 100644 --- a/spec/helpers/issuables_helper_spec.rb +++ b/spec/helpers/issuables_helper_spec.rb @@ -59,112 +59,6 @@ describe IssuablesHelper do .to eq('<span>All</span> <span class="badge">42</span>') end end - - describe 'counter caching based on issuable type and params', :use_clean_rails_memory_store_caching do - let(:params) do - { - scope: 'created-by-me', - state: 'opened', - utf8: '✓', - author_id: '11', - assignee_id: '18', - label_name: %w(bug discussion documentation), - milestone_title: 'v4.0', - sort: 'due_date_asc', - namespace_id: 'gitlab-org', - project_id: 'gitlab-ce', - page: 2 - }.with_indifferent_access - end - - let(:issues_finder) { IssuesFinder.new(nil, params) } - let(:merge_requests_finder) { MergeRequestsFinder.new(nil, params) } - - before do - allow(helper).to receive(:issues_finder).and_return(issues_finder) - allow(helper).to receive(:merge_requests_finder).and_return(merge_requests_finder) - end - - it 'returns the cached value when called for the same issuable type & with the same params' do - expect(issues_finder).to receive(:count_by_state).and_return(opened: 42) - - expect(helper.issuables_state_counter_text(:issues, :opened)) - .to eq('<span>Open</span> <span class="badge">42</span>') - - expect(issues_finder).not_to receive(:count_by_state) - - expect(helper.issuables_state_counter_text(:issues, :opened)) - .to eq('<span>Open</span> <span class="badge">42</span>') - end - - it 'takes confidential status into account when searching for issues' do - expect(issues_finder).to receive(:count_by_state).and_return(opened: 42) - - expect(helper.issuables_state_counter_text(:issues, :opened)) - .to include('42') - - expect(issues_finder).to receive(:user_cannot_see_confidential_issues?).twice.and_return(false) - expect(issues_finder).to receive(:count_by_state).and_return(opened: 40) - - expect(helper.issuables_state_counter_text(:issues, :opened)) - .to include('40') - - expect(issues_finder).to receive(:user_can_see_all_confidential_issues?).and_return(true) - expect(issues_finder).to receive(:count_by_state).and_return(opened: 45) - - expect(helper.issuables_state_counter_text(:issues, :opened)) - .to include('45') - end - - it 'does not take confidential status into account when searching for merge requests' do - expect(merge_requests_finder).to receive(:count_by_state).and_return(opened: 42) - expect(merge_requests_finder).not_to receive(:user_cannot_see_confidential_issues?) - expect(merge_requests_finder).not_to receive(:user_can_see_all_confidential_issues?) - - expect(helper.issuables_state_counter_text(:merge_requests, :opened)) - .to include('42') - end - - it 'does not take some keys into account in the cache key' do - expect(issues_finder).to receive(:count_by_state).and_return(opened: 42) - expect(issues_finder).to receive(:params).and_return({ - author_id: '11', - state: 'foo', - sort: 'foo', - utf8: 'foo', - page: 'foo' - }.with_indifferent_access) - - expect(helper.issuables_state_counter_text(:issues, :opened)) - .to eq('<span>Open</span> <span class="badge">42</span>') - - expect(issues_finder).not_to receive(:count_by_state) - expect(issues_finder).to receive(:params).and_return({ - author_id: '11', - state: 'bar', - sort: 'bar', - utf8: 'bar', - page: 'bar' - }.with_indifferent_access) - - expect(helper.issuables_state_counter_text(:issues, :opened)) - .to eq('<span>Open</span> <span class="badge">42</span>') - end - - it 'does not take params order into account in the cache key' do - expect(issues_finder).to receive(:params).and_return('author_id' => '11', 'state' => 'opened') - expect(issues_finder).to receive(:count_by_state).and_return(opened: 42) - - expect(helper.issuables_state_counter_text(:issues, :opened)) - .to eq('<span>Open</span> <span class="badge">42</span>') - - expect(issues_finder).to receive(:params).and_return('state' => 'opened', 'author_id' => '11') - expect(issues_finder).not_to receive(:count_by_state) - - expect(helper.issuables_state_counter_text(:issues, :opened)) - .to eq('<span>Open</span> <span class="badge">42</span>') - end - end end describe '#issuable_reference' do |