]> git.openstreetmap.org Git - rails.git/blob - vendor/gems/composite_primary_keys-1.1.0/test/test_ids.rb
Freezing composite primary key so that we can apply TomH's patch to it, and that...
[rails.git] / vendor / gems / composite_primary_keys-1.1.0 / test / test_ids.rb
1 require 'abstract_unit'\r
2 require 'fixtures/reference_type'\r
3 require 'fixtures/reference_code'\r
4 \r
5 class TestIds < Test::Unit::TestCase\r
6   fixtures :reference_types, :reference_codes\r
7   \r
8   CLASSES = {\r
9     :single => {\r
10       :class => ReferenceType,\r
11       :primary_keys => [:reference_type_id],\r
12     },\r
13     :dual   => { \r
14       :class => ReferenceCode,\r
15       :primary_keys => [:reference_type_id, :reference_code],\r
16     },\r
17     :dual_strs   => { \r
18       :class => ReferenceCode,\r
19       :primary_keys => ['reference_type_id', 'reference_code'],\r
20     },\r
21   }\r
22   \r
23   def setup\r
24     self.class.classes = CLASSES\r
25   end\r
26   \r
27   def test_id\r
28     testing_with do\r
29       assert_equal @first.id, @first.ids if composite?\r
30     end\r
31   end\r
32   \r
33   def test_id_to_s\r
34     testing_with do\r
35       assert_equal first_id_str, @first.id.to_s\r
36       assert_equal first_id_str, "#{@first.id}"\r
37     end\r
38   end\r
39   \r
40   def test_ids_to_s\r
41     testing_with do\r
42       order = @klass.primary_key.is_a?(String) ? @klass.primary_key : @klass.primary_key.join(',')\r
43       to_test = @klass.find(:all, :order => order)[0..1].map(&:id)\r
44       assert_equal '(1,1),(1,2)', @klass.ids_to_s(to_test) if @key_test == :dual\r
45       assert_equal '1,1;1,2', @klass.ids_to_s(to_test, ',', ';', '', '') if @key_test == :dual\r
46     end\r
47   end\r
48   \r
49   def test_composite_where_clause\r
50     testing_with do\r
51       where = 'reference_codes.reference_type_id=1 AND reference_codes.reference_code=2) OR (reference_codes.reference_type_id=2 AND reference_codes.reference_code=2'\r
52       assert_equal(where, @klass.composite_where_clause([[1, 2], [2, 2]])) if @key_test == :dual\r
53     end\r
54   end\r
55   \r
56   def test_set_ids_string\r
57     testing_with do\r
58       array = @primary_keys.collect {|key| 5}\r
59       expected = composite? ? array.to_composite_keys : array.first\r
60       @first.id = expected.to_s\r
61       assert_equal expected, @first.id\r
62     end\r
63   end\r
64   \r
65   def test_set_ids_array\r
66     testing_with do\r
67       array = @primary_keys.collect {|key| 5}\r
68       expected = composite? ? array.to_composite_keys : array.first\r
69       @first.id = expected\r
70       assert_equal expected, @first.id\r
71     end\r
72   end\r
73   \r
74   def test_set_ids_comp\r
75     testing_with do\r
76       array = @primary_keys.collect {|key| 5}\r
77       expected = composite? ? array.to_composite_keys : array.first\r
78       @first.id = expected\r
79       assert_equal expected, @first.id\r
80     end\r
81   end\r
82   \r
83   def test_primary_keys\r
84     testing_with do\r
85       if composite?\r
86         assert_not_nil @klass.primary_keys\r
87         assert_equal @primary_keys.map {|key| key.to_sym}, @klass.primary_keys\r
88         assert_equal @klass.primary_keys, @klass.primary_key\r
89       else\r
90         assert_not_nil @klass.primary_key\r
91         assert_equal @primary_keys, [@klass.primary_key.to_sym]\r
92       end\r
93       assert_equal @primary_keys.join(','), @klass.primary_key.to_s\r
94       # Need a :primary_keys should be Array with to_s overridden\r
95     end\r
96   end\r
97 end