Files
grecia/spec/features/legislation/proposals_spec.rb
Javi Martín 09add3554f Create less records in random pagination tests
We make the tests considerably faster, we make them more robust against
changes in the number of records shown per page, and we generate enough
records so the chance of randomly getting the same results twice in a
row is extremely low.
2018-12-05 13:11:23 +01:00

149 lines
4.9 KiB
Ruby

require 'rails_helper'
require 'sessions_helper'
feature 'Legislation Proposals' do
let(:user) { create(:user) }
let(:user2) { create(:user) }
let(:process) { create(:legislation_process) }
let(:proposal) { create(:legislation_proposal) }
context "Concerns" do
it_behaves_like 'notifiable in-app', Legislation::Proposal
end
scenario "Only one menu element has 'active' CSS selector" do
visit legislation_process_proposal_path(proposal.process, proposal)
within('#navigation_bar') do
expect(page).to have_css('.is-active', count: 1)
end
end
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)
@first_user_proposals_order = legislation_proposals_order
end
in_browser(:two) do
login_as user2
visit legislation_process_proposals_path(process)
@second_user_proposals_order = legislation_proposals_order
end
expect(@first_user_proposals_order).not_to eq(@second_user_proposals_order)
in_browser(:one) do
visit legislation_process_proposals_path(process)
expect(legislation_proposals_order).to eq(@first_user_proposals_order)
end
in_browser(:two) do
visit legislation_process_proposals_path(process)
expect(legislation_proposals_order).to eq(@second_user_proposals_order)
end
end
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"
expect(page).to have_content "You're on page 2"
expect(first_page_proposals_order & legislation_proposals_order).to eq([])
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)
visit legislation_process_proposals_path(process)
expect(page).to have_content('Selected')
end
scenario 'defaults to winners if there are selected proposals' do
create(:legislation_proposal, legislation_process_id: process.id)
create(:legislation_proposal, legislation_process_id: process.id, selected: true)
visit legislation_process_proposals_path(process)
expect(page).to have_link('Random')
expect(page).not_to have_link('Selected')
expect(page).to have_content('Selected')
end
scenario 'defaults to random if the current process does not have selected proposals' do
create(:legislation_proposal, legislation_process_id: process.id)
create(:legislation_proposal, selected: true)
visit legislation_process_proposals_path(process)
expect(page).to have_link('Selected')
expect(page).not_to have_link('Random')
expect(page).to have_content('Random')
end
scenario 'filters correctly' do
proposal1 = create(:legislation_proposal, legislation_process_id: process.id)
proposal2 = create(:legislation_proposal, legislation_process_id: process.id, selected: true)
visit legislation_process_proposals_path(process, filter: "random")
click_link 'Selected'
expect(page).to have_css("div#legislation_proposal_#{proposal2.id}")
expect(page).not_to have_css("div#legislation_proposal_#{proposal1.id}")
end
end
def legislation_proposals_order
all("[id^='legislation_proposal_']").collect { |e| e[:id] }
end
scenario "Create a legislation proposal with an image", :js do
create(:legislation_proposal, process: process)
login_as user
visit new_legislation_process_proposal_path(process)
fill_in 'Proposal title', with: 'Legislation proposal with image'
fill_in 'Proposal summary', with: 'Including an image on a legislation proposal'
imageable_attach_new_file(create(:image), Rails.root.join('spec/fixtures/files/clippy.jpg'))
check 'legislation_proposal_terms_of_service'
click_button 'Create proposal'
expect(page).to have_content 'Legislation proposal with image'
expect(page).to have_content 'Including an image on a legislation proposal'
expect(page).to have_css("img[alt='#{Legislation::Proposal.last.image.title}']")
end
end