linkage 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -20,6 +20,28 @@ class UnitTests::TestExpectation < Test::Unit::TestCase
20
20
  assert_equal :dual, exp.kind
21
21
  end
22
22
 
23
+ test "kind when one field and one function from different datasets" do
24
+ dataset_1 = mock('dataset 1')
25
+ dataset_2 = mock('dataset 2')
26
+ field = stub_field('field', :dataset => dataset_1)
27
+ func = stub_function('function', :dataset => dataset_2, :static? => false)
28
+ field.expects(:==).with(func).returns(false)
29
+ dataset_1.expects(:==).with(dataset_2).returns(false)
30
+ exp = Linkage::MustExpectation.new(:==, field, func)
31
+ assert_equal :dual, exp.kind
32
+ end
33
+
34
+ test "kind when two functions from different datasets" do
35
+ dataset_1 = mock('dataset 1')
36
+ dataset_2 = mock('dataset 2')
37
+ func_1 = stub_function('function 1', :dataset => dataset_1, :static? => false)
38
+ func_2 = stub_function('function 2', :dataset => dataset_2, :static? => false)
39
+ func_1.expects(:==).with(func_2).returns(false)
40
+ dataset_1.expects(:==).with(dataset_2).returns(false)
41
+ exp = Linkage::MustExpectation.new(:==, func_1, func_2)
42
+ assert_equal :dual, exp.kind
43
+ end
44
+
23
45
  test "kind when two identical fields from the same dataset" do
24
46
  field_1 = stub_field('field 1')
25
47
  field_2 = stub_field('field 2')
@@ -28,6 +50,14 @@ class UnitTests::TestExpectation < Test::Unit::TestCase
28
50
  assert_equal :self, exp.kind
29
51
  end
30
52
 
53
+ test "kind when two identical functions from the same dataset" do
54
+ func_1 = stub_function('function 1')
55
+ func_2 = stub_function('function 2')
56
+ func_1.expects(:==).with(func_2).returns(true)
57
+ exp = Linkage::MustExpectation.new(:==, func_1, func_2)
58
+ assert_equal :self, exp.kind
59
+ end
60
+
31
61
  test "kind when two different fields from the same dataset" do
32
62
  dataset_1 = mock('dataset 1')
33
63
  dataset_2 = mock('dataset 2')
@@ -39,6 +69,17 @@ class UnitTests::TestExpectation < Test::Unit::TestCase
39
69
  assert_equal :cross, exp.kind
40
70
  end
41
71
 
72
+ test "kind when two different functions from the same dataset" do
73
+ dataset_1 = mock('dataset 1')
74
+ dataset_2 = mock('dataset 2')
75
+ func_1 = stub_function('function 1', :dataset => dataset_1)
76
+ func_2 = stub_function('function 2', :dataset => dataset_2)
77
+ func_1.expects(:==).with(func_2).returns(false)
78
+ dataset_1.expects(:==).with(dataset_2).returns(true)
79
+ exp = Linkage::MustExpectation.new(:==, func_1, func_2)
80
+ assert_equal :cross, exp.kind
81
+ end
82
+
42
83
  test "manually set kind with two different fields from the same dataset" do
43
84
  dataset = mock('dataset 1')
44
85
  field_1 = stub_field('field 1', :dataset => dataset)
@@ -71,6 +112,30 @@ class UnitTests::TestExpectation < Test::Unit::TestCase
71
112
  exp.apply_to(dataset_2)
72
113
  end
73
114
 
