257 lines
11 KiB
Ruby
257 lines
11 KiB
Ruby
|
|
Given /^a set of tags for testing autocomplete$/ do
|
||
|
|
step %{basic tags}
|
||
|
|
step %{a canonical fandom "Supernatural"}
|
||
|
|
step %{a canonical fandom "Battlestar Galactica"}
|
||
|
|
step %{a noncanonical fandom "Super Awesome"}
|
||
|
|
step %{a canonical character "Ellen Harvelle" in fandom "Supernatural"}
|
||
|
|
step %{a canonical character "Ellen Tigh" in fandom "Battlestar Galactica"}
|
||
|
|
step %{a noncanonical character "ellen somebody"}
|
||
|
|
step %{a canonical relationship "Dean/Castiel" in fandom "Supernatural"}
|
||
|
|
step %{a canonical relationship "Sam/Dean" in fandom "Supernatural"}
|
||
|
|
step %{a canonical relationship "Ellen Tigh/Lee Adama" in fandom "Battlestar Galactica"}
|
||
|
|
step %{a noncanonical relationship "Destiel"}
|
||
|
|
step %{a canonical freeform "Alternate Universe"}
|
||
|
|
step %{a canonical freeform "Superduper"}
|
||
|
|
step %{a noncanonical freeform "alternate sundays"}
|
||
|
|
end
|
||
|
|
|
||
|
|
Then /^I should see HTML "(.*)?" in the autocomplete$/ do |string|
|
||
|
|
# There should be only one visible autocomplete dropdown.
|
||
|
|
within("input + .autocomplete") do
|
||
|
|
# Wait for results to appear, then check their HTML content
|
||
|
|
expect(current_scope).to have_selector("li")
|
||
|
|
expect(current_scope["innerHTML"]).to include(string)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
Then /^I should see "([^\"]+)" in the autocomplete$/ do |string|
|
||
|
|
# There should be only one visible autocomplete dropdown.
|
||
|
|
expect(find("input + .autocomplete")).to have_content(string)
|
||
|
|
end
|
||
|
|
|
||
|
|
Then /^I should not see "([^\"]+)" in the autocomplete$/ do |string|
|
||
|
|
# There should be only one visible autocomplete dropdown.
|
||
|
|
expect(find("input + .autocomplete")).to have_no_content(string)
|
||
|
|
end
|
||
|
|
|
||
|
|
# Define all values to be entered here depending on the fieldname
|
||
|
|
When /^I enter text in the "([^\"]+)" autocomplete field$/ do |fieldname|
|
||
|
|
text = case fieldname
|
||
|
|
when "Fandoms"
|
||
|
|
"sup"
|
||
|
|
when "Additional Tags"
|
||
|
|
"alt"
|
||
|
|
when "Characters"
|
||
|
|
"ellen"
|
||
|
|
when "Relationships"
|
||
|
|
"cast"
|
||
|
|
when "Your tags"
|
||
|
|
"sup"
|
||
|
|
else
|
||
|
|
""
|
||
|
|
end
|
||
|
|
step %{I enter "#{text}" in the "#{fieldname}" autocomplete field}
|
||
|
|
end
|
||
|
|
|
||
|
|
When /^I enter "([^\"]+)" in the "([^\"]+)" autocomplete field$/ do |text, fieldname|
|
||
|
|
field = find_field(fieldname)
|
||
|
|
# Clear the field.
|
||
|
|
field.set("")
|
||
|
|
# Simulate keystrokes to make the autocomplete dropdown appear (instead of fill_in).
|
||
|
|
field.send_keys(text)
|
||
|
|
# Wait for the autocomplete right after the field to appear,
|
||
|
|
# so in the Then steps we can look for the only active autocomplete
|
||
|
|
# without caring where it is.
|
||
|
|
expect(page).to have_selector("##{field[:id]} + .autocomplete")
|
||
|
|
end
|
||
|
|
|
||
|
|
When /^I choose "([^\"]+)" from the "([^\"]+)" autocomplete$/ do |text, fieldname|
|
||
|
|
field = find_field(fieldname)
|
||
|
|
# Clear the field.
|
||
|
|
field.set("")
|
||
|
|
# Simulate keystrokes to make the autocomplete dropdown appear (instead of fill_in)
|
||
|
|
field.send_keys(text)
|
||
|
|
# In the autocomplete right after the field...
|
||
|
|
with_scope("##{field[:id]} + .autocomplete") do
|
||
|
|
# Wait for the expected result to appear and click to select it
|
||
|
|
find("li", text: text).click
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
# alias for most common fields
|
||
|
|
When /^I enter text in the (\w+) autocomplete field$/ do |fieldtype|
|
||
|
|
fieldname = case fieldtype
|
||
|
|
when "fandom"
|
||
|
|
"Fandoms"
|
||
|
|
when "character"
|
||
|
|
"Characters"
|
||
|
|
when "relationship"
|
||
|
|
"Relationships"
|
||
|
|
when "freeform"
|
||
|
|
"Additional Tags"
|
||
|
|
end
|
||
|
|
step %{I enter text in the "#{fieldname}" autocomplete field}
|
||
|
|
end
|
||
|
|
|
||
|
|
When "I remove selected values from the autocomplete field within {string}" do |selector|
|
||
|
|
within(selector) do
|
||
|
|
find_all(".autocomplete .delete").each(&:click)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
When /^I specify a fandom and enter text in the character autocomplete field$/ do
|
||
|
|
step %{I choose "Supernatural" from the "Fandoms" autocomplete}
|
||
|
|
step %{I enter text in the character autocomplete field}
|
||
|
|
end
|
||
|
|
|
||
|
|
When /^I specify a fandom and enter text in the relationship autocomplete field$/ do
|
||
|
|
step %{I choose "Supernatural" from the "Fandoms" autocomplete}
|
||
|
|
step %{I enter text in the relationship autocomplete field}
|
||
|
|
end
|
||
|
|
|
||
|
|
When /^I specify two fandoms and enter text in the character autocomplete field$/ do
|
||
|
|
step %{I choose "Supernatural" from the "Fandoms" autocomplete}
|
||
|
|
step %{I choose "Battlestar Galactica" from the "Fandoms" autocomplete}
|
||
|
|
step %{I enter text in the character autocomplete field}
|
||
|
|
end
|
||
|
|
|
||
|
|
When /^I choose a previously bookmarked URL from the autocomplete$/ do
|
||
|
|
url = ExternalWork.first.url
|
||
|
|
step %{I choose "#{url}" from the "URL" autocomplete}
|
||
|
|
step %{all AJAX requests are complete}
|
||
|
|
end
|
||
|
|
|
||
|
|
## Here's where we create the steps defining which tags should appear/not appear
|
||
|
|
## based on the set of tags and the data entered
|
||
|
|
|
||
|
|
Then /^I should only see matching canonical fandom tags in the autocomplete$/ do
|
||
|
|
step %{I should see "Supernatural" in the autocomplete}
|
||
|
|
step %{I should not see "Super Awesome" in the autocomplete}
|
||
|
|
step %{I should not see "Battlestar Galactica" in the autocomplete}
|
||
|
|
step %{I should not see "Superduper" in the autocomplete}
|
||
|
|
end
|
||
|
|
|
||
|
|
Then /^I should only see matching canonical freeform tags in the autocomplete$/ do
|
||
|
|
step %{I should see "Alternate Universe" in the autocomplete}
|
||
|
|
step %{I should not see "alternate sundays" in the autocomplete}
|
||
|
|
step %{I should not see "Superduper" in the autocomplete}
|
||
|
|
end
|
||
|
|
|
||
|
|
Then /^I should only see matching canonical character tags in the autocomplete$/ do
|
||
|
|
step %{I should see "Ellen Harvelle" in the autocomplete}
|
||
|
|
step %{I should see "Ellen Tigh" in the autocomplete}
|
||
|
|
step %{I should not see "Ellen Somebody" in the autocomplete}
|
||
|
|
end
|
||
|
|
|
||
|
|
Then /^I should only see matching canonical relationship tags in the autocomplete$/ do
|
||
|
|
step %{I should see "Dean/Castiel" in the autocomplete}
|
||
|
|
step %{I should not see "Sam/Dean" in the autocomplete}
|
||
|
|
step %{I should not see "Destiel" in the autocomplete}
|
||
|
|
end
|
||
|
|
|
||
|
|
Then /^I should only see matching canonical character tags in the specified fandom in the autocomplete$/ do
|
||
|
|
step %{I should see "Ellen Harvelle" in the autocomplete}
|
||
|
|
step %{I should not see "Ellen Tigh" in the autocomplete}
|
||
|
|
step %{I should not see "Ellen Somebody" in the autocomplete}
|
||
|
|
end
|
||
|
|
|
||
|
|
Then /^I should see matching canonical character tags from both fandoms in the autocomplete$/ do
|
||
|
|
step %{I should see "Ellen Harvelle" in the autocomplete}
|
||
|
|
step %{I should see "Ellen Tigh" in the autocomplete}
|
||
|
|
step %{I should not see "Ellen Somebody" in the autocomplete}
|
||
|
|
end
|
||
|
|
|
||
|
|
Then /^I should only see matching canonical relationship tags in the specified fandom in the autocomplete$/ do
|
||
|
|
step %{I should see "Dean/Castiel" in the autocomplete}
|
||
|
|
step %{I should not see "Destiel" in the autocomplete}
|
||
|
|
end
|
||
|
|
|
||
|
|
Then /^I should only see matching canonical tags in the autocomplete$/ do
|
||
|
|
step %{I should see "Supernatural" in the autocomplete}
|
||
|
|
step %{I should see "Superduper" in the autocomplete}
|
||
|
|
step %{I should not see "Dean/Castiel" in the autocomplete}
|
||
|
|
end
|
||
|
|
|
||
|
|
Then /^I should only see matching noncanonical tags in the autocomplete$/ do
|
||
|
|
step %{I should see "Super Awesome" in the autocomplete}
|
||
|
|
step %{I should not see "Supernatural" in the autocomplete}
|
||
|
|
end
|
||
|
|
|
||
|
|
Then /^the tag autocomplete fields should list only matching canonical tags$/ do
|
||
|
|
step %{I enter text in the fandom autocomplete field}
|
||
|
|
step %{I should only see matching canonical fandom tags in the autocomplete}
|
||
|
|
step %{I enter text in the character autocomplete field}
|
||
|
|
step %{I should only see matching canonical character tags in the autocomplete}
|
||
|
|
step %{I enter text in the relationship autocomplete field}
|
||
|
|
step %{I should only see matching canonical relationship tags in the autocomplete}
|
||
|
|
if page.body =~ /Additional Tags/
|
||
|
|
step %{I enter text in the freeform autocomplete field}
|
||
|
|
step %{I should only see matching canonical freeform tags in the autocomplete}
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
Then /^the fandom-specific tag autocomplete fields should list only fandom-specific canonical tags$/ do
|
||
|
|
step %{I specify a fandom and enter text in the character autocomplete field}
|
||
|
|
step %{I should only see matching canonical character tags in the specified fandom in the autocomplete}
|
||
|
|
step %{I specify a fandom and enter text in the relationship autocomplete field}
|
||
|
|
step %{I should only see matching canonical relationship tags in the specified fandom in the autocomplete}
|
||
|
|
step %{I specify two fandoms and enter text in the character autocomplete field}
|
||
|
|
step %{I should see matching canonical character tags from both fandoms in the autocomplete}
|
||
|
|
end
|
||
|
|
|
||
|
|
Then /^the external url autocomplete field should list the urls of existing external works$/ do
|
||
|
|
step %{I enter "exam" in the "URL" autocomplete field}
|
||
|
|
step %{I should see "http://example.org/200" in the autocomplete}
|
||
|
|
end
|
||
|
|
|
||
|
|
Given /^a set of users for testing autocomplete$/ do
|
||
|
|
%w(myname coauthor giftee).each do |username|
|
||
|
|
user = FactoryBot.create(:user, login: username)
|
||
|
|
user.pseuds.first.add_to_autocomplete
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
Then /^the coauthor autocomplete field should list matching users$/ do
|
||
|
|
check("co-authors-options-show")
|
||
|
|
step %{I enter "coa" in the "pseud_byline_autocomplete" autocomplete field}
|
||
|
|
step %{I should see "coauthor" in the autocomplete}
|
||
|
|
step %{I should not see "giftee" in the autocomplete}
|
||
|
|
end
|
||
|
|
|
||
|
|
Then /^the gift recipient autocomplete field should list matching users$/ do
|
||
|
|
step %{I enter "gif" in the "Gift this work to" autocomplete field}
|
||
|
|
step %{I should see "giftee" in the autocomplete}
|
||
|
|
step %{I should not see "coauthor" in the autocomplete}
|
||
|
|
end
|
||
|
|
|
||
|
|
Given /^a set of collections for testing autocomplete$/ do
|
||
|
|
step %{I create the collection "awesome"}
|
||
|
|
step %{I create the collection "great"}
|
||
|
|
step %{I create the collection "really great"}
|
||
|
|
end
|
||
|
|
|
||
|
|
Then /^the collection item autocomplete field should list matching collections$/ do
|
||
|
|
step %{I enter "gre" in the "Post to Collections / Challenges" autocomplete field}
|
||
|
|
step %{I should see "great" in the autocomplete}
|
||
|
|
step %{I should see "really great" in the autocomplete}
|
||
|
|
step %{I should not see "awesome" in the autocomplete}
|
||
|
|
end
|
||
|
|
|
||
|
|
Given /^a gift exchange for testing autocomplete$/ do
|
||
|
|
step %{I have created the gift exchange "autocomplete"}
|
||
|
|
end
|
||
|
|
|
||
|
|
When /^I edit the gift exchange for testing autocomplete$/ do
|
||
|
|
visit(edit_collection_gift_exchange_path(Collection.find_by(name: "autocomplete")))
|
||
|
|
end
|
||
|
|
|
||
|
|
Then(/^the pseud autocomplete should contain "([^\"]*)"$/) do |pseud|
|
||
|
|
results = Pseud.autocomplete_lookup(search_param: pseud, autocomplete_prefix: "autocomplete_pseud").map { |res| Pseud.fullname_from_autocomplete(res) }
|
||
|
|
assert results.include?(pseud)
|
||
|
|
end
|
||
|
|
|
||
|
|
Then(/^the pseud autocomplete should not contain "([^\"]*)"$/) do |pseud|
|
||
|
|
results = Pseud.autocomplete_lookup(search_param: pseud, autocomplete_prefix: "autocomplete_pseud").map { |res| Pseud.fullname_from_autocomplete(res) }
|
||
|
|
assert !results.include?(pseud)
|
||
|
|
end
|