search_term_test.rb
5.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
require 'test_helper'
class SearchTermTest < ActiveSupport::TestCase
should 'have term' do
search_term = SearchTerm.new
assert !search_term.valid?
assert search_term.errors.has_key?(:term)
end
should 'have context' do
search_term = SearchTerm.new
assert !search_term.valid?
assert search_term.errors.has_key?(:context)
end
should 'have unique term within specific context and asset' do
SearchTerm.create!(:term => 'galaxy', :context => Environment.default, :asset => 'universe')
search_term = SearchTerm.new(:term => 'galaxy', :context => Environment.default, :asset => 'universe')
search_term.valid?
assert search_term.errors.has_key?(:term)
search_term.asset = 'alternate_universe'
search_term.valid?
assert !search_term.errors.has_key?(:term)
end
should 'create a search term' do
assert_nothing_raised do
SearchTerm.create!(:term => 'universe', :context => Environment.default)
end
end
should 'find or create by term' do
assert_difference 'SearchTerm.count', 1 do
SearchTerm.find_or_create('universe', Environment.default)
search_term = SearchTerm.find_or_create('universe', Environment.default)
assert_equal 'universe', search_term.term
end
end
should 'have occurrences' do
search_term = SearchTerm.find_or_create('universe', Environment.default)
o1 = SearchTermOccurrence.create!(:search_term => search_term)
o2 = SearchTermOccurrence.create!(:search_term => search_term)
assert_equivalent [o1,o2], search_term.occurrences
end
should 'calculate score' do
search_term = SearchTerm.find_or_create('universe', Environment.default)
SearchTermOccurrence.create!(:search_term => search_term, :total => 10, :indexed => 3)
SearchTerm.calculate_scores
search_term.reload
assert search_term.score > 0, "Score was not calculated."
end
should 'have different scores for the same term with different assets' do
st1 = SearchTerm.find_or_create('universe', Environment.default, 'a')
st2 = SearchTerm.find_or_create('universe', Environment.default, 'b')
SearchTermOccurrence.create!(:search_term => st1, :total => 10, :indexed => 3)
SearchTermOccurrence.create!(:search_term => st2, :total => 10, :indexed => 8)
SearchTerm.calculate_scores
st1.reload
st2.reload
assert st1.score != st2.score, "Same term with different assets can have different scores."
end
should 'not consider expired occurrences to calculate the score' do
search_term = SearchTerm.find_or_create('universe', Environment.default)
occurrence = SearchTermOccurrence.create!(:search_term => search_term, :total => 10, :indexed => 3, :created_at => DateTime.now - (SearchTermOccurrence::EXPIRATION_TIME + 1.day))
SearchTerm.calculate_scores
search_term.reload
assert search_term.score == 0, "Considered expired occurrence to calculate the score."
end
should 'calculate search_terms scores' do
st1 = SearchTerm.find_or_create('st1', Environment.default)
SearchTermOccurrence.create!(:search_term => st1, :total => 10, :indexed => 3)
SearchTermOccurrence.create!(:search_term => st1, :total => 20, :indexed => 8)
SearchTermOccurrence.create!(:search_term => st1, :total => 30, :indexed => 9)
st2 = SearchTerm.find_or_create('st2', Environment.default)
SearchTermOccurrence.create!(:search_term => st2, :total => 10, :indexed => 7)
SearchTermOccurrence.create!(:search_term => st2, :total => 20, :indexed => 16)
SearchTermOccurrence.create!(:search_term => st2, :total => 30, :indexed => 21)
SearchTerm.calculate_scores
st1.reload
st2.reload
assert st1.score > 0, "Did not calculate st1 score."
assert st2.score > 0, "Did not calculate st2 score."
end
should 'consider the older the occurrence less it should influence the score' do
st1 = SearchTerm.find_or_create('st1', Environment.default)
SearchTermOccurrence.create!(:search_term => st1, :total => 10, :indexed => 3, :created_at => 1.month.ago)
SearchTermOccurrence.create!(:search_term => st1, :total => 20, :indexed => 8, :created_at => 1.month.ago)
st2 = SearchTerm.find_or_create('st2', Environment.default)
SearchTermOccurrence.create!(:search_term => st2, :total => 10, :indexed => 3, :created_at => 2.months.ago)
SearchTermOccurrence.create!(:search_term => st2, :total => 20, :indexed => 8, :created_at => 2.months.ago)
SearchTerm.calculate_scores
st1.reload
st2.reload
assert st1.score > st2.score, "Older occurrences are not influencing score less than newer ones."
end
should 'consider higher relevance if the ratio results:total is smaller' do
st1 = SearchTerm.find_or_create('st1', Environment.default)
SearchTermOccurrence.create!(:search_term => st1, :total => 10, :indexed => 4)
st2 = SearchTerm.find_or_create('st2', Environment.default)
SearchTermOccurrence.create!(:search_term => st2, :total => 10, :indexed => 5)
SearchTerm.calculate_scores
st1.reload
st2.reload
assert st1.score > st2.score, "Less ratio results:total are not getting higher scores."
end
end