Commit 6d432a84fa350e5d9f1b4e0cc7c885aeba6fd713
1 parent
ee116023
Exists in
master
and in
29 other branches
Added small fixes and unit tests for all searchable models
Showing
11 changed files
with
254 additions
and
30 deletions
Show diff stats
app/models/article.rb
... | ... | @@ -55,7 +55,7 @@ class Article < ActiveRecord::Base |
55 | 55 | xss_terminate :only => [ :name ], :on => 'validation', :with => 'white_list' |
56 | 56 | |
57 | 57 | named_scope :in_category, lambda { |category| |
58 | - {:include => 'categories', :conditions => { 'categories.id' => category.id }} | |
58 | + {:include => 'categories_including_virtual', :conditions => { 'categories.id' => category.id }} | |
59 | 59 | } |
60 | 60 | |
61 | 61 | named_scope :by_range, lambda { |range| { |
... | ... | @@ -599,6 +599,7 @@ class Article < ActiveRecord::Base |
599 | 599 | def self.f_type_proc(klass) |
600 | 600 | klass.constantize.type_name |
601 | 601 | end |
602 | + | |
602 | 603 | def self.f_profile_type_proc(klass) |
603 | 604 | klass.constantize.type_name |
604 | 605 | end |
... | ... | @@ -612,12 +613,15 @@ class Article < ActiveRecord::Base |
612 | 613 | self.class.name |
613 | 614 | end |
614 | 615 | end |
616 | + | |
615 | 617 | def f_profile_type |
616 | 618 | self.profile.class.name |
617 | 619 | end |
620 | + | |
618 | 621 | def f_published_at |
619 | 622 | self.published_at |
620 | 623 | end |
624 | + | |
621 | 625 | def f_category |
622 | 626 | self.categories.collect(&:name) |
623 | 627 | end |
... | ... | @@ -626,12 +630,15 @@ class Article < ActiveRecord::Base |
626 | 630 | def name_sortable # give a different name for solr |
627 | 631 | name |
628 | 632 | end |
633 | + | |
629 | 634 | def public |
630 | 635 | self.public? |
631 | 636 | end |
637 | + | |
632 | 638 | def category_filter |
633 | 639 | categories_including_virtual_ids |
634 | 640 | end |
641 | + | |
635 | 642 | public |
636 | 643 | |
637 | 644 | acts_as_faceted :fields => { | ... | ... |
app/models/product.rb
... | ... | @@ -225,7 +225,7 @@ class Product < ActiveRecord::Base |
225 | 225 | end |
226 | 226 | end |
227 | 227 | def self.f_qualifier_proc(ids) |
228 | - array = ids.split ' ' | |
228 | + array = ids.split | |
229 | 229 | qualifier = Qualifier.find_by_id array[0] |
230 | 230 | certifier = Certifier.find_by_id array[1] |
231 | 231 | certifier ? [qualifier.name, _(' cert. ') + certifier.name] : qualifier.name | ... | ... |
app/models/textile_article.rb
app/models/tiny_mce_article.rb
test/unit/article_test.rb
... | ... | @@ -157,7 +157,7 @@ class ArticleTest < ActiveSupport::TestCase |
157 | 157 | fifth = fast_create(TextArticle, :profile_id => profile.id, :name => 'fifth') |
158 | 158 | |
159 | 159 | other_first = other_profile.articles.build(:name => 'first'); other_first.save! |
160 | - | |
160 | + | |
161 | 161 | assert_equal [other_first, fifth, fourth], Article.recent(3) |
162 | 162 | assert_equal [other_first, fifth, fourth, third, second, first], Article.recent(6) |
163 | 163 | end |
... | ... | @@ -290,7 +290,9 @@ class ArticleTest < ActiveSupport::TestCase |
290 | 290 | |
291 | 291 | should 'associate with categories' do |
292 | 292 | env = Environment.default |
293 | - c1 = env.categories.build(:name => "test category 1"); c1.save! | |
293 | + parent_cat = env.categories.build(:name => "parent category") | |
294 | + parent_cat.save! | |
295 | + c1 = env.categories.build(:name => "test category 1", :parent_id => parent_cat.id); c1.save! | |
294 | 296 | c2 = env.categories.build(:name => "test category 2"); c2.save! |
295 | 297 | |
296 | 298 | article = profile.articles.build(:name => 'withcategories') |
... | ... | @@ -300,6 +302,7 @@ class ArticleTest < ActiveSupport::TestCase |
300 | 302 | article.add_category c2 |
301 | 303 | |
302 | 304 | assert_equivalent [c1,c2], article.categories(true) |
305 | + assert_equivalent [c1, parent_cat, c2], article.categories_including_virtual(true) | |
303 | 306 | end |
304 | 307 | |
305 | 308 | should 'remove comments when removing article' do |
... | ... | @@ -408,6 +411,9 @@ class ArticleTest < ActiveSupport::TestCase |
408 | 411 | assert_includes c3.articles(true), art |
409 | 412 | assert_includes c2.articles(true), art |
410 | 413 | assert_includes c1.articles(true), art |
414 | + | |
415 | + assert_includes art.categories_including_virtual(true), c2 | |
416 | + assert_includes art.categories_including_virtual(true), c1 | |
411 | 417 | end |
412 | 418 | |
413 | 419 | should 'redefine the entire category set at once' do |
... | ... | @@ -423,26 +429,31 @@ class ArticleTest < ActiveSupport::TestCase |
423 | 429 | art.category_ids = [c2,c3].map(&:id) |
424 | 430 | |
425 | 431 | assert_equivalent [c2, c3], art.categories(true) |
432 | + assert_includes art.categories_including_virtual(true), c1 | |
433 | + assert !art.categories_including_virtual(true).include?(c4) | |
426 | 434 | end |
427 | 435 | |
428 | 436 | should 'be able to create an article already with categories' do |
429 | - c1 = fast_create(Category, :environment_id => Environment.default.id, :name => 'c1') | |
437 | + parent1 = fast_create(Category, :environment_id => Environment.default.id, :name => 'parent1') | |
438 | + c1 = fast_create(Category, :environment_id => Environment.default.id, :name => 'c1', :parent_id => parent1.id) | |
430 | 439 | c2 = fast_create(Category, :environment_id => Environment.default.id, :name => 'c2') |
431 | 440 | |
432 | 441 | p = create_user('testinguser').person |
433 | 442 | a = p.articles.create!(:name => 'test', :category_ids => [c1.id, c2.id]) |
434 | 443 | |
435 | 444 | assert_equivalent [c1, c2], a.categories(true) |
445 | + assert_includes a.categories_including_virtual(true), parent1 | |
436 | 446 | end |
437 | 447 | |
438 | 448 | should 'not add a category twice to article' do |
439 | 449 | c1 = fast_create(Category, :environment_id => Environment.default.id, :name => 'c1') |
440 | - c2 = c1.children.create!(:environment => Environment.default, :name => 'c2') | |
441 | - c3 = c1.children.create!(:environment => Environment.default, :name => 'c3') | |
450 | + c2 = c1.children.create!(:environment => Environment.default, :name => 'c2', :parent_id => c1.id) | |
451 | + c3 = c1.children.create!(:environment => Environment.default, :name => 'c3', :parent_id => c1.id) | |
442 | 452 | owner = create_user('testuser').person |
443 | 453 | art = owner.articles.create!(:name => 'ytest') |
444 | 454 | art.category_ids = [c2,c3,c3].map(&:id) |
445 | 455 | assert_equal [c2, c3], art.categories(true) |
456 | + assert_equal [c2, c1, c3], art.categories_including_virtual(true) | |
446 | 457 | end |
447 | 458 | |
448 | 459 | should 'not accept Product category as category' do |
... | ... | @@ -459,8 +470,8 @@ class ArticleTest < ActiveSupport::TestCase |
459 | 470 | article = fast_create(Article, :name => 'test article', :profile_id => profile.id, :published => false) |
460 | 471 | |
461 | 472 | assert !article.display_to?(nil) |
462 | - end | |
463 | - | |
473 | + end | |
474 | + | |
464 | 475 | should 'say that not member of profile cannot see private article' do |
465 | 476 | profile = fast_create(Profile, :name => 'test profile', :identifier => 'test_profile') |
466 | 477 | article = fast_create(Article, :name => 'test article', :profile_id => profile.id, :published => false) |
... | ... | @@ -468,7 +479,7 @@ class ArticleTest < ActiveSupport::TestCase |
468 | 479 | |
469 | 480 | assert !article.display_to?(person) |
470 | 481 | end |
471 | - | |
482 | + | |
472 | 483 | should 'say that member user can not see private article' do |
473 | 484 | profile = fast_create(Profile, :name => 'test profile', :identifier => 'test_profile') |
474 | 485 | article = fast_create(Article, :name => 'test article', :profile_id => profile.id, :published => false) |
... | ... | @@ -553,7 +564,7 @@ class ArticleTest < ActiveSupport::TestCase |
553 | 564 | person = create_user('test_user').person |
554 | 565 | a = person.articles.create!(:name => 'test article', :body => 'some text') |
555 | 566 | b = a.copy(:parent => a, :profile => a.profile) |
556 | - | |
567 | + | |
557 | 568 | assert_includes a.children, b |
558 | 569 | assert_equal 'some text', b.body |
559 | 570 | end |
... | ... | @@ -752,10 +763,12 @@ class ArticleTest < ActiveSupport::TestCase |
752 | 763 | |
753 | 764 | should 'ignore category with zero as id' do |
754 | 765 | a = profile.articles.create!(:name => 'a test article') |
755 | - c = fast_create(Category, :name => 'test category', :environment_id => profile.environment.id) | |
766 | + c = fast_create(Category, :name => 'test category', :environment_id => profile.environment.id, :parent_id => 0) | |
756 | 767 | a.category_ids = ['0', c.id, nil] |
757 | 768 | assert a.save |
758 | 769 | assert_equal [c], a.categories |
770 | + # also ignore parent with id = 0 | |
771 | + assert_equal [c], a.categories_including_virtual | |
759 | 772 | |
760 | 773 | a = profile.articles.find_by_name 'a test article' |
761 | 774 | assert_equal [c], a.categories |
... | ... | @@ -810,7 +823,8 @@ class ArticleTest < ActiveSupport::TestCase |
810 | 823 | |
811 | 824 | should 'find articles in a specific category' do |
812 | 825 | env = Environment.default |
813 | - category_with_articles = env.categories.create!(:name => "Category with articles") | |
826 | + parent_category = env.categories.create!(:name => "parent category") | |
827 | + category_with_articles = env.categories.create!(:name => "Category with articles", :parent_id => parent_category.id) | |
814 | 828 | category_without_articles = env.categories.create!(:name => "Category without articles") |
815 | 829 | |
816 | 830 | article_in_category = profile.articles.create!(:name => 'Article in category') |
... | ... | @@ -818,6 +832,7 @@ class ArticleTest < ActiveSupport::TestCase |
818 | 832 | article_in_category.add_category(category_with_articles) |
819 | 833 | |
820 | 834 | assert_includes profile.articles.in_category(category_with_articles), article_in_category |
835 | + assert_includes profile.articles.in_category(parent_category), article_in_category | |
821 | 836 | assert_not_includes profile.articles.in_category(category_without_articles), article_in_category |
822 | 837 | end |
823 | 838 | |
... | ... | @@ -954,7 +969,7 @@ class ArticleTest < ActiveSupport::TestCase |
954 | 969 | |
955 | 970 | should 'track action when a published article is created in a community' do |
956 | 971 | community = fast_create(Community) |
957 | - p1 = ActionTracker::Record.current_user_from_model | |
972 | + p1 = ActionTracker::Record.current_user_from_model | |
958 | 973 | p2 = fast_create(Person) |
959 | 974 | p3 = fast_create(Person) |
960 | 975 | community.add_member(p1) |
... | ... | @@ -1064,7 +1079,7 @@ class ArticleTest < ActiveSupport::TestCase |
1064 | 1079 | assert_equal false, a.notifiable? |
1065 | 1080 | assert_equal true, a.advertise? |
1066 | 1081 | assert_equal false, a.is_trackable? |
1067 | - | |
1082 | + | |
1068 | 1083 | a.published=false |
1069 | 1084 | assert_equal false, a.published? |
1070 | 1085 | assert_equal false, a.is_trackable? |
... | ... | @@ -1643,4 +1658,67 @@ class ArticleTest < ActiveSupport::TestCase |
1643 | 1658 | assert_equal [c1,c2,c5], Article.text_articles |
1644 | 1659 | end |
1645 | 1660 | |
1661 | + should 'act as faceted' do | |
1662 | + person = fast_create(Person) | |
1663 | + a = Article.new(:profile_id => person.id) | |
1664 | + assert_equal Article.type_name, Article.facet_by_id(:f_type)[:proc].call(a.send(:f_type)) | |
1665 | + assert_equal Person.type_name, Article.facet_by_id(:f_profile_type)[:proc].call(a.send(:f_profile_type)) | |
1666 | + assert_equal a.published_at, a.send(:f_published_at) | |
1667 | + end | |
1668 | + | |
1669 | + should 'act as searchable' do | |
1670 | + person = fast_create(Person, :name => "Hiro", :address => 'U-Stor-It @ Inglewood, California', | |
1671 | + :nickname => 'Protagonist') | |
1672 | + person2 = fast_create(Person, :name => "Raven") | |
1673 | + category = fast_create(Category, :name => "science fiction", :acronym => "sf", :abbreviation => "sci-fi") | |
1674 | + a = Article.create!(:name => 'a searchable article about bananas', :profile_id => person.id, | |
1675 | + :body => 'the body talks about mosquitos', :abstract => 'and the abstract is about beer', | |
1676 | + :filename => 'not_a_virus.exe') | |
1677 | + a.add_category(category) | |
1678 | + c = a.comments.build(:title => 'snow crash', :author => person2, :body => 'wanna try some?') | |
1679 | + c.save! | |
1680 | + | |
1681 | + # fields | |
1682 | + assert_includes Article.find_by_contents('bananas')[:results].docs, a | |
1683 | + assert_includes Article.find_by_contents('mosquitos')[:results].docs, a | |
1684 | + assert_includes Article.find_by_contents('beer')[:results].docs, a | |
1685 | + assert_includes Article.find_by_contents('not_a_virus.exe')[:results].docs, a | |
1686 | + # filters | |
1687 | + assert_includes Article.find_by_contents('bananas', {}, { | |
1688 | + :filter_queries => ["public:true"]})[:results].docs, a | |
1689 | + assert_not_includes Article.find_by_contents('bananas', {}, { | |
1690 | + :filter_queries => ["public:false"]})[:results].docs, a | |
1691 | + assert_includes Article.find_by_contents('bananas', {}, { | |
1692 | + :filter_queries => ["environment_id:\"#{Environment.default.id}\""]})[:results].docs, a | |
1693 | + assert_includes Article.find_by_contents('bananas', {}, { | |
1694 | + :filter_queries => ["profile_id:\"#{person.id}\""]})[:results].docs, a | |
1695 | + # includes | |
1696 | + assert_includes Article.find_by_contents('Hiro')[:results].docs, a | |
1697 | + assert_includes Article.find_by_contents("person-#{person.id}")[:results].docs, a | |
1698 | + assert_includes Article.find_by_contents("California")[:results].docs, a | |
1699 | + assert_includes Article.find_by_contents("Protagonist")[:results].docs, a | |
1700 | + assert_includes Article.find_by_contents("snow")[:results].docs, a | |
1701 | + assert_includes Article.find_by_contents("try some")[:results].docs, a | |
1702 | + assert_includes Article.find_by_contents("Raven")[:results].docs, a | |
1703 | + assert_includes Article.find_by_contents("science")[:results].docs, a | |
1704 | + assert_includes Article.find_by_contents(category.slug)[:results].docs, a | |
1705 | + assert_includes Article.find_by_contents("sf")[:results].docs, a | |
1706 | + assert_includes Article.find_by_contents("sci-fi")[:results].docs, a | |
1707 | + end | |
1708 | + | |
1709 | + should 'boost name matches' do | |
1710 | + person = fast_create(Person) | |
1711 | + in_body = Article.create!(:name => 'something', :profile_id => person.id, :body => 'bananas in the body!') | |
1712 | + in_name = Article.create!(:name => 'bananas in the name!', :profile_id => person.id) | |
1713 | + assert_equal [in_name, in_body], Article.find_by_contents('bananas')[:results].docs | |
1714 | + end | |
1715 | + | |
1716 | + should 'boost if profile is enabled' do | |
1717 | + person2 = fast_create(Person, :enabled => false) | |
1718 | + art_profile_disabled = Article.create!(:name => 'profile disabled', :profile_id => person2.id) | |
1719 | + person1 = fast_create(Person, :enabled => true) | |
1720 | + art_profile_enabled = Article.create!(:name => 'profile enabled', :profile_id => person1.id) | |
1721 | + assert_equal [art_profile_enabled, art_profile_disabled], Article.find_by_contents('profile')[:results].docs | |
1722 | + end | |
1723 | + | |
1646 | 1724 | end | ... | ... |
test/unit/category_test.rb
... | ... | @@ -492,4 +492,30 @@ class CategoryTest < ActiveSupport::TestCase |
492 | 492 | assert_not_includes Category.top_level_for(Environment.default).from_types(['ProductCategory']), toplevel_category |
493 | 493 | end |
494 | 494 | |
495 | + should 'act as searchable' do | |
496 | + parent = fast_create(Category, :name => 'books') | |
497 | + c = Category.create!(:name => "science fiction", :acronym => "sf", :abbreviation => "sci-fi", | |
498 | + :environment_id => Environment.default.id, :parent_id => parent.id) | |
499 | + | |
500 | + # fields | |
501 | + assert_includes Category.find_by_contents('fiction')[:results].docs, c | |
502 | + assert_includes Category.find_by_contents('sf')[:results].docs, c | |
503 | + assert_includes Category.find_by_contents('sci-fi')[:results].docs, c | |
504 | + # filters | |
505 | + assert_includes Category.find_by_contents('science', {}, { | |
506 | + :filter_queries => ["parent_id:#{parent.id}"]})[:results].docs, c | |
507 | + end | |
508 | + | |
509 | + should 'boost name matches' do | |
510 | + c_abbr = Category.create!(:name => "something else", :abbreviation => "science", :environment_id => Environment.default.id) | |
511 | + c_name = Category.create!(:name => "science fiction", :environment_id => Environment.default.id) | |
512 | + assert_equal [c_name, c_abbr], Category.find_by_contents("science")[:results].docs | |
513 | + end | |
514 | + | |
515 | + should 'solr save' do | |
516 | + c = @env.categories.build(:name => 'my category'); | |
517 | + c.expects(:solr_save) | |
518 | + c.save! | |
519 | + end | |
520 | + | |
495 | 521 | end | ... | ... |
test/unit/product_test.rb
... | ... | @@ -20,14 +20,14 @@ class ProductTest < ActiveSupport::TestCase |
20 | 20 | assert_difference Product, :count do |
21 | 21 | p = Product.new(:name => 'test product1', :product_category => @product_category, :enterprise_id => @profile.id) |
22 | 22 | assert p.save |
23 | - end | |
23 | + end | |
24 | 24 | end |
25 | 25 | |
26 | 26 | should 'destroy product' do |
27 | 27 | p = fast_create(Product, :name => 'test product2', :product_category_id => @product_category.id) |
28 | 28 | assert_difference Product, :count, -1 do |
29 | 29 | p.destroy |
30 | - end | |
30 | + end | |
31 | 31 | end |
32 | 32 | |
33 | 33 | should 'display category name if name is nil' do |
... | ... | @@ -69,7 +69,7 @@ class ProductTest < ActiveSupport::TestCase |
69 | 69 | p1 = enterprise.products.create!(:name => 'product 1', :product_category => @product_category) |
70 | 70 | p2 = enterprise.products.create!(:name => 'product 2', :product_category => @product_category) |
71 | 71 | p3 = enterprise.products.create!(:name => 'product 3', :product_category => @product_category) |
72 | - | |
72 | + | |
73 | 73 | assert_equal [p3, p2], Product.recent(2) |
74 | 74 | end |
75 | 75 | |
... | ... | @@ -79,7 +79,7 @@ class ProductTest < ActiveSupport::TestCase |
79 | 79 | :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png') |
80 | 80 | }, :enterprise_id => @profile.id) |
81 | 81 | assert_equal p.image(true).filename, 'rails.png' |
82 | - end | |
82 | + end | |
83 | 83 | end |
84 | 84 | |
85 | 85 | should 'calculate catagory full name' do |
... | ... | @@ -125,7 +125,7 @@ class ProductTest < ActiveSupport::TestCase |
125 | 125 | ent.lat = 45.0; ent.lng = 45.0; ent.save! |
126 | 126 | process_delayed_job_queue |
127 | 127 | prod.reload |
128 | - | |
128 | + | |
129 | 129 | assert_in_delta 45.0, prod.lat, 0.0001 |
130 | 130 | assert_in_delta 45.0, prod.lng, 0.0001 |
131 | 131 | end |
... | ... | @@ -501,4 +501,71 @@ class ProductTest < ActiveSupport::TestCase |
501 | 501 | assert_equal 0, product.price_description_percentage |
502 | 502 | end |
503 | 503 | |
504 | + should 'act as faceted' do | |
505 | + s = fast_create(State, :acronym => 'XZ') | |
506 | + c = fast_create(City, :name => 'Tabajara', :parent_id => s.id) | |
507 | + ent = fast_create(Enterprise, :region_id => c.id) | |
508 | + p = fast_create(Product, :enterprise_id => ent.id) | |
509 | + pq = p.product_qualifiers.create!(:qualifier => fast_create(Qualifier, :name => 'qualifier'), | |
510 | + :certifier => fast_create(Certifier, :name => 'certifier')) | |
511 | + assert_equal 'Related products', Product.facet_by_id(:f_category)[:label] | |
512 | + assert_equal ['Tabajara', ', XZ'], Product.facet_by_id(:f_region)[:proc].call(p.send(:f_region)) | |
513 | + assert_equal ['qualifier', ' cert. certifier'], Product.facet_by_id(:f_qualifier)[:proc].call(p.send(:f_qualifier).last) | |
514 | + end | |
515 | + | |
516 | + should 'act as searchable' do | |
517 | + s = fast_create(State, :acronym => 'XZ') | |
518 | + c = fast_create(City, :name => 'Tabajara', :parent_id => s.id) | |
519 | + ent = fast_create(Enterprise, :region_id => c.id, :name => "Black Sun") | |
520 | + category = fast_create(ProductCategory, :name => "homemade", :acronym => "hm", :abbreviation => "homey") | |
521 | + p = Product.create!(:name => 'bananas syrup', :description => 'surrounded by mosquitos', :enterprise_id => ent.id, | |
522 | + :product_category_id => category.id) | |
523 | + qual = Qualifier.create!(:name => 'qualificador', :environment_id => Environment.default.id) | |
524 | + cert = Certifier.create!(:name => 'certificador', :environment_id => Environment.default.id) | |
525 | + pq = p.product_qualifiers.create!(:qualifier => qual, :certifier => cert) | |
526 | + # fields | |
527 | + assert_includes Product.find_by_contents('bananas')[:results].docs, p | |
528 | + assert_includes Product.find_by_contents('mosquitos')[:results].docs, p | |
529 | + assert_includes Product.find_by_contents('homemade')[:results].docs, p | |
530 | + # filters | |
531 | + assert_includes Product.find_by_contents('bananas', {}, { | |
532 | + :filter_queries => ["public:true"]})[:results].docs, p | |
533 | + assert_not_includes Product.find_by_contents('bananas', {}, { | |
534 | + :filter_queries => ["public:false"]})[:results].docs, p | |
535 | + assert_includes Product.find_by_contents('bananas', {}, { | |
536 | + :filter_queries => ["environment_id:\"#{Environment.default.id}\""]})[:results].docs, p | |
537 | + # includes | |
538 | + assert_includes Product.find_by_contents("homemade")[:results].docs, p | |
539 | + assert_includes Product.find_by_contents(category.slug)[:results].docs, p | |
540 | + assert_includes Product.find_by_contents("hm")[:results].docs, p | |
541 | + assert_includes Product.find_by_contents("homey")[:results].docs, p | |
542 | + assert_includes Product.find_by_contents("Tabajara")[:results].docs, p | |
543 | + assert_includes Product.find_by_contents("Black Sun")[:results].docs, p | |
544 | + end | |
545 | + | |
546 | + should 'boost name matches' do | |
547 | + ent = fast_create(Enterprise) | |
548 | + cat = fast_create(ProductCategory) | |
549 | + in_desc = Product.create!(:name => 'something', :enterprise_id => ent.id, :description => 'bananas in the description!', | |
550 | + :product_category_id => cat.id) | |
551 | + in_name = Product.create!(:name => 'bananas in the name!', :enterprise_id => ent.id, :product_category_id => cat.id) | |
552 | + assert_equal [in_name, in_desc], Product.find_by_contents('bananas')[:results].docs | |
553 | + end | |
554 | + | |
555 | + should 'boost if profile is enabled' do | |
556 | + person2 = fast_create(Person, :enabled => false) | |
557 | + art_profile_disabled = Article.create!(:name => 'profile disabled', :profile_id => person2.id) | |
558 | + person1 = fast_create(Person, :enabled => true) | |
559 | + art_profile_enabled = Article.create!(:name => 'profile enabled', :profile_id => person1.id) | |
560 | + assert_equal [art_profile_enabled, art_profile_disabled], Article.find_by_contents('profile')[:results].docs | |
561 | + end | |
562 | + | |
563 | + should 'reindex enterprise after saving' do | |
564 | + ent = fast_create(Enterprise) | |
565 | + cat = fast_create(ProductCategory) | |
566 | + prod = Product.create!(:name => 'something', :enterprise_id => ent.id, :product_category_id => cat.id) | |
567 | + Product.expects(:solr_batch_add).with([ent]) | |
568 | + prod.save! | |
569 | + end | |
570 | + | |
504 | 571 | end | ... | ... |
test/unit/profile_test.rb
... | ... | @@ -1770,4 +1770,50 @@ class ProfileTest < ActiveSupport::TestCase |
1770 | 1770 | assert !profile.valid? |
1771 | 1771 | assert profile.errors.invalid?(:identifier) |
1772 | 1772 | end |
1773 | + | |
1774 | + should 'act as faceted' do | |
1775 | + st = fast_create(State, :acronym => 'XZ') | |
1776 | + city = fast_create(City, :name => 'Tabajara', :parent_id => st.id) | |
1777 | + prof = fast_create(Person, :region_id => city.id) | |
1778 | + assert_equal ['Tabajara', ', XZ'], Profile.facet_by_id(:f_region)[:proc].call(prof.send(:f_region)) | |
1779 | + end | |
1780 | + | |
1781 | + should 'act as searchable' do | |
1782 | + st = fast_create(State, :acronym => 'CA') | |
1783 | + city = fast_create(City, :name => 'Inglewood', :parent_id => st.id) | |
1784 | + p = create(Person, :name => "Hiro", :address => 'U-Stor-It', :nickname => 'Protagonist', | |
1785 | + :user_id => fast_create(User).id, :region_id => city.id) | |
1786 | + cat = fast_create(Category, :name => "Science Fiction", :acronym => "sf", :abbreviation => "sci-fi") | |
1787 | + p.add_category cat | |
1788 | + cat.save! | |
1789 | + p.save! | |
1790 | + | |
1791 | + # fields | |
1792 | + assert_includes Profile.find_by_contents('Hiro')[:results].docs, p | |
1793 | + assert_includes Profile.find_by_contents('Stor')[:results].docs, p | |
1794 | + assert_includes Profile.find_by_contents('Protagonist')[:results].docs, p | |
1795 | + # filters | |
1796 | + assert_includes Profile.find_by_contents('Hiro', {}, { | |
1797 | + :filter_queries => ["public:true"]})[:results].docs, p | |
1798 | + assert_not_includes Profile.find_by_contents('Hiro', {}, { | |
1799 | + :filter_queries => ["public:false"]})[:results].docs, p | |
1800 | + assert_includes Profile.find_by_contents('Hiro', {}, { | |
1801 | + :filter_queries => ["environment_id:\"#{Environment.default.id}\""]})[:results].docs, p | |
1802 | + # includes | |
1803 | + assert_includes Profile.find_by_contents("Inglewood")[:results].docs, p | |
1804 | + end | |
1805 | + | |
1806 | + should 'boost name matches' do | |
1807 | + in_addr = create(Person, :name => 'something', :address => 'bananas in the address!', :user_id => fast_create(User).id) | |
1808 | + in_name = create(Person, :name => 'bananas in the name!', :user_id => fast_create(User).id) | |
1809 | + assert_equal [in_name, in_addr], Person.find_by_contents('bananas')[:results].docs | |
1810 | + end | |
1811 | + | |
1812 | + should 'reindex articles after saving' do | |
1813 | + profile = create(Person, :name => 'something', :user_id => fast_create(User).id) | |
1814 | + art = profile.articles.build(:name => 'something') | |
1815 | + Profile.expects(:solr_batch_add).with(includes(art)) | |
1816 | + profile.save! | |
1817 | + end | |
1818 | + | |
1773 | 1819 | end | ... | ... |
test/unit/search_helper_test.rb
test/unit/textile_article_test.rb
... | ... | @@ -190,4 +190,9 @@ class TextileArticleTest < ActiveSupport::TestCase |
190 | 190 | article |
191 | 191 | end |
192 | 192 | |
193 | + should 'define type facet' do | |
194 | + a = TextileArticle.new | |
195 | + assert_equal TextArticle.type_name, TextileArticle.send(:f_type_proc, a.send(:f_type)) | |
196 | + end | |
197 | + | |
193 | 198 | end | ... | ... |
test/unit/tiny_mce_article_test.rb
... | ... | @@ -247,4 +247,9 @@ class TinyMceArticleTest < ActiveSupport::TestCase |
247 | 247 | assert TinyMceArticle.new.tiny_mce? |
248 | 248 | end |
249 | 249 | |
250 | + should 'define type facet' do | |
251 | + a = TinyMceArticle.new | |
252 | + assert_equal TextArticle.type_name, TinyMceArticle.send(:f_type_proc, a.send(:f_type)) | |
253 | + end | |
254 | + | |
250 | 255 | end | ... | ... |