Files
grecia/spec/support/common_actions.rb
iagirre d84895b800 Add test suite for the feature
The tests that will check the featute
is working well added. There are four test:

1. Checks that the emails are been send to
the user. The test looks for the link in there
and takes the token. Visits the page and
changes the password.

2 and 3. Both change the password by hand. One
uses a password written by the manager, whilst
the other uses the 'Generate random password'
option. Both tests check that the user can
sign in with the new passwords.

4. Checks that the password can be printed
when it is saved.
2018-04-02 09:43:17 +02:00

370 lines
11 KiB
Ruby

module CommonActions
def sign_up(email = 'manuela@consul.dev', password = 'judgementday')
visit '/'
click_link 'Register'
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'
click_button 'Register'
end
def login_through_form_with_email_and_password(email='manuela@consul.dev', password='judgementday')
visit root_path
click_link 'Sign in'
fill_in 'user_login', with: email
fill_in 'user_password', with: password
click_button 'Enter'
end
def login_through_form_as(user)
visit root_path
click_link 'Sign in'
fill_in 'user_login', with: user.email
fill_in 'user_password', with: user.password
click_button 'Enter'
end
def login_through_form_as_officer(user)
visit root_path
click_link 'Sign in'
fill_in 'user_login', with: user.email
fill_in 'user_password', with: user.password
click_button 'Enter'
visit new_officing_residence_path
end
def login_as_authenticated_manager
expected_response = {login: login, user_key: user_key, date: date}.with_indifferent_access
login, user_key, date = "JJB042", "31415926", Time.current.strftime("%Y%m%d%H%M%S")
allow_any_instance_of(ManagerAuthenticator).to receive(:auth).and_return(expected_response)
visit management_sign_in_path(login: login, clave_usuario: user_key, fecha_conexion: date)
end
def login_as_manager
manager = create(:manager)
login_as(manager.user)
visit management_sign_in_path
end
def login_managed_user(user)
allow_any_instance_of(Management::BaseController).to receive(:managed_user).and_return(user)
end
def confirm_email
body = ActionMailer::Base.deliveries.last.try(:body)
expect(body).to be_present
sent_token = /.*confirmation_token=(.*)".*/.match(body.to_s)[1]
visit user_confirmation_path(confirmation_token: sent_token)
expect(page).to have_content "Your account has been confirmed"
end
def reset_password
create(:user, email: 'manuela@consul.dev')
visit '/'
click_link 'Sign in'
click_link 'Forgotten your password?'
fill_in 'user_email', with: 'manuela@consul.dev'
click_button 'Send instructions'
end
def comment_on(commentable, user = nil)
user ||= create(:user)
comment = create(:comment, commentable: commentable, user: user)
CommentNotifier.new(comment: comment).process
end
def reply_to(original_user, manuela = nil)
manuela ||= create(:user)
debate = create(:debate)
comment = create(:comment, commentable: debate, user: original_user)
login_as(manuela)
visit debate_path(debate)
click_link "Reply"
within "#js-comment-form-comment_#{comment.id}" do
fill_in "comment-body-comment_#{comment.id}", with: 'It will be done next week.'
click_button 'Publish reply'
end
expect(page).to have_content 'It will be done next week.'
end
def avatar(name)
"img.initialjs-avatar[data-name='#{name}']"
end
# Used to fill ckeditor fields
# @param [String] locator label text for the textarea or textarea id
def fill_in_ckeditor(locator, params = {})
# Find out ckeditor id at runtime using its label
locator = find('label', text: locator)[:for] if page.has_css?('label', text: locator)
# Fill the editor content
page.execute_script <<-SCRIPT
var ckeditor = CKEDITOR.instances.#{locator}
ckeditor.setData('#{params[:with]}')
ckeditor.focus()
ckeditor.updateElement()
SCRIPT
end
def error_message(resource_model = nil)
resource_model ||= "(.*)"
field_check_message = 'Please check the marked fields to know how to correct them:'
/\d errors? prevented this #{resource_model} from being saved. #{field_check_message}/
end
def expect_to_be_signed_in
expect(find('.top-bar')).to have_content 'My account'
end
def expect_to_not_be_signed_in
expect(find('.top-bar')).not_to have_content 'My account'
end
def select_date(values, selector)
selector = selector[:from]
day, month, year = values.split("-")
select day, from: "#{selector}_3i"
select month, from: "#{selector}_2i"
select year, from: "#{selector}_1i"
end
def verify_residence
select 'DNI', from: 'residence_document_type'
fill_in 'residence_document_number', with: "12345678Z"
select_date '31-December-1980', from: 'residence_date_of_birth'
fill_in 'residence_postal_code', with: '28013'
check 'residence_terms_of_service'
click_button 'Verify residence'
expect(page).to have_content 'Residence verified'
end
def officing_verify_residence
select 'DNI', from: 'residence_document_type'
fill_in 'residence_document_number', with: "12345678Z"
fill_in 'residence_year_of_birth', with: "1980"
click_button 'Validate document'
expect(page).to have_content 'Document verified with Census'
end
def confirm_phone(user = nil)
user ||= User.last
fill_in 'sms_phone', with: "611111111"
click_button 'Send'
expect(page).to have_content 'Enter the confirmation code sent to you by text message'
fill_in 'sms_confirmation_code', with: user.reload.sms_confirmation_code
click_button 'Send'
expect(page).to have_content 'Code correct'
end
def expect_message_you_need_to_sign_in
expect(page).to have_content 'You must Sign in or Sign up to continue'
expect(page).to have_selector('.in-favor', visible: false)
end
def expect_message_you_need_to_sign_in_to_vote_comments
expect(page).to have_content 'You must Sign in or Sign up to vote'
expect(page).to have_selector('.participation-allowed', visible: false)
expect(page).to have_selector('.participation-not-allowed', visible: true)
end
def expect_message_to_many_anonymous_votes
expect(page).to have_content 'Too many anonymous votes to admit vote'
expect(page).to have_selector('.in-favor a', visible: false)
end
def expect_message_only_verified_can_vote_proposals
expect(page).to have_content 'Only verified users can vote on proposals'
expect(page).to have_selector('.in-favor', visible: false)
end
def expect_message_voting_not_allowed
expect(page).to have_content 'Voting phase is closed'
expect(page).not_to have_selector('.in-favor a')
end
def expect_message_selecting_not_allowed
expect(page).to have_content 'No Selecting Allowed'
expect(page).not_to have_selector('.in-favor a')
end
def expect_message_organizations_cannot_vote
#expect(page).to have_content 'Organisations are not permitted to vote.'
expect(page).to have_content 'Organization'
expect(page).to have_selector('.in-favor a', visible: false)
end
def create_featured_proposals
[create(:proposal, :with_confidence_score, cached_votes_up: 100),
create(:proposal, :with_confidence_score, cached_votes_up: 90),
create(:proposal, :with_confidence_score, cached_votes_up: 80)]
end
def create_featured_debates
[create(:debate, :with_confidence_score, cached_votes_up: 100),
create(:debate, :with_confidence_score, cached_votes_up: 90),
create(:debate, :with_confidence_score, cached_votes_up: 80)]
end
def create_successful_proposals
[create(:proposal, title: "Winter is coming", question: "Do you speak it?",
cached_votes_up: Proposal.votes_needed_for_success + 100),
create(:proposal, title: "Fire and blood", question: "You talking to me?",
cached_votes_up: Proposal.votes_needed_for_success + 1)]
end
def create_archived_proposals
months_to_archive_proposals = Setting["months_to_archive_proposals"].to_i
[
create(:proposal, title: "This is an expired proposal",
created_at: months_to_archive_proposals.months.ago),
create(:proposal, title: "This is an oldest expired proposal",
created_at: (months_to_archive_proposals + 2).months.ago)
]
end
def tag_names(tag_cloud)
tag_cloud.tags.map(&:name)
end
def create_proposal_notification(proposal)
login_as(proposal.author)
visit root_path
click_link "My activity"
within("#proposal_#{proposal.id}") do
click_link "Send notification"
end
fill_in 'proposal_notification_title', with: "Thanks for supporting proposal: #{proposal.title}"
fill_in 'proposal_notification_body', with: "Please share it with others! #{proposal.summary}"
click_button "Send message"
expect(page).to have_content "Your message has been sent correctly."
Notification.last
end
def create_direct_message(sender, receiver)
login_as(sender)
visit user_path(receiver)
click_link "Send private message"
expect(page).to have_content "Send private message to #{receiver.name}"
fill_in 'direct_message_title', with: "Hey #{receiver.name}!"
fill_in 'direct_message_body', with: "How are you doing? This is #{sender.name}"
click_button "Send message"
expect(page).to have_content "You message has been sent successfully."
DirectMessage.last
end
def expect_badge_for(resource_name, resource)
within("##{resource_name}_#{resource.id}") do
expect(page).to have_css ".label.round"
expect(page).to have_content "Employee"
end
end
def expect_no_badge_for(resource_name, resource)
within("##{resource_name}_#{resource.id}") do
expect(page).not_to have_css ".label.round"
expect(page).not_to have_content "Employee"
end
end
def add_to_ballot(budget_investment)
within("#budget_investment_#{budget_investment.id}") do
find('.add a').click
expect(page).to have_content "Remove"
end
end
def vote_for_poll_via_web(poll, question, answer)
visit poll_path(poll)
within("#poll_question_#{question.id}_answers") do
click_link answer.to_s
expect(page).not_to have_link(answer.to_s)
end
end
def vote_for_poll_via_booth
visit new_officing_residence_path
officing_verify_residence
expect(page).to have_content poll.name
first(:button, "Confirm vote").click
expect(page).to have_content "Vote introduced!"
expect(Poll::Voter.count).to eq(1)
end
def model_name(described_class)
return :proposal_notification if described_class == ProposalNotification
described_class.name.gsub("::", "_").downcase.to_sym
end
def comment_body(resource)
"comment-body-#{resource.class.name.parameterize('_').to_sym}_#{resource.id}"
end
def path_for(resource)
nested_path_for(resource) || url_for([resource, only_path: true])
end
def nested_path_for(resource)
case resource.class.name
when "Legislation::Question"
legislation_process_question_path(resource.process, resource)
when "Legislation::Proposal"
legislation_process_proposal_path(resource.process, resource)
when "Budget::Investment"
budget_investment_path(resource.budget, resource)
else
false
end
end
def fill_in_newsletter_form(options = {})
fill_in "newsletter_subject", with: (options[:subject] || "This is a different subject")
select (options[:segment_recipient] || 'All users'), from: 'newsletter_segment_recipient'
fill_in "newsletter_from", with: (options[:from] || "no-reply@consul.dev")
fill_in "newsletter_body", with: (options[:body] || "This is a different body")
end
def click_notifications_icon
find("#notifications a").click
end
end