diff --git a/test/functional/autocomplete_controller_test.rb b/test/functional/autocomplete_controller_test.rb index 3529c7c30..5acb481af 100644 --- a/test/functional/autocomplete_controller_test.rb +++ b/test/functional/autocomplete_controller_test.rb @@ -1,59 +1,78 @@ require "test_helper" class AutocompleteControllerTest < ActionDispatch::IntegrationTest - def autocomplete(query, type) + def autocomplete(query, type = "tag_query") get autocomplete_index_path(search: { query: query, type: type }) assert_response :success response.parsed_body.css("li").map { |html| html["data-autocomplete-value"] } end - def assert_autocomplete_equals(expected_value, query, type) + def assert_autocomplete_equals(expected_value, query, type = "tag_query") assert_equal(expected_value, autocomplete(query, type)) end context "Autocomplete controller" do context "index action" do - setup do - create(:tag, name: "azur_lane") - create(:tag, name: "android") - create(:tag, name: "original") - end - should "work for opensearch queries" do + create(:tag, name: "azur_lane") + get autocomplete_index_path(search: { query: "azur", type: "opensearch" }), as: :json assert_response :success assert_equal(["azur", ["azur_lane"]], response.parsed_body) end - should "work for tag queries" do - assert_autocomplete_equals(["azur_lane"], "azur", "tag_query") - assert_autocomplete_equals(["azur_lane"], "AZUR", "tag_query") + should "work for simple tag queries" do + create(:tag, name: "azur_lane") - assert_autocomplete_equals(["rating:sensitive"], "rating:s", "tag_query") - assert_autocomplete_equals(["rating:sensitive"], "-rating:s", "tag_query") + assert_autocomplete_equals(["azur_lane"], "azur") + assert_autocomplete_equals(["azur_lane"], "AZUR") + + assert_autocomplete_equals(["rating:sensitive"], "rating:s") + assert_autocomplete_equals(["rating:sensitive"], "-rating:s") + end + + should "match tags containing the given words" do + create(:tag, name: "short_hair", post_count: 15_000) + create(:tag, name: "long_hair", post_count: 10_000) + create(:tag, name: "very_long_hair", post_count: 5_000) + create(:tag, name: "absurdly_long_hair", post_count: 1_000) + create(:tag, name: "souryuu_asuka_langley") + create(:tag, name: "crying_with_eyes_open") + create(:tag, name: "open_mouth") + create(:tag, name: "black_hair") + create(:tag_alias, antecedent_name: "dark_hair", consequent_name: "black_hair") + + assert_autocomplete_equals(%w[long_hair very_long_hair absurdly_long_hair], "long_hair") + assert_autocomplete_equals(%w[souryuu_asuka_langley], "asuka") + assert_autocomplete_equals(%w[crying_with_eyes_open], "open_eyes") + assert_autocomplete_equals(%w[open_mouth], "mouth_open") + assert_autocomplete_equals(%w[black_hair], "dark") end should "work for an aliased tag" do + create(:tag, name: "original") create(:tag_alias, antecedent_name: "oc", consequent_name: "original") - assert_autocomplete_equals(["original"], "oc", "tag_query") + assert_autocomplete_equals(["original"], "oc") end should "work for the user: metatag" do create(:user, name: "foobar") - assert_autocomplete_equals(["user:foobar"], "user:foo", "tag_query") + assert_autocomplete_equals(["user:foobar"], "user:foo") end should "work for the pool: metatag" do as(create(:user)) { create(:pool, name: "foobar") } - assert_autocomplete_equals(["pool:foobar"], "pool:foo", "tag_query") + assert_autocomplete_equals(["pool:foobar"], "pool:foo") end should "work for a missing type" do + create(:tag, name: "azur_lane") + get autocomplete_index_path(search: { query: "azur" }), as: :json assert_response :success @@ -61,11 +80,16 @@ class AutocompleteControllerTest < ActionDispatch::IntegrationTest end should "work for the AND and OR keywords" do - assert_autocomplete_equals(["android"], "and", "tag_query") - assert_autocomplete_equals(["original"], "or", "tag_query") + create(:tag, name: "android") + create(:tag, name: "original") + + assert_autocomplete_equals(["android"], "and") + assert_autocomplete_equals(["original"], "or") end should "not set session cookies when the response is publicly cached" do + create(:tag, name: "azur_lane") + get autocomplete_index_path(search: { query: "azur", type: "tag_query" }) assert_response :success