Fix snippets pagination
Signed-off-by: Rémy Coutable <remy@rymai.me>
This commit is contained in:
parent
fca610e5cb
commit
f99d8786b7
8 changed files with 70 additions and 20 deletions
|
@ -5,6 +5,7 @@ v 8.13.0 (unreleased)
|
|||
|
||||
v 8.12.2 (unreleased)
|
||||
- Fix Import/Export not recognising correctly the imported services.
|
||||
- Fix snippets pagination
|
||||
|
||||
v 8.12.1
|
||||
- Fix a memory leak in HTML::Pipeline::SanitizationFilter::WHITELIST
|
||||
|
|
|
@ -65,7 +65,7 @@ class UsersController < ApplicationController
|
|||
format.html { render 'show' }
|
||||
format.json do
|
||||
render json: {
|
||||
html: view_to_html_string("snippets/_snippets", collection: @snippets)
|
||||
html: view_to_html_string("snippets/_snippets", collection: @snippets, remote: true)
|
||||
}
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
- remote = local_assigns.fetch(:remote, false)
|
||||
|
||||
.snippets-list-holder
|
||||
%ul.content-list
|
||||
= render partial: 'shared/snippets/snippet', collection: @snippets
|
||||
|
@ -5,7 +7,7 @@
|
|||
%li
|
||||
.nothing-here-block Nothing here.
|
||||
|
||||
= paginate @snippets, theme: 'gitlab', remote: true
|
||||
= paginate @snippets, theme: 'gitlab', remote: remote
|
||||
|
||||
:javascript
|
||||
gl.SnippetsList();
|
||||
|
|
15
spec/features/dashboard/snippets_spec.rb
Normal file
15
spec/features/dashboard/snippets_spec.rb
Normal file
|
@ -0,0 +1,15 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe 'Dashboard snippets', feature: true do
|
||||
context 'when the project has snippets' do
|
||||
let(:project) { create(:empty_project, :public) }
|
||||
let!(:snippets) { create_list(:project_snippet, 2, :public, author: project.owner, project: project) }
|
||||
before do
|
||||
allow(Snippet).to receive(:default_per_page).and_return(1)
|
||||
login_as(project.owner)
|
||||
visit dashboard_snippets_path
|
||||
end
|
||||
|
||||
it_behaves_like 'paginated snippets'
|
||||
end
|
||||
end
|
14
spec/features/projects/snippets_spec.rb
Normal file
14
spec/features/projects/snippets_spec.rb
Normal file
|
@ -0,0 +1,14 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe 'Project snippets', feature: true do
|
||||
context 'when the project has snippets' do
|
||||
let(:project) { create(:empty_project, :public) }
|
||||
let!(:snippets) { create_list(:project_snippet, 2, :public, author: project.owner, project: project) }
|
||||
before do
|
||||
allow(Snippet).to receive(:default_per_page).and_return(1)
|
||||
visit namespace_project_snippets_path(project.namespace, project)
|
||||
end
|
||||
|
||||
it_behaves_like 'paginated snippets'
|
||||
end
|
||||
end
|
14
spec/features/snippets_spec.rb
Normal file
14
spec/features/snippets_spec.rb
Normal file
|
@ -0,0 +1,14 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe 'Snippets', feature: true do
|
||||
context 'when the project has snippets' do
|
||||
let(:project) { create(:empty_project, :public) }
|
||||
let!(:snippets) { create_list(:project_snippet, 2, :public, author: project.owner, project: project) }
|
||||
before do
|
||||
allow(Snippet).to receive(:default_per_page).and_return(1)
|
||||
visit snippets_path(username: project.owner.username)
|
||||
end
|
||||
|
||||
it_behaves_like 'paginated snippets'
|
||||
end
|
||||
end
|
|
@ -3,30 +3,16 @@ require 'spec_helper'
|
|||
describe 'Snippets tab on a user profile', feature: true, js: true do
|
||||
include WaitForAjax
|
||||
|
||||
let(:user) { create(:user) }
|
||||
|
||||
context 'when the user has snippets' do
|
||||
let(:user) { create(:user) }
|
||||
let!(:snippets) { create_list(:snippet, 2, :public, author: user) }
|
||||
before do
|
||||
create_list(:snippet, 25, :public, author: user)
|
||||
|
||||
allow(Snippet).to receive(:default_per_page).and_return(1)
|
||||
visit user_path(user)
|
||||
page.within('.user-profile-nav') { click_link 'Snippets' }
|
||||
wait_for_ajax
|
||||
end
|
||||
|
||||
it 'is limited to 20 items per page' do
|
||||
expect(page.all('.snippets-list-holder .snippet-row').count).to eq(20)
|
||||
end
|
||||
|
||||
context 'clicking on the link to the second page' do
|
||||
before do
|
||||
click_link('2')
|
||||
wait_for_ajax
|
||||
end
|
||||
|
||||
it 'shows the remaining snippets' do
|
||||
expect(page.all('.snippets-list-holder .snippet-row').count).to eq(5)
|
||||
end
|
||||
end
|
||||
it_behaves_like 'paginated snippets', remote: true
|
||||
end
|
||||
end
|
||||
|
|
18
spec/support/snippets_shared_examples.rb
Normal file
18
spec/support/snippets_shared_examples.rb
Normal file
|
@ -0,0 +1,18 @@
|
|||
# These shared examples expect a `snippets` array of snippets
|
||||
RSpec.shared_examples 'paginated snippets' do |remote: false|
|
||||
it "is limited to #{Snippet.default_per_page} items per page" do
|
||||
expect(page.all('.snippets-list-holder .snippet-row').count).to eq(Snippet.default_per_page)
|
||||
end
|
||||
|
||||
context 'clicking on the link to the second page' do
|
||||
before do
|
||||
click_link('2')
|
||||
wait_for_ajax if remote
|
||||
end
|
||||
|
||||
it 'shows the remaining snippets' do
|
||||
remaining_snippets_count = [snippets.size - Snippet.default_per_page, Snippet.default_per_page].min
|
||||
expect(page).to have_selector('.snippets-list-holder .snippet-row', count: remaining_snippets_count)
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue