marjoree 0.0.1 → 0.0.9

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.
Files changed (174) hide show
  1. data/Marjoree.iml +14 -0
  2. data/README +9 -36
  3. data/bin/create_marj_structure.rb +75 -0
  4. data/bin/create_odbc_connections.rb +39 -0
  5. data/bin/odbc_connection_finder.rb +46 -0
  6. data/examples/contains_example.rb +1 -1
  7. data/examples/count_and_insert_example.rb +1 -1
  8. data/examples/select_example.rb +1 -1
  9. data/html/classes/ExpectedResultSet.html +60 -33
  10. data/html/classes/ExpectedResultSet.src/M000002.html +6 -5
  11. data/html/classes/ExpectedResultSet.src/M000003.html +5 -5
  12. data/html/classes/ExpectedResultSet.src/M000004.html +5 -5
  13. data/html/classes/ExpectedResultSet.src/M000005.html +18 -0
  14. data/html/classes/ExpectedResultSet.src/M000006.html +24 -0
  15. data/html/classes/ExpectedResultSet.src/M000007.html +23 -0
  16. data/html/classes/ExpectedResultSet.src/M000008.html +29 -0
  17. data/html/classes/Fixnum.html +287 -0
  18. data/html/classes/Fixnum.src/M000031.html +18 -0
  19. data/html/classes/Fixnum.src/M000034.html +18 -0
  20. data/html/classes/Fixnum.src/M000037.html +18 -0
  21. data/html/classes/Fixnum.src/M000039.html +18 -0
  22. data/html/classes/Fixnum.src/M000041.html +18 -0
  23. data/html/classes/Hash.html +156 -0
  24. data/html/classes/Hash.src/M000009.html +21 -0
  25. data/html/classes/Hash.src/M000010.html +20 -0
  26. data/html/classes/Marjoree.html +268 -151
  27. data/html/classes/Marjoree.src/M000057.html +19 -0
  28. data/html/classes/Marjoree.src/M000058.html +18 -0
  29. data/html/classes/{ExpectedResultSet.src/M000001.html → Marjoree.src/M000059.html} +4 -4
  30. data/html/classes/Marjoree.src/{M000024.html → M000060.html} +4 -4
  31. data/html/classes/Marjoree.src/{M000031.html → M000061.html} +4 -4
  32. data/html/classes/Marjoree.src/{M000026.html → M000062.html} +3 -3
  33. data/html/classes/Marjoree.src/{M000027.html → M000063.html} +3 -3
  34. data/html/classes/Marjoree.src/{M000028.html → M000064.html} +3 -3
  35. data/html/classes/Marjoree.src/{M000029.html → M000065.html} +5 -6
  36. data/html/classes/Marjoree.src/{M000030.html → M000066.html} +5 -5
  37. data/html/classes/Marjoree.src/M000067.html +19 -0
  38. data/html/classes/Marjoree.src/{M000032.html → M000068.html} +3 -3
  39. data/html/classes/{ResultSetWrapper.src/M000009.html → Marjoree.src/M000069.html} +4 -4
  40. data/html/classes/{ResultSetWrapper.src/M000010.html → Marjoree.src/M000070.html} +4 -4
  41. data/html/classes/{ResultSetWrapper.src/M000011.html → Marjoree.src/M000071.html} +4 -4
  42. data/html/classes/Marjoree.src/M000072.html +20 -0
  43. data/html/classes/Marjoree.src/M000073.html +20 -0
  44. data/html/classes/Marjoree.src/M000074.html +20 -0
  45. data/html/classes/Marjoree.src/{M000033.html → M000075.html} +3 -3
  46. data/html/classes/Marjoree.src/{M000034.html → M000076.html} +4 -4
  47. data/html/classes/Marjoree.src/{M000035.html → M000077.html} +2 -2
  48. data/html/classes/Marjoree.src/{M000036.html → M000078.html} +4 -3
  49. data/html/classes/Marjoree.src/{M000037.html → M000079.html} +1 -1
  50. data/html/classes/Marjoree.src/{M000038.html → M000080.html} +3 -3
  51. data/html/classes/Marjoree.src/{M000039.html → M000081.html} +3 -4
  52. data/html/classes/Marjoree.src/{M000040.html → M000082.html} +3 -3
  53. data/html/classes/Marjoree.src/{M000041.html → M000083.html} +3 -3
  54. data/html/classes/{ResultSetWrapper.src/M000008.html → Marjoree.src/M000084.html} +4 -4
  55. data/html/classes/ODBC.html +4 -0
  56. data/html/classes/ODBC/Error.html +12 -12
  57. data/html/classes/ODBC/Error.src/M000047.html +21 -0
  58. data/html/classes/ODBC/Error.src/{M000021.html → M000048.html} +2 -2
  59. data/html/classes/ODBC/TimeStamp.html +48 -18
  60. data/html/classes/ODBC/TimeStamp.src/{M000017.html → M000042.html} +2 -2
  61. data/html/classes/ODBC/TimeStamp.src/M000043.html +22 -0
  62. data/html/classes/ODBC/TimeStamp.src/{M000019.html → M000044.html} +2 -3
  63. data/html/classes/ODBC/TimeStamp.src/M000045.html +18 -0
  64. data/html/classes/ODBC/TimeStamp.src/M000046.html +18 -0
  65. data/html/classes/OdbcConnectionWrapper.html +244 -0
  66. data/html/classes/OdbcConnectionWrapper.src/M000023.html +18 -0
  67. data/html/classes/OdbcConnectionWrapper.src/M000024.html +18 -0
  68. data/html/classes/OdbcConnectionWrapper.src/M000025.html +22 -0
  69. data/html/classes/OdbcConnectionWrapper.src/M000026.html +25 -0
  70. data/html/classes/OdbcConnectionWrapper.src/M000027.html +20 -0
  71. data/html/classes/OdbcConnectionWrapper.src/M000028.html +28 -0
  72. data/html/classes/OdbcConnectionWrapper.src/M000029.html +24 -0
  73. data/html/classes/OdbcConnectionWrapper.src/M000030.html +30 -0
  74. data/html/classes/{ResultSetWrapper.html → ResultSet.html} +71 -94
  75. data/html/classes/ResultSet.src/M000011.html +27 -0
  76. data/html/classes/ResultSet.src/M000012.html +21 -0
  77. data/html/classes/ResultSet.src/M000013.html +23 -0
  78. data/html/classes/ResultSet.src/M000014.html +18 -0
  79. data/html/classes/ResultSet.src/M000015.html +18 -0
  80. data/html/classes/ResultSet.src/M000016.html +18 -0
  81. data/html/classes/ResultSet.src/M000017.html +18 -0
  82. data/html/classes/ResultSet.src/M000018.html +20 -0
  83. data/html/classes/ResultSet.src/M000019.html +18 -0
  84. data/html/classes/ResultSet.src/M000020.html +22 -0
  85. data/html/classes/ResultSet.src/M000021.html +23 -0
  86. data/html/classes/ResultSet.src/M000022.html +22 -0
  87. data/html/classes/Test.html +107 -0
  88. data/html/classes/Test/Unit.html +107 -0
  89. data/html/classes/Test/Unit/TestCase.html +257 -0
  90. data/html/classes/Test/Unit/TestCase.src/M000049.html +18 -0
  91. data/html/classes/Test/Unit/TestCase.src/M000050.html +18 -0
  92. data/html/classes/Test/Unit/TestCase.src/M000051.html +17 -0
  93. data/html/classes/Test/Unit/TestCase.src/M000052.html +17 -0
  94. data/html/classes/Test/Unit/TestCase.src/M000053.html +25 -0
  95. data/html/classes/Test/Unit/TestCase.src/M000054.html +18 -0
  96. data/html/classes/Test/Unit/TestCase.src/M000055.html +18 -0
  97. data/html/classes/Test/Unit/TestCase.src/M000056.html +35 -0
  98. data/html/created.rid +1 -1
  99. data/html/files/README.html +2 -51
  100. data/html/files/lib/expected_result_set_rb.html +1 -16
  101. data/html/files/lib/marjoree/core_rb.html +111 -0
  102. data/html/files/lib/marjoree/fixtures_rb.html +111 -0
  103. data/html/files/lib/marjoree/odbc_connection_wrapper_rb.html +109 -0
  104. data/html/files/lib/marjoree/odbc_rb.html +108 -0
  105. data/html/files/lib/{odbc_overrides_rb.html → marjoree/result_set_rb.html} +5 -5
  106. data/html/files/lib/{result_set_wrapper_rb.html → marjoree/time_rb.html} +5 -5
  107. data/html/files/lib/marjoree_rb.html +3 -4
  108. data/html/files/lib/run_marjoree_rb.html +145 -0
  109. data/html/files/lib/run_marjoree_rb.src/M000001.html +34 -0
  110. data/html/fr_class_index.html +7 -1
  111. data/html/fr_file_index.html +7 -2
  112. data/html/fr_method_index.html +84 -42
  113. data/lib/Marjoree.iml +12 -0
  114. data/lib/expected_result_set.rb +51 -24
  115. data/lib/marjoree.rb +2 -344
  116. data/lib/marjoree/core.rb +388 -0
  117. data/lib/marjoree/fixtures.rb +156 -0
  118. data/lib/marjoree/odbc.rb +45 -0
  119. data/lib/marjoree/odbc_connection_wrapper.rb +79 -0
  120. data/lib/marjoree/result_set.rb +165 -0
  121. data/lib/marjoree/sybase_definitions.rb +223 -0
  122. data/lib/marjoree/time.rb +31 -0
  123. data/lib/proc_param_info.txt +20 -0
  124. data/lib/run_marjoree.rb +31 -0
  125. data/pkg/marjoree-0.0.9.gem +0 -0
  126. data/rakefile.rb +3 -3
  127. data/tests/all_cruby_tests.rb +24 -0
  128. data/tests/all_jruby_tests.rb +22 -0
  129. data/tests/all_tests.rb +9 -6
  130. data/tests/fixtures/A.yml +3 -0
  131. data/tests/fixtures/B.yml +5 -0
  132. data/tests/fixtures/first_db/FIRST.yml +8 -0
  133. data/tests/fixtures/second_db/SECOND.yml +9 -0
  134. data/tests/marjoree/test_assert_results.rb +82 -0
  135. data/tests/marjoree/test_connection_details.rb +44 -0
  136. data/tests/{test_contains.rb → marjoree/test_contains.rb} +0 -0
  137. data/tests/{test_delete.rb → marjoree/test_delete.rb} +0 -0
  138. data/tests/marjoree/test_drop_user_objects.rb +52 -0
  139. data/tests/marjoree/test_expected_result_set.rb +111 -0
  140. data/tests/marjoree/test_fixtures.rb +112 -0
  141. data/tests/{test_insert.rb → marjoree/test_insert.rb} +0 -0
  142. data/tests/{test_marjoree.rb → marjoree/test_marjoree.rb} +14 -2
  143. data/tests/marjoree/test_multiple_db_fixtures.rb +35 -0
  144. data/tests/{test_num_rows.rb → marjoree/test_num_rows.rb} +0 -0
  145. data/tests/marjoree/test_odbc_connection_wrapper.rb +47 -0
  146. data/tests/{test_result_set_wrapper.rb → marjoree/test_result_set_wrapper.rb} +8 -8
  147. data/tests/marjoree/test_select.rb +55 -0
  148. data/tests/marjoree/test_single_odbc_connection_wrapper.rb +39 -0
  149. data/tests/{test_sproc.rb → marjoree/test_sproc.rb} +3 -4
  150. data/tests/marjoree/test_time.rb +25 -0
  151. data/tests/{test_time_stamp.rb → marjoree/test_time_stamp.rb} +10 -1
  152. data/tests/{test_truncate.rb → marjoree/test_truncate.rb} +0 -0
  153. data/tests/{test_update.rb → marjoree/test_update.rb} +14 -14
  154. data/tests/multiple_odbc_config/connections.yml +13 -0
  155. data/tests/single_odbc_config/connections.yml +3 -0
  156. metadata +214 -112
  157. data/html/classes/Marjoree.src/M000022.html +0 -19
  158. data/html/classes/Marjoree.src/M000023.html +0 -20
  159. data/html/classes/Marjoree.src/M000025.html +0 -18
  160. data/html/classes/Marjoree.src/M000042.html +0 -25
  161. data/html/classes/ODBC/Error.src/M000020.html +0 -21
  162. data/html/classes/ODBC/TimeStamp.src/M000018.html +0 -22
  163. data/html/classes/ResultSetWrapper.src/M000005.html +0 -27
  164. data/html/classes/ResultSetWrapper.src/M000006.html +0 -24
  165. data/html/classes/ResultSetWrapper.src/M000007.html +0 -23
  166. data/html/classes/ResultSetWrapper.src/M000012.html +0 -20
  167. data/html/classes/ResultSetWrapper.src/M000013.html +0 -18
  168. data/html/classes/ResultSetWrapper.src/M000014.html +0 -22
  169. data/html/classes/ResultSetWrapper.src/M000015.html +0 -23
  170. data/html/classes/ResultSetWrapper.src/M000016.html +0 -27
  171. data/lib/odbc_overrides.rb +0 -33
  172. data/lib/result_set_wrapper.rb +0 -193
  173. data/tests/test_expected_result_set.rb +0 -40
  174. data/tests/test_select.rb +0 -30
