Commit 0f9731a34c27afb7222d8d28374923d21c6925d1

Authored by Rodrigo Souto
1 parent 3ebea73a

[search-improvements] Not calculate search_term score before save

app/models/search_term.rb
... ... @@ -15,8 +15,6 @@ class SearchTerm < ActiveRecord::Base
15 15 context.search_terms.where(:term => term, :asset => asset).first || context.search_terms.create!(:term => term, :asset=> asset)
16 16 end
17 17  
18   - before_save :calculate_score
19   -
20 18 def calculate_score
21 19 valid_occurrences = occurrences.valid
22 20 if valid_occurrences.present?
... ... @@ -30,5 +28,6 @@ class SearchTerm < ActiveRecord::Base
30 28 else
31 29 self.score = 0
32 30 end
  31 + self.save!
33 32 end
34 33 end
... ...
test/unit/search_term_test.rb
... ... @@ -48,24 +48,26 @@ class SearchTermTest < ActiveSupport::TestCase
48 48  
49 49 should 'calculate score' do
50 50 search_term = SearchTerm.find_or_create('universe', Environment.default)
51   - occurrence = SearchTermOccurrence.create!(:search_term => search_term, :total => 10, :indexed => 3)
52   - search_term.save!
  51 + SearchTermOccurrence.create!(:search_term => search_term, :total => 10, :indexed => 3)
  52 + # Search term must happens at least two times to be considered
  53 + SearchTermOccurrence.create!(:search_term => search_term, :total => 10, :indexed => 3)
  54 + search_term.calculate_score
53 55 assert search_term.score > 0, "Score was not calculated."
54 56 end
55 57  
56 58 should 'not consider expired occurrences to calculate the score' do
57 59 search_term = SearchTerm.find_or_create('universe', Environment.default)
58 60 occurrence = SearchTermOccurrence.create!(:search_term => search_term, :total => 10, :indexed => 3, :created_at => DateTime.now - (SearchTermOccurrence::EXPIRATION_TIME + 1.day))
59   - search_term.save!
  61 + search_term.calculate_score
60 62 assert search_term.score == 0, "Considered expired occurrence to calculate the score."
61 63 end
62 64  
63 65 should 'calculate search_terms scores' do
64   - st1 = SearchTerm.create!(:term => 'st1')
  66 + st1 = SearchTerm.find_or_create('st1', Environment.default)
65 67 SearchTermOccurrence.create!(:search_term => st1, :total => 10, :indexed => 3)
66 68 SearchTermOccurrence.create!(:search_term => st1, :total => 20, :indexed => 8)
67 69 SearchTermOccurrence.create!(:search_term => st1, :total => 30, :indexed => 9)
68   - st2 = SearchTerm.create!(:term => 'st2')
  70 + st2 = SearchTerm.find_or_create('st2', Environment.default)
69 71 SearchTermOccurrence.create!(:search_term => st2, :total => 10, :indexed => 7)
70 72 SearchTermOccurrence.create!(:search_term => st2, :total => 20, :indexed => 16)
71 73 SearchTermOccurrence.create!(:search_term => st2, :total => 30, :indexed => 21)
... ...