Commit 1ff43b066e0aa1f03fa0b51b07db1b90e5373c68
1 parent
aec2d253
Exists in
fix_sign_up_form
Elasticsearch: Refactored structure and tests
Signed-off-by: Macartur Sousa <macartur.sc@gmail.com>
Showing
33 changed files
with
697 additions
and
699 deletions
Show diff stats
plugins/elasticsearch/helpers/nested_helper/environment.rb
@@ -1,25 +0,0 @@ | @@ -1,25 +0,0 @@ | ||
1 | -module NestedEnvironment | ||
2 | - | ||
3 | - def self.environment_hash | ||
4 | - { | ||
5 | - :id => { type: :integer }, | ||
6 | - :is_default => {type: :boolean } | ||
7 | - } | ||
8 | - end | ||
9 | - | ||
10 | - def self.environment_filter environment=1 | ||
11 | - { | ||
12 | - query: { | ||
13 | - nested: { | ||
14 | - path: "environment", | ||
15 | - query: { | ||
16 | - bool: { | ||
17 | - must: { term: { "environment.id" => environment } }, | ||
18 | - } | ||
19 | - } | ||
20 | - } | ||
21 | - } | ||
22 | - } | ||
23 | - end | ||
24 | - | ||
25 | -end |
plugins/elasticsearch/helpers/nested_helper/profile.rb
@@ -1,29 +0,0 @@ | @@ -1,29 +0,0 @@ | ||
1 | -module NestedProfile | ||
2 | - | ||
3 | - def self.hash | ||
4 | - { | ||
5 | - :id => { type: :integer }, | ||
6 | - :visible => { type: :boolean }, | ||
7 | - :public_profile => { type: :boolean } | ||
8 | - } | ||
9 | - end | ||
10 | - | ||
11 | - def self.filter | ||
12 | - { | ||
13 | - query: { | ||
14 | - nested: { | ||
15 | - path: "profile", | ||
16 | - query: { | ||
17 | - bool: { | ||
18 | - must:[ | ||
19 | - { term: { "profile.visible" => true } }, | ||
20 | - { term: { "profile.public_profile" => true } } | ||
21 | - ], | ||
22 | - } | ||
23 | - } | ||
24 | - } | ||
25 | - } | ||
26 | - } | ||
27 | - end | ||
28 | - | ||
29 | -end |
plugins/elasticsearch/helpers/searchable_model/elasticsearch_indexed_model.rb
@@ -1,100 +0,0 @@ | @@ -1,100 +0,0 @@ | ||
1 | -require_relative '../nested_helper/environment' | ||
2 | - | ||
3 | -module ElasticsearchIndexedModel | ||
4 | - | ||
5 | - def self.included base | ||
6 | - base.send :include, Elasticsearch::Model | ||
7 | - base.send :include, Elasticsearch::Model::Callbacks | ||
8 | - | ||
9 | - base.send :index_name, "#{Rails.env}_#{base.index_name}" | ||
10 | - | ||
11 | - base.extend ClassMethods | ||
12 | - base.send :include, InstanceMethods | ||
13 | - | ||
14 | - base.class_eval do | ||
15 | - settings index: { number_of_shards: 1 } do | ||
16 | - mappings dynamic: 'false' do | ||
17 | - base.indexed_fields.each do |field, value| | ||
18 | - type = value[:type].presence | ||
19 | - | ||
20 | - if type == :nested | ||
21 | - indexes(field, type: type) do | ||
22 | - value[:hash].each do |hash_field, hash_value| | ||
23 | - indexes(hash_field, base.indexes_as_hash(hash_field,hash_value[:type].presence)) | ||
24 | - end | ||
25 | - end | ||
26 | - else | ||
27 | - indexes(field, base.indexes_as_hash(field,type)) | ||
28 | - end | ||
29 | - print '.' | ||
30 | - end | ||
31 | - end | ||
32 | - | ||
33 | - base.__elasticsearch__.client.indices.delete \ | ||
34 | - index: base.index_name rescue nil | ||
35 | - base.__elasticsearch__.client.indices.create \ | ||
36 | - index: base.index_name, | ||
37 | - body: { | ||
38 | - settings: base.settings.to_hash, | ||
39 | - mappings: base.mappings.to_hash | ||
40 | - } | ||
41 | - end | ||
42 | - end | ||
43 | - base.send :import | ||
44 | - end | ||
45 | - | ||
46 | - module ClassMethods | ||
47 | - | ||
48 | - def indexes_as_hash(name, type) | ||
49 | - hash = {} | ||
50 | - if type.nil? | ||
51 | - hash[:fields] = raw_field(name, type) | ||
52 | - else | ||
53 | - hash[:type] = type if not type.nil? | ||
54 | - end | ||
55 | - hash | ||
56 | - end | ||
57 | - | ||
58 | - def raw_field name, type | ||
59 | - { | ||
60 | - raw: { | ||
61 | - type: "string", | ||
62 | - index: "not_analyzed" | ||
63 | - } | ||
64 | - } | ||
65 | - end | ||
66 | - | ||
67 | - def indexed_fields | ||
68 | - fields = { | ||
69 | - :id => {type: :integer }, | ||
70 | - :environment => {type: :nested, hash: NestedEnvironment::environment_hash }, | ||
71 | - :category_ids => {type: :integer }, | ||
72 | - :created_at => {type: :date } | ||
73 | - } | ||
74 | - fields.update(self::SEARCHABLE_FIELDS) | ||
75 | - fields.update(self.control_fields) | ||
76 | - fields | ||
77 | - end | ||
78 | - | ||
79 | - end | ||
80 | - | ||
81 | - module InstanceMethods | ||
82 | - def as_indexed_json options={} | ||
83 | - attrs = {} | ||
84 | - | ||
85 | - self.class.indexed_fields.each do |field, value| | ||
86 | - type = value[:type].presence | ||
87 | - if type == :nested | ||
88 | - attrs[field] = {} | ||
89 | - value[:hash].each do |hash_field, hash_value| | ||
90 | - attrs[field][hash_field] = self.send(field).send(hash_field) | ||
91 | - end | ||
92 | - else | ||
93 | - attrs[field] = self.send(field) | ||
94 | - end | ||
95 | - end | ||
96 | - attrs.as_json | ||
97 | - end | ||
98 | - end | ||
99 | - | ||
100 | -end |
plugins/elasticsearch/helpers/searchable_model/filter.rb
@@ -1,43 +0,0 @@ | @@ -1,43 +0,0 @@ | ||
1 | -require_relative '../nested_helper/environment' | ||
2 | - | ||
3 | -module Filter | ||
4 | - | ||
5 | - def self.included base | ||
6 | - base.extend ClassMethods | ||
7 | - base.send :include, InstanceMethods | ||
8 | - end | ||
9 | - | ||
10 | - module ClassMethods | ||
11 | - | ||
12 | - def filter options={} | ||
13 | - environment = options[:environment].presence | ||
14 | - | ||
15 | - result_filter = {} | ||
16 | - result_filter[:indices] = {:index => self.index_name, :no_match_filter => "none" } | ||
17 | - result_filter[:indices][:filter] = { :bool => self.filter_bool(environment) } | ||
18 | - | ||
19 | - result_filter | ||
20 | - end | ||
21 | - | ||
22 | - def filter_bool environment | ||
23 | - result_filter = {} | ||
24 | - | ||
25 | - result_filter[:must] = [ NestedEnvironment::environment_filter(environment) ] | ||
26 | - | ||
27 | - self.nested_filter.each {|filter| result_filter[:must].append(filter)} if self.respond_to? :nested_filter | ||
28 | - self.must.each {|filter| result_filter[:must].append(filter) } if self.respond_to? :must | ||
29 | - | ||
30 | - result_filter[:should] = self.should if self.respond_to? :should | ||
31 | - result_filter[:must_not] = self.must_not if self.respond_to? :must_not | ||
32 | - | ||
33 | - result_filter | ||
34 | - end | ||
35 | - | ||
36 | - | ||
37 | - end | ||
38 | - | ||
39 | - module InstanceMethods | ||
40 | - | ||
41 | - end | ||
42 | - | ||
43 | -end |
plugins/elasticsearch/helpers/searchable_model_helper.rb
@@ -1,9 +0,0 @@ | @@ -1,9 +0,0 @@ | ||
1 | -require_relative './searchable_model/elasticsearch_indexed_model' | ||
2 | -require_relative './searchable_model/filter' | ||
3 | - | ||
4 | -module SearchableModelHelper | ||
5 | - def self.included base | ||
6 | - base.send :include, ElasticsearchIndexedModel | ||
7 | - base.send :include, Filter | ||
8 | - end | ||
9 | -end |
plugins/elasticsearch/lib/ext/community.rb
plugins/elasticsearch/lib/ext/event.rb
1 | require_dependency 'event' | 1 | require_dependency 'event' |
2 | 2 | ||
3 | -require_relative '../../helpers/searchable_model_helper' | ||
4 | -require_relative '../../helpers/nested_helper/profile' | 3 | +require_relative '../searchable_model_helper' |
4 | +require_relative '../nested_helper/profile' | ||
5 | 5 | ||
6 | class Event | 6 | class Event |
7 | #TODO: o filtro é feito de forma diferente do artigo | 7 | #TODO: o filtro é feito de forma diferente do artigo |
plugins/elasticsearch/lib/ext/person.rb
plugins/elasticsearch/lib/ext/text_article.rb
@@ -3,8 +3,8 @@ require_dependency 'raw_html_article' | @@ -3,8 +3,8 @@ require_dependency 'raw_html_article' | ||
3 | require_dependency 'tiny_mce_article' | 3 | require_dependency 'tiny_mce_article' |
4 | require_dependency 'text_article' | 4 | require_dependency 'text_article' |
5 | 5 | ||
6 | -require_relative '../../helpers/searchable_model_helper' | ||
7 | -require_relative '../../helpers/nested_helper/profile' | 6 | +require_relative '../searchable_model_helper' |
7 | +require_relative '../nested_helper/profile' | ||
8 | 8 | ||
9 | class TextArticle | 9 | class TextArticle |
10 | 10 |
plugins/elasticsearch/lib/ext/uploaded_file.rb
1 | require_dependency 'uploaded_file' | 1 | require_dependency 'uploaded_file' |
2 | 2 | ||
3 | -require_relative '../../helpers/searchable_model_helper' | ||
4 | -require_relative '../../helpers/nested_helper/profile' | 3 | +require_relative '../searchable_model_helper' |
4 | +require_relative '../nested_helper/profile' | ||
5 | 5 | ||
6 | class UploadedFile | 6 | class UploadedFile |
7 | def self.control_fields | 7 | def self.control_fields |
@@ -0,0 +1,25 @@ | @@ -0,0 +1,25 @@ | ||
1 | +module NestedEnvironment | ||
2 | + | ||
3 | + def self.hash | ||
4 | + { | ||
5 | + :id => { type: :integer }, | ||
6 | + :is_default => {type: :boolean } | ||
7 | + } | ||
8 | + end | ||
9 | + | ||
10 | + def self.filter environment=1 | ||
11 | + { | ||
12 | + query: { | ||
13 | + nested: { | ||
14 | + path: "environment", | ||
15 | + query: { | ||
16 | + bool: { | ||
17 | + must: { term: { "environment.id" => environment } }, | ||
18 | + } | ||
19 | + } | ||
20 | + } | ||
21 | + } | ||
22 | + } | ||
23 | + end | ||
24 | + | ||
25 | +end |
@@ -0,0 +1,29 @@ | @@ -0,0 +1,29 @@ | ||
1 | +module NestedProfile | ||
2 | + | ||
3 | + def self.hash | ||
4 | + { | ||
5 | + :id => { type: :integer }, | ||
6 | + :visible => { type: :boolean }, | ||
7 | + :public_profile => { type: :boolean } | ||
8 | + } | ||
9 | + end | ||
10 | + | ||
11 | + def self.filter | ||
12 | + { | ||
13 | + query: { | ||
14 | + nested: { | ||
15 | + path: "profile", | ||
16 | + query: { | ||
17 | + bool: { | ||
18 | + must:[ | ||
19 | + { term: { "profile.visible" => true } }, | ||
20 | + { term: { "profile.public_profile" => true } } | ||
21 | + ], | ||
22 | + } | ||
23 | + } | ||
24 | + } | ||
25 | + } | ||
26 | + } | ||
27 | + end | ||
28 | + | ||
29 | +end |
plugins/elasticsearch/lib/searchable_model/elasticsearch_indexed_model.rb
0 → 100644
@@ -0,0 +1,99 @@ | @@ -0,0 +1,99 @@ | ||
1 | +require_relative '../nested_helper/environment' | ||
2 | + | ||
3 | +module ElasticsearchIndexedModel | ||
4 | + | ||
5 | + def self.included base | ||
6 | + base.send :include, Elasticsearch::Model | ||
7 | + base.send :include, Elasticsearch::Model::Callbacks | ||
8 | + | ||
9 | + base.send :index_name, "#{Rails.env}_#{base.index_name}" | ||
10 | + | ||
11 | + base.extend ClassMethods | ||
12 | + base.send :include, InstanceMethods | ||
13 | + | ||
14 | + base.class_eval do | ||
15 | + settings index: { number_of_shards: 1 } do | ||
16 | + mappings dynamic: 'false' do | ||
17 | + base.indexed_fields.each do |field, value| | ||
18 | + type = value[:type].presence | ||
19 | + | ||
20 | + if type == :nested | ||
21 | + indexes(field, type: type) do | ||
22 | + value[:hash].each do |hash_field, hash_value| | ||
23 | + indexes(hash_field, base.indexes_as_hash(hash_field,hash_value[:type].presence)) | ||
24 | + end | ||
25 | + end | ||
26 | + else | ||
27 | + indexes(field, base.indexes_as_hash(field,type)) | ||
28 | + end | ||
29 | + print '.' | ||
30 | + end | ||
31 | + end | ||
32 | + | ||
33 | + base.__elasticsearch__.client.indices.delete \ | ||
34 | + index: base.index_name rescue nil | ||
35 | + base.__elasticsearch__.client.indices.create \ | ||
36 | + index: base.index_name, | ||
37 | + body: { | ||
38 | + settings: base.settings.to_hash, | ||
39 | + mappings: base.mappings.to_hash | ||
40 | + } | ||
41 | + end | ||
42 | + end | ||
43 | + base.send :import | ||
44 | + end | ||
45 | + | ||
46 | + module ClassMethods | ||
47 | + | ||
48 | + def indexes_as_hash(name, type) | ||
49 | + hash = {} | ||
50 | + if type.nil? | ||
51 | + hash[:fields] = raw_field(name, type) | ||
52 | + else | ||
53 | + hash[:type] = type if not type.nil? | ||
54 | + end | ||
55 | + hash | ||
56 | + end | ||
57 | + | ||
58 | + def raw_field name, type | ||
59 | + { | ||
60 | + raw: { | ||
61 | + type: "string", | ||
62 | + index: "not_analyzed" | ||
63 | + } | ||
64 | + } | ||
65 | + end | ||
66 | + | ||
67 | + def indexed_fields | ||
68 | + fields = { | ||
69 | + :environment => {type: :nested, hash: NestedEnvironment::hash }, | ||
70 | + :category_ids => {type: :integer }, | ||
71 | + :created_at => {type: :date } | ||
72 | + } | ||
73 | + fields.update(self::SEARCHABLE_FIELDS) | ||
74 | + fields.update(self.control_fields) | ||
75 | + fields | ||
76 | + end | ||
77 | + | ||
78 | + end | ||
79 | + | ||
80 | + module InstanceMethods | ||
81 | + def as_indexed_json options={} | ||
82 | + attrs = {} | ||
83 | + | ||
84 | + self.class.indexed_fields.each do |field, value| | ||
85 | + type = value[:type].presence | ||
86 | + if type == :nested | ||
87 | + attrs[field] = {} | ||
88 | + value[:hash].each do |hash_field, hash_value| | ||
89 | + attrs[field][hash_field] = self.send(field).send(hash_field) | ||
90 | + end | ||
91 | + else | ||
92 | + attrs[field] = self.send(field) | ||
93 | + end | ||
94 | + end | ||
95 | + attrs.as_json | ||
96 | + end | ||
97 | + end | ||
98 | + | ||
99 | +end |
@@ -0,0 +1,42 @@ | @@ -0,0 +1,42 @@ | ||
1 | +require_relative '../nested_helper/environment' | ||
2 | + | ||
3 | +module Filter | ||
4 | + | ||
5 | + def self.included base | ||
6 | + base.extend ClassMethods | ||
7 | + base.send :include, InstanceMethods | ||
8 | + end | ||
9 | + | ||
10 | + module ClassMethods | ||
11 | + | ||
12 | + def filter options={} | ||
13 | + environment = options[:environment].presence | ||
14 | + | ||
15 | + result_filter = {} | ||
16 | + result_filter[:indices] = {:index => self.index_name, :no_match_filter => "none" } | ||
17 | + result_filter[:indices][:filter] = { :bool => self.filter_bool(environment) } | ||
18 | + | ||
19 | + result_filter | ||
20 | + end | ||
21 | + | ||
22 | + def filter_bool environment | ||
23 | + result_filter = {} | ||
24 | + | ||
25 | + result_filter[:must] = [ NestedEnvironment::filter(environment) ] | ||
26 | + | ||
27 | + self.nested_filter.each {|filter| result_filter[:must].append(filter)} if self.respond_to? :nested_filter | ||
28 | + self.must.each {|filter| result_filter[:must].append(filter) } if self.respond_to? :must | ||
29 | + | ||
30 | + result_filter[:should] = self.should if self.respond_to? :should | ||
31 | + result_filter[:must_not] = self.must_not if self.respond_to? :must_not | ||
32 | + | ||
33 | + result_filter | ||
34 | + end | ||
35 | + | ||
36 | + end | ||
37 | + | ||
38 | + module InstanceMethods | ||
39 | + | ||
40 | + end | ||
41 | + | ||
42 | +end |
@@ -0,0 +1,9 @@ | @@ -0,0 +1,9 @@ | ||
1 | +require_relative './searchable_model/elasticsearch_indexed_model' | ||
2 | +require_relative './searchable_model/filter' | ||
3 | + | ||
4 | +module SearchableModelHelper | ||
5 | + def self.included base | ||
6 | + base.send :include, ElasticsearchIndexedModel | ||
7 | + base.send :include, Filter | ||
8 | + end | ||
9 | +end |
plugins/elasticsearch/test/api/elasticsearch_plugin_api_test.rb
0 → 100644
@@ -0,0 +1,52 @@ | @@ -0,0 +1,52 @@ | ||
1 | +require "#{File.dirname(__FILE__)}/../test_helper" | ||
2 | +require_relative '../../helpers/elasticsearch_helper' | ||
3 | + | ||
4 | +class ElasticsearchPluginApiTest < ActiveSupport::TestCase | ||
5 | + | ||
6 | + include ElasticsearchTestHelper | ||
7 | + include ElasticsearchHelper | ||
8 | + | ||
9 | + def indexed_models | ||
10 | + [Community, Person] | ||
11 | + end | ||
12 | + | ||
13 | + def create_instances | ||
14 | + 7.times.each {|index| create_user "person #{index}"} | ||
15 | + 4.times.each {|index| fast_create Community, name: "community #{index}" } | ||
16 | + end | ||
17 | + | ||
18 | + should 'show all types avaliable in /search/types endpoint' do | ||
19 | + get "/api/v1/search/types" | ||
20 | + json = JSON.parse(last_response.body) | ||
21 | + assert_equal 200, last_response.status | ||
22 | + assert_equal searchable_types.stringify_keys.keys, json["types"] | ||
23 | + end | ||
24 | + | ||
25 | + should 'respond with endpoint /search with more than 10 results' do | ||
26 | + get "/api/v1/search" | ||
27 | + json = JSON.parse(last_response.body) | ||
28 | + assert_equal 200, last_response.status | ||
29 | + assert_equal 10, json["results"].count | ||
30 | + end | ||
31 | + | ||
32 | + should 'respond with query in downcase' do | ||
33 | + get "/api/v1/search?query=person" | ||
34 | + json = JSON.parse(last_response.body) | ||
35 | + assert_equal 200, last_response.status | ||
36 | + assert_equal 7, json["results"].count | ||
37 | + end | ||
38 | + | ||
39 | + should 'respond with query in uppercase' do | ||
40 | + get "/api/v1/search?query=PERSON" | ||
41 | + json = JSON.parse(last_response.body) | ||
42 | + assert_equal 200, last_response.status | ||
43 | + assert_equal 7, json["results"].count | ||
44 | + end | ||
45 | + | ||
46 | + should 'respond with selected_type' do | ||
47 | + get "/api/v1/search?selected_type=community" | ||
48 | + json = JSON.parse(last_response.body) | ||
49 | + assert_equal 200, last_response.status | ||
50 | + assert_equal 4, json["results"].count | ||
51 | + end | ||
52 | +end |
plugins/elasticsearch/test/api/elasticsearch_plugin_entities_test.rb
0 → 100644
@@ -0,0 +1,124 @@ | @@ -0,0 +1,124 @@ | ||
1 | +require "#{File.dirname(__FILE__)}/../test_helper" | ||
2 | + | ||
3 | +class ElasticsearchPluginEntitiesTest < ActiveSupport::TestCase | ||
4 | + | ||
5 | + include ElasticsearchTestHelper | ||
6 | + | ||
7 | + def indexed_models | ||
8 | + [Person,TextArticle,UploadedFile,Community,Event] | ||
9 | + end | ||
10 | + | ||
11 | + def create_instances | ||
12 | + user = create_user "sample person", environment_id: 1 | ||
13 | + | ||
14 | + fast_create Community, name: "sample community", created_at: 10.days.ago,updated_at: 5.days.ago, environment_id: 1 | ||
15 | + | ||
16 | + fast_create UploadedFile, name: "sample uploadedfile", created_at: 3.days.ago, updated_at: 1.days.ago, author_id: user.person.id, abstract: "sample abstract", profile_id: user.person.id | ||
17 | + fast_create Event, name: "sample event", created_at: 20.days.ago, updated_at: 5.days.ago, author_id: user.person.id, abstract: "sample abstract", profile_id: user.person.id | ||
18 | + fast_create RawHTMLArticle, name: "sample raw html article", created_at: 15.days.ago ,updated_at: 5.days.ago, author_id: user.person.id, profile_id: user.person.id | ||
19 | + fast_create TinyMceArticle, name: "sample tiny mce article", created_at: 5.days.ago, updated_at: 5.days.ago, author_id: user.person.id, profile_id: user.person.id | ||
20 | + end | ||
21 | + | ||
22 | + should 'show attributes from person' do | ||
23 | + params = {:selected_type => "person" } | ||
24 | + get "/api/v1/search?#{params.to_query}" | ||
25 | + json= JSON.parse(last_response.body) | ||
26 | + | ||
27 | + expected_person = Person.find_by name: "sample person" | ||
28 | + | ||
29 | + assert_equal 200, last_response.status | ||
30 | + assert_equal expected_person.id, json['results'][0]['id'] | ||
31 | + assert_equal expected_person.name, json['results'][0]['name'] | ||
32 | + assert_equal expected_person.type, json['results'][0]['type'] | ||
33 | + assert_equal "", json['results'][0]['description'] | ||
34 | + assert_equal expected_person.created_at.strftime("%Y/%m/%d %H:%M:%S"), json['results'][0]['created_at'] | ||
35 | + assert_equal expected_person.updated_at.strftime("%Y/%m/%d %H:%M:%S"), json['results'][0]['updated_at'] | ||
36 | + end | ||
37 | + | ||
38 | + | ||
39 | + should 'show attributes from community' do | ||
40 | + params = {:selected_type => "community" } | ||
41 | + get "/api/v1/search?#{params.to_query}" | ||
42 | + json= JSON.parse(last_response.body) | ||
43 | + | ||
44 | + expected_community = Community.find_by name: "sample community" | ||
45 | + | ||
46 | + assert_equal 200, last_response.status | ||
47 | + | ||
48 | + assert_equal expected_community.id, json['results'][0]['id'] | ||
49 | + assert_equal expected_community.name, json['results'][0]['name'] | ||
50 | + assert_equal expected_community.type, json['results'][0]['type'] | ||
51 | + assert_equal "", json['results'][0]['description'] | ||
52 | + assert_equal expected_community.created_at.strftime("%Y/%m/%d %H:%M:%S"), json['results'][0]['created_at'] | ||
53 | + assert_equal expected_community.updated_at.strftime("%Y/%m/%d %H:%M:%S"), json['results'][0]['updated_at'] | ||
54 | + end | ||
55 | + | ||
56 | + should 'show attributes from text_article' do | ||
57 | + params = {:selected_type => "text_article" } | ||
58 | + get "/api/v1/search?#{params.to_query}" | ||
59 | + | ||
60 | + json= JSON.parse(last_response.body) | ||
61 | + | ||
62 | + assert_equal 200, last_response.status | ||
63 | + | ||
64 | + expected_text_articles = TextArticle.all | ||
65 | + | ||
66 | + expected_text_articles.each_with_index {|object,index| | ||
67 | + assert_equal object.id, json['results'][index]['id'] | ||
68 | + assert_equal object.name, json['results'][index]['name'] | ||
69 | + assert_equal "TextArticle", json['results'][index]['type'] | ||
70 | + | ||
71 | + expected_author = (object.author.nil?) ? "" : object.author.name | ||
72 | + | ||
73 | + assert_equal expected_author, json['results'][index]['author'] | ||
74 | + assert_equal object.created_at.strftime("%Y/%m/%d %H:%M:%S"), json['results'][index]['created_at'] | ||
75 | + assert_equal object.updated_at.strftime("%Y/%m/%d %H:%M:%S"), json['results'][index]['updated_at'] | ||
76 | + } | ||
77 | + end | ||
78 | + | ||
79 | + should 'show attributes from uploaded_file' do | ||
80 | + params = {:selected_type => "uploaded_file"} | ||
81 | + get "/api/v1/search?#{params.to_query}" | ||
82 | + | ||
83 | + json= JSON.parse(last_response.body) | ||
84 | + | ||
85 | + assert_equal 200, last_response.status | ||
86 | + | ||
87 | + expected_uploaded_files = UploadedFile.all | ||
88 | + expected_uploaded_files.each_with_index {|object,index| | ||
89 | + assert_equal object.id, json['results'][index]['id'] | ||
90 | + assert_equal object.name, json['results'][index]['name'] | ||
91 | + assert_equal object.abstract, json['results'][index]['abstract'] | ||
92 | + assert_equal "UploadedFile", json['results'][index]['type'] | ||
93 | + | ||
94 | + expected_author = (object.author.nil?) ? "" : object.author.name | ||
95 | + assert_equal expected_author, json['results'][index]['author'] | ||
96 | + | ||
97 | + assert_equal object.created_at.strftime("%Y/%m/%d %H:%M:%S"), json['results'][index]['created_at'] | ||
98 | + assert_equal object.updated_at.strftime("%Y/%m/%d %H:%M:%S"), json['results'][index]['updated_at'] | ||
99 | + } | ||
100 | + end | ||
101 | + | ||
102 | + should 'show attributes from event' do | ||
103 | + params = {:selected_type => "event"} | ||
104 | + get "/api/v1/search?#{params.to_query}" | ||
105 | + | ||
106 | + json= JSON.parse(last_response.body) | ||
107 | + | ||
108 | + assert_equal 200, last_response.status | ||
109 | + expected_events = Event.all | ||
110 | + expected_events.each_with_index {|object,index| | ||
111 | + assert_equal object.id, json['results'][index]['id'] | ||
112 | + assert_equal object.name, json['results'][index]['name'] | ||
113 | + assert_equal object.abstract, json['results'][index]['abstract'] | ||
114 | + assert_equal "Event", json['results'][index]['type'] | ||
115 | + | ||
116 | + expected_author = (object.author.nil?) ? "" : object.author.name | ||
117 | + assert_equal expected_author, json['results'][index]['author'] | ||
118 | + | ||
119 | + assert_equal object.created_at.strftime("%Y/%m/%d %H:%M:%S"), json['results'][index]['created_at'] | ||
120 | + assert_equal object.updated_at.strftime("%Y/%m/%d %H:%M:%S"), json['results'][index]['updated_at'] | ||
121 | + } | ||
122 | + end | ||
123 | + | ||
124 | +end |
plugins/elasticsearch/test/functional/elasticsearch_plugin_controller_test.rb
0 → 100644
@@ -0,0 +1,115 @@ | @@ -0,0 +1,115 @@ | ||
1 | +require "#{File.dirname(__FILE__)}/../test_helper" | ||
2 | + | ||
3 | +class ElasticsearchPluginControllerTest < ActionController::TestCase | ||
4 | + | ||
5 | + include ElasticsearchTestHelper | ||
6 | + | ||
7 | + def indexed_models | ||
8 | + [Community, Person] | ||
9 | + end | ||
10 | + | ||
11 | + def create_instances | ||
12 | + create_people | ||
13 | + create_communities | ||
14 | + end | ||
15 | + | ||
16 | + def create_people | ||
17 | + 5.times do | index | | ||
18 | + create_user "person #{index}" | ||
19 | + end | ||
20 | + end | ||
21 | + | ||
22 | + def create_communities | ||
23 | + 6.times do | index | | ||
24 | + fast_create Community, name: "community #{index}", created_at: Date.new | ||
25 | + end | ||
26 | + end | ||
27 | + | ||
28 | + should 'work and uses control filter variables' do | ||
29 | + get :index | ||
30 | + assert_response :success | ||
31 | + assert_not_nil assigns(:searchable_types) | ||
32 | + assert_not_nil assigns(:selected_type) | ||
33 | + assert_not_nil assigns(:sort_types) | ||
34 | + assert_not_nil assigns(:selected_sort) | ||
35 | + end | ||
36 | + | ||
37 | + should 'return 10 results if selected_type is nil and query is nil' do | ||
38 | + get :index | ||
39 | + assert_response :success | ||
40 | + assert_select ".search-item" , 10 | ||
41 | + end | ||
42 | + | ||
43 | + should 'render pagination if results has more than 10' do | ||
44 | + get :index | ||
45 | + assert_response :success | ||
46 | + assert_select ".pagination", 1 | ||
47 | + end | ||
48 | + | ||
49 | + should 'return results filtered by selected_type' do | ||
50 | + get :index, { 'selected_type' => :community} | ||
51 | + assert_response :success | ||
52 | + assert_select ".search-item", 6 | ||
53 | + assert_template partial: '_community_display' | ||
54 | + end | ||
55 | + | ||
56 | + should 'return results filtered by query' do | ||
57 | + get :index, { 'query' => "person"} | ||
58 | + assert_response :success | ||
59 | + assert_select ".search-item", 5 | ||
60 | + assert_template partial: '_person_display' | ||
61 | + end | ||
62 | + | ||
63 | + should 'return results filtered by query with uppercase' do | ||
64 | + get :index, {'query' => "PERSON 1"} | ||
65 | + assert_response :success | ||
66 | + assert_template partial: '_person_display' | ||
67 | + assert_tag(tag: "div", attributes: { class: "person-item" } , descendant: { tag: "a", child: "person 1"} ) | ||
68 | + end | ||
69 | + | ||
70 | + should 'return results filtered by query with downcase' do | ||
71 | + get :index, {'query' => "person 1"} | ||
72 | + assert_response :success | ||
73 | + assert_tag(tag: "div", attributes: { class: "person-item" } , descendant: { tag: "a", child: "person 1"} ) | ||
74 | + end | ||
75 | + | ||
76 | + should 'return new person indexed' do | ||
77 | + get :index, { "selected_type" => :community} | ||
78 | + assert_response :success | ||
79 | + assert_select ".search-item", 6 | ||
80 | + | ||
81 | + fast_create Community, name: "community #{7}", created_at: Date.new | ||
82 | + Community.import | ||
83 | + sleep 2 | ||
84 | + | ||
85 | + get :index, { "selected_type" => :community} | ||
86 | + assert_response :success | ||
87 | + assert_select ".search-item", 7 | ||
88 | + end | ||
89 | + | ||
90 | + should 'not return person deleted' do | ||
91 | + get :index, { "selected_type" => :community} | ||
92 | + assert_response :success | ||
93 | + assert_select ".search-item", 6 | ||
94 | + | ||
95 | + Community.first.delete | ||
96 | + Community.import | ||
97 | + | ||
98 | + get :index, { "selected_type" => :community} | ||
99 | + assert_response :success | ||
100 | + assert_select ".search-item", 5 | ||
101 | + end | ||
102 | + | ||
103 | + should 'redirect to elasticsearch plugin when request are send to core' do | ||
104 | + @controller = SearchController.new | ||
105 | + get 'index' | ||
106 | + params = {:action => 'index', :controller => 'search'} | ||
107 | + assert_redirected_to controller: 'elasticsearch_plugin', action: 'search', params: params | ||
108 | + end | ||
109 | + | ||
110 | + should 'pass params to elastic search controller' do | ||
111 | + get 'index', { query: 'community' } | ||
112 | + assert_not_nil assigns(:results) | ||
113 | + assert_template partial: '_community_display' | ||
114 | + end | ||
115 | +end |
plugins/elasticsearch/test/unit/api/elasticsearch_plugin_api_test.rb
@@ -1,52 +0,0 @@ | @@ -1,52 +0,0 @@ | ||
1 | -require "#{File.dirname(__FILE__)}/../../test_helper" | ||
2 | -require_relative '../../../helpers/elasticsearch_helper' | ||
3 | - | ||
4 | -class ElasticsearchPluginApiTest < ActiveSupport::TestCase | ||
5 | - | ||
6 | - include ElasticsearchTestHelper | ||
7 | - include ElasticsearchHelper | ||
8 | - | ||
9 | - def indexed_models | ||
10 | - [Community, Person] | ||
11 | - end | ||
12 | - | ||
13 | - def create_instances | ||
14 | - 7.times.each {|index| create_user "person #{index}"} | ||
15 | - 4.times.each {|index| fast_create Community, name: "community #{index}" } | ||
16 | - end | ||
17 | - | ||
18 | - should 'show all types avaliable in /search/types endpoint' do | ||
19 | - get "/api/v1/search/types" | ||
20 | - json = JSON.parse(last_response.body) | ||
21 | - assert_equal 200, last_response.status | ||
22 | - assert_equal searchable_types.stringify_keys.keys, json["types"] | ||
23 | - end | ||
24 | - | ||
25 | - should 'respond with endpoint /search with more than 10 results' do | ||
26 | - get "/api/v1/search" | ||
27 | - json = JSON.parse(last_response.body) | ||
28 | - assert_equal 200, last_response.status | ||
29 | - assert_equal 10, json["results"].count | ||
30 | - end | ||
31 | - | ||
32 | - should 'respond with query in downcase' do | ||
33 | - get "/api/v1/search?query=person" | ||
34 | - json = JSON.parse(last_response.body) | ||
35 | - assert_equal 200, last_response.status | ||
36 | - assert_equal 7, json["results"].count | ||
37 | - end | ||
38 | - | ||
39 | - should 'respond with query in uppercase' do | ||
40 | - get "/api/v1/search?query=PERSON" | ||
41 | - json = JSON.parse(last_response.body) | ||
42 | - assert_equal 200, last_response.status | ||
43 | - assert_equal 7, json["results"].count | ||
44 | - end | ||
45 | - | ||
46 | - should 'respond with selected_type' do | ||
47 | - get "/api/v1/search?selected_type=community" | ||
48 | - json = JSON.parse(last_response.body) | ||
49 | - assert_equal 200, last_response.status | ||
50 | - assert_equal 4, json["results"].count | ||
51 | - end | ||
52 | -end |
plugins/elasticsearch/test/unit/api/elasticsearch_plugin_entities_test.rb
@@ -1,124 +0,0 @@ | @@ -1,124 +0,0 @@ | ||
1 | -require "#{File.dirname(__FILE__)}/../../test_helper" | ||
2 | - | ||
3 | -class ElasticsearchPluginEntitiesTest < ActiveSupport::TestCase | ||
4 | - | ||
5 | - include ElasticsearchTestHelper | ||
6 | - | ||
7 | - def indexed_models | ||
8 | - [Person,TextArticle,UploadedFile,Community,Event] | ||
9 | - end | ||
10 | - | ||
11 | - def create_instances | ||
12 | - user = create_user "sample person", environment_id: 1 | ||
13 | - | ||
14 | - fast_create Community, name: "sample community", created_at: 10.days.ago,updated_at: 5.days.ago, environment_id: 1 | ||
15 | - | ||
16 | - fast_create UploadedFile, name: "sample uploadedfile", created_at: 3.days.ago, updated_at: 1.days.ago, author_id: user.person.id, abstract: "sample abstract", profile_id: user.person.id | ||
17 | - fast_create Event, name: "sample event", created_at: 20.days.ago, updated_at: 5.days.ago, author_id: user.person.id, abstract: "sample abstract", profile_id: user.person.id | ||
18 | - fast_create RawHTMLArticle, name: "sample raw html article", created_at: 15.days.ago ,updated_at: 5.days.ago, author_id: user.person.id, profile_id: user.person.id | ||
19 | - fast_create TinyMceArticle, name: "sample tiny mce article", created_at: 5.days.ago, updated_at: 5.days.ago, author_id: user.person.id, profile_id: user.person.id | ||
20 | - end | ||
21 | - | ||
22 | - should 'show attributes from person' do | ||
23 | - params = {:selected_type => "person" } | ||
24 | - get "/api/v1/search?#{params.to_query}" | ||
25 | - json= JSON.parse(last_response.body) | ||
26 | - | ||
27 | - expected_person = Person.find_by name: "sample person" | ||
28 | - | ||
29 | - assert_equal 200, last_response.status | ||
30 | - assert_equal expected_person.id, json['results'][0]['id'] | ||
31 | - assert_equal expected_person.name, json['results'][0]['name'] | ||
32 | - assert_equal expected_person.type, json['results'][0]['type'] | ||
33 | - assert_equal "", json['results'][0]['description'] | ||
34 | - assert_equal expected_person.created_at.strftime("%Y/%m/%d %H:%M:%S"), json['results'][0]['created_at'] | ||
35 | - assert_equal expected_person.updated_at.strftime("%Y/%m/%d %H:%M:%S"), json['results'][0]['updated_at'] | ||
36 | - end | ||
37 | - | ||
38 | - | ||
39 | - should 'show attributes from community' do | ||
40 | - params = {:selected_type => "community" } | ||
41 | - get "/api/v1/search?#{params.to_query}" | ||
42 | - json= JSON.parse(last_response.body) | ||
43 | - | ||
44 | - expected_community = Community.find_by name: "sample community" | ||
45 | - | ||
46 | - assert_equal 200, last_response.status | ||
47 | - | ||
48 | - assert_equal expected_community.id, json['results'][0]['id'] | ||
49 | - assert_equal expected_community.name, json['results'][0]['name'] | ||
50 | - assert_equal expected_community.type, json['results'][0]['type'] | ||
51 | - assert_equal "", json['results'][0]['description'] | ||
52 | - assert_equal expected_community.created_at.strftime("%Y/%m/%d %H:%M:%S"), json['results'][0]['created_at'] | ||
53 | - assert_equal expected_community.updated_at.strftime("%Y/%m/%d %H:%M:%S"), json['results'][0]['updated_at'] | ||
54 | - end | ||
55 | - | ||
56 | - should 'show attributes from text_article' do | ||
57 | - params = {:selected_type => "text_article" } | ||
58 | - get "/api/v1/search?#{params.to_query}" | ||
59 | - | ||
60 | - json= JSON.parse(last_response.body) | ||
61 | - | ||
62 | - assert_equal 200, last_response.status | ||
63 | - | ||
64 | - expected_text_articles = TextArticle.all | ||
65 | - | ||
66 | - expected_text_articles.each_with_index {|object,index| | ||
67 | - assert_equal object.id, json['results'][index]['id'] | ||
68 | - assert_equal object.name, json['results'][index]['name'] | ||
69 | - assert_equal "TextArticle", json['results'][index]['type'] | ||
70 | - | ||
71 | - expected_author = (object.author.nil?) ? "" : object.author.name | ||
72 | - | ||
73 | - assert_equal expected_author, json['results'][index]['author'] | ||
74 | - assert_equal object.created_at.strftime("%Y/%m/%d %H:%M:%S"), json['results'][index]['created_at'] | ||
75 | - assert_equal object.updated_at.strftime("%Y/%m/%d %H:%M:%S"), json['results'][index]['updated_at'] | ||
76 | - } | ||
77 | - end | ||
78 | - | ||
79 | - should 'show attributes from uploaded_file' do | ||
80 | - params = {:selected_type => "uploaded_file"} | ||
81 | - get "/api/v1/search?#{params.to_query}" | ||
82 | - | ||
83 | - json= JSON.parse(last_response.body) | ||
84 | - | ||
85 | - assert_equal 200, last_response.status | ||
86 | - | ||
87 | - expected_uploaded_files = UploadedFile.all | ||
88 | - expected_uploaded_files.each_with_index {|object,index| | ||
89 | - assert_equal object.id, json['results'][index]['id'] | ||
90 | - assert_equal object.name, json['results'][index]['name'] | ||
91 | - assert_equal object.abstract, json['results'][index]['abstract'] | ||
92 | - assert_equal "UploadedFile", json['results'][index]['type'] | ||
93 | - | ||
94 | - expected_author = (object.author.nil?) ? "" : object.author.name | ||
95 | - assert_equal expected_author, json['results'][index]['author'] | ||
96 | - | ||
97 | - assert_equal object.created_at.strftime("%Y/%m/%d %H:%M:%S"), json['results'][index]['created_at'] | ||
98 | - assert_equal object.updated_at.strftime("%Y/%m/%d %H:%M:%S"), json['results'][index]['updated_at'] | ||
99 | - } | ||
100 | - end | ||
101 | - | ||
102 | - should 'show attributes from event' do | ||
103 | - params = {:selected_type => "event"} | ||
104 | - get "/api/v1/search?#{params.to_query}" | ||
105 | - | ||
106 | - json= JSON.parse(last_response.body) | ||
107 | - | ||
108 | - assert_equal 200, last_response.status | ||
109 | - expected_events = Event.all | ||
110 | - expected_events.each_with_index {|object,index| | ||
111 | - assert_equal object.id, json['results'][index]['id'] | ||
112 | - assert_equal object.name, json['results'][index]['name'] | ||
113 | - assert_equal object.abstract, json['results'][index]['abstract'] | ||
114 | - assert_equal "Event", json['results'][index]['type'] | ||
115 | - | ||
116 | - expected_author = (object.author.nil?) ? "" : object.author.name | ||
117 | - assert_equal expected_author, json['results'][index]['author'] | ||
118 | - | ||
119 | - assert_equal object.created_at.strftime("%Y/%m/%d %H:%M:%S"), json['results'][index]['created_at'] | ||
120 | - assert_equal object.updated_at.strftime("%Y/%m/%d %H:%M:%S"), json['results'][index]['updated_at'] | ||
121 | - } | ||
122 | - end | ||
123 | - | ||
124 | -end |
@@ -0,0 +1,24 @@ | @@ -0,0 +1,24 @@ | ||
1 | +require "#{File.dirname(__FILE__)}/../test_helper" | ||
2 | + | ||
3 | +class CommunityTest < ActiveSupport::TestCase | ||
4 | + | ||
5 | + include ElasticsearchTestHelper | ||
6 | + | ||
7 | + def indexed_models | ||
8 | + [Community] | ||
9 | + end | ||
10 | + | ||
11 | + should 'index searchable fields for Community model' do | ||
12 | + Community::SEARCHABLE_FIELDS.each do |key, value| | ||
13 | + assert_includes indexed_fields(Community), key | ||
14 | + end | ||
15 | + end | ||
16 | + | ||
17 | + should 'index control fields for Community model' do | ||
18 | + Community::control_fields.each do |key, value| | ||
19 | + assert_includes indexed_fields(Community), key | ||
20 | + assert_equal indexed_fields(Community)[key][:type], value[:type] || 'string' | ||
21 | + end | ||
22 | + end | ||
23 | + | ||
24 | +end |
plugins/elasticsearch/test/unit/controllers/elasticsearch_plugin_controller_test.rb
@@ -1,115 +0,0 @@ | @@ -1,115 +0,0 @@ | ||
1 | -require "#{File.dirname(__FILE__)}/../../test_helper" | ||
2 | - | ||
3 | -class ElasticsearchPluginControllerTest < ActionController::TestCase | ||
4 | - | ||
5 | - include ElasticsearchTestHelper | ||
6 | - | ||
7 | - def indexed_models | ||
8 | - [Community, Person] | ||
9 | - end | ||
10 | - | ||
11 | - def create_instances | ||
12 | - create_people | ||
13 | - create_communities | ||
14 | - end | ||
15 | - | ||
16 | - def create_people | ||
17 | - 5.times do | index | | ||
18 | - create_user "person #{index}" | ||
19 | - end | ||
20 | - end | ||
21 | - | ||
22 | - def create_communities | ||
23 | - 6.times do | index | | ||
24 | - fast_create Community, name: "community #{index}", created_at: Date.new | ||
25 | - end | ||
26 | - end | ||
27 | - | ||
28 | - should 'work and uses control filter variables' do | ||
29 | - get :index | ||
30 | - assert_response :success | ||
31 | - assert_not_nil assigns(:searchable_types) | ||
32 | - assert_not_nil assigns(:selected_type) | ||
33 | - assert_not_nil assigns(:sort_types) | ||
34 | - assert_not_nil assigns(:selected_sort) | ||
35 | - end | ||
36 | - | ||
37 | - should 'return 10 results if selected_type is nil and query is nil' do | ||
38 | - get :index | ||
39 | - assert_response :success | ||
40 | - assert_select ".search-item" , 10 | ||
41 | - end | ||
42 | - | ||
43 | - should 'render pagination if results has more than 10' do | ||
44 | - get :index | ||
45 | - assert_response :success | ||
46 | - assert_select ".pagination", 1 | ||
47 | - end | ||
48 | - | ||
49 | - should 'return results filtered by selected_type' do | ||
50 | - get :index, { 'selected_type' => :community} | ||
51 | - assert_response :success | ||
52 | - assert_select ".search-item", 6 | ||
53 | - assert_template partial: '_community_display' | ||
54 | - end | ||
55 | - | ||
56 | - should 'return results filtered by query' do | ||
57 | - get :index, { 'query' => "person"} | ||
58 | - assert_response :success | ||
59 | - assert_select ".search-item", 5 | ||
60 | - assert_template partial: '_person_display' | ||
61 | - end | ||
62 | - | ||
63 | - should 'return results filtered by query with uppercase' do | ||
64 | - get :index, {'query' => "PERSON 1"} | ||
65 | - assert_response :success | ||
66 | - assert_template partial: '_person_display' | ||
67 | - assert_tag(tag: "div", attributes: { class: "person-item" } , descendant: { tag: "a", child: "person 1"} ) | ||
68 | - end | ||
69 | - | ||
70 | - should 'return results filtered by query with downcase' do | ||
71 | - get :index, {'query' => "person 1"} | ||
72 | - assert_response :success | ||
73 | - assert_tag(tag: "div", attributes: { class: "person-item" } , descendant: { tag: "a", child: "person 1"} ) | ||
74 | - end | ||
75 | - | ||
76 | - should 'return new person indexed' do | ||
77 | - get :index, { "selected_type" => :community} | ||
78 | - assert_response :success | ||
79 | - assert_select ".search-item", 6 | ||
80 | - | ||
81 | - fast_create Community, name: "community #{7}", created_at: Date.new | ||
82 | - Community.import | ||
83 | - sleep 2 | ||
84 | - | ||
85 | - get :index, { "selected_type" => :community} | ||
86 | - assert_response :success | ||
87 | - assert_select ".search-item", 7 | ||
88 | - end | ||
89 | - | ||
90 | - should 'not return person deleted' do | ||
91 | - get :index, { "selected_type" => :community} | ||
92 | - assert_response :success | ||
93 | - assert_select ".search-item", 6 | ||
94 | - | ||
95 | - Community.first.delete | ||
96 | - Community.import | ||
97 | - | ||
98 | - get :index, { "selected_type" => :community} | ||
99 | - assert_response :success | ||
100 | - assert_select ".search-item", 5 | ||
101 | - end | ||
102 | - | ||
103 | - should 'redirect to elasticsearch plugin when request are send to core' do | ||
104 | - @controller = SearchController.new | ||
105 | - get 'index' | ||
106 | - params = {:action => 'index', :controller => 'search'} | ||
107 | - assert_redirected_to controller: 'elasticsearch_plugin', action: 'search', params: params | ||
108 | - end | ||
109 | - | ||
110 | - should 'pass params to elastic search controller' do | ||
111 | - get 'index', { query: 'community' } | ||
112 | - assert_not_nil assigns(:results) | ||
113 | - assert_template partial: '_community_display' | ||
114 | - end | ||
115 | -end |
plugins/elasticsearch/test/unit/elasticsearch_helper_test.rb
0 → 100644
@@ -0,0 +1,75 @@ | @@ -0,0 +1,75 @@ | ||
1 | +require "#{File.dirname(__FILE__)}/../test_helper" | ||
2 | +require_relative '../../helpers/elasticsearch_helper.rb' | ||
3 | + | ||
4 | +class ElasticsearchHelperTest < ActiveSupport::TestCase | ||
5 | + | ||
6 | + include ElasticsearchTestHelper | ||
7 | + include ElasticsearchHelper | ||
8 | + | ||
9 | + attr_accessor :params | ||
10 | + | ||
11 | + def indexed_models | ||
12 | + [Person,TextArticle,UploadedFile,Community,Event] | ||
13 | + end | ||
14 | + | ||
15 | + def create_instances | ||
16 | + create_user "Jose Abreu" | ||
17 | + create_user "Joana Abreu" | ||
18 | + create_user "Joao Abreu" | ||
19 | + create_user "Ana Abreu" | ||
20 | + end | ||
21 | + | ||
22 | + should 'return default_per_page when nil is passed' do | ||
23 | + assert_not_nil default_per_page nil | ||
24 | + assert_equal 10, default_per_page(nil) | ||
25 | + end | ||
26 | + | ||
27 | + should 'return default_per_page when per_page is passed' do | ||
28 | + assert_equal 15, default_per_page(15) | ||
29 | + end | ||
30 | + | ||
31 | + should 'have indexed_models in searchable_models' do | ||
32 | + assert_equivalent indexed_models, searchable_models | ||
33 | + end | ||
34 | + | ||
35 | + should 'return fields from models using weight' do | ||
36 | + class StubClass | ||
37 | + SEARCHABLE_FIELDS = {:name => {:weight => 10}, | ||
38 | + :login => {:weight => 20}, | ||
39 | + :description => {:weight => 2}} | ||
40 | + end | ||
41 | + | ||
42 | + expected = ["name^10", "login^20", "description^2"] | ||
43 | + assert_equivalent expected, fields_from_models([StubClass]) | ||
44 | + end | ||
45 | + | ||
46 | + should 'search from model Person sorted by Alphabetic' do | ||
47 | + self.params= {:selected_type => 'person', | ||
48 | + :filter => 'lexical', | ||
49 | + :query => "Abreu", | ||
50 | + :per_page => 4} | ||
51 | + | ||
52 | + result = process_results | ||
53 | + assert_equal ["Ana Abreu","Joana Abreu","Joao Abreu","Jose Abreu"], result.map(&:name) | ||
54 | + end | ||
55 | + | ||
56 | + should 'search from model Person sorted by More Recent' do | ||
57 | + self.params= {:selected_type => 'person', | ||
58 | + :filter => 'more_recent', | ||
59 | + :query => 'ABREU', | ||
60 | + :per_page => 4} | ||
61 | + | ||
62 | + result = process_results | ||
63 | + assert_equal ["Ana Abreu","Joao Abreu","Joana Abreu","Jose Abreu"], result.map(&:name) | ||
64 | + end | ||
65 | + | ||
66 | + should 'search from model Person sorted by Relevance' do | ||
67 | + self.params= {:selected_type => 'person', | ||
68 | + :query => 'JOA BREU', | ||
69 | + :per_page => 4} | ||
70 | + | ||
71 | + result = process_results | ||
72 | + assert_equal ["Joana Abreu", "Joao Abreu"], result.map(&:name) | ||
73 | + end | ||
74 | + | ||
75 | +end |
@@ -0,0 +1,24 @@ | @@ -0,0 +1,24 @@ | ||
1 | +require "#{File.dirname(__FILE__)}/../test_helper" | ||
2 | + | ||
3 | +class EventTest < ActionController::TestCase | ||
4 | + | ||
5 | + include ElasticsearchTestHelper | ||
6 | + | ||
7 | + def indexed_models | ||
8 | + [Event] | ||
9 | + end | ||
10 | + | ||
11 | + should 'index searchable fields for Event model' do | ||
12 | + Event::SEARCHABLE_FIELDS.each do |key, value| | ||
13 | + assert_includes indexed_fields(Event), key | ||
14 | + end | ||
15 | + end | ||
16 | + | ||
17 | + should 'index control fields for Event model' do | ||
18 | + Event::control_fields.each do |key, value| | ||
19 | + assert_includes indexed_fields(Event), key | ||
20 | + assert_equal indexed_fields(Event)[key][:type], value[:type] || 'string' | ||
21 | + end | ||
22 | + end | ||
23 | + | ||
24 | +end |
plugins/elasticsearch/test/unit/helpers/elasticsearch_helper_test.rb
@@ -1,75 +0,0 @@ | @@ -1,75 +0,0 @@ | ||
1 | -require "#{File.dirname(__FILE__)}/../../test_helper" | ||
2 | -require_relative '../../../helpers/elasticsearch_helper.rb' | ||
3 | - | ||
4 | -class ElasticsearchHelperTest < ActiveSupport::TestCase | ||
5 | - | ||
6 | - include ElasticsearchTestHelper | ||
7 | - include ElasticsearchHelper | ||
8 | - | ||
9 | - attr_accessor :params | ||
10 | - | ||
11 | - def indexed_models | ||
12 | - [Person,TextArticle,UploadedFile,Community,Event] | ||
13 | - end | ||
14 | - | ||
15 | - def create_instances | ||
16 | - create_user "Jose Abreu" | ||
17 | - create_user "Joana Abreu" | ||
18 | - create_user "Joao Abreu" | ||
19 | - create_user "Ana Abreu" | ||
20 | - end | ||
21 | - | ||
22 | - should 'return default_per_page when nil is passed' do | ||
23 | - assert_not_nil default_per_page nil | ||
24 | - assert_equal 10, default_per_page(nil) | ||
25 | - end | ||
26 | - | ||
27 | - should 'return default_per_page when per_page is passed' do | ||
28 | - assert_equal 15, default_per_page(15) | ||
29 | - end | ||
30 | - | ||
31 | - should 'have indexed_models in searchable_models' do | ||
32 | - assert_equivalent indexed_models, searchable_models | ||
33 | - end | ||
34 | - | ||
35 | - should 'return fields from models using weight' do | ||
36 | - class StubClass | ||
37 | - SEARCHABLE_FIELDS = {:name => {:weight => 10}, | ||
38 | - :login => {:weight => 20}, | ||
39 | - :description => {:weight => 2}} | ||
40 | - end | ||
41 | - | ||
42 | - expected = ["name^10", "login^20", "description^2"] | ||
43 | - assert_equivalent expected, fields_from_models([StubClass]) | ||
44 | - end | ||
45 | - | ||
46 | - should 'search from model Person sorted by Alphabetic' do | ||
47 | - self.params= {:selected_type => 'person', | ||
48 | - :filter => 'lexical', | ||
49 | - :query => "Abreu", | ||
50 | - :per_page => 4} | ||
51 | - | ||
52 | - result = process_results | ||
53 | - assert_equal ["Ana Abreu","Joana Abreu","Joao Abreu","Jose Abreu"], result.map(&:name) | ||
54 | - end | ||
55 | - | ||
56 | - should 'search from model Person sorted by More Recent' do | ||
57 | - self.params= {:selected_type => 'person', | ||
58 | - :filter => 'more_recent', | ||
59 | - :query => 'ABREU', | ||
60 | - :per_page => 4} | ||
61 | - | ||
62 | - result = process_results | ||
63 | - assert_equal ["Ana Abreu","Joao Abreu","Joana Abreu","Jose Abreu"], result.map(&:name) | ||
64 | - end | ||
65 | - | ||
66 | - should 'search from model Person sorted by Relevance' do | ||
67 | - self.params= {:selected_type => 'person', | ||
68 | - :query => 'JOA BREU', | ||
69 | - :per_page => 4} | ||
70 | - | ||
71 | - result = process_results | ||
72 | - assert_equal ["Joana Abreu", "Joao Abreu"], result.map(&:name) | ||
73 | - end | ||
74 | - | ||
75 | -end |
plugins/elasticsearch/test/unit/models/community_test.rb
@@ -1,24 +0,0 @@ | @@ -1,24 +0,0 @@ | ||
1 | -require "#{File.dirname(__FILE__)}/../../test_helper" | ||
2 | - | ||
3 | -class CommunityTest < ActionController::TestCase | ||
4 | - | ||
5 | - include ElasticsearchTestHelper | ||
6 | - | ||
7 | - def indexed_models | ||
8 | - [Community] | ||
9 | - end | ||
10 | - | ||
11 | - should 'index searchable fields for Community model' do | ||
12 | - Community::SEARCHABLE_FIELDS.each do |key, value| | ||
13 | - assert_includes indexed_fields(Community), key | ||
14 | - end | ||
15 | - end | ||
16 | - | ||
17 | - should 'index control fields for Community model' do | ||
18 | - Community::control_fields.each do |key, value| | ||
19 | - assert_includes indexed_fields(Community), key | ||
20 | - assert_equal indexed_fields(Community)[key][:type], value[:type] || 'string' | ||
21 | - end | ||
22 | - end | ||
23 | - | ||
24 | -end |
plugins/elasticsearch/test/unit/models/event_test.rb
@@ -1,24 +0,0 @@ | @@ -1,24 +0,0 @@ | ||
1 | -require "#{File.dirname(__FILE__)}/../../test_helper" | ||
2 | - | ||
3 | -class EventTest < ActionController::TestCase | ||
4 | - | ||
5 | - include ElasticsearchTestHelper | ||
6 | - | ||
7 | - def indexed_models | ||
8 | - [Event] | ||
9 | - end | ||
10 | - | ||
11 | - should 'index searchable fields for Event model' do | ||
12 | - Event::SEARCHABLE_FIELDS.each do |key, value| | ||
13 | - assert_includes indexed_fields(Event), key | ||
14 | - end | ||
15 | - end | ||
16 | - | ||
17 | - should 'index control fields for Event model' do | ||
18 | - Event::control_fields.each do |key, value| | ||
19 | - assert_includes indexed_fields(Event), key | ||
20 | - assert_equal indexed_fields(Event)[key][:type], value[:type] || 'string' | ||
21 | - end | ||
22 | - end | ||
23 | - | ||
24 | -end |
plugins/elasticsearch/test/unit/models/person_test.rb
@@ -1,23 +0,0 @@ | @@ -1,23 +0,0 @@ | ||
1 | -require "#{File.dirname(__FILE__)}/../../test_helper" | ||
2 | - | ||
3 | -class PersonTest < ActionController::TestCase | ||
4 | - | ||
5 | - include ElasticsearchTestHelper | ||
6 | - | ||
7 | - def indexed_models | ||
8 | - [Person] | ||
9 | - end | ||
10 | - | ||
11 | - should 'index searchable fields for Person model' do | ||
12 | - Person::SEARCHABLE_FIELDS.each do |key, value| | ||
13 | - assert_includes indexed_fields(Person), key | ||
14 | - end | ||
15 | - end | ||
16 | - | ||
17 | - should 'index control fields for Person model' do | ||
18 | - Person::control_fields.each do |key, value| | ||
19 | - assert_includes indexed_fields(Person), key | ||
20 | - assert_equal indexed_fields(Person)[key][:type], value[:type] || 'string' | ||
21 | - end | ||
22 | - end | ||
23 | -end |
plugins/elasticsearch/test/unit/models/text_article_test.rb
@@ -1,24 +0,0 @@ | @@ -1,24 +0,0 @@ | ||
1 | -require "#{File.dirname(__FILE__)}/../../test_helper" | ||
2 | - | ||
3 | -class TextArticleTest < ActionController::TestCase | ||
4 | - | ||
5 | - include ElasticsearchTestHelper | ||
6 | - | ||
7 | - def indexed_models | ||
8 | - [TextArticle] | ||
9 | - end | ||
10 | - | ||
11 | - should 'index searchable fields for TextArticle model' do | ||
12 | - TextArticle::SEARCHABLE_FIELDS.each do |key, value| | ||
13 | - assert_includes indexed_fields(TextArticle), key | ||
14 | - end | ||
15 | - end | ||
16 | - | ||
17 | - should 'index control fields for TextArticle model' do | ||
18 | - TextArticle::control_fields.each do |key, value| | ||
19 | - assert_includes indexed_fields(TextArticle), key | ||
20 | - assert_equal indexed_fields(TextArticle)[key][:type], value[:type] || 'string' | ||
21 | - end | ||
22 | - end | ||
23 | - | ||
24 | -end |
plugins/elasticsearch/test/unit/models/uploaded_file_test.rb
@@ -1,24 +0,0 @@ | @@ -1,24 +0,0 @@ | ||
1 | -require "#{File.dirname(__FILE__)}/../../test_helper" | ||
2 | - | ||
3 | -class UploadedFileTest < ActionController::TestCase | ||
4 | - | ||
5 | - include ElasticsearchTestHelper | ||
6 | - | ||
7 | - def indexed_models | ||
8 | - [UploadedFile] | ||
9 | - end | ||
10 | - | ||
11 | - should 'index searchable fields for UploadedFile model' do | ||
12 | - UploadedFile::SEARCHABLE_FIELDS.each do |key, value| | ||
13 | - assert_includes indexed_fields(UploadedFile), key | ||
14 | - end | ||
15 | - end | ||
16 | - | ||
17 | - should 'index control fields for UploadedFile model' do | ||
18 | - UploadedFile::control_fields.each do |key, value| | ||
19 | - assert_includes indexed_fields(UploadedFile), key | ||
20 | - assert_equal indexed_fields(UploadedFile)[key][:type], value[:type].presence || 'string' | ||
21 | - end | ||
22 | - end | ||
23 | - | ||
24 | -end |
@@ -0,0 +1,23 @@ | @@ -0,0 +1,23 @@ | ||
1 | +require "#{File.dirname(__FILE__)}/../test_helper" | ||
2 | + | ||
3 | +class PersonTest < ActionController::TestCase | ||
4 | + | ||
5 | + include ElasticsearchTestHelper | ||
6 | + | ||
7 | + def indexed_models | ||
8 | + [Person] | ||
9 | + end | ||
10 | + | ||
11 | + should 'index searchable fields for Person model' do | ||
12 | + Person::SEARCHABLE_FIELDS.each do |key, value| | ||
13 | + assert_includes indexed_fields(Person), key | ||
14 | + end | ||
15 | + end | ||
16 | + | ||
17 | + should 'index control fields for Person model' do | ||
18 | + Person::control_fields.each do |key, value| | ||
19 | + assert_includes indexed_fields(Person), key | ||
20 | + assert_equal indexed_fields(Person)[key][:type], value[:type] || 'string' | ||
21 | + end | ||
22 | + end | ||
23 | +end |
@@ -0,0 +1,24 @@ | @@ -0,0 +1,24 @@ | ||
1 | +require "#{File.dirname(__FILE__)}/../test_helper" | ||
2 | + | ||
3 | +class TextArticleTest < ActionController::TestCase | ||
4 | + | ||
5 | + include ElasticsearchTestHelper | ||
6 | + | ||
7 | + def indexed_models | ||
8 | + [TextArticle] | ||
9 | + end | ||
10 | + | ||
11 | + should 'index searchable fields for TextArticle model' do | ||
12 | + TextArticle::SEARCHABLE_FIELDS.each do |key, value| | ||
13 | + assert_includes indexed_fields(TextArticle), key | ||
14 | + end | ||
15 | + end | ||
16 | + | ||
17 | + should 'index control fields for TextArticle model' do | ||
18 | + TextArticle::control_fields.each do |key, value| | ||
19 | + assert_includes indexed_fields(TextArticle), key | ||
20 | + assert_equal indexed_fields(TextArticle)[key][:type], value[:type] || 'string' | ||
21 | + end | ||
22 | + end | ||
23 | + | ||
24 | +end |
@@ -0,0 +1,24 @@ | @@ -0,0 +1,24 @@ | ||
1 | +require "#{File.dirname(__FILE__)}/../test_helper" | ||
2 | + | ||
3 | +class UploadedFileTest < ActionController::TestCase | ||
4 | + | ||
5 | + include ElasticsearchTestHelper | ||
6 | + | ||
7 | + def indexed_models | ||
8 | + [UploadedFile] | ||
9 | + end | ||
10 | + | ||
11 | + should 'index searchable fields for UploadedFile model' do | ||
12 | + UploadedFile::SEARCHABLE_FIELDS.each do |key, value| | ||
13 | + assert_includes indexed_fields(UploadedFile), key | ||
14 | + end | ||
15 | + end | ||
16 | + | ||
17 | + should 'index control fields for UploadedFile model' do | ||
18 | + UploadedFile::control_fields.each do |key, value| | ||
19 | + assert_includes indexed_fields(UploadedFile), key | ||
20 | + assert_equal indexed_fields(UploadedFile)[key][:type], value[:type].presence || 'string' | ||
21 | + end | ||
22 | + end | ||
23 | + | ||
24 | +end |