@@ -0,0 +1,44 @@
1
+ require 'test/unit'
2
+ require 'marjoree'
3
+ require 'marjoree/fixtures'
4
+ require 'marjoree/odbc_connection_wrapper'
5
+
6
+ #Test::Unit::TestCase.fixture_path = File.join(File.dirname(__FILE__), '../fixtures')
7
+ #Test::Unit::TestCase.odbc_config_path = File.join(File.dirname(__FILE__), '../odbc_config')
8
+
9
+ class TestConnectionDetails < Test::Unit::TestCase
10
+ include Marjoree
11
+
12
+ def setup
13
+ @original_odbc_config_path = OdbcConnectionWrapper.odbc_config_path
14
+ OdbcConnectionWrapper.odbc_config_path = './tests/multiple_odbc_config/connections.yml'
15
+ end
16
+
17
+ def test_connection_details
18
+ path = OdbcConnectionWrapper.odbc_config_path
19
+ puts path
20
+
21
+ yaml = IO.read(path)
22
+ yaml_contents = YAML.load(ERB.new(yaml).result(binding))
23
+
24
+ assert_equal( 4, yaml_contents.size )
25
+
26
+ assert_contains_username_and_password( yaml_contents['first_db'] )
27
+ assert_contains_username_and_password( yaml_contents['second_db'] )
28
+
29
+ default_db_map = yaml_contents['default']
30
+ assert( 'first_db', default_db_map['obdc_connection'] )
31
+ end
32
+
33
+ def teardown
34
+ OdbcConnectionWrapper.odbc_config_path = @original_odbc_config_path
35
+ end
36
+
37
+ private
38
+
39
+ def assert_contains_username_and_password( details_map )
40
+ assert( details_map.keys.include?( 'username' ) )
41
+ assert( details_map.keys.include?( 'password' ) )
42
+ end
43
+
44
+ end
File without changes
@@ -0,0 +1,52 @@
1
+ require 'test/unit'
2
+
3
+ class TestDropUserObjects < Test::Unit::TestCase
4
+ include Marjoree
5
+
6
+ def setup
7
+
8
+ $db.do( "CREATE TABLE TEST_TABLE( id int NOT NULL, value int NOT NULL )" )
9
+ $db.do( "CREATE VIEW VW_TEST_TABLE AS SELECT * FROM TEST_TABLE" )
10
+ load_sproc 'test_sproc.sp'
11
+ end
12
+
13
+ def test_drop_user_tables
14
+ drop_user_tables
15
+ assert_equal 0, count( :sysobjects, {:type => 'U'} )
16
+ end
17
+
18
+ def test_drop_user_tables
19
+ drop_user_views
20
+ assert_equal 0, count( :sysobjects, {:type => 'V'} )
21
+ end
22
+
23
+ def test_drop_user_sprocs
24
+ drop_user_sprocs
25
+ assert_equal 0, count( :sysobjects, {:type => 'P'} )
26
+ end
27
+
28
+ def teardown
29
+ begin
30
+ $db.do( "DROP PROCEDURE test_sproc" )
31
+ rescue
32
+ end
33
+
34
+ begin
35
+ $db.do( "DROP VIEW VW_TEST_TABLE" )
36
+ rescue
37
+ end
38
+
39
+ begin
40
+ $db.do( "DROP TABLE TEST_TABLE" )
41
+ rescue
42
+ end
43
+ end
44
+
45
+ private
46
+
47
+ def load_sproc( sproc_name )
48
+ dir = File.dirname(__FILE__)
49
+ sproc_contents = IO.readlines( "#{dir}/../sprocs/#{sproc_name}" ).join
50
+ $db.do sproc_contents
51
+ end
52
+ end
@@ -0,0 +1,111 @@
1
+ $:.unshift File.dirname(__FILE__) + "/../../lib"
2
+
3
+ require 'test/unit'
4
+ require 'expected_result_set'
5
+
6
+ class TestExpectedResultSet < Test::Unit::TestCase
7
+
8
+ def setup
9
+ @testee = ExpectedResultSet.new
10
+ end
11
+
12
+ def test_row_hashes_with_one_entry
13
+ @testee.columns = ["firstColumn"]
14
+ @testee.rows << [2]
15
+
16
+ assert_equal( [{"firstColumn"=>2}], @testee.row_hashes )
17
+ end
18
+
19
+ def test_columns_are_strings
20
+ @testee.columns = ["firstColumn"]
21
+ assert_equal ['firstColumn'], @testee.columns
22
+ end
23
+
24
+ def test_row_hash_with_one_row_and_one_column
25
+ @testee.columns = ["firstColumn"]
26
+ @testee.rows << [2]
27
+ assert_equal( {"firstColumn"=>2}, @testee.row_hash( 0 ) )
28
+ end
29
+
30
+ def test_row_hash_with_one_rows_and_two_columns
31
+ @testee.columns = ["firstColumn", "secondColumn"]
32
+ @testee.rows << [123, 456]
33
+ assert_equal( {"firstColumn"=>123, "secondColumn"=>456}, @testee.row_hash( 0 ) )
34
+ end
35
+
36
+ def test_row_hash_with_two_rows_and_two_columns
37
+ @testee.columns = ["firstColumn", "secondColumn"]
38
+ @testee.rows << [123, 234]
39
+ @testee.rows << [345, 567]
40
+ assert_equal( {"firstColumn"=>123, "secondColumn"=>234}, @testee.row_hash( 0 ) )
41
+ assert_equal( {"firstColumn"=>345, "secondColumn"=>567}, @testee.row_hash( 1 ) )
42
+ end
43
+
44
+ def test_adding_row_as_hash
45
+ @testee.with_row :first=>1, :second=>2
46
+ assert_equal({"first" => 1, "second"=>2}, @testee.row_hash(0))
47
+ end
48
+
49
+ def test_adding_multiple_rows_as_hash
50
+ @testee.with_row(:first=>1, :second=>2).with_row(:first=>10, :second=>20)
51
+ assert_equal({"first" => 1, "second"=>2}, @testee.row_hash(0))
52
+ assert_equal({"first" => 10, "second"=>20}, @testee.row_hash(1))
53
+ end
54
+
55
+ def test_adding_a_key_to_a_row_adds_that_to_previously_added_rows_with_nil_value
56
+ @testee.with_row :first=>1
57
+ @testee.with_row :first=>10, :second=>20
58
+ assert_equal({"first" => 1, "second"=>nil}, @testee.row_hash(0))
59
+ assert_equal({"first" => 10, "second"=>20}, @testee.row_hash(1))
60
+ end
61
+
62
+ def test_adding_a_fixture
63
+ fixture_map = { "firstColumn" => "first", "secondColumn" => "last" }
64
+
65
+ @testee.columns = [ "firstColumn", "secondColumn"]
66
+ assert( @testee.rows.empty? )
67
+
68
+ @testee.add_fixture( fixture_map )
69
+ assert( !@testee.rows.empty? )
70
+
71
+ assert_equal( [ "first", "last" ], @testee.rows[0] )
72
+ end
73
+
74
+ def test_adding_a_fixture_which_has_more_columns_than_expected_is_interested_in
75
+ fixture_map = { "firstColumn" => "first", "secondColumn" => "last", "not very interesting column" => "value" }
76
+
77
+ @testee.columns = [ "firstColumn", "secondColumn"]
78
+ @testee.add_fixture( fixture_map )
79
+
80
+ assert_equal( [ "first", "last" ], @testee.rows[0] )
81
+ end
82
+
83
+ def test_adding_a_fixture_which_has_less_columns_than_expected
84
+ fixture_map = { "firstColumn" => "first" }
85
+
86
+ @testee.columns = [ "firstColumn", "secondColumn"]
87
+ @testee.add_fixture( fixture_map )
88
+
89
+ assert_equal( [ "first", nil ], @testee.rows[0] )
90
+ end
91
+
92
+ def test_adding_two_fixtures_with_two_calls
93
+ @testee.columns = [ :one, :two ]
94
+ @testee.add_fixture( {:one => "first fixture first value", :two => "first fixture second value"} )
95
+ @testee.add_fixture( {:one => "second fixture first value", :two => "second fixture second value"} )
96
+
97
+ assert_equal( [ "first fixture first value", "first fixture second value" ], @testee.rows[0] )
98
+ assert_equal( [ "second fixture first value", "second fixture second value" ], @testee.rows[1] )
99
+ end
100
+
101
+ def test_adding_two_fixtures_that_join
102
+ @testee.columns = [ :parent_name, :child_name ]
103
+ parent_fixture_map = {:parent_name => "I am the parent table record", :id_join => 5 }
104
+ child_fixture_map = {:child_name => "I am the child table record", :id_join => 5 }
105
+ @testee.add_fixture parent_fixture_map, child_fixture_map
106
+
107
+ assert_equal( 1, @testee.rows.length )
108
+ assert_equal( [ "I am the parent table record", "I am the child table record" ], @testee.rows[0] )
109
+ end
110
+
111
+ end
@@ -0,0 +1,112 @@
1
+ require 'test/unit'
2
+ require 'marjoree'
3
+ require 'marjoree/fixtures'
4
+ require 'expected_result_set'
5
+
6
+ Test::Unit::TestCase.fixture_path = File.join(File.dirname(__FILE__), '../fixtures')
7
+
8
+ include Marjoree
9
+
10
+ class TestFixtureSql < Test::Unit::TestCase
11
+
12
+ def self.stub_fixtures(*tables)
13
+ execute( "CREATE TABLE A( id INT, name VARCHAR(255) )" ) if( !get_user_tables.include?( 'A' ) )
14
+ execute( "CREATE TABLE B( id_b INT )" ) if( !get_user_tables.include?( 'B' ) )
15
+ fixtures(*tables)
16
+ end
17
+
18
+ stub_fixtures :A, :B
19
+
20
+ # tests are numbered to ensure the running order
21
+
22
+ def test_1 # That A and B are inserted into the db from yml files
23
+ assert_A_initialisation
24
+
25
+ #from yml file
26
+ assert_equal( 1, A(:one).id )
27
+ assert_equal( 'Marvin', A(:one).name )
28
+
29
+ assert_B_initialisation
30
+
31
+ #from yml file
32
+ assert_equal( 1, B(:one).id_b)
33
+ assert_equal( 2, B(:two).id_b)
34
+ end
35
+
36
+ def test_2 # this test will update the fixture data
37
+ update "B", {:id_b => 2}, {:id_b => 100}
38
+ delete "B", {:id_b => 1}
39
+
40
+ expected = ExpectedResultSet.new( :id_b )
41
+ expected.rows << [100]
42
+
43
+ assert_results( expected, select( "B" ) )
44
+ assert_equal( 1, select( "B" ).size )
45
+ end
46
+
47
+ def test_3 # the fixtures code should have completely truncated table A & B and reinitialised them from the yml.
48
+ assert_A_initialisation
49
+ assert_B_initialisation
50
+ end
51
+
52
+ private
53
+
54
+ def assert_A_initialisation
55
+ actual_a = select "A"
56
+ assert_equal( 1, actual_a.size )
57
+
58
+ assert_equal( 1, actual_a.hashes[0][:id] )
59
+ assert_equal( 'Marvin', actual_a.hashes[0][:name] )
60
+ end
61
+
62
+ def assert_B_initialisation
63
+ actual_b = select "B"
64
+ assert_equal( 2, actual_b.size )
65
+
66
+ expected = ExpectedResultSet.new( :id_b )
67
+ expected.rows << [1]
68
+ expected.rows << [2]
69
+ assert_results( expected, actual_b )
70
+ end
71
+ end
72
+
73
+ class TestFixtures < Test::Unit::TestCase
74
+ fixtures :A, :B
75
+
76
+ def test_hash_to_sql
77
+ testee = { :key1 => 'value1', :key2 => 3.14, :key3 => 12 }
78
+ table_name = :ABC
79
+
80
+ sql = testee.to_sql(table_name)
81
+ assert sql =~ /^INSERT INTO ABC\((.*)\) VALUES\((.*)\)$/
82
+ keys = $1
83
+ values = $2
84
+
85
+ assert_equal "key1,key2,key3", keys.split(/,/).sort.join(',')
86
+ assert_equal "'value1',12,3.14", values.split(/,/).sort.join(',')
87
+ end
88
+
89
+ def test_retrieving_yaml_defined_value
90
+ a = A(:one)
91
+ b1 = B(:one)
92
+ b2 = B(:two)
93
+
94
+ assert_equal({ 'id' => 1, 'name' => 'Marvin' }, a)
95
+ assert_equal({ 'id_b' => 1 }, b1)
96
+ assert_equal({ 'id_b' => 2 }, b2)
97
+
98
+ assert_equal 1, a.id
99
+ assert_equal 'Marvin', a.name
100
+
101
+ assert_equal 1, b1.id
102
+ assert_equal 2, b2.id
103
+ end
104
+
105
+ def test_retrieving_value_not_defined_in_yaml_is_nil
106
+ assert_equal nil, A(:one).superhero_name
107
+ end
108
+
109
+ def test_defining_a_default_on_map
110
+ assert_equal "Captain Marvel", A(:one).with_defaults(:superhero_name=>"Captain Marvel").superhero_name
111
+ end
112
+ end
File without changes
@@ -1,11 +1,13 @@
1
+ $:.unshift File.dirname(__FILE__) + "/../../lib"
2
+
1
3
  require 'test/unit'
