otwarchive-symphonyarchive/features/step_definitions/invite_steps.rb

193 lines
5.4 KiB
Ruby
Raw Permalink Normal View History

2026-03-11 22:22:11 +00:00
### GIVEN
Given /^an invitation(?: for "([^\"]+)") exists$/ do |invitee_email|
invite = Invitation.new
invite.invitee_email = (invitee_email ? invitee_email : "default@example.org")
invite.save
end
def invite(attributes = {})
@invite ||= Invitation.new
@invite.invitee_email = "default@example.org"
@invite.save
@invite
end
Given /^account creation is disabled$/ do
steps %Q{
Given the following admin settings are configured:
| account_creation_enabled | 0 |
| creation_requires_invite | 0 |
| invite_from_queue_enabled | 0 |
| request_invite_enabled | 0 |
}
end
Given /^account creation is enabled$/ do
steps %Q{
Given the following admin settings are configured:
| account_creation_enabled | 1 |
}
end
Given /^invitations are required$/ do
steps %{
Given I have no users
And account creation requires an invitation
And users can request invitations
}
end
Given /^account creation requires an invitation$/ do
steps %Q{
Given the following admin settings are configured:
| account_creation_enabled | 1 |
| creation_requires_invite | 1 |
}
end
Given /^account creation does not require an invitation$/ do
steps %Q{
Given the following admin settings are configured:
| account_creation_enabled | 1 |
| creation_requires_invite | 0 |
}
end
Given /^users can request invitations$/ do
steps %Q{
Given the following admin settings are configured:
| request_invite_enabled | 1 |
}
end
Given /^the invitation queue is enabled$/ do
steps %Q{
Given the following admin settings are configured:
| invite_from_queue_enabled | 1 |
}
end
Given /^the invitation queue is disabled$/ do
steps %Q{
Given the following admin settings are configured:
| invite_from_queue_enabled | 0 |
}
end
Given /^"([^\"]*)" has "([^"]*)" invitations?$/ do |login, invitation_count|
user = User.find_by(login: login)
# If there are more invitations than we want, first destroy them
if invitation_count.to_i < user.invitations.count
user.invitations.destroy_all
end
# Now create the number of invitations we want
(invitation_count.to_i - user.invitations.count).times { user.invitations.create }
end
Given /^an invitation request for "([^"]*)"$/ do |email|
visit invite_requests_path
fill_in("invite_request[email]", with: email)
click_button("Add me to the list")
end
Given "there are {int} invite request(s) per page" do |amount|
allow(InviteRequest).to receive(:per_page).and_return(amount)
end
Given "an invitation created by {string} and used by {string}" do |creator, invitee|
creator = User.find_by(login: creator)
invitee = User.find_by(login: invitee)
FactoryBot.create(:invitation, creator: creator, invitee: invitee)
end
### WHEN
When /^I use an invitation to sign up$/ do
visit signup_path(invite.token)
end
When /^I use an already used invitation to sign up$/ do
steps %Q{
Given the following activated user exists
| login | password |
| invited | password |
}
user = User.find_by(login: "invited")
invite.redeemed_at = Time.now
invite.mark_as_redeemed(user)
invite.save
visit signup_path(invite.token)
end
When /^I try to invite a friend from my user page$/ do
step %{I am logged in as "user1"}
step %{I go to user1's user page}
step %{I follow "Invitations"}
end
When /^I request some invites$/ do
step %{I try to invite a friend from my user page}
step %{I follow "Request invitations"}
step %{I fill in "How many invitations would you like? (max 10)" with "3"}
step %{I fill in "Please specify why you'd like them:" with "I want them for a friend"}
step %{I press "Send Request"}
end
When "as {string} I request some invites" do |user|
step %{I am logged in as "#{user}"}
step %{I go to #{user}'s user page}
step %{I follow "Invitations"}
step %{I follow "Request invitations"}
step %{I fill in "How many invitations would you like? (max 10)" with "3"}
step %{I fill in "Please specify why you'd like them:" with "I want them for a friend"}
step %{I press "Send Request"}
end
When /^I view requests as an admin$/ do
step %{I am logged in as an admin}
step %{I follow "Invitations"}
step %{I follow "Manage Requests"}
end
When /^an admin grants the request$/ do
step %{I view requests as an admin}
step %{I fill in "requests[user1]" with "2"}
step %{I press "Update"}
end
When /^I check how long "(.*?)" will have to wait in the invite request queue$/ do |email|
visit(status_invite_requests_path)
fill_in("email", with: "#{email}")
click_button("Look me up")
end
When "I view the most recent invitation for {string}" do |creator|
user = User.find_by(login: creator)
invitation = user.invitations.last
visit user_invitation_path(creator, invitation)
end
### Then
Then /^I should see how long I have to activate my account$/ do
days_to_activate = AdminSetting.first.days_to_purge_unactivated * 7
step %{I should see "You must activate your account within #{days_to_activate} days"}
end
Then /^"([^"]*)" should have "([^"]*)" invitations$/ do |login, invitation_count|
user = User.find_by(login: login)
assert user.invitations.count == invitation_count.to_i
end
Then "the invite queue should list the following:" do |desired|
actual = all("table tbody tr").map do |row|
{
"position" => row.find("td:nth-child(1)").text,
"email" => row.find("td:nth-child(2)").text
}
end
expect(actual).to eq(desired.hashes)
end