diff options
| author | Miquel Sabaté Solà <msabate@suse.com> | 2024-03-13 18:03:43 +0100 |
|---|---|---|
| committer | Miquel Sabaté Solà <msabate@suse.com> | 2024-03-13 18:03:43 +0100 |
| commit | a7791635aa98f012d35f97c3c5288494bbb28e38 (patch) | |
| tree | bad987e6b4d10ad2f7cd02e40658d464907595ee /test/models/search_test.rb | |
| download | operum-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.rb | 90 |
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 |