115
+ test "apply a two-function dual expectation to two datasets" do
116
+ dataset_1 = stub('dataset 1')
117
+ dataset_2 = stub('dataset 2')
118
+ func_1 = stub_function('function 1', :name => :foo, :dataset => dataset_1) do
119
+ stubs(:belongs_to?).with(dataset_1).returns(true)
120
+ stubs(:belongs_to?).with(dataset_2).returns(false)
121
+ end
122
+ func_2 = stub_function('function 2', :name => :bar, :dataset => dataset_2) do
123
+ stubs(:belongs_to?).with(dataset_2).returns(true)
124
+ stubs(:belongs_to?).with(dataset_1).returns(false)
125
+ end
126
+ merged_field = stub_field('merged field', :name => :foo_bar)
127
+ func_1.stubs(:merge).with(func_2).returns(merged_field)
128
+ exp = Linkage::MustExpectation.new(:==, func_1, func_2)
129
+
130
+ dataset_1.expects(:add_order).with(func_1)
131
+ dataset_1.expects(:add_select).with(func_1, :foo_bar)
132
+ exp.apply_to(dataset_1)
133
+
134
+ dataset_2.expects(:add_order).with(func_2)
135
+ dataset_2.expects(:add_select).with(func_2, :foo_bar)
136
+ exp.apply_to(dataset_2)
137
+ end
138
+
74
139
  test "apply a two-field dual expectation to two datasets with an alias" do
75
140
  dataset_1 = stub('dataset 1')
76
141
  dataset_2 = stub('dataset 2')
@@ -142,6 +207,20 @@ class UnitTests::TestExpectation < Test::Unit::TestCase
142
207
  exp.apply_to(dataset)
143
208
  end
144
209
 
210
+ test "apply a two-function self expectation" do
211
+ dataset = stub('dataset')
212
+ func = stub_function('function', :name => :foo, :dataset => dataset) do
213
+ expects(:belongs_to?).with(dataset).twice.returns(true)
214
+ end
215
+ exp = Linkage::MustExpectation.new(:==, func, func)
216
+
217
+ # Twice is okay, since add_order/add_select will take care of
218
+ # duplicates.
219
+ dataset.expects(:add_order).twice.with(func)
220
+ dataset.expects(:add_select).twice.with(func, :foo)
221
+ exp.apply_to(dataset)
222
+ end
223
+
145
224
  test "apply a two-field self expectation like a cross" do
146
225
  dataset_1 = stub('dataset 1')
147
226
  dataset_2 = stub('dataset 2')
@@ -174,12 +253,19 @@ class UnitTests::TestExpectation < Test::Unit::TestCase
174
253
  assert_equal :foo_bar, exp.name
175
254
  end
176
255
 
177
- test "expectation with static value" do
256
+ test "expectation with static value is of type 'filter'" do
178
257
  field = stub_field('field')
179
258
  exp = Linkage::MustExpectation.new(:==, field, 123)
180
259
  assert_equal :filter, exp.kind
181
260
  end
182
261
 
262
+ test "expectation with static function is of type 'filter'" do
263
+ field = stub_field('field')
264
+ func = stub_function('func', :static? => true)
265
+ exp = Linkage::MustExpectation.new(:==, field, func)
266
+ assert_equal :filter, exp.kind
267
+ end
268
+
183
269
  test "apply filter expectation" do
184
270
  dataset_1 = stub('dataset 1')
185
271
  dataset_2 = stub('dataset 2')
@@ -291,4 +377,14 @@ class UnitTests::TestExpectation < Test::Unit::TestCase
291
377
  field.expects(:belongs_to?).with(dataset_2).returns(false)
292
378
  exp.apply_to(dataset_2)
293
379
  end
380
+
381
+ test "allows a dynamic function filter" do
382
+ func = stub_function("foo", :static? => false)
383
+ exp = Linkage::MustNotExpectation.new(:==, func, 123)
384
+ end
385
+
386
+ test "does not allow a static function filter" do
387
+ func = stub_function("foo", :static? => true)
388
+ assert_raises(ArgumentError) { Linkage::MustNotExpectation.new(:==, func, 123) }
389
+ end
294
390
  end
@@ -7,6 +7,10 @@ class UnitTests::TestField < Test::Unit::TestCase
7
7
  f
8
8
  end
9
9
 
