otwarchive-symphonyarchive/features/step_definitions/challenge_steps.rb

299 lines
9.7 KiB
Ruby
Raw Permalink Normal View History

2026-03-11 22:22:11 +00:00
###### ERROR MESSAGES
Then /^I should see a not\-in\-fandom error message for "([^"]+)" in "([^"]+)"$/ do |tag, fandom|
step %{I should see "are not in the selected fandom(s), #{fandom}: #{tag}"}
end
Then /^I should see a not\-in\-fandom error message$/ do
step %{I should see "are not in the selected fandom(s)"}
end
### Set up dates correctly ###
Then /^I set up the challenge dates$/ do
fill_in("Sign-up opens:", with: Date.yesterday)
fill_in("Sign-up closes:", with: Date.tomorrow)
end
### Clear out old data
Given /^I have no prompts$/ do
Prompt.delete_all
end
### CHALLENGE TAGS
Given /^signup summaries are always visible$/ do
stub_const("ArchiveConfig", OpenStruct.new(ArchiveConfig))
ArchiveConfig.ANONYMOUS_THRESHOLD_COUNT = 0
end
Given /^all signup summaries are delayed$/ do
stub_const("ArchiveConfig", OpenStruct.new(ArchiveConfig))
ArchiveConfig.MAX_SIGNUPS_FOR_LIVE_SUMMARY = 0
end
Given /^all signup summaries are live$/ do
stub_const("ArchiveConfig", OpenStruct.new(ArchiveConfig))
ArchiveConfig.MAX_SIGNUPS_FOR_LIVE_SUMMARY = 1_000_000
end
Given /^I have standard challenge tags set ?up$/ do
begin
unless UserSession.find
step %{I am logged in as "mod1"}
end
rescue
step %{I am logged in as "mod1"}
end
step "I have no tags"
step "basic tags"
step %{a canonical fandom "Stargate Atlantis"}
step %{a canonical fandom "Stargate SG-1"}
step %{a canonical fandom "Bad Choice"}
step %{a canonical character "John Sheppard"}
step %{a canonical freeform "Alternate Universe - Historical"}
step %{a canonical freeform "Alternate Universe - High School"}
step %{a canonical freeform "Something else weird"}
step %{a canonical freeform "My extra tag"}
step %{I set up the tag set "Standard Challenge Tags" with the fandom tags "Stargate Atlantis, Stargate SG-1, Bad Choice", the character tag "John Sheppard"}
end
Given /^I have Yuletide challenge tags set ?up$/ do
step "I have standard challenge tags setup"
step %{I add the fandom tags "Starsky & Hutch, Tiny fandom, Care Bears, Yuletide Hippos RPF, Unoffered, Unrequested" to the tag set "Standard Challenge Tags"}
step %{a canonical fandom "Starsky & Hutch"}
step %{a canonical fandom "Tiny fandom"}
step %{a canonical fandom "Care Bears"}
step %{a canonical fandom "Yuletide Hippos RPF"}
step %{a canonical fandom "Unoffered"}
step %{a canonical fandom "Unrequested"}
end
### General Challenge Settings
When /^I edit settings for "([^\"]*)" challenge$/ do |title|
visit collection_path(Collection.find_by(title: title))
step %{I follow "Challenge Settings"}
end
# Timezone
When /^I change the challenge timezone to Alaska$/ do
step %{I follow "Challenge Settings"}
step %{I select "(GMT-09:00) Alaska" from "prompt_meme_time_zone"}
step %{I submit}
step %{I should see "Challenge was successfully updated"}
end
Then /^I should see both timezones$/ do
step %{I follow "Profile"}
step %{I should see "EST ("}
step %{I should see "AKST)"}
end
Then /^I should see just one timezone$/ do
step %{I follow "Profile"}
step %{I should see "Sign-up: Open"}
step %{I should not see "EST" within "#main"}
step %{I should see "AKST" within "#main"}
end
# Open signup
When /^I open signups for "([^\"]*)"$/ do |title|
step %{I am logged in as "mod1"}
visit collection_path(Collection.find_by(title: title))
step %{I follow "Challenge Settings"}
step %{I check "Sign-up open?"}
step %{I submit}
step %{I should see "Challenge was successfully updated"}
end
Then /^signup should be open$/ do
step %{I should see "Profile" within "div#main .collection .navigation"}
step %{I should see "Sign-up: Open" within ".collection .meta"}
step %{I should see "Sign-up Closes:"}
end
When /^I view open challenges$/ do
step "I go to the collections page"
step %{I follow "Open Challenges"}
end
### Signup process
When /^I start signing up for "([^\"]*)"$/ do |title|
visit collection_path(Collection.find_by(title: title))
step %{I follow "Sign Up"}
end
When /^I view the sign-up summary for "(.*?)"$/ do |title|
visit collection_path(Collection.find_by(title: title))
step %(I follow "Sign-up Summary")
end
### Editing signups
When /^I edit my signup for "([^\"]*)"$/ do |title|
visit collection_path(Collection.find_by(title: title))
step %{I follow "Edit Sign-up"}
end
### WHEN other
When /^I close signups for "([^\"]*)"$/ do |title|
collection = Collection.find_by(title: title)
user_id = collection.all_owners.first.user_id
mod_login = User.find_by(id: user_id).login
step %{I am logged in as "#{mod_login}"}
visit collection_path(collection)
step %{I follow "Challenge Settings"}
step %{I uncheck "Sign-up open?"}
step %{I press "Update"}
step %{I should see an update confirmation message}
end
When /^I delete my signup for the prompt meme "([^\"]*)"$/ do |title|
visit collection_path(Collection.find_by(title: title))
step %{I follow "My Prompts"}
step %{I delete the signup}
end
When /^I delete my signup for the gift exchange "([^\"]*)"$/ do |title|
visit collection_path(Collection.find_by(title: title))
step %{I follow "My Sign-up"}
step %{I delete the signup}
end
When /^I delete the signup by "([^\"]*)"$/ do |participant|
click_link("#{participant}")
step %{I delete the signup}
end
When /^I delete the signup$/ do
step %{I follow "Delete Sign-up"}
step %{I press "Yes, Delete Sign-up"}
step %{I should see "Challenge sign-up was deleted."}
end
When /^I reveal the "([^\"]*)" challenge$/ do |title|
step %{I am logged in as "mod1"}
visit collection_path(Collection.find_by(title: title))
step %{I follow "Collection Settings"}
step %{I uncheck "This collection is unrevealed"}
step %{I press "Update"}
end
When /^I approve the first item in the collection "([^\"]*)"$/ do |collection|
collection = Collection.find_by(title: collection)
collection_item = collection.collection_items.first.id
visit collection_path(collection)
step %{I follow "Manage Items"}
step %{I select "Approved" from "collection_items_#{collection_item}_collection_approval_status"}
step %{I press "Submit"}
end
When /^I reveal the authors of the "([^\"]*)" challenge$/ do |title|
step %{I am logged in as "mod1"}
visit collection_path(Collection.find_by(title: title))
step %{I follow "Collection Settings"}
step %{I uncheck "This collection is anonymous"}
step %{I press "Update"}
step %{all indexing jobs have been run}
end
When /^I use tomorrow as the "Sign-up closes" date$/ do
fill_in("Sign-up closes:", with: Date.tomorrow)
end
# Notification messages
When /^I create an assignment notification message with (an ampersand|linebreaks) for "([^\"]*)"$/ do |message_content, title|
c = Collection.find_by(title: title)
field = "collection_collection_profile_attributes_assignment_notification"
message = if message_content == "an ampersand"
"The first thing & the second thing."
else
"First Line\nSecond Line"
end
step %{I am logged in as "#{c.owners.first.name}"}
visit collection_path(c)
# TODO: Once AO3-3376 is fixed, this will need to change.
step %{I follow "Collection Settings"}
fill_in(field, with: message)
step %{I press "Update"}
end
Then /^the notification message to "([^\"]*)" should contain linebreaks$/ do |user|
@user = User.find_by(login: user)
email = emails("to: \"#{email_for(@user.email)}\"").first
email.multipart?.should be == true
text_lines = email.text_part.body.to_s.split("\n")
html_lines = email.html_part.body.to_s.split(%r{<(?:\/?p|br|div)\b[^>]*>}i)
(text_lines + html_lines).each do |line|
# We shouldn't see "First Line" and "Second Line" on the same line.
line.should_not =~ /Second Line/ if line =~ /First Line/
end
email.text_part.body.should =~ /First Line/
email.text_part.body.should =~ /Second Line/
email.html_part.body.should =~ /First Line/
email.html_part.body.should =~ /Second Line/
end
Then /^the notification message to "([^\"]*)" should escape the ampersand$/ do |user|
@user = User.find_by(login: user)
email = emails("to: \"#{email_for(@user.email)}\"").first
email.multipart?.should be == true
email.html_part.body.should =~ /The first thing &amp; the second thing./
email.html_part.body.should_not =~ /The first thing & the second thing./
end
Then /^the notification message to "([^\"]*)" should contain the no archive warnings tag$/ do |user|
@user = User.find_by(login: user)
email = emails("to: \"#{email_for(@user.email)}\"").first
email.multipart?.should be == true
email.text_part.body.should =~ /Warning:/
email.text_part.body.should =~ /No Archive Warnings Apply/
email.text_part.body.should_not =~ /Name with colon/
email.html_part.body.should =~ /Warning:/
email.html_part.body.should =~ /No Archive Warnings Apply/
email.html_part.body.should_not =~ /Name with colon/
end
# Delete challenge
Given /^the challenge "([^\"]*)" is deleted$/ do |challenge_title|
collection = Collection.find_by(title: challenge_title)
collection.challenge.destroy
end
When /^I delete the challenge "([^\"]*)"$/ do |challenge_title|
step %{I edit settings for "#{challenge_title}" challenge}
step %{I follow "Delete Challenge"}
end
Then /^no one should be signed up for "([^\"]*)"$/ do |challenge_title|
collection = Collection.find_by(title: challenge_title)
if collection.present?
User.all.each do |user|
user.challenge_signups.in_collection(collection).should be_empty
end
# we don't have a collection id because the collection has been deleted
# so let's make sure any remaining sign ups are for exisiting collections
else
ChallengeSignup.all.each do |signup|
collection_id = signup.collection_id
Collection.find_by(id: collection_id).should_not be_nil
end
end
end