activerecord-postgresql-extensions 0.2.2 → 0.3.0

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 (54) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +4 -0
  3. data/Gemfile +1 -0
  4. data/Guardfile +3 -3
  5. data/MIT-LICENSE +1 -1
  6. data/README.rdoc +10 -3
  7. data/lib/active_record/postgresql_extensions/adapter_extensions.rb +100 -60
  8. data/lib/active_record/postgresql_extensions/constraints.rb +13 -17
  9. data/lib/active_record/postgresql_extensions/event_triggers.rb +129 -0
  10. data/lib/active_record/postgresql_extensions/extensions.rb +14 -15
  11. data/lib/active_record/postgresql_extensions/features.rb +80 -41
  12. data/lib/active_record/postgresql_extensions/functions.rb +1 -1
  13. data/lib/active_record/postgresql_extensions/geometry.rb +6 -8
  14. data/lib/active_record/postgresql_extensions/indexes.rb +19 -11
  15. data/lib/active_record/postgresql_extensions/languages.rb +1 -1
  16. data/lib/active_record/postgresql_extensions/materialized_views.rb +272 -0
  17. data/lib/active_record/postgresql_extensions/permissions.rb +60 -22
  18. data/lib/active_record/postgresql_extensions/roles.rb +18 -7
  19. data/lib/active_record/postgresql_extensions/rules.rb +5 -0
  20. data/lib/active_record/postgresql_extensions/schemas.rb +39 -3
  21. data/lib/active_record/postgresql_extensions/sequences.rb +6 -3
  22. data/lib/active_record/postgresql_extensions/tables.rb +47 -19
  23. data/lib/active_record/postgresql_extensions/tablespaces.rb +1 -1
  24. data/lib/active_record/postgresql_extensions/text_search.rb +3 -3
  25. data/lib/active_record/postgresql_extensions/triggers.rb +3 -3
  26. data/lib/active_record/postgresql_extensions/types.rb +104 -1
  27. data/lib/active_record/postgresql_extensions/utils.rb +35 -13
  28. data/lib/active_record/postgresql_extensions/vacuum.rb +1 -1
  29. data/lib/active_record/postgresql_extensions/version.rb +1 -1
  30. data/lib/active_record/postgresql_extensions/views.rb +137 -6
  31. data/lib/activerecord-postgresql-extensions.rb +13 -11
  32. data/test/{adapter_tests.rb → adapter_extensions_tests.rb} +96 -3
  33. data/test/constraints_tests.rb +216 -104
  34. data/test/event_triggers_tests.rb +109 -0
  35. data/test/extensions_tests.rb +47 -39
  36. data/test/functions_tests.rb +47 -38
  37. data/test/geometry_tests.rb +268 -135
  38. data/test/{index_tests.rb → indexes_tests.rb} +16 -16
  39. data/test/languages_tests.rb +26 -9
  40. data/test/materialized_views_tests.rb +174 -0
  41. data/test/permissions_tests.rb +159 -45
  42. data/test/roles_tests.rb +17 -7
  43. data/test/rules_tests.rb +14 -6
  44. data/test/schemas_tests.rb +35 -9
  45. data/test/sequences_tests.rb +9 -11
  46. data/test/tables_tests.rb +132 -42
  47. data/test/tablespace_tests.rb +21 -15
  48. data/test/test_helper.rb +56 -10
  49. data/test/text_search_tests.rb +42 -44
  50. data/test/trigger_tests.rb +1 -3
  51. data/test/types_tests.rb +95 -0
  52. data/test/vacuum_tests.rb +1 -3
  53. data/test/views_tests.rb +203 -0
  54. metadata +22 -16
@@ -2,9 +2,7 @@
2
2
  $: << File.dirname(__FILE__)
3
3
  require 'test_helper'
4
4
 
5
- class TablespaceTests < MiniTest::Unit::TestCase
6
- include PostgreSQLExtensionsTestHelper
7
-
5
+ class TablespaceTests < PostgreSQLExtensionsTestCase
8
6
  def test_create_tablespace
9
7
  Mig.create_tablespace('foo', '/tmp/foo')
