### GIVEN
Given /^I have no collections$/ do
Collection.delete_all
end
Given /^the collection "([^\"]*)" is deleted$/ do |collection_title|
step %{I am logged in as the owner of "#{collection_title}"}
visit edit_collection_path(Collection.find_by(title: collection_title))
click_link "Delete Collection"
click_button "Yes, Delete Collection"
page.should have_content("Collection was successfully deleted.")
end
When /^I am logged in as the owner of "([^\"]*)"$/ do |collection|
c = Collection.find_by(title: collection)
step %{I am logged in as "#{c.owners.first.user.login}"}
end
When /^I view the collection "([^\"]*)"$/ do |collection|
visit collection_path(Collection.find_by(title: collection))
end
When /^I add my work to the collection$/ do
step %{I follow "Add To Collection"}
fill_in("collection_names", with: "Various_Penguins")
click_button("Add")
end
When "I invite the work {string} to the collection {string}" do |work_title, collection_title|
work = Work.find_by(title: work_title)
collection = Collection.find_by(title: collection_title)
visit work_path(work)
click_link("Invite To Collections")
fill_in("collection_names", with: collection.name)
click_button("Invite")
end
When "I edit the work {string} to be in the collection(s) {string}" do |work, collection|
step %{I edit the work "#{work}"}
fill_in("Post to Collections / Challenges", with: collection)
step %{I post the work}
end
When /^I view the ([^"]*) collection items page for "(.*?)"$/ do |item_status, collection|
c = Collection.find_by(title: collection)
if item_status == "approved"
visit collection_items_path(c, status: "approved")
elsif item_status == "rejected by user"
visit collection_items_path(c, status: "rejected_by_user")
elsif item_status == "rejected by collection"
visit collection_items_path(c, status: "rejected_by_collection")
elsif item_status == "awaiting user approval"
visit collection_items_path(c, status: "unreviewed_by_user")
elsif item_status == "awaiting collection approval"
visit collection_items_path(c)
end
end
When "the collection counts have expired" do
step "all indexing jobs have been run"
step "it is currently #{ArchiveConfig.SECONDS_UNTIL_COLLECTION_COUNTS_EXPIRE} seconds from now"
end
When "the collection blurb cache has expired" do
step "it is currently #{ArchiveConfig.MINUTES_UNTIL_COLLECTION_BLURBS_EXPIRE} minutes from now"
end
Given /^mod1 lives in Alaska$/ do
step %{I am logged in as "mod1"}
step %{I go to mod1 preferences page}
step %{I select "(GMT-09:00) Alaska" from "preference_time_zone"}
step %{I press "Update"}
end
Given /^(?:I have )?(?:a|an|the) (hidden)?(?: )?(anonymous)?(?: )?(moderated)?(?: )?(closed)?(?: )?collection "([^\"]*)"(?: with name "([^\"]*)")?$/ do |hidden, anon, moderated, closed, title, name|
mod = ensure_user("moderator")
collection = FactoryBot.create(:collection, title: title, name: (name.presence || title.gsub(/[^\w]/, "_")), owner: mod.default_pseud)
collection.collection_preference.update_attribute(:anonymous, true) if anon.present?
collection.collection_preference.update_attribute(:unrevealed, true) if hidden.present?
collection.collection_preference.update_attribute(:moderated, true) if moderated.present?
collection.collection_preference.update_attribute(:closed, true) if closed.present?
end
Given /^I open the collection with the title "([^\"]*)"$/ do |title|
step %{I am logged in as "moderator"}
visit collection_path(Collection.find_by(title: title))
step %{I follow "Collection Settings"}
step %{I uncheck "This collection is closed"}
step %{I submit}
step %{I am logged out}
end
Given /^I close the collection with the title "([^\"]*)"$/ do |title|
step %{I am logged in as "moderator"}
visit collection_path(Collection.find_by(title: title))
step %{I follow "Collection Settings"}
step %{I check "This collection is closed"}
step %{I submit}
step %{I am logged out}
end
Given /^I have added (?:a|the) co\-moderator "([^\"]*)" to collection "([^\"]*)"$/ do |name, title|
# create the user
step %{I am logged in as "#{name}"}
step %{I am logged in as "mod1"}
visit collection_path(Collection.find_by(title: title))
click_link("Membership")
step %{I fill in "participants_to_invite" with "#{name}"}
step %{I press "Submit"}
step %{I select "Moderator" from "#{name}_role"}
# TODO: fix the form, it is malformed right now
click_button("#{name}_submit")
step %{I should see "Updated #{name}"}
end
Given "I have joined the collection {string} as {string}" do |title, login|
collection = Collection.find_by(title: title)
user = User.find_by(login: login)
FactoryBot.create(:collection_participant, pseud: user.default_pseud, collection: collection, participant_role: "Member")
visit collections_path
end
Given "a set of collections for searching" do
profile = CollectionProfile.create!(faq: "
- What is this test thing?
- It's a test collection
",
intro: "Welcome to the test collection",
rules: "Be nice to testers")
FactoryBot.create(:collection,
name: "sometest",
title: "Some Test Collection",
collection_profile: profile)
FactoryBot.create(:collection,
name: "othertest",
title: "Some Other Collection")
FactoryBot.create(:collection,
:closed,
name: "anothertest",
title: "Another Plain Collection")
FactoryBot.create(:collection,
:moderated,
name: "surprisetest",
title: "Surprise Presents",
challenge: FactoryBot.create(:gift_exchange))
FactoryBot.create(:collection,
name: "swaptest",
title: "Another Gift Swap",
challenge: FactoryBot.create(:gift_exchange))
FactoryBot.create(:collection,
:closed,
name: "demandtest",
title: "On Demand",
challenge: FactoryBot.create(:prompt_meme))
step %{all indexing jobs have been run}
end
### WHEN
When /^I set up (?:a|the) collection "([^"]*)"(?: with name "([^"]*)")?$/ do |title, name|
visit new_collection_path
fill_in("collection_name", with: (name.blank? ? title.gsub(/[^\w]/, '_') : name))
fill_in("collection_title", with: title)
end
When /^I create (?:a|the) collection "([^"]*)"(?: with name "([^"]*)")?$/ do |title, name|
name = title.gsub(/[^\w]/, '_') if name.blank?
step %{I set up the collection "#{title}" with name "#{name}"}
step %{I submit}
end
When /^I add (?:a|the) subcollection "([^"]*)"(?: with name "([^"]*)")? to (?:a|the) parent collection named "([^"]*)"$/ do |title, name, parent_name|
if Collection.find_by_name(parent_name).nil?
step %{I create the collection "#{parent_name}" with name "#{parent_name}"}
end
name = title.gsub(/[^\w]/, '_') if name.blank?
step %{I set up the collection "#{title}" with name "#{name}"}
fill_in("collection_parent_name", with: parent_name)
step %{I submit}
end
When /^I sort by fandom$/ do
within(:xpath, "//li[a[contains(@title,'Sort')]]") do
step %{I follow "Fandom 1"}
end
end
When /^I reveal works for "([^\"]*)"$/ do |title|
step %{I am logged in as the owner of "#{title}"}
visit collection_path(Collection.find_by(title: title))
step %{I follow "Collection Settings"}
uncheck "This collection is unrevealed"
click_button "Update"
page.should have_content("Collection was successfully updated")
end
When /^I reveal authors for "([^\"]*)"$/ do |title|
step %{I am logged in as the owner of "#{title}"}
visit collection_path(Collection.find_by(title: title))
step %{I follow "Collection Settings"}
uncheck "This collection is anonymous"
click_button "Update"
page.should have_content("Collection was successfully updated")
end
When /^I check all the collection settings checkboxes$/ do
check("collection_collection_preference_attributes_moderated")
check("collection_collection_preference_attributes_closed")
check("collection_collection_preference_attributes_unrevealed")
check("collection_collection_preference_attributes_anonymous")
check("collection_collection_preference_attributes_show_random")
check("collection_collection_preference_attributes_email_notify")
end
When "{string} accepts the invitation for their work in the collection {string}" do |username, collection|
the_collection = Collection.find_by(title: collection)
collection_item_id = the_collection.collection_items.first.id
visit user_collection_items_path(User.find_by(login: username))
step %{I select "Approved" from "collection_items_#{collection_item_id}_user_approval_status"}
end
When "I approve the work {string} in the collection {string}" do |work, collection|
work = Work.find_by(title: work)
collection = Collection.find_by(title: collection)
item_id = CollectionItem.find_by(item: work, collection: collection).id
visit collection_items_path(collection)
step %{I select "Approved" from "collection_items_#{item_id}_collection_approval_status"}
end
### THEN
Then /^"([^"]*)" collection exists$/ do |title|
assert Collection.where(title: title).exists?
end
Then /^the name of the collection "([^"]*)" should be "([^"]*)"$/ do |title, name|
assert Collection.find_by(title: title).name == name
end
Then /^I should see a collection not found message for "([^\"]+)"$/ do |collection_name|
step %{I should see /We couldn't find the collection(?:.+and)? #{collection_name}/}
end
Then /^the collection "(.*)" should be deleted/ do |collection|
assert Collection.where(title: collection).first.nil?
end
Then /^the work "([^\"]*)" should be hidden from me$/ do |title|
work = Work.find_by(title: title)
visit work_path(work)
expect(page.title).to include("Mystery Work")
expect(page.title).not_to include(title)
expect(page).not_to have_content(title)
expect(page).to have_content("This work is part of an ongoing challenge and will be revealed soon!")
expect(page).not_to have_content(Sanitize.clean(work.chapters.first.content))
if work.collections.first
step "all indexing jobs have been run"
visit collection_path(work.collections.first)
expect(page).not_to have_content(title)
expect(page).to have_content("Mystery Work")
end
visit user_path(work.users.first)
expect(page).not_to have_content(title)
end
Then /^the work "([^\"]*)" should be visible to me$/ do |title|
work = Work.find_by(title: title)
visit work_path(work)
page.should have_content(title)
page.should have_content(Sanitize.clean(work.chapters.first.content))
end
Then /^the author of "([^\"]*)" should be visible to me on the work page$/ do |title|
work = Work.find_by(title: title)
visit work_path(work)
authors = work.pseuds.uniq.sort.collect(&:byline).join(", ")
page.should have_content("Anonymous [#{authors}]")
end
Then /^the author of "([^\"]*)" should be publicly visible$/ do |title|
work = Work.find_by(title: title)
byline = work.users.first.pseuds.first.byline
visit work_path(work)
expect(page.title).to include(byline)
step %{I should see "#{byline}" within ".byline"}
if work.collections.first
step "all indexing jobs have been run"
visit collection_path(work.collections.first)
expect(page).to have_content("#{title} by #{byline}")
end
end
Then /^the author of "([^\"]*)" should be hidden from me$/ do |title|
step "all indexing jobs have been run"
work = Work.find_by(title: title)
byline = work.users.first.pseuds.first.byline
visit work_path(work)
expect(page).not_to have_content(byline)
expect(page.title).to include("Anonymous")
step %{I should see "Anonymous" within ".byline"}
visit collection_path(work.collections.first)
expect(page).not_to have_content("#{title} by #{byline}")
expect(page).to have_content("#{title} by Anonymous")
visit user_path(work.users.first)
expect(page).not_to have_content(title)
end