aboutsummaryrefslogtreecommitdiff
path: root/test/models/search_test.rb
diff options
context:
space:
mode:
authorMiquel Sabaté Solà <msabate@suse.com>2024-03-13 18:03:43 +0100
committerMiquel Sabaté Solà <msabate@suse.com>2024-03-13 18:03:43 +0100
commita7791635aa98f012d35f97c3c5288494bbb28e38 (patch)
treebad987e6b4d10ad2f7cd02e40658d464907595ee /test/models/search_test.rb
downloadoperum-a7791635aa98f012d35f97c3c5288494bbb28e38.tar.gz
operum-a7791635aa98f012d35f97c3c5288494bbb28e38.zip
Initial commit
Signed-off-by: Miquel Sabaté Solà <msabate@suse.com>
Diffstat (limited to 'test/models/search_test.rb')
-rw-r--r--test/models/search_test.rb90
1 files changed, 90 insertions, 0 deletions
diff --git a/test/models/search_test.rb b/test/models/search_test.rb
new file mode 100644
index 0000000..9614bc0
--- /dev/null
+++ b/test/models/search_test.rb
@@ -0,0 +1,90 @@
+# frozen_string_literal: true
+
+require 'test_helper'
+
+class SearchTest < ActiveSupport::TestCase
+ test 'name and body have to be present and unique' do
+ search = Search.new(user_id: users(:user).id)
+ assert_raise(ActiveRecord::RecordInvalid) { search.save! }
+
+ search.name = 'new search'
+ assert_raise(ActiveRecord::RecordInvalid) { search.save! }
+
+ search.name = nil
+ search.body = 'body'
+ assert_raise(ActiveRecord::RecordInvalid) { search.save! }
+
+ search.name = searches(:search1).name
+ assert_raise(ActiveRecord::RecordInvalid) { search.save! }
+
+ search.name = 'another'
+ search.body = searches(:search1).body
+ assert_raise(ActiveRecord::RecordInvalid) { search.save! }
+
+ search.body = 'another body'
+ assert_difference('Search.count') { search.save! }
+ end
+
+ ##
+ # Results.
+
+ test 'returns all things when an empty body is given' do
+ res = Search.new.results
+
+ assert res[:things].size == 2
+ assert res[:things][0][:target] == things(:thing2).target
+ assert res[:things][1][:target] == things(:thing1).target
+ end
+
+ test 'returns everything matching a specific tag' do
+ res = Search.new(body: "tag:'#{tags(:tag1).name}'").results
+
+ assert res[:things].size == 2
+ assert res[:things][0][:target] == things(:thing2).target
+ assert res[:things][1][:target] == things(:thing1).target
+ assert res[:comments].size == 1
+ assert res[:comments][0][:id] == comments(:comment1).id
+ end
+
+ test 'returns everything matching two tags' do
+ res = Search.new(body: "tag:'#{tags(:tag1).name}' tag:'#{tags(:tag2).name}'").results
+
+ assert res[:things].size == 1
+ assert res[:things][0][:target] == things(:thing1).target
+ assert res[:comments].empty?
+ end
+
+ test 'returns everything matching a given text' do
+ res = Search.new(body: 'Miquel').results
+
+ assert res[:things].size == 2
+ assert res[:things][0][:target] == things(:thing2).target
+ assert res[:things][1][:target] == things(:thing1).target
+ assert res[:comments].size == 1
+ assert res[:comments][0][:id] == comments(:comment1).id
+ end
+
+ test 'returns everything matching two tags and a given text' do
+ res = Search.new(body: "Miquel tag:'#{tags(:tag1).name}' tag:'#{tags(:tag2).name}'").results
+
+ assert res[:things].size == 1
+ assert res[:things][0][:target] == things(:thing1).target
+ assert res[:comments].empty?
+ end
+
+ test 'returns everything matching a given compound text' do
+ res = Search.new(body: 'some other').results
+
+ assert res[:things].size == 2
+ assert res[:things][0][:target] == things(:thing2).target
+ assert res[:things][1][:target] == things(:thing1).target
+ assert res[:comments].empty?
+ end
+
+ test 'returns an empty result with unknown fields' do
+ res = Search.new(body: 'whatever:"unknown"').results
+
+ assert res[:things].empty?
+ assert res[:comments].empty?
+ end
+end