10
8
  Mig.create_tablespace('foo', '/tmp/foo', :owner => :bar)
@@ -41,23 +39,31 @@ class TablespaceTests < MiniTest::Unit::TestCase
41
39
  ], statements)
42
40
  end
43
41
 
44
- def test_alter_tablespace_paramters
42
+ def test_alter_tablespace_parameters
45
43
  Mig.alter_tablespace_parameters('foo', :seq_page_cost => 2.0, :random_page_cost => 5.0)
46
44
 
47
- assert_equal([
48
- %{ALTER TABLESPACE "foo" SET (
49
- "seq_page_cost" = 2.0,
50
- "random_page_cost" = 5.0
51
- );} ], statements)
45
+ assert_equal([ strip_heredoc(<<-SQL) ], statements)
46
+ ALTER TABLESPACE "foo" SET (
47
+ "seq_page_cost" = 2.0,
48
+ "random_page_cost" = 5.0
49
+ );
50
+ SQL
52
51
  end
53
52
 
54
- def test_reset_tablespace_paramters
53
+ def test_reset_tablespace_parameters
55
54
  Mig.reset_tablespace_parameters('foo', :seq_page_cost, :random_page_cost)
56
55
 
57
- assert_equal([
58
- %{ALTER TABLESPACE "foo" RESET (
59
- "seq_page_cost",
60
- "random_page_cost"
61
- );} ], statements)
56
+ assert_equal([ strip_heredoc(<<-SQL) ], statements)
57
+ ALTER TABLESPACE "foo" RESET (
58
+ "seq_page_cost",
59
+ "random_page_cost"
60
+ );
61
+ SQL
62
+ end
63
+
64
+ def test_invalid_tablespace_parameters
65
+ assert_raises(ActiveRecord::InvalidTablespaceParameter) do
66
+ Mig.alter_tablespace_parameters('foo', :blart => 2.0)
67
+ end
62
68
  end
63
69
  end
data/test/test_helper.rb CHANGED
@@ -1,9 +1,15 @@
1
1
 
2
- ACTIVERECORD_GEM_VERSION = ENV['ACTIVERECORD_GEM_VERSION'] || '~> 3.2.0'
3
2
 
4
- require 'rubygems'
5
- gem 'activerecord', ACTIVERECORD_GEM_VERSION
3
+ if RUBY_VERSION >= '1.9'
4
+ require 'simplecov'
5
+
6
+ SimpleCov.command_name('Unit Tests')
7
+ SimpleCov.start do
8
+ add_filter '/test/'
9
+ end
10
+ end
6
11
 
12
+ require 'rubygems'
7
13
  require 'active_record'
8
14
  require 'logger'
9
15
  require 'minitest/autorun'
@@ -41,6 +47,7 @@ end
41
47
  ActiveRecord::Base.establish_connection 'arunit'
42
48
  ARBC = ActiveRecord::Base.connection
43
49
 
50
+ puts "Ruby version #{RUBY_VERSION}-p#{RUBY_PATCHLEVEL} - #{RbConfig::CONFIG['RUBY_INSTALL_NAME']}"
44
51
  puts "Testing against ActiveRecord #{Gem.loaded_specs['activerecord'].version.to_s}"
45
52
  if postgresql_version = ActiveRecord::PostgreSQLExtensions.SERVER_VERSION
46
53
  puts "PostgreSQL info from pg_catalog.version(): #{postgresql_version}"
@@ -53,29 +60,45 @@ else
53
60
  end
54
61
 
55
62
  class ActiveRecord::ConnectionAdapters::PostgreSQLAdapter
63
+ def real_execute
64
+ @real_execute = true
65
+ yield
66
+ ensure
67
+ @real_execute = false
68
+ end
69
+
56
70
  def execute_with_statement_capture(*args)
57
71
  PostgreSQLExtensionsTestHelper.add_statement(args.first)
58
72
 
