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
def set_random_seed
seed = begin
Float(params[:random_seed] || session[:random_seed] || (rand(99) / 100.0))
rescue
0
end
session[:random_seed], params[:random_seed] = seed
seed = (params[:random_seed] || session[:random_seed] || rand).to_f
seed = (-1..1).cover?(seed) ? seed : 1
session[:random_seed] = seed
params[:random_seed] = seed
::Legislation::Proposal.connection.execute "select setseed(#{seed})"
end
end

View File

@@ -20,9 +20,18 @@ feature 'Legislation Proposals' do
end
end
scenario 'Each user has a different and consistent random proposals order', :js do
create_list(:legislation_proposal, 10, process: process)
feature "Random pagination" do
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
login_as user
visit legislation_process_proposals_path(process)
@@ -48,22 +57,30 @@ feature 'Legislation Proposals' do
end
end
scenario 'Random order maintained with pagination', :js do
create_list(:legislation_proposal, (Kaminari.config.default_per_page + 2), process: process)
scenario "Random order maintained with pagination", :js do
login_as user
visit legislation_process_proposals_path(process)
first_page_proposals_order = legislation_proposals_order
click_link 'Next'
click_link "Next"
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(legislation_proposals_order).to eq(first_page_proposals_order)
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
scenario 'apperars even if there are not any selected poposals' do
create(:legislation_proposal, legislation_process_id: process.id)