193 lines
5.4 KiB
Ruby
193 lines
5.4 KiB
Ruby
|
|
### 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
|