10
+ test "subclass of data" do
11
+ assert_equal Linkage::Data, Linkage::Field.superclass
12
+ end
13
+
10
14
  test "initialize with schema info" do
11
15
  schema = {:allow_null=>true, :default=>nil, :primary_key=>true, :db_type=>"integer", :type=>:integer, :ruby_default=>nil}
12
16
  field = Linkage::Field.new(:id, schema)
@@ -21,420 +25,15 @@ class UnitTests::TestField < Test::Unit::TestCase
21
25
  assert_equal info, field.ruby_type
22
26
  end
23
27
 
24
- test "merge two identical fields" do
25
- field_1 = Linkage::Field.new(:id, {:allow_null=>true, :default=>nil, :primary_key=>true, :db_type=>"integer", :type=>:integer, :ruby_default=>nil})
26
- field_2 = Linkage::Field.new(:id, {:allow_null=>true, :default=>nil, :primary_key=>true, :db_type=>"integer", :type=>:integer, :ruby_default=>nil})
27
- expected_type = {:type => Integer}
28
-
29
- result_field = field_1.merge(field_2)
30
- assert_equal(:id, result_field.name)
31
- assert_equal(expected_type, result_field.ruby_type)
32
-
33
- result_field = field_2.merge(field_1)
34
- assert_equal(:id, result_field.name)
35
- assert_equal(expected_type, result_field.ruby_type)
36
- end
37
-
38
- test "merge fields with different names" do
39
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>true, :db_type=>"integer", :type=>:integer, :ruby_default=>nil})
40
- field_2 = Linkage::Field.new(:bar, {:allow_null=>true, :default=>nil, :primary_key=>true, :db_type=>"integer", :type=>:integer, :ruby_default=>nil})
41
-
42
- result_field = field_1.merge(field_2)
43
- assert_equal(:foo_bar, result_field.name)
44
- result_field = field_2.merge(field_1)
45
- assert_equal(:bar_foo, result_field.name)
46
- end
47
-
48
- test "merge two boolean fields" do
49
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"boolean", :type=>:boolean, :ruby_default=>nil})
50
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"boolean", :type=>:boolean, :ruby_default=>nil})
51
- expected_type = {:type => TrueClass}
52
-
53
- result_field = field_1.merge(field_2)
54
- assert_equal(:foo, result_field.name)
55
- assert_equal(expected_type, result_field.ruby_type)
56
-
57
- result_field = field_2.merge(field_1)
58
- assert_equal(:foo, result_field.name)
59
- assert_equal(expected_type, result_field.ruby_type)
60
- end
61
-
62
- test "merge a boolean field and an integer field" do
63
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"integer", :type=>:integer, :ruby_default=>nil})
64
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"boolean", :type=>:boolean, :ruby_default=>nil})
65
- expected_type = {:type => Integer}
66
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
67
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
68
- end
69
-
70
- test "merge a boolean field and a bignum field" do
71
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"bigint", :type=>:bigint, :ruby_default=>nil})
72
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"boolean", :type=>:boolean, :ruby_default=>nil})
73
- expected_type = {:type => Bignum}
74
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
75
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
76
- end
77
-
78
- test "merge a boolean field and a float field" do
79
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"float", :type=>:float, :ruby_default=>nil})
80
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"boolean", :type=>:boolean, :ruby_default=>nil})
81
- expected_type = {:type => Float}
82
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
83
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
84
- end
85
-
86
- test "merge a boolean field and a decimal field" do
87
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"decimal", :type=>:decimal, :ruby_default=>nil})
88
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"boolean", :type=>:boolean, :ruby_default=>nil})
89
- expected_type = {:type => BigDecimal}
90
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
91
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
92
- end
93
-
94
- test "merge a boolean field and a decimal field with size" do
95
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"decimal(10,2)", :type=>:decimal, :ruby_default=>nil})
96
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"boolean", :type=>:boolean, :ruby_default=>nil})
97
- expected_type = {:type => BigDecimal, :opts => {:size => [10, 2]}}
98
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
99
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
100
- end
101
-
102
- test "merge a boolean field and a string field" do
103
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"varchar(10)", :type=>:string, :ruby_default=>nil})
104
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"boolean", :type=>:boolean, :ruby_default=>nil})
105
- expected_type = {:type => String, :opts => {:size => 10}}
106
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
107
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
108
- end
109
-
110
- test "merge a boolean field and a text field" do
111
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"text", :type=>:text, :ruby_default=>nil})
112
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"boolean", :type=>:boolean, :ruby_default=>nil})
113
- expected_type = {:type => String, :opts => {:text => true}}
114
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
115
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
116
- end
117
-
118
- test "merge a boolean field and a fixed string field" do
119
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"char(10)", :type=>:string, :ruby_default=>nil})
120
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"boolean", :type=>:boolean, :ruby_default=>nil})
121
- expected_type = {:type => String, :opts => {:size => 10, :fixed => true}}
122
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
123
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
124
- end
125
-
126
- test "merge two integer fields" do
127
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"integer", :type=>:integer, :ruby_default=>nil})
128
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"integer", :type=>:integer, :ruby_default=>nil})
129
- expected_type = {:type => Integer}
130
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
131
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
132
- end
133
-
134
- test "merge an integer field and a bignum field" do
135
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"bigint", :type=>:bigint, :ruby_default=>nil})
136
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"integer", :type=>:integer, :ruby_default=>nil})
137
- expected_type = {:type => Bignum}
138
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
139
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
140
- end
141
-
142
- test "merge an integer field and a float field" do
143
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"float", :type=>:float, :ruby_default=>nil})
144
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"integer", :type=>:integer, :ruby_default=>nil})
145
- expected_type = {:type => Float}
146
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
147
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
148
- end
149
-
150
- test "merge an integer field and a decimal field" do
151
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"decimal", :type=>:decimal, :ruby_default=>nil})
152
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"integer", :type=>:integer, :ruby_default=>nil})
153
- expected_type = {:type => BigDecimal}
154
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
155
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
156
- end
157
-
158
- test "merge an integer field and a decimal field with size" do
159
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"decimal(10,2)", :type=>:decimal, :ruby_default=>nil})
160
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"integer", :type=>:integer, :ruby_default=>nil})
161
- expected_type = {:type => BigDecimal, :opts => {:size => [10, 2]}}
162
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
163
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
164
- end
165
-
166
- test "merge an integer field and a string field" do
167
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"varchar(10)", :type=>:string, :ruby_default=>nil})
168
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"integer", :type=>:integer, :ruby_default=>nil})
169
- expected_type = {:type => String, :opts => {:size => 10}}
170
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
171
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
172
- end
173
-
174
- test "merge an integer field and a text field" do
175
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"text", :type=>:text, :ruby_default=>nil})
176
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"integer", :type=>:integer, :ruby_default=>nil})
177
- expected_type = {:type => String, :opts => {:text => true}}
178
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
179
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
180
- end
181
-
182
- test "merge an integer field and a fixed string field" do
183
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"char(10)", :type=>:string, :ruby_default=>nil})
184
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"integer", :type=>:integer, :ruby_default=>nil})
185
- expected_type = {:type => String, :opts => {:size => 10, :fixed => true}}
186
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
187
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
188
- end
189
-
190
- test "merge two bignum fields" do
191
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"bigint", :type=>:bigint, :ruby_default=>nil})
192
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"bigint", :type=>:bigint, :ruby_default=>nil})
193
- expected_type = {:type => Bignum}
194
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
195
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
196
- end
197
-
198
- test "merge an bignum field and a decimal field" do
199
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"decimal", :type=>:decimal, :ruby_default=>nil})
200
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"bigint", :type=>:bigint, :ruby_default=>nil})
201
- expected_type = {:type => BigDecimal}
202
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
203
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
204
- end
205
-
206
- test "merge an bignum field and a decimal field with size" do
207
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"decimal(10,2)", :type=>:decimal, :ruby_default=>nil})
208
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"bigint", :type=>:bigint, :ruby_default=>nil})
209
- expected_type = {:type => BigDecimal, :opts => {:size => [10, 2]}}
210
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
211
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
212
- end
213
-
214
- test "merge an bignum field and a string field" do
215
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"varchar(10)", :type=>:string, :ruby_default=>nil})
216
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"bigint", :type=>:bigint, :ruby_default=>nil})
217
- expected_type = {:type => String, :opts => {:size => 10}}
218
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
219
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
220
- end
221
-
222
- test "merge an bignum field and a text field" do
223
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"text", :type=>:text, :ruby_default=>nil})
224
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"bigint", :type=>:bigint, :ruby_default=>nil})
225
- expected_type = {:type => String, :opts => {:text => true}}
226
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
227
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
228
- end
229
-
230
- test "merge an bignum field and a fixed string field" do
231
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"char(10)", :type=>:string, :ruby_default=>nil})
232
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"bigint", :type=>:bigint, :ruby_default=>nil})
233
- expected_type = {:type => String, :opts => {:size => 10, :fixed => true}}
234
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
235
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
236
- end
237
-
238
- test "merge two float fields" do
239
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"float", :type=>:float, :ruby_default=>nil})
240
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"float", :type=>:float, :ruby_default=>nil})
241
- expected_type = {:type => Float}
242
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
243
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
244
- end
245
-
246
- test "merge a float field and a bignum field" do
247
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"bigint", :type=>:bigint, :ruby_default=>nil})
248
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"float", :type=>:float, :ruby_default=>nil})
249
- expected_type = {:type => BigDecimal}
250
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
251
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
252
- end
253
-
254
- test "merge a float field and a decimal field" do
255
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"decimal", :type=>:decimal, :ruby_default=>nil})
256
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"float", :type=>:float, :ruby_default=>nil})
257
- expected_type = {:type => BigDecimal}
258
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
259
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
260
- end
261
-
262
- test "merge a float field and a decimal field with size" do
263
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"decimal(10,2)", :type=>:decimal, :ruby_default=>nil})
264
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"float", :type=>:float, :ruby_default=>nil})
265
- expected_type = {:type => BigDecimal, :opts => {:size => [10, 2]}}
266
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
267
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
268
- end
269
-
270
- test "merge a float field and a string field" do
271
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"varchar(10)", :type=>:string, :ruby_default=>nil})
272
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"float", :type=>:float, :ruby_default=>nil})
273
- expected_type = {:type => String, :opts => {:size => 10}}
274
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
275
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
276
- end
277
-
278
- test "merge a float field and a text field" do
279
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"text", :type=>:text, :ruby_default=>nil})
280
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"float", :type=>:float, :ruby_default=>nil})
281
- expected_type = {:type => String, :opts => {:text => true}}
282
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
283
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
284
- end
285
-
286
- test "merge a float field and a fixed string field" do
287
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"char(10)", :type=>:string, :ruby_default=>nil})
288
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"float", :type=>:float, :ruby_default=>nil})
289
- expected_type = {:type => String, :opts => {:size => 10, :fixed => true}}
290
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
291
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
292
- end
293
-
294
- test "merge two decimal fields" do
295
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"decimal", :type=>:decimal, :ruby_default=>nil})
296
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"decimal", :type=>:decimal, :ruby_default=>nil})
297
- expected_type = {:type => BigDecimal}
298
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
299
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
300
- end
301
-
302
- test "merge two decimal fields, one with size" do
303
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"decimal(10,2)", :type=>:decimal, :ruby_default=>nil})
304
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"decimal", :type=>:decimal, :ruby_default=>nil})
305
- expected_type = {:type => BigDecimal, :opts => {:size => [10, 2]}}
306
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
307
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
308
- end
309
-
310
- test "merge two decimal fields, both with size" do
311
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"decimal(10,2)", :type=>:decimal, :ruby_default=>nil})
312
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"decimal(12,1)", :type=>:decimal, :ruby_default=>nil})
313
- expected_type = {:type => BigDecimal, :opts => {:size => [12, 2]}}
314
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
315
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
316
- end
317
-
318
- test "merge two decimal fields, both with size, one without scale" do
319
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"decimal(10)", :type=>:decimal, :ruby_default=>nil})
320
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"decimal(12,1)", :type=>:decimal, :ruby_default=>nil})
321
- expected_type = {:type => BigDecimal, :opts => {:size => [12, 1]}}
322
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
323
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
324
- end
325
-
326
- test "merge a decimal field and a string field" do
327
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"varchar(10)", :type=>:string, :ruby_default=>nil})
328
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"decimal", :type=>:decimal, :ruby_default=>nil})
329
- expected_type = {:type => String, :opts => {:size => 10}}
330
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
331
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
332
- end
333
-
334
- test "merge a decimal field with size and a string field" do
335
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"varchar(10)", :type=>:string, :ruby_default=>nil})
336
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"decimal(12,2)", :type=>:decimal, :ruby_default=>nil})
337
- expected_type = {:type => String, :opts => {:size => 13}}
338
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
339
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
340
- end
341
-
342
- test "merge a decimal field and a text field" do
343
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"text", :type=>:text, :ruby_default=>nil})
344
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"decimal", :type=>:decimal, :ruby_default=>nil})
345
- expected_type = {:type => String, :opts => {:text => true}}
346
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
347
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
348
- end
349
-
350
- test "merge a decimal field with size and a text field" do
351
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"text", :type=>:text, :ruby_default=>nil})
352
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"decimal(12,2)", :type=>:decimal, :ruby_default=>nil})
353
- expected_type = {:type => String, :opts => {:text => true}}
354
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
355
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
356
- end
357
-
358
- test "merge a decimal field and a fixed string field" do
359
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"char(10)", :type=>:string, :ruby_default=>nil})
360
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"decimal", :type=>:decimal, :ruby_default=>nil})
361
- expected_type = {:type => String, :opts => {:size => 10, :fixed => true}}
362
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
363
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
364
- end
365
-
366
- test "merge two string fields" do
367
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"varchar(20)", :type=>:string, :ruby_default=>nil})
368
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"varchar(20)", :type=>:string, :ruby_default=>nil})
369
- expected_type = {:type => String, :opts => {:size => 20}}
370
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
371
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
372
- end
373
-
374
- test "merge two string fields with different sizes" do
375
- field_1 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"varchar(15)", :type=>:string, :ruby_default=>nil})
376
- field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"varchar(20)", :type=>:string, :ruby_default=>nil})
377
- expected_type = {:type => String, :opts => {:size => 20}}
378
- assert_equal(expected_type, field_1.merge(field_2).ruby_type)
379
- assert_equal(expected_type, field_2.merge(field_1).ruby_type)
380
- end
381
-
382
- test "merge two fields and specify name" do
383
- field_1 = Linkage::Field.new(:id, {:allow_null=>true, :default=>nil, :primary_key=>true, :db_type=>"integer", :type=>:integer, :ruby_default=>nil})
384
- field_2 = Linkage::Field.new(:id, {:allow_null=>true, :default=>nil, :primary_key=>true, :db_type=>"integer", :type=>:integer, :ruby_default=>nil})
385
-
386
- result_field = field_1.merge(field_2, 'foo')
387
- assert_equal :foo, result_field.name
388
-
389
- result_field = field_2.merge(field_1, 'foo')
390
- assert_equal :foo, result_field.name
391
- end
392
-
393
- test "== returns true when fields have the same name and are from the same dataset" do
394
- dataset_1 = stub('dataset')
395
- field_1 = Linkage::Field.new(:id, {:allow_null=>true, :default=>nil, :primary_key=>true, :db_type=>"integer", :type=>:integer, :ruby_default=>nil})
396
- field_1.dataset = dataset_1
397
- dataset_2 = stub('dataset clone')
398
- field_2 = Linkage::Field.new(:id, {:allow_null=>true, :default=>nil, :primary_key=>true, :db_type=>"integer", :type=>:integer, :ruby_default=>nil})
399
- field_2.dataset = dataset_2
400
-
401
- dataset_1.expects(:==).with(dataset_2).returns(true)
402
- assert_equal field_1, field_2
403
- end
404
-
405
- test "== returns false when fields have the same name but are from different datasets" do
406
- dataset_1 = stub('dataset 1')
407
- field_1 = Linkage::Field.new(:id, {:allow_null=>true, :default=>nil, :primary_key=>true, :db_type=>"integer", :type=>:integer, :ruby_default=>nil})
408
- field_1.dataset = dataset_1
409
- dataset_2 = stub('dataset 2')
410
- field_2 = Linkage::Field.new(:id, {:allow_null=>true, :default=>nil, :primary_key=>true, :db_type=>"integer", :type=>:integer, :ruby_default=>nil})
411
- field_2.dataset = dataset_2
412
-
413
- dataset_1.expects(:==).with(dataset_2).returns(false)
414
- assert_not_equal field_1, field_2
415
- end
416
-
417
- test "belongs_to? dataset" do
418
- dataset = stub('dataset 1', :id => 1)
419
- field = Linkage::Field.new(:id, {:allow_null=>true, :default=>nil, :primary_key=>true, :db_type=>"integer", :type=>:integer, :ruby_default=>nil})
420
- field.dataset = dataset
421
- assert field.belongs_to?(dataset)
422
- end
423
-
424
- test "belongs_to? dataset with same id" do
425
- dataset_1 = stub('dataset 1', :id => 1)
426
- dataset_2 = stub('dataset 2', :id => 1)
427
- field = Linkage::Field.new(:id, {:allow_null=>true, :default=>nil, :primary_key=>true, :db_type=>"integer", :type=>:integer, :ruby_default=>nil})
428
- field.dataset = dataset_1
429
- assert field.belongs_to?(dataset_2)
28
+ test "static? is always false" do
29
+ schema = {:allow_null=>true, :default=>nil, :primary_key=>true, :db_type=>"integer", :type=>:integer, :ruby_default=>nil}
30
+ field = Linkage::Field.new(:id, schema)
31
+ assert !field.static?
430
32
  end