59
- if RUBY_PLATFORM == 'java'
60
- if args.first =~ /pg_tables/
61
- return execute_without_statement_capture(*args)
73
+ if @real_execute
74
+ execute_without_statement_capture(*args)
75
+ else
76
+ if RUBY_PLATFORM == 'java'
77
+ if args.first =~ /pg_tables/
78
+ return execute_without_statement_capture(*args)
79
+ end
62
80
  end
63
- end
64
81
 
65
- args.first
82
+ args.first
83
+ end
66
84
  end
67
85
  alias_method_chain :execute, :statement_capture
68
86
 
69
87
  unless RUBY_PLATFORM == 'java'
70
88
  def query_with_statement_capture(*args)
71
- PostgreSQLExtensionsTestHelper.add_statement(args.first)
72
- #query_without_statement_capture(*args)
89
+ if @real_execute
90
+ query_without_statement_capture(*args)
91
+ else
92
+ PostgreSQLExtensionsTestHelper.add_statement(args.first)
93
+ end
73
94
  end
74
95
  alias_method_chain :query, :statement_capture
75
96
  end
76
97
  end
77
98
 
78
99
  module PostgreSQLExtensionsTestHelper
100
+ include ActiveRecord::PostgreSQLExtensions::Utils
101
+
79
102
  class << self
80
103
  def statements
81
104
  @statements ||= []
@@ -123,6 +146,29 @@ end
123
146
  class Foo < ActiveRecord::Base
124
147
  end
125
148
 
149
+ class PostgreSQLExtensionsTestCase < ActiveRecord::TestCase
150
+ include ActiveRecord::TestFixtures
151
+ include PostgreSQLExtensionsTestHelper
152
+
153
+ attr_writer :tagged_logger
154
+
155
+ def before_setup
156
+ if tagged_logger
157
+ heading = "#{self.class}: #{__name__}"
158
+ divider = '-' * heading.size
159
+ tagged_logger.info divider
160
+ tagged_logger.info heading
161
+ tagged_logger.info divider
162
+ end
163
+ super
164
+ end
165
+
166
+ private
167
+ def tagged_logger
168
+ @tagged_logger ||= (defined?(ActiveRecord::Base.logger) && ActiveRecord::Base.logger)
169
+ end
170
+ end
171
+
126
172
  if RUBY_VERSION >= '1.9'
127
173
  MiniTest::Reporters.use!(MiniTest::Reporters::SpecReporter.new)
128
174
  end
@@ -2,18 +2,16 @@
2
2
  $: << File.dirname(__FILE__)
3
3
  require 'test_helper'
4
4
 
5
- class TextSearchTests < MiniTest::Unit::TestCase
6
- include PostgreSQLExtensionsTestHelper
7
-
5
+ class TextSearchTests < PostgreSQLExtensionsTestCase
8
6
  def test_create_text_search_configuration
9
7
  ARBC.create_text_search_configuration(:foo, :parser_name => 'bar')
10
8
  ARBC.create_text_search_configuration(:foo, :source_config => 'bar')
11
9
  ARBC.create_text_search_configuration(:foo, :source_config => { :pg_catalog => 'english' })
12
10
 
13
11
  assert_equal([
14
- "CREATE TEXT SEARCH CONFIGURATION \"foo\" (PARSER = \"bar\");",
15
- "CREATE TEXT SEARCH CONFIGURATION \"foo\" (COPY = \"bar\");",
16
- "CREATE TEXT SEARCH CONFIGURATION \"foo\" (COPY = \"pg_catalog\".\"english\");"
12
+ %{CREATE TEXT SEARCH CONFIGURATION "foo" (PARSER = "bar");},
13
+ %{CREATE TEXT SEARCH CONFIGURATION "foo" (COPY = "bar");},
14
+ %{CREATE TEXT SEARCH CONFIGURATION "foo" (COPY = "pg_catalog"."english");}
17
15
  ], statements)
18
16
 
19
17
  assert_raises(ArgumentError) do
@@ -30,8 +28,8 @@ class TextSearchTests < MiniTest::Unit::TestCase
30
28
  ARBC.add_text_search_configuration_mapping(:foo, [ :asciiword, :word ], [ :bar, :up ])
31
29
 