2
- require 'result_set_wrapper'
4
+ require 'marjoree'
3
5
 
4
6
  class TestMarjoree < Test::Unit::TestCase
5
7
  include Marjoree
6
8
 
7
9
  def setup
8
- $db.do( "CREATE TABLE TEST_TABLE( id int NOT NULL, value int NOT NULL )" )
10
+ $db.do( "CREATE TABLE TEST_TABLE( id int NOT NULL, value int NULL )" )
9
11
  $db.do( "INSERT INTO TEST_TABLE ( id, value ) VALUES( 0, 10 )" )
10
12
  $db.do( "INSERT INTO TEST_TABLE ( id, value ) VALUES( 1, 11 )" )
11
13
  end
@@ -36,6 +38,16 @@ class TestMarjoree < Test::Unit::TestCase
36
38
  end
37
39
  end
38
40
 
41
+ def test_display_value_for
42
+ update( "TEST_TABLE", { :id => 0 }, :value => nil )
43
+ sql = "SELECT value FROM TEST_TABLE WHERE id = 0"
44
+ result = []
45
+ execute( sql ).collect do |hash|
46
+ result << hash[:value]
47
+ end
48
+ assert_equal( 'NULL', display_value_for(result[0]))
49
+ end
50
+
39
51
  def test_contains?
