###### 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 & 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