32
30
  assert_equal([
33
- "ALTER TEXT SEARCH CONFIGURATION \"foo\" ADD MAPPING FOR \"asciiword\" WITH \"bar\";",
34
- "ALTER TEXT SEARCH CONFIGURATION \"foo\" ADD MAPPING FOR \"asciiword\", \"word\" WITH \"bar\", \"up\";"
31
+ %{ALTER TEXT SEARCH CONFIGURATION "foo" ADD MAPPING FOR "asciiword" WITH "bar";},
32
+ %{ALTER TEXT SEARCH CONFIGURATION "foo" ADD MAPPING FOR "asciiword", "word" WITH "bar", "up";}
35
33
  ], statements)
36
34
  end
37
35
 
@@ -40,8 +38,8 @@ class TextSearchTests < MiniTest::Unit::TestCase
40
38
  ARBC.alter_text_search_configuration_mapping(:foo, [ :asciiword, :word ], [ :bar, :up ])
41
39
 
42
40
  assert_equal([
43
- "ALTER TEXT SEARCH CONFIGURATION \"foo\" ALTER MAPPING FOR \"asciiword\" WITH \"bar\";",
44
- "ALTER TEXT SEARCH CONFIGURATION \"foo\" ALTER MAPPING FOR \"asciiword\", \"word\" WITH \"bar\", \"up\";"
41
+ %{ALTER TEXT SEARCH CONFIGURATION "foo" ALTER MAPPING FOR "asciiword" WITH "bar";},
42
+ %{ALTER TEXT SEARCH CONFIGURATION "foo" ALTER MAPPING FOR "asciiword", "word" WITH "bar", "up";}
45
43
  ], statements)
46
44
  end
47
45
 
@@ -49,7 +47,7 @@ class TextSearchTests < MiniTest::Unit::TestCase
49
47
  ARBC.replace_text_search_configuration_dictionary(:foo, :bar, :ometer)
50
48
 
51
49
  assert_equal([
52
- "ALTER TEXT SEARCH CONFIGURATION \"foo\" ALTER MAPPING REPLACE \"bar\" WITH \"ometer\";"
50
+ %{ALTER TEXT SEARCH CONFIGURATION "foo" ALTER MAPPING REPLACE "bar" WITH "ometer";}
53
51
  ], statements)
54
52
  end
55
53
 
@@ -58,8 +56,8 @@ class TextSearchTests < MiniTest::Unit::TestCase
58
56
  ARBC.alter_text_search_configuration_mapping_replace_dictionary(:foo, [ :hello, :world ], :old, :new)
59
57
 
60
58
  assert_equal([
61
- "ALTER TEXT SEARCH CONFIGURATION \"foo\" ALTER MAPPING FOR \"bar\" REPLACE \"old\" WITH \"new\";",
62
- "ALTER TEXT SEARCH CONFIGURATION \"foo\" ALTER MAPPING FOR \"hello\", \"world\" REPLACE \"old\" WITH \"new\";"
59
+ %{ALTER TEXT SEARCH CONFIGURATION "foo" ALTER MAPPING FOR "bar" REPLACE "old" WITH "new";},
60
+ %{ALTER TEXT SEARCH CONFIGURATION "foo" ALTER MAPPING FOR "hello", "world" REPLACE "old" WITH "new";}
63
61
  ], statements)
64
62
  end
65
63
 
@@ -69,9 +67,9 @@ class TextSearchTests < MiniTest::Unit::TestCase
69
67
  ARBC.drop_text_search_configuration_mapping(:foo, :bar, :if_exists => true)
70
68
 
71
69
  assert_equal([
72
- "ALTER TEXT SEARCH CONFIGURATION \"foo\" DROP MAPPING FOR \"bar\";",
73
- "ALTER TEXT SEARCH CONFIGURATION \"foo\" DROP MAPPING FOR \"bar\", \"blort\";",
74
- "ALTER TEXT SEARCH CONFIGURATION \"foo\" DROP MAPPING IF EXISTS FOR \"bar\";"
70
+ %{ALTER TEXT SEARCH CONFIGURATION "foo" DROP MAPPING FOR "bar";},
71
+ %{ALTER TEXT SEARCH CONFIGURATION "foo" DROP MAPPING FOR "bar", "blort";},
72
+ %{ALTER TEXT SEARCH CONFIGURATION "foo" DROP MAPPING IF EXISTS FOR "bar";}
75
73
  ], statements)
