de 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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