activerecord-postgresql-extensions 0.2.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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