76
74
 
77
75
  assert_raises(ArgumentError) do
@@ -87,7 +85,7 @@ class TextSearchTests < MiniTest::Unit::TestCase
87
85
  ARBC.rename_text_search_configuration(:foo, :bar)
88
86
 
89
87
  assert_equal([
90
- "ALTER TEXT SEARCH CONFIGURATION \"foo\" RENAME TO \"bar\";"
88
+ %{ALTER TEXT SEARCH CONFIGURATION "foo" RENAME TO "bar";}
91
89
  ], statements)
92
90
  end
93
91
 
@@ -95,7 +93,7 @@ class TextSearchTests < MiniTest::Unit::TestCase
95
93
  ARBC.alter_text_search_configuration_owner(:foo, :bar)
96
94
 
97
95
  assert_equal([
98
- "ALTER TEXT SEARCH CONFIGURATION \"foo\" OWNER TO \"bar\";"
96
+ %{ALTER TEXT SEARCH CONFIGURATION "foo" OWNER TO "bar";}
99
97
  ], statements)
100
98
  end
101
99
 
@@ -103,7 +101,7 @@ class TextSearchTests < MiniTest::Unit::TestCase
103
101
  ARBC.alter_text_search_configuration_schema(:foo, :bar)
104
102
 
105
103
  assert_equal([
106
- "ALTER TEXT SEARCH CONFIGURATION \"foo\" SET SCHEMA \"bar\";"
104
+ %{ALTER TEXT SEARCH CONFIGURATION "foo" SET SCHEMA "bar";}
107
105
  ], statements)
108
106
  end
109
107
 
@@ -113,9 +111,9 @@ class TextSearchTests < MiniTest::Unit::TestCase
113
111
  ARBC.drop_text_search_configuration(:foo, :if_exists => true, :cascade => true)
114
112
 
115
113
  assert_equal([
116
- "DROP TEXT SEARCH CONFIGURATION \"foo\";",
117
- "DROP TEXT SEARCH CONFIGURATION \"foo\".\"bar\";",
118
- "DROP TEXT SEARCH CONFIGURATION IF EXISTS \"foo\" CASCADE;"
114
+ %{DROP TEXT SEARCH CONFIGURATION "foo";},
115
+ %{DROP TEXT SEARCH CONFIGURATION "foo"."bar";},
116
+ %{DROP TEXT SEARCH CONFIGURATION IF EXISTS "foo" CASCADE;}
119
117
  ], statements)
120
118
  end
121
119
 
@@ -124,8 +122,8 @@ class TextSearchTests < MiniTest::Unit::TestCase
124
122
  ARBC.create_text_search_dictionary(:foo, { :pg_catalog => :snowball }, { :language => 'english' })
125
123
 
126
124
  assert_equal([
127
- "CREATE TEXT SEARCH DICTIONARY \"foo\" (TEMPLATE = \"bar\", \"language\" = 'english');",
128
- "CREATE TEXT SEARCH DICTIONARY \"foo\" (TEMPLATE = \"pg_catalog\".\"snowball\", \"language\" = 'english');"
125
+ %{CREATE TEXT SEARCH DICTIONARY "foo" (TEMPLATE = "bar", "language" = 'english');},
126
+ %{CREATE TEXT SEARCH DICTIONARY "foo" (TEMPLATE = "pg_catalog"."snowball", "language" = 'english');}
129
127
  ], statements)
130
128
  end
131
129
 
@@ -135,9 +133,9 @@ class TextSearchTests < MiniTest::Unit::TestCase
135
133
  ARBC.drop_text_search_dictionary(:foo, :if_exists => true, :cascade => true)
136
134
 
