de 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,39 @@
1
+ require 'test/unit'
2
+ require 'de'
3
+ require 'de/boolean'
4
+
5
+ class DeBooleanNotTest < Test::Unit::TestCase
6
+
7
+ def test_constructor
8
+ assert_nothing_raised(De::Error::AbstractClassObjectCreationError) { De::Boolean::Not.new }
9
+ assert_nothing_raised(De::Error::AbstractClassObjectCreationError) { De::Boolean::Not.new(De::Boolean::Operand.new('some name', true)) }
10
+ end
11
+
12
+ def test_add
13
+ not1 = De::Boolean::Not.new
14
+ operand1 = De::Boolean::Operand.new('some name', true)
15
+
16
+ not1 << operand1
17
+ assert_equal(2, not1.size)
18
+
19
+ not2 = De::Boolean::Not.new
20
+ or1 = De::Boolean::Or.new
21
+ not2 << or1
22
+ assert_equal(1, or1.size)
23
+
24
+ assert_raise(De::Error::ArgumentNumerError) { not2 << operand1 }
25
+ end
26
+
27
+ def test_evaluate
28
+ not1 = De::Boolean::Not.new
29
+ operand_true1 = De::Boolean::Operand.new('some name', true)
30
+ operand_false1 = De::Boolean::Operand.new('third name', false)
31
+
32
+ not1 << operand_true1
33
+ assert_equal(false, not1.evaluate)
34
+
35
+ not2 = De::Boolean::Not.new(operand_false1)
36
+ assert_equal(true, not2.evaluate)
37
+ end
38
+
39
+ end
@@ -0,0 +1,30 @@
1
+ require 'test/unit'
2
+ require 'de'
3
+ require 'de/boolean'
4
+
5
+ class DeBooleanOperandTest < Test::Unit::TestCase
6
+
7
+ def test_constructor
8
+ assert_nothing_raised(De::Error::AbstractClassObjectCreationError) { De::Boolean::Operand.new('first', true) }
9
+ end
10
+
11
+ def test_valid?
12
+ operand1 = De::Boolean::Operand.new('first', true)
13
+ operand2 = De::Boolean::Operand.new('second', false)
14
+ operand3 = De::Boolean::Operand.new('third', 'some string')
15
+
16
+ assert_equal(true, operand1.valid?)
17
+ assert_equal(true, operand2.valid?)
18
+ assert_equal(false, operand3.valid?)
19
+ end
20
+
21
+ def test_evaluate
22
+ operand1 = De::Boolean::Operand.new('first', true)
23
+ operand2 = De::Boolean::Operand.new('second', false)
24
+ operand3 = De::Boolean::Operand.new('third', 'some string')
25
+
26
+ assert_equal(true, operand1.evaluate)
27
+ assert_equal(false, operand2.evaluate)
28
+ assert_raise(De::Error::InvalidExpressionError, "Invalid expression") { operand3.evaluate }
29
+ end
30
+ end
@@ -0,0 +1,34 @@
1
+ require 'test/unit'
2
+ require 'de'
3
+ require 'de/boolean'
4
+
5
+ class DeBooleanOperatorTest < Test::Unit::TestCase
6
+
7
+ class SomeOperator < De::Boolean::BooleanOperator; end
8
+ class SomeOperator < De::Boolean::BooleanOperator; end
9
+ class NotSuitableOperand < De::Operand; end
10
+
11
+ def test_constructor
12
+ assert_raise(De::Error::AbstractClassObjectCreationError) { De::Boolean::BooleanOperator.new('first') }
13
+ assert_nothing_raised(De::Error::AbstractClassObjectCreationError) { SomeOperator.new('some name') }
14
+ end
15
+
16
+ def test_add
17
+ operator = SomeOperator.new('first')
18
+ operator2 = SomeOperator.new('second')
19
+ operand = De::Boolean::Operand.new('third', true)
20
+ not_suitable_operand = NotSuitableOperand.new('four', true)
21
+
22
+ assert_nothing_raised(De::Error::TypeError) {
23
+ operator << operator2
24
+ assert_equal(2, operator.size)
25
+
26
+ operator << operand
27
+ assert_equal(3, operator.size)
28
+ }
29
+
30
+ assert_raise(De::Error::TypeError) { operator << not_suitable_operand }
31
+
32
+ end
33
+
34
+ end
@@ -0,0 +1,51 @@
1
+ require 'test/unit'
2
+ require 'de'
3
+ require 'de/boolean'
4
+
5
+ class DeBooleanOrTest < Test::Unit::TestCase
6
+
7
+ def test_constructor
8
+ assert_nothing_raised(De::Error::AbstractClassObjectCreationError) { De::Boolean::Or.new }
9
+ assert_nothing_raised(De::Error::AbstractClassObjectCreationError) { De::Boolean::Or.new([De::Boolean::Operand.new('some name', true)]) }
10
+ end
11
+
12
+ def test_add
13
+ or1 = De::Boolean::Or.new
14
+ operand1 = De::Boolean::Operand.new('some name', true)
15
+
16
+ or1 << operand1
17
+ assert_equal(2, or1.size)
18
+
19
+ or2 = De::Boolean::Or.new
20
+ or1 << or2
21
+ assert_equal(3, or1.size)
22
+ end
23
+
24
+ def test_evaluate
25
+ or1 = De::Boolean::Or.new
26
+ operand_true1 = De::Boolean::Operand.new('some name', true)
27
+ operand_true2 = De::Boolean::Operand.new('second name', true)
28
+ operand_false1 = De::Boolean::Operand.new('third name', false)
29
+ operand_false2 = De::Boolean::Operand.new('fourth name', false)
30
+
31
+ or1 << operand_true1
32
+ or1 << operand_true2
33
+ assert_equal(true, or1.evaluate)
34
+
35
+ or2 = De::Boolean::Or.new
36
+ or2 << operand_true1
37
+ or2 << operand_false1
38
+ assert_equal(true, or2.evaluate)
39
+
40
+ or3 = De::Boolean::Or.new([operand_false1, operand_false2])
41
+ assert_equal(false, or3.evaluate)
42
+
43
+ or1 << or3
44
+ assert_equal(true, or1.evaluate)
45
+
46
+ or4 = De::Boolean::Or.new([operand_true1, operand_true2])
47
+ or1 << or4
48
+ assert_equal(true, or1.evaluate)
49
+ end
50
+
51
+ end
@@ -0,0 +1,35 @@
1
+ require 'test/unit'
2
+ require 'de'
3
+
4
+ class DeExpressionTest < Test::Unit::TestCase
5
+ class SomeOperator < De::Operator; end
6
+ class SomeOperand < De::Operand; end
7
+
8
+ def setup
9
+ @expression = De::Expression.new('some name', 'some content')
10
+ end
11
+
12
+ def test_expression_create
13
+ assert_equal('some name', @expression.name)
14
+ assert_equal('some content', @expression.content)
15
+ end
16
+
17
+ def test_add
18
+ operator = SomeOperator.new('some operator')
19
+ assert_nothing_raised(De::Error::TypeError) { @expression << operator }
20
+ assert_equal(@expression.children[0], operator)
21
+
22
+ operand = SomeOperand.new('some operand', 'operand content')
23
+ assert_nothing_raised(De::Error::TypeError) { @expression << operand }
24
+ assert_equal(@expression.children[1], operand)
25
+
26
+ obj = Object.new
27
+ assert_raise(De::Error::TypeError, "Cannot add object to expression") { @expression << obj }
28
+ assert_equal(3, @expression.size)
29
+ end
30
+
31
+ def test_valid?
32
+ assert_raise(De::Error::MethodShouldBeOverridenByExtendingClassError, "Cannot add object to expression") { @expression.valid? }
33
+ end
34
+
35
+ end
@@ -0,0 +1,29 @@
1
+ require 'test/unit'
2
+ require 'de'
3
+
4
+ class DeOperandTest < Test::Unit::TestCase
5
+
6
+ class SomeOperand < De::Operand; end
7
+
8
+ def test_constructor
9
+ assert_raise(De::Error::AbstractClassObjectCreationError, "Cannot create operator object") { De::Operand.new('some name', 'some value') }
10
+
11
+ assert_nothing_raised(De::Error::AbstractClassObjectCreationError) {
12
+ operand = SomeOperand.new('some name', 'some value')
13
+ assert_equal('some name', operand.name)
14
+ assert_equal('some value', operand.content)
15
+ }
16
+ end
17
+
18
+ def test_add
19
+ operand = SomeOperand.new('some name', 'some value')
20
+ operand2 = SomeOperand.new('another name', 'another value')
21
+
22
+ assert_raise(De::Error::TypeError, "Cannot add child to operand") { operand << operand2 }
23
+ end
24
+
25
+ def test_evaluate
26
+ operand = SomeOperand.new('some name', 'some value')
27
+ assert_raise(De::Error::MethodShouldBeOverridenByExtendingClassError, "evlauate method should raise Exception") { operand.evaluate }
28
+ end
29
+ end
@@ -0,0 +1,48 @@
1
+ require 'test/unit'
2
+ require 'de'
3
+
4
+ class DeOperatorTest < Test::Unit::TestCase
5
+
6
+ class SomeOperator < De::Operator; end
7
+ class SomeValidOperand < De::Operand;
8
+ def valid?
9
+ true
10
+ end
11
+ end
12
+ class SomeInvalidOperand < De::Operand;
13
+ def valid?
14
+ false
15
+ end
16
+ end
17
+
18
+ def test_constructor
19
+ assert_raise(De::Error::AbstractClassObjectCreationError, "Cannot create operator object") { De::Operator.new('some name') }
20
+
21
+ assert_nothing_raised(De::Error::AbstractClassObjectCreationError) {
22
+ operator = SomeOperator.new('some name')
23
+ assert_equal('some name', operator.name)
24
+ assert_equal(1, operator.size, 'No children noDes should be adDed')
25
+
26
+ operator2 = SomeOperator.new('another name', [operator])
27
+ assert_equal(2, operator2.size, 'First operator should be adDed as child to second one')
28
+ assert_equal(operator, operator2.children[0], 'First operator should be adDed as child to second one')
29
+ }
30
+
31
+ assert_raise(De::Error::TypeError, "Cannot create operator object") { SomeOperator.new('some name', 10) }
32
+ end
33
+
34
+ def test_valid?
35
+
36
+ operator = SomeOperator.new('some name')
37
+ assert_equal(false, operator.valid?)
38
+
39
+ operand = SomeValidOperand.new('another name', 5)
40
+ operator << operand
41
+ assert_equal(true, operator.valid?)
42
+
43
+ operand2 = SomeInvalidOperand.new('third name', 7)
44
+ operator << operand2
45
+ assert_equal(false, operator.valid?)
46
+
47
+ end
48
+ end
@@ -0,0 +1,113 @@
1
+ require 'test/unit'
2
+ require 'de'
3
+ require 'de/sunspot_solr'
4
+
5
+ class DeSunspotSolrAndTest < Test::Unit::TestCase
6
+ include De::SunspotSolr
7
+
8
+ def test_constructor
9
+ assert_nothing_raised(De::Error::AbstractClassObjectCreationError) { And.new }
10
+ assert_nothing_raised(De::Error::AbstractClassObjectCreationError) { And.new([SunspotOperand.new('some name', :client_id, :equal_to, 42)]) }
11
+ end
12
+
13
+ def test_equal
14
+ a = And.new
15
+ b = And.new
16
+ c = Or.new
17
+ assert(a == b)
18
+ assert(a != c)
19
+
20
+ d = And.new([EqualTo.new(:client_id, 42), GreaterThan.new(:price, 200)])
21
+ e = And.new([EqualTo.new(:client_id, 42), GreaterThan.new(:price, 200)])
22
+ f = And.new([GreaterThan.new(:price, 200), EqualTo.new(:client_id, 42)])
23
+ g = And.new([GreaterThan.new(:price, 200), EqualTo.new(:client_id, 42), Without.new(:products_group_id, 188)])
24
+ assert(d == e)
25
+ assert(d == f)
26
+ assert(e != g)
27
+
28
+ a << d
29
+ b << f
30
+ assert(a == b)
31
+
32
+ h = And.new
33
+ h << g
34
+ assert(a != h)
35
+ end
36
+
37
+ def test_add
38
+ and1 = And.new
39
+ operand1 = SunspotOperand.new('some name', :client_id, :eaual_to, 42)
40
+
41
+ result = and1 << operand1
42
+ assert_equal(2, and1.size)
43
+ assert_equal(operand1, result)
44
+
45
+ operand2 = SunspotOperand.new('some name 2', :client_id, :eaual_to, 42)
46
+ result = and1 << operand2
47
+ assert_equal(2, and1.size)
48
+ assert(result === operand1)
49
+
50
+ and2 = And.new
51
+ and1 << and2
52
+ assert_equal(3, and1.size)
53
+
54
+ and3 = And.new
55
+ and4 = And.new([EqualTo.new(:client_id, 42), GreaterThan.new(:price, 200)])
56
+ and5 = And.new([GreaterThan.new(:price, 200), EqualTo.new(:client_id, 42)])
57
+ or1 = Or.new([EqualTo.new(:client_id, 42), GreaterThan.new(:price, 200)])
58
+
59
+ and3 << and4
60
+ assert_equal(4, and3.size)
61
+ assert_equal(1, and3.children.size)
62
+ assert_equal(and4, and3.first_child)
63
+
64
+ result = and3 << and5
65
+ assert(and4 === result)
66
+ assert_equal(4, and3.size)
67
+ assert_equal(1, and3.children.size)
68
+ assert_equal(and4, and3.first_child)
69
+
70
+ result = and3 << or1
71
+ assert(or1 === result)
72
+ assert_equal(7, and3.size)
73
+ assert_equal(2, and3.children.size)
74
+ assert_equal(or1, and3.children[1])
75
+ end
76
+
77
+ def test_evaluate
78
+ and1 = And.new
79
+ client_operand = EqualTo.new(:client_id, 42)
80
+ name_operand = SunspotOperand.new('name', :name, :equal_to, 'some name')
81
+ price_operand = SunspotOperand.new('price', :price, :greater_than, 100)
82
+ name2_operand = SunspotOperand.new('name2', :name, :equal_to, 'some name 2')
83
+ search = Search.new('search_product', 'Product', {
84
+ :properties => {
85
+ :client_id => {:type => :integer, :dynamic => false},
86
+ :name => {:type => :string, :dynamic => false},
87
+ :price => {:type => :integer, :dynamic => true}
88
+ },
89
+ :dynamics => {:integer => :int_params, :string => :string_params, :time => :time_params, :text => :string_params}
90
+ })
91
+
92
+
93
+ and1 << client_operand
94
+ and1 << name_operand
95
+ assert_raise (De::Error::InvalidExpressionError) { and1.evaluate }
96
+
97
+ search << and1
98
+ assert_nothing_raised(De::Error::InvalidExpressionError) {
99
+ assert_equal("all_of do with(:client_id).equal_to(42) with(:name).equal_to('some name') end", and1.evaluate.gsub(/\s+/, ' '))
100
+ }
101
+
102
+ and1 << price_operand
103
+ assert_equal("all_of do with(:client_id).equal_to(42) with(:name).equal_to('some name') dynamic(:int_params) do with(:price).greater_than(100) end end", and1.evaluate.gsub(/\s+/, ' '))
104
+
105
+ and2 = And.new
106
+ and2 << name2_operand
107
+ and1 << and2
108
+ assert_equal("all_of do with(:name).equal_to('some name 2') end", and2.evaluate.gsub(/\s+/, ' '))
109
+ assert_equal("all_of do with(:client_id).equal_to(42) with(:name).equal_to('some name') dynamic(:int_params) do with(:price).greater_than(100) end all_of do with(:name).equal_to('some name 2') end end", and1.evaluate.gsub(/\s+/, ' '))
110
+
111
+ end
112
+
113
+ end
@@ -0,0 +1,49 @@
1
+ require 'test/unit'
2
+ require 'de'
3
+ require 'de/sunspot_solr'
4
+
5
+ class DeSunspotSolrNotTest < Test::Unit::TestCase
6
+ include De::SunspotSolr
7
+
8
+ def test_constructor
9
+ assert_nothing_raised(De::Error::AbstractClassObjectCreationError) { Not.new }
10
+ assert_nothing_raised(De::Error::AbstractClassObjectCreationError) { Not.new(SunspotOperand.new('some name', :client_id, :equal_to, 42)) }
11
+ end
12
+
13
+ def test_add
14
+ not1 = Not.new
15
+ operand1 = SunspotOperand.new('some name', :client_id, :equal_to, 42)
16
+
17
+ not1 << operand1
18
+ assert_equal(2, not1.size)
19
+
20
+ or1 = Or.new
21
+ operand2 = EqualTo.new(:client_id, 42)
22
+
23
+ assert_raise(De::Error::TypeError) { not1 << or1 }
24
+ assert_raise(De::Error::ArgumentNumerError) { not1 << operand2 }
25
+ end
26
+
27
+ def test_evaluate
28
+ not1 = Not.new(EqualTo.new(:client_id, 42))
29
+ not2 = Not.new(GreaterThanOrEqual.new(:price, 100))
30
+ search = Search.new('search_product', 'Product', {
31
+ :properties => {
32
+ :client_id => {:type => :integer, :dynamic => false},
33
+ :name => {:type => :string, :dynamic => false},
34
+ :price => {:type => :integer, :dynamic => true}
35
+ },
36
+ :dynamics => {:integer => :int_params, :string => :string_params, :time => :time_params, :text => :string_params}
37
+ })
38
+
39
+
40
+ search << not1
41
+ assert_nothing_raised(De::Error::InvalidExpressionError) {
42
+ assert_equal("without(:client_id).equal_to(42)", not1.evaluate.gsub(/\s+/, ' '))
43
+ }
44
+
45
+ search << not2
46
+ assert_equal("dynamic(:int_params) do any_of do without(:price).greater_than(100) without(:price, 100) end end", not2.evaluate.gsub(/\s+/, ' '))
47
+ end
48
+
49
+ end
@@ -0,0 +1,61 @@
1
+ require 'test/unit'
2
+ require 'de'
3
+ require 'de/sunspot_solr'
4
+
5
+ class DeSunspotSolrOrTest < Test::Unit::TestCase
6
+ include De::SunspotSolr
7
+
8
+ def test_constructor
9
+ assert_nothing_raised(De::Error::AbstractClassObjectCreationError) { Or.new }
10
+ assert_nothing_raised(De::Error::AbstractClassObjectCreationError) { Or.new([SunspotOperand.new('some name', :client_id, :equal_to, 42)]) }
11
+ end
12
+
13
+ def test_add
14
+ or1 = Or.new
15
+ operand1 = SunspotOperand.new('some name', :client_id, :equal_to, 42)
16
+
17
+ or1 << operand1
18
+ assert_equal(2, or1.size)
19
+
20
+ or2 = Or.new
21
+ or1 << or2
22
+ assert_equal(3, or1.size)
23
+ end
24
+
25
+ def test_evaluate
26
+ or1 = Or.new
27
+ client_operand = EqualTo.new(:client_id, 42)
28
+ name_operand = SunspotOperand.new('name', :name, :equal_to, 'some name')
29
+ price_operand = SunspotOperand.new('price', :price, :greater_than, 100)
30
+ name2_operand = SunspotOperand.new('name2', :name, :equal_to, 'some name 2')
31
+ search = Search.new('search_product', 'Product', {
32
+ :properties => {
33
+ :client_id => {:type => :integer, :dynamic => false},
34
+ :name => {:type => :string, :dynamic => false},
35
+ :price => {:type => :integer, :dynamic => true}
36
+ },
37
+ :dynamics => {:integer => :int_params, :string => :string_params, :time => :time_params, :text => :string_params}
38
+ })
39
+
40
+
41
+ or1 << client_operand
42
+ or1 << name_operand
43
+ assert_raise (De::Error::InvalidExpressionError) { or1.evaluate }
44
+
45
+ search << or1
46
+ assert_nothing_raised(De::Error::InvalidExpressionError) {
47
+ assert_equal("any_of do with(:client_id).equal_to(42) with(:name).equal_to('some name') end", or1.evaluate.gsub(/\s+/, ' '))
48
+ }
49
+
50
+ or1 << price_operand
51
+ assert_equal("any_of do with(:client_id).equal_to(42) with(:name).equal_to('some name') dynamic(:int_params) do with(:price).greater_than(100) end end", or1.evaluate.gsub(/\s+/, ' '))
52
+
53
+ and1 = And.new
54
+ and1 << name2_operand
55
+ or1 << and1
56
+ assert_equal("all_of do with(:name).equal_to('some name 2') end", and1.evaluate.gsub(/\s+/, ' '))
57
+ assert_equal("any_of do with(:client_id).equal_to(42) with(:name).equal_to('some name') dynamic(:int_params) do with(:price).greater_than(100) end all_of do with(:name).equal_to('some name 2') end end", or1.evaluate.gsub(/\s+/, ' '))
58
+
59
+ end
60
+
61
+ end