otwarchive-symphonyarchive/features/step_definitions/autocomplete_steps.rb

257 lines
11 KiB
Ruby
Raw Normal View History

2026-03-11 22:22:11 +00:00
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