Sometimes tests were hanging indefinitely. Debugging shows that in some
cases it's due to submitting a form before the AJAX request to get
proposals, debates or investments suggestions is finished, since having
an AJAX and a non-AJAX request at the same time when running the test
sometimes leads to unexpected results.
In our case, we were having many timeouts in Github Actions in the
branches where we use both ActiveStorage and Paperclip to store files
(based on pull request 4598). I can reproduce it in those branches
running the following test ("Should show new image after successful
creation with one uploaded file"), although only when my laptop isn't
plugged (!!):
```
rspec './spec/system/proposals_spec.rb[1:33:1:14]'
```
Since we didn't have a proper way to know the AJAX request had finished,
we're adding a `suggest-success` class to the element showing the
suggestions when that happens. Then in the tests we can look for that
class after filling in the title of a proposal, debate or investments.
Just for clarity's sake, we're also adding the `suggest-loading` class
when the suggestions are loading.
In order not to have expectations everywhere about the suggestions,
we're extracting methods to fill in those titles in the tests. Note we
aren't using these methods in the "edit" actions (suggestions are not
showing when editing) or in tests with the `no_js` tag (since
suggestions only work with JavaScript).
81 lines
2.2 KiB
Ruby
81 lines
2.2 KiB
Ruby
Dir["./spec/support/common_actions/*.rb"].each { |f| require f }
|
|
|
|
module CommonActions
|
|
include Budgets
|
|
include Comments
|
|
include Debates
|
|
include Emails
|
|
include Notifications
|
|
include Polls
|
|
include Proposals
|
|
include RemoteCensusMock
|
|
include Tags
|
|
include Translations
|
|
include Users
|
|
include Verifications
|
|
include Votes
|
|
|
|
def app_host
|
|
"#{Capybara.app_host}:#{Capybara::Server.ports.values.last}"
|
|
end
|
|
|
|
def fill_in_signup_form(email = "manuela@consul.dev", password = "judgementday")
|
|
fill_in "user_username", with: "Manuela Carmena #{rand(99999)}"
|
|
fill_in "user_email", with: email
|
|
fill_in "user_password", with: password
|
|
fill_in "user_password_confirmation", with: password
|
|
check "user_terms_of_service"
|
|
end
|
|
|
|
def validate_officer
|
|
allow_any_instance_of(Officing::BaseController).
|
|
to receive(:verify_officer_assignment).and_return(true)
|
|
end
|
|
|
|
def fill_in_proposal
|
|
fill_in_new_proposal_title with: "Help refugees"
|
|
fill_in "Proposal summary", with: "In summary, what we want is..."
|
|
fill_in_ckeditor "Proposal text", with: "This is very important because..."
|
|
fill_in "External video URL", with: "https://www.youtube.com/watch?v=yPQfcG-eimk"
|
|
fill_in "Full name of the person submitting the proposal", with: "Isabel Garcia"
|
|
check "I agree to the Privacy Policy and the Terms and conditions of use"
|
|
end
|
|
|
|
def fill_in_new_proposal_title(with:)
|
|
fill_in "Proposal title", with: with
|
|
|
|
expect(page).to have_css ".suggest-success"
|
|
end
|
|
|
|
def fill_in_new_debate_title(with:)
|
|
fill_in "Debate title", with: with
|
|
|
|
expect(page).to have_css ".suggest-success"
|
|
end
|
|
|
|
def fill_in_new_investment_title(with:)
|
|
fill_in "Title", with: with
|
|
|
|
expect(page).to have_css ".suggest-success"
|
|
end
|
|
|
|
def set_officing_booth(booth = nil)
|
|
booth = create(:poll_booth) if booth.blank?
|
|
|
|
allow_any_instance_of(Officing::BaseController).
|
|
to receive(:current_booth).and_return(booth)
|
|
end
|
|
|
|
def click_sdg_goal(code)
|
|
within(".sdg-related-list-selector .goals") do
|
|
find("[data-code='#{code}'] + label").click
|
|
end
|
|
end
|
|
|
|
def remove_sdg_goal_or_target_tag(code)
|
|
within "span[data-val='#{code}']" do
|
|
click_button "Remove"
|
|
end
|
|
end
|
|
end
|