40
52
  assert( contains?( "TEST_TABLE", :id => 0, :value => 10 ) )
41
53
  assert( contains?( "TEST_TABLE", :id => 1, :value => 11 ) )
@@ -0,0 +1,35 @@
1
+ require 'test/unit'
2
+ require 'marjoree'
3
+ require 'marjoree/fixtures'
4
+ require 'expected_result_set'
5
+
6
+ Test::Unit::TestCase.fixture_path = File.join(File.dirname(__FILE__), '../fixtures')
7
+
8
+ class TestMultipleDBFixtures < Test::Unit::TestCase
9
+ include Marjoree
10
+
11
+ # `odbcconf /A {configdsn "SYBASE ASE ODBC Driver" "DSN=first_db|NA=LGLAIB9Y2Y33J,5000|Uid=sa|Pwd=|Database=CRDMGR"}`
12
+ # `odbcconf /A {configdsn "SYBASE ASE ODBC Driver" "DSN=second_db|NA=LGLAIB9Y2Y33J,5000|Uid=sa|Pwd=|Database=CRDMGR_TEST"}`
13
+
14
+ def self.stub_fixtures(*tables)
15
+ connect_me_to 'first_db'
16
+ execute( "CREATE TABLE FIRST( id INT, name VARCHAR(255) )" ) if( !get_user_tables.include?( 'FIRST' ) )
17
+
18
+ connect_me_to 'second_db'
19
+ execute( "CREATE TABLE SECOND( id INT )" ) if( !get_user_tables.include?( 'SECOND' ) )
20
+
21
+ connect_me_to 'first_db'
22
+ fixtures(*tables)
23
+ end
24
+
25
+ stub_fixtures :FIRST, :SECOND
26
+
27
+ def test_fixtures_inserted_into_correct_db
28
+ connect_me_to 'first_db'
29
+ assert_equal( 2, count( "FIRST" ) )
30
+
31
+ connect_me_to 'second_db'
32
+ assert_equal( 3, count( "SECOND" ) )
33
+ end
34
+
35
+ end
@@ -0,0 +1,47 @@
1
+ require 'test/unit'
2
+
3
+ class TestMultipleOdbcConnectionWrapper < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @original_odbc_config_path = OdbcConnectionWrapper.odbc_config_path
7
+ OdbcConnectionWrapper.odbc_config_path = './tests/multiple_odbc_config/connections.yml'
8
+ @testee = OdbcConnectionWrapper.new
9
+ end
10
+
11
+ def test_single_db_connections_is_also_used_as_default
12
+ @testee.connect_me_to( "first_db" )
13
+ @testee.execute( "CREATE TABLE WRAPPER_TEST_TABLE( id INT )")
14
+ assert( table_in_db?( "WRAPPER_TEST_TABLE" ) )
15
+
16
+ @testee.connect_me_to( "second_db" )
17
+ assert( !table_in_db?( "WRAPPER_TEST_TABLE" ) )
18
+
19
+ @testee.connect_me_to( "default" )
20
+ assert( table_in_db?( "WRAPPER_TEST_TABLE" ) )
21
+ end
22
+
23
+ def teardown
24
+ @testee.connect_me_to( "first_db" )
25
+ @testee.execute( "DROP TABLE WRAPPER_TEST_TABLE" ) if ( table_in_db?( "WRAPPER_TEST_TABLE" ) )
26
+ @testee.disconnect_me
27
+
28
+ OdbcConnectionWrapper.odbc_config_path = @original_odbc_config_path
29
+
30
+ end
31
+
32
+ def test_connections_are_lazily_loaded
33
+ assert_raise(ODBC::Error) {@testee.connect_me_to("i_do_not_exist")}
34
+ end
35
+
36
+
37
+ private
38
+
39
+ def table_in_db?( table_name )
40
+ result_set = @testee.execute( "SELECT * FROM sysobjects WHERE type = 'U'" )
41
+ object_names = []
42
+ result_set.hashes.each do |row|
43
+ object_names << row[:name]
44
+ end
45
+ return object_names.include?( table_name )
46
+ end
47
+ end