431
33
 
432
- test "belongs_to? dataset with different id" do
433
- dataset_1 = stub('dataset 1', :id => 1)
434
- dataset_2 = stub('dataset 2', :id => 2)
34
+ test "ruby_type for integer" do
435
35
  field = Linkage::Field.new(:id, {:allow_null=>true, :default=>nil, :primary_key=>true, :db_type=>"integer", :type=>:integer, :ruby_default=>nil})
436
- field.dataset = dataset_1
437
- assert !field.belongs_to?(dataset_2)
36
+ assert_equal({:type => Integer}, field.ruby_type)
438
37
  end
439
38
 
440
39
  test "primary_key? returns true if primary key" do
@@ -444,4 +43,9 @@ class UnitTests::TestField < Test::Unit::TestCase
444
43
  field_2 = Linkage::Field.new(:foo, {:allow_null=>true, :default=>nil, :primary_key=>false, :db_type=>"integer", :type=>:integer, :ruby_default=>nil})
445
44
  assert !field_2.primary_key?
446
45
  end
46
+
47
+ test "to_expr returns name" do
48
+ field = Linkage::Field.new(:id, {:allow_null=>true, :default=>nil, :primary_key=>true, :db_type=>"integer", :type=>:integer, :ruby_default=>nil})
49
+ assert_equal :id, field.to_expr
50
+ end
447
51
  end