mirror of
https://github.com/basecamp/once-campfire.git
synced 2026-10-07 23:30:08 +09:00
Search for operator words instead of parsing them
The search box keeps only word characters, but FTS5 still reads AND, OR, NOT and NEAR in the query as operators, so searching for "AND" or for "salt AND" raised "fts5: syntax error" and answered with a 500. Quoting each word makes FTS5 look for it as text, which is how it already treats the same words in lower case. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NuTtwJKhb77Dv7EQqv2C3C
This commit is contained in:
@@ -20,6 +20,24 @@ class SearchesControllerTest < ActionDispatch::IntegrationTest
|
||||
assert_select ".message", text: /Hello world!/
|
||||
end
|
||||
|
||||
test "operator words are searched for as words" do
|
||||
rooms(:designers).messages.create! body: "Salt and pepper", client_message_id: "operators", creator: users(:david)
|
||||
|
||||
get searches_url, params: { q: "salt AND" }
|
||||
|
||||
assert_response :success
|
||||
assert_select ".message", text: /Salt and pepper/
|
||||
end
|
||||
|
||||
test "searching for an operator word alone doesn't fail" do
|
||||
%w[ AND OR NOT ].each do |word|
|
||||
get searches_url, params: { q: word }
|
||||
|
||||
assert_response :success
|
||||
assert_select ".message", count: 0
|
||||
end
|
||||
end
|
||||
|
||||
test "unreachable messages are not found" do
|
||||
memberships(:david_designers).destroy!
|
||||
|
||||
|
||||
Reference in New Issue
Block a user