137
135
  assert_equal([
138
- "DROP TEXT SEARCH DICTIONARY \"foo\";",
139
- "DROP TEXT SEARCH DICTIONARY \"foo\".\"bar\";",
140
- "DROP TEXT SEARCH DICTIONARY IF EXISTS \"foo\" CASCADE;"
136
+ %{DROP TEXT SEARCH DICTIONARY "foo";},
137
+ %{DROP TEXT SEARCH DICTIONARY "foo"."bar";},
138
+ %{DROP TEXT SEARCH DICTIONARY IF EXISTS "foo" CASCADE;}
141
139
  ], statements)
142
140
  end
143
141
 
@@ -145,7 +143,7 @@ class TextSearchTests < MiniTest::Unit::TestCase
145
143
  ARBC.rename_text_search_dictionary(:foo, :bar)
146
144
 
147
145
  assert_equal([
148
- "ALTER TEXT SEARCH DICTIONARY \"foo\" RENAME TO \"bar\";"
146
+ %{ALTER TEXT SEARCH DICTIONARY "foo" RENAME TO "bar";}
149
147
  ], statements)
150
148
  end
151
149
 
@@ -153,7 +151,7 @@ class TextSearchTests < MiniTest::Unit::TestCase
153
151
  ARBC.alter_text_search_dictionary_owner(:foo, :bar)
154
152
 
155
153
  assert_equal([
156
- "ALTER TEXT SEARCH DICTIONARY \"foo\" OWNER TO \"bar\";"
154
+ %{ALTER TEXT SEARCH DICTIONARY "foo" OWNER TO "bar";}
157
155
  ], statements)
158
156
  end
159
157
 
@@ -161,7 +159,7 @@ class TextSearchTests < MiniTest::Unit::TestCase
161
159
  ARBC.alter_text_search_dictionary_schema(:foo, :bar)
162
160
 
163
161
  assert_equal([
164
- "ALTER TEXT SEARCH DICTIONARY \"foo\" SET SCHEMA \"bar\";"
162
+ %{ALTER TEXT SEARCH DICTIONARY "foo" SET SCHEMA "bar";}
165
163
  ], statements)
166
164
  end
167
165
 
@@ -170,8 +168,8 @@ class TextSearchTests < MiniTest::Unit::TestCase
170
168
  ARBC.create_text_search_template(:foo, :lexize => 'bar', :init => 'lol')
171
169
 
172
170
  assert_equal([
173
- "CREATE TEXT SEARCH TEMPLATE \"foo\" (LEXIZE = \"bar\");",
174
- "CREATE TEXT SEARCH TEMPLATE \"foo\" (INIT = \"lol\", LEXIZE = \"bar\");"
171
+ %{CREATE TEXT SEARCH TEMPLATE "foo" (LEXIZE = "bar");},
172
+ %{CREATE TEXT SEARCH TEMPLATE "foo" (INIT = "lol", LEXIZE = "bar");}
175
173
  ], statements)
176
174
 
177
175
  assert_raises(ArgumentError) do
@@ -185,9 +183,9 @@ class TextSearchTests < MiniTest::Unit::TestCase
185
183
  ARBC.drop_text_search_template(:foo, :if_exists => true, :cascade => true)
186
184
 
187
185
  assert_equal([
188
- "DROP TEXT SEARCH TEMPLATE \"foo\";",
189
- "DROP TEXT SEARCH TEMPLATE \"foo\".\"bar\";",
190
- "DROP TEXT SEARCH TEMPLATE IF EXISTS \"foo\" CASCADE;"
186
+ %{DROP TEXT SEARCH TEMPLATE "foo";},
187
+ %{DROP TEXT SEARCH TEMPLATE "foo"."bar";},
188
+ %{DROP TEXT SEARCH TEMPLATE IF EXISTS "foo" CASCADE;}
191
189
  ], statements)
192
190
  end
193
191
 
@@ -195,7 +193,7 @@ class TextSearchTests < MiniTest::Unit::TestCase
195
193
  ARBC.rename_text_search_template(:foo, :bar)
196
194
 
