Merge pull request #3085 from consul/backport-1196-fix_flaky_legislation_random_order_spec

Fix flaky spec: Legislation Proposals Each user has a different and consistent random proposals order
This commit is contained in:
Javier Martín
2018-12-05 19:16:43 +01:00
committed by GitHub
2 changed files with 58 additions and 42 deletions

View File

@@ -117,13 +117,12 @@ class Legislation::ProcessesController < Legislation::BaseController
end end
def set_random_seed def set_random_seed
seed = begin seed = (params[:random_seed] || session[:random_seed] || rand).to_f
Float(params[:random_seed] || session[:random_seed] || (rand(99) / 100.0))
rescue
0
end
session[:random_seed], params[:random_seed] = seed
seed = (-1..1).cover?(seed) ? seed : 1 seed = (-1..1).cover?(seed) ? seed : 1
session[:random_seed] = seed
params[:random_seed] = seed
::Legislation::Proposal.connection.execute "select setseed(#{seed})" ::Legislation::Proposal.connection.execute "select setseed(#{seed})"
end end
end end

View File

@@ -20,9 +20,18 @@ feature 'Legislation Proposals' do
end end
end end
scenario 'Each user has a different and consistent random proposals order', :js do feature "Random pagination" do
create_list(:legislation_proposal, 10, process: process) before do
allow(Legislation::Proposal).to receive(:default_per_page).and_return(12)
create_list(
:legislation_proposal,
(Legislation::Proposal.default_per_page + 2),
process: process
)
end
scenario "Each user has a different and consistent random proposals order", :js do
in_browser(:one) do in_browser(:one) do
login_as user login_as user
visit legislation_process_proposals_path(process) visit legislation_process_proposals_path(process)
@@ -48,22 +57,30 @@ feature 'Legislation Proposals' do
end end
end end
scenario 'Random order maintained with pagination', :js do scenario "Random order maintained with pagination", :js do
create_list(:legislation_proposal, (Kaminari.config.default_per_page + 2), process: process)
login_as user login_as user
visit legislation_process_proposals_path(process) visit legislation_process_proposals_path(process)
first_page_proposals_order = legislation_proposals_order first_page_proposals_order = legislation_proposals_order
click_link 'Next' click_link "Next"
expect(page).to have_content "You're on page 2" expect(page).to have_content "You're on page 2"
expect(first_page_proposals_order & legislation_proposals_order).to eq([])
click_link "Previous"
click_link 'Previous'
expect(page).to have_content "You're on page 1" expect(page).to have_content "You're on page 1"
expect(legislation_proposals_order).to eq(first_page_proposals_order) expect(legislation_proposals_order).to eq(first_page_proposals_order)
end end
scenario "Does not crash when the seed is not a number" do
login_as user
visit legislation_process_proposals_path(process, random_seed: "Spoof")
expect(page).to have_content "You're on page 1"
end
end
context 'Selected filter' do context 'Selected filter' do
scenario 'apperars even if there are not any selected poposals' do scenario 'apperars even if there are not any selected poposals' do
create(:legislation_proposal, legislation_process_id: process.id) create(:legislation_proposal, legislation_process_id: process.id)