diff --git a/app/models/search/stemmer.rb b/app/models/search/stemmer.rb index f6a6c56d4..21cb75f97 100644 --- a/app/models/search/stemmer.rb +++ b/app/models/search/stemmer.rb @@ -5,7 +5,7 @@ module Search::Stemmer def stem(value) if value.present? - value.gsub(/[^\w\s]/, "").split(/\s+/).map { |word| STEMMER.stem(word.downcase) }.join(" ") + value.gsub(/[^\w\s]/, " ").split(/\s+/).map { |word| STEMMER.stem(word.downcase) }.join(" ") else value end diff --git a/test/models/search/stemmer_test.rb b/test/models/search/stemmer_test.rb index 858ed2dca..33334ada4 100644 --- a/test/models/search/stemmer_test.rb +++ b/test/models/search/stemmer_test.rb @@ -12,4 +12,16 @@ class Search::StemmerTest < ActiveSupport::TestCase assert_equal "test run jump walk", result end + + test "stem hyphenated words" do + result = Search::Stemmer.stem("BC3-IOS-1D8B") + + assert_equal "bc3 io 1d8b", result + end + + test "stem words separated by repeated punctuation" do + result = Search::Stemmer.stem("foo---bar") + + assert_equal "foo bar", result + end end diff --git a/test/models/search_test.rb b/test/models/search_test.rb index 44996404b..c52a397f4 100644 --- a/test/models/search_test.rb +++ b/test/models/search_test.rb @@ -35,4 +35,11 @@ class SearchTest < ActiveSupport::TestCase results = Search::Record.for(user_without_access.account_id).search("anything", user: user_without_access) assert_empty results end + + test "search for hyphenated strings" do + card = @board.cards.create!(title: "BC3-IOS-1D8B", creator: @user, status: "published") + + results = Search::Record.for(@user.account_id).search("BC3-IOS-1D8B", user: @user) + assert results.find { |it| it.card_id == card.id } + end end