197
195
  assert_equal([
198
- "ALTER TEXT SEARCH TEMPLATE \"foo\" RENAME TO \"bar\";"
196
+ %{ALTER TEXT SEARCH TEMPLATE "foo" RENAME TO "bar";}
199
197
  ], statements)
200
198
  end
201
199
 
@@ -203,7 +201,7 @@ class TextSearchTests < MiniTest::Unit::TestCase
203
201
  ARBC.alter_text_search_template_schema(:foo, :bar)
204
202
 
205
203
  assert_equal([
206
- "ALTER TEXT SEARCH TEMPLATE \"foo\" SET SCHEMA \"bar\";"
204
+ %{ALTER TEXT SEARCH TEMPLATE "foo" SET SCHEMA "bar";}
207
205
  ], statements)
208
206
  end
209
207
 
@@ -224,8 +222,8 @@ class TextSearchTests < MiniTest::Unit::TestCase
224
222
  })
225
223
 
226
224
  assert_equal([
227
- "CREATE TEXT SEARCH PARSER \"foo\" (START = \"start\", GETTOKEN = \"gettoken\", END = \"end\", LEXTYPES = \"lextypes\");",
228
- "CREATE TEXT SEARCH PARSER \"foo\" (START = \"start\", GETTOKEN = \"gettoken\", END = \"end\", LEXTYPES = \"lextypes\", HEADLINE = \"headline\");"
225
+ %{CREATE TEXT SEARCH PARSER "foo" (START = "start", GETTOKEN = "gettoken", END = "end", LEXTYPES = "lextypes");},
226
+ %{CREATE TEXT SEARCH PARSER "foo" (START = "start", GETTOKEN = "gettoken", END = "end", LEXTYPES = "lextypes", HEADLINE = "headline");}
229
227
  ], statements)
230
228
 
231
229
  assert_raises(ArgumentError) do
@@ -239,9 +237,9 @@ class TextSearchTests < MiniTest::Unit::TestCase
239
237
  ARBC.drop_text_search_parser(:foo, :if_exists => true, :cascade => true)
240
238
 
241
239
  assert_equal([
242
- "DROP TEXT SEARCH PARSER \"foo\";",
243
- "DROP TEXT SEARCH PARSER \"foo\".\"bar\";",
244
- "DROP TEXT SEARCH PARSER IF EXISTS \"foo\" CASCADE;"
240
+ %{DROP TEXT SEARCH PARSER "foo";},
241
+ %{DROP TEXT SEARCH PARSER "foo"."bar";},
242
+ %{DROP TEXT SEARCH PARSER IF EXISTS "foo" CASCADE;}
245
243
  ], statements)
246
244
  end
247
245
 
@@ -249,7 +247,7 @@ class TextSearchTests < MiniTest::Unit::TestCase
249
247
  ARBC.rename_text_search_parser(:foo, :bar)
250
248
 
251
249
  assert_equal([
252
- "ALTER TEXT SEARCH PARSER \"foo\" RENAME TO \"bar\";"
250
+ %{ALTER TEXT SEARCH PARSER "foo" RENAME TO "bar";}
253
251
  ], statements)
254
252
  end
255
253
 
@@ -257,7 +255,7 @@ class TextSearchTests < MiniTest::Unit::TestCase
257
255
  ARBC.alter_text_search_parser_schema(:foo, :bar)
258
256
 
259
257
  assert_equal([
260
- "ALTER TEXT SEARCH PARSER \"foo\" SET SCHEMA \"bar\";"
258
+ %{ALTER TEXT SEARCH PARSER "foo" SET SCHEMA "bar";}
261
259
  ], statements)
262
260
  end
263
261
  end
@@ -2,9 +2,7 @@
2
2
  $: << File.dirname(__FILE__)
3
3
  require 'test_helper'
4
4
 
5
- class TriggerTests < MiniTest::Unit::TestCase
6
- include PostgreSQLExtensionsTestHelper
7
-
5
+ class TriggerTests < PostgreSQLExtensionsTestCase
8
6
  def test_enable_triggers
9
7
  Foo.enable_triggers
10
8
  Foo.enable_triggers(:bar)
@@ -0,0 +1,95 @@
1
+
2
+ $: << File.dirname(__FILE__)
3
+ require 'test_helper'
4
+
5
+ class TypesTests < PostgreSQLExtensionsTestCase
6
+ def test_types
7
+ types = ARBC.real_execute do
8
+ ARBC.types
9
+ end
10
+
11
+ assert_kind_of(Array, types)
12
+ assert_includes(types, 'oid')
13
+ end
14
+
15
+ def test_type_exists
16
+ ARBC.real_execute do
17
+ assert(ARBC.type_exists?(:oid))
18
+ assert(ARBC.type_exists?('oid'))
19
+ end
20
+ end
21
+
22
+ class EnumTests < PostgreSQLExtensionsTestCase
23
+ def setup
24
+ ARBC.real_execute do
25
+ Mig.drop_type(:foo_enum, :if_exists => true)
26
+ end
27
+
28
+ super
29
+ end
30
+
31
+ def test_create_enum
32
+ Mig.create_enum(:foo_enum)
33
+ Mig.create_enum(:foo_enum, %w{ one two three })
34
+ Mig.create_enum(:foo_enum, :one, :two, :three)
35
+
36
+ assert_equal([
37
+ %{CREATE TYPE "foo_enum" AS ENUM ();},
38
+ %{CREATE TYPE "foo_enum" AS ENUM ('one', 'two', 'three');},
39
+ %{CREATE TYPE "foo_enum" AS ENUM ('one', 'two', 'three');}
40
+ ], statements)
41
+ end
42
+
43
+ def test_add_enum_value
44
+ Mig.create_enum(:foo_enum)
45
+ Mig.add_enum_value(:foo_enum, :foo)
46
+ Mig.add_enum_value(:foo_enum, :bar, :before => :foo)
47
+ Mig.add_enum_value(:foo_enum, :blort, :after => :foo)
48
+
49
+ assert_equal([
50
+ %{CREATE TYPE "foo_enum" AS ENUM ();},
51
+ %{ALTER TYPE "foo_enum" ADD VALUE 'foo';},
52
+ %{ALTER TYPE "foo_enum" ADD VALUE 'bar' BEFORE 'foo';},
53
+ %{ALTER TYPE "foo_enum" ADD VALUE 'blort' AFTER 'foo';}
54
+ ], statements)
55
+ end
56
+
57
+ def test_add_enum_value_if_not_exists
58
+ skip unless ActiveRecord::PostgreSQLExtensions.SERVER_VERSION >= '9.3'
59
+
60
+ Mig.add_enum_value(:foo_enum, :baz, :if_not_exists => true)
61
+
62
+ assert_equal([
63
+ %{ALTER TYPE "foo_enum" ADD VALUE IF NOT EXISTS 'baz';}
64
+ ], statements)
65
+ end
66
+
67
+ def test_drop_type
68
+ Mig.drop_type(:foo_enum)
69
+ Mig.drop_type(:foo_enum, :if_exists => true)
70
+ Mig.drop_type(:foo_enum, :cascade => true)
71
+ Mig.drop_type(:foo_enum, :bar_enum)
72
+
73
+ assert_equal([
74
+ %{DROP TYPE "foo_enum";},
75
+ %{DROP TYPE IF EXISTS "foo_enum";},
76
+ %{DROP TYPE "foo_enum" CASCADE;},
77
+ %{DROP TYPE "foo_enum", "bar_enum";}
78
+ ], statements)
79
+ end
80
+
81
+ def test_enum_values
82
+ ARBC.real_execute do
83
+ Mig.create_enum(:foo_enum, :one, :two, :three)
84
+
85
+ assert_equal(%w{ one two three }, ARBC.enum_values(:foo_enum))
86
+ end
87
+ end
88
+
89
+ def test_both_before_and_after_add_enum_value
90
+ assert_raises(ActiveRecord::InvalidAddEnumValueOptions) do
91
+ Mig.add_enum_value(:foo_enum, :blort, :after => :foo, :before => :bar)
92
+ end
93
+ end
94
+ end
95
+ end