schema_plus 1.5.2 → 1.5.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -47,7 +47,7 @@ describe "Index definition" do
47
47
  end
48
48
 
49
49
  it "is included in User.indexes" do
50
- @index.should_not be_nil
50
+ expect(@index).not_to be_nil
51
51
  end
52
52
 
53
53
  end
@@ -55,16 +55,16 @@ describe "Index definition" do
55
55
  it "should correctly report supports_partial_indexes?" do
56
56
  query = lambda { migration.execute "CREATE INDEX users_login_index ON users(login) WHERE deleted_at IS NULL" }
57
57
  if migration.supports_partial_indexes?
58
- query.should_not raise_error
58
+ expect(query).not_to raise_error
59
59
  else
60
- query.should raise_error
60
+ expect(query).to raise_error
61
61
  end
62
62
  end
63
63
 
64
64
  it "should not crash on equality test with nil" do
65
65
  index = ActiveRecord::ConnectionAdapters::IndexDefinition.new(:table, :column)
66
66
  expect{index == nil}.to_not raise_error
67
- (index == nil).should be_false
67
+ expect(index == nil).to be false
68
68
  end
69
69
 
70
70
 
@@ -85,7 +85,7 @@ describe "Index definition" do
85
85
  migration.execute "CREATE INDEX users_login_index ON users (#{quote}login#{quote} DESC, #{quote}deleted_at#{quote} ASC)"
86
86
  User.reset_column_information
87
87
  index = index_definition(%w[login deleted_at])
88
- index.orders.should == {"login" => :desc, "deleted_at" => :asc}
88
+ expect(index.orders).to eq({"login" => :desc, "deleted_at" => :asc})
89
89
  end
90
90
 
91
91
  end
@@ -104,23 +104,23 @@ describe "Index definition" do
104
104
  end
105
105
 
106
106
  it "is included in User.indexes" do
107
- @index.should_not be_nil
107
+ expect(@index).not_to be_nil
108
108
  end
109
109
 
110
110
  it "is not case_sensitive" do
111
- @index.should_not be_case_sensitive
111
+ expect(@index).not_to be_case_sensitive
112
112
  end
113
113
 
114
114
  it "its column should not be case sensitive" do
115
- User.columns.find{|column| column.name == "login"}.should_not be_case_sensitive
115
+ expect(User.columns.find{|column| column.name == "login"}).not_to be_case_sensitive
116
116
  end
117
117
 
118
118
  it "defines expression" do
119
- @index.expression.should == "lower((login)::text)"
119
+ expect(@index.expression).to eq("lower((login)::text)")
120
120
  end
121
121
 
122
122
  it "doesn't define conditions" do
123
- @index.conditions.should be_nil
123
+ expect(@index.conditions).to be_nil
124
124
  end
125
125
 
126
126
  end
@@ -134,19 +134,19 @@ describe "Index definition" do
134
134
  end
135
135
 
136
136
  it "is included in User.indexes" do
137
- User.indexes.select { |index| index.columns == ["login"] }.should have(1).item
137
+ expect(User.indexes.select { |index| index.columns == ["login"] }.size).to eq(1)
138
138
  end
139
139
 
140
140
  it "is case_sensitive" do
141
- @index.should be_case_sensitive
141
+ expect(@index).to be_case_sensitive
142
142
  end
143
143
 
144
144
  it "doesn't define expression" do
145
- @index.expression.should be_nil
145
+ expect(@index.expression).to be_nil
146
146
  end
147
147
 
148
148
  it "defines conditions" do
149
- @index.conditions.should == "(deleted_at IS NULL)"
149
+ expect(@index.conditions).to eq("(deleted_at IS NULL)")
150
150
  end
151
151
 
152
152
  end
@@ -159,23 +159,23 @@ describe "Index definition" do
159
159
  end
160
160
 
161
161
  it "exists" do
162
- @index.should_not be_nil
162
+ expect(@index).not_to be_nil
163
163
  end
164
164
 
165
165
  it "doesnt have columns defined" do
166
- @index.columns.should be_empty
166
+ expect(@index.columns).to be_empty
167
167
  end
168
168
 
169
169
  it "is case_sensitive" do
170
- @index.should be_case_sensitive
170
+ expect(@index).to be_case_sensitive
171
171
  end
172
172
 
173
173
  it "defines expression" do
174
- @index.expression.should == "date_part('epoch'::text, deleted_at)"
174
+ expect(@index.expression).to eq("date_part('epoch'::text, deleted_at)")
175
175
  end
176
176
 
177
177
  it "defines conditions" do
178
- @index.conditions.should == "(deleted_at IS NULL)"
178
+ expect(@index.conditions).to eq("(deleted_at IS NULL)")
179
179
  end
180
180
 
181
181
  end
@@ -188,19 +188,19 @@ describe "Index definition" do
188
188
  end
189
189
 
190
190
  it "exists" do
191
- @index.should_not be_nil
191
+ expect(@index).not_to be_nil
192
192
  end
193
193
 
194
194
  it "defines kind" do
195
- @index.kind.should == "hash"
195
+ expect(@index.kind).to eq("hash")
196
196
  end
197
197
 
198
198
  it "does not define expression" do
199
- @index.expression.should be_nil
199
+ expect(@index.expression).to be_nil
200
200
  end
201
201
 
202
202
  it "does not define order" do
203
- @index.orders.should be_blank
203
+ expect(@index.orders).to be_blank
204
204
  end
205
205
  end
206
206
 
data/spec/index_spec.rb CHANGED
@@ -42,39 +42,39 @@ describe "index" do
42
42
 
43
43
  it "should create index when called without additional options" do
44
44
  add_index(:users, :login)
45
- index_for(:login).should_not be_nil
45
+ expect(index_for(:login)).not_to be_nil
46
46
  end
47
47
 
48
48
  it "should create unique index" do
49
49
  add_index(:users, :login, :unique => true)
50
- index_for(:login).unique.should == true
50
+ expect(index_for(:login).unique).to eq(true)
51
51
  end
52
52
 
53
53
  it "should assign given name" do
54
54
  add_index(:users, :login, :name => 'users_login_index')
55
- index_for(:login).name.should == 'users_login_index'
55
+ expect(index_for(:login).name).to eq('users_login_index')
56
56
  end
57
57
 
58
58
  unless SchemaPlusHelpers.mysql?
59
59
  it "should assign order" do
60
60
  add_index(:users, [:login, :deleted_at], :order => {:login => :desc, :deleted_at => :asc})
61
- index_for([:login, :deleted_at]).orders.should == {"login" => :desc, "deleted_at" => :asc}
61
+ expect(index_for([:login, :deleted_at]).orders).to eq({"login" => :desc, "deleted_at" => :asc})
62
62
  end
63
63
  end
64
64
 
65
65
  context "for duplicate index" do
66
66
  it "should not complain if the index is the same" do
67
67
  add_index(:users, :login)
68
- index_for(:login).should_not be_nil
69
- ActiveRecord::Base.logger.should_receive(:warn).with(/login.*Skipping/)
68
+ expect(index_for(:login)).not_to be_nil
69
+ expect(ActiveRecord::Base.logger).to receive(:warn).with(/login.*Skipping/)
70
70
  expect { add_index(:users, :login) }.to_not raise_error
71
- index_for(:login).should_not be_nil
71
+ expect(index_for(:login)).not_to be_nil
72
72
  end
73
73
  it "should complain if the index is different" do
74
74
  add_index(:users, :login, :unique => true)
75
- index_for(:login).should_not be_nil
75
+ expect(index_for(:login)).not_to be_nil
76
76
  expect { add_index(:users, :login) }.to raise_error
77
- index_for(:login).should_not be_nil
77
+ expect(index_for(:login)).not_to be_nil
78
78
  end
79
79
  end
80
80
 
@@ -82,34 +82,34 @@ describe "index" do
82
82
 
83
83
  it "should assign conditions" do
84
84
  add_index(:users, :login, :conditions => 'deleted_at IS NULL')
85
- index_for(:login).conditions.should == '(deleted_at IS NULL)'
85
+ expect(index_for(:login).conditions).to eq('(deleted_at IS NULL)')
86
86
  end
87
87
 
88
88
  it "should assign expression, conditions and kind" do
89
89
  add_index(:users, :expression => "USING hash (upper(login)) WHERE deleted_at IS NULL", :name => 'users_login_index')
90
90
  @index = User.indexes.detect { |i| i.expression.present? }
91
- @index.expression.should == "upper((login)::text)"
92
- @index.conditions.should == "(deleted_at IS NULL)"
93
- @index.kind.should == "hash"
91
+ expect(@index.expression).to eq("upper((login)::text)")
92
+ expect(@index.conditions).to eq("(deleted_at IS NULL)")
93
+ expect(@index.kind).to eq("hash")
94
94
  end
95
95
 
96
96
  it "should allow to specify expression, conditions and kind separately" do
97
97
  add_index(:users, :kind => "hash", :expression => "upper(login)", :conditions => "deleted_at IS NULL", :name => 'users_login_index')
98
98
  @index = User.indexes.detect { |i| i.expression.present? }
99
- @index.expression.should == "upper((login)::text)"
100
- @index.conditions.should == "(deleted_at IS NULL)"
101
- @index.kind.should == "hash"
99
+ expect(@index.expression).to eq("upper((login)::text)")
100
+ expect(@index.conditions).to eq("(deleted_at IS NULL)")
101
+ expect(@index.kind).to eq("hash")
102
102
  end
103
103
 
104
104
  it "should allow to specify kind" do
105
105
  add_index(:users, :login, :kind => "hash")
106
- index_for(:login).kind.should == 'hash'
106
+ expect(index_for(:login).kind).to eq('hash')
107
107
  end
108
108
 
109
109
  it "should allow to specify actual expression only" do
110
110
  add_index(:users, :expression => "upper(login)", :name => 'users_login_index')
111
111
  @index = User.indexes.detect { |i| i.name == 'users_login_index' }
112
- @index.expression.should == "upper((login)::text)"
112
+ expect(@index.expression).to eq("upper((login)::text)")
113
113
  end
114
114
 
115
115
  it "should raise if no column given and expression is missing" do
@@ -151,58 +151,58 @@ describe "index" do
151
151
 
152
152
  it "removes index by column name (symbols)" do
153
153
  add_index :users, :login
154
- User.indexes.length.should == 1
154
+ expect(User.indexes.length).to eq(1)
155
155
  remove_index :users, :login
156
- User.indexes.length.should == 0
156
+ expect(User.indexes.length).to eq(0)
157
157
  end
158
158
 
159
159
  it "removes index by column name (symbols)" do
160
160
  add_index :users, :login
161
- User.indexes.length.should == 1
161
+ expect(User.indexes.length).to eq(1)
162
162
  remove_index 'users', 'login'
163
- User.indexes.length.should == 0
163
+ expect(User.indexes.length).to eq(0)
164
164
  end
165
165
 
166
166
  it "removes multi-column index by column names (symbols)" do
167
167
  add_index :users, [:login, :deleted_at]
168
- User.indexes.length.should == 1
168
+ expect(User.indexes.length).to eq(1)
169
169
  remove_index :users, [:login, :deleted_at]
170
- User.indexes.length.should == 0
170
+ expect(User.indexes.length).to eq(0)
171
171
  end
172
172
 
173
173
  it "removes multi-column index by column names (strings)" do
174
174
  add_index 'users', [:login, :deleted_at]
175
- User.indexes.length.should == 1
175
+ expect(User.indexes.length).to eq(1)
176
176
  remove_index 'users', ['login', 'deleted_at']
177
- User.indexes.length.should == 0
177
+ expect(User.indexes.length).to eq(0)
178
178
  end
179
179
 
180
180
  it "removes index using column option" do
181
181
  add_index :users, :login
182
- User.indexes.length.should == 1
182
+ expect(User.indexes.length).to eq(1)
183
183
  remove_index :users, column: :login
184
- User.indexes.length.should == 0
184
+ expect(User.indexes.length).to eq(0)
185
185
  end
186
186
 
187
187
  it "removes index if_exists" do
188
188
  add_index :users, :login
189
- User.indexes.length.should == 1
189
+ expect(User.indexes.length).to eq(1)
190
190
  remove_index :users, :login, :if_exists => true
191
- User.indexes.length.should == 0
191
+ expect(User.indexes.length).to eq(0)
192
192
  end
193
193
 
194
194
  it "removes multi-column index if exists" do
195
195
  add_index :users, [:login, :deleted_at]
196
- User.indexes.length.should == 1
196
+ expect(User.indexes.length).to eq(1)
197
197
  remove_index :users, [:login, :deleted_at], :if_exists => true
198
- User.indexes.length.should == 0
198
+ expect(User.indexes.length).to eq(0)
199
199
  end
200
200
 
201
201
  it "removes index if_exists using column option" do
202
202
  add_index :users, :login
203
- User.indexes.length.should == 1
203
+ expect(User.indexes.length).to eq(1)
204
204
  remove_index :users, column: :login, :if_exists => true
205
- User.indexes.length.should == 0
205
+ expect(User.indexes.length).to eq(0)
206
206
  end
207
207
 
208
208
  it "raises exception if doesn't exist" do
@@ -47,126 +47,175 @@ describe ActiveRecord::Migration do
47
47
  t.boolean :bool, :default => true
48
48
  end
49
49
  }.to_not raise_error
50
- @model.create.reload.bool.should be_true
50
+ expect(@model.create.reload.bool).to be true
51
51
  end
52
52
 
53
53
  it "should create auto foreign keys" do
54
54
  recreate_table(@model) do |t|
55
55
  t.integer :user_id
56
56
  end
57
- @model.should reference(:users, :id).on(:user_id)
57
+ expect(@model).to reference(:users, :id).on(:user_id)
58
58
  end
59
59
 
60
60
  it "should create explicit foreign key with default reference" do
61
61
  recreate_table(@model) do |t|
62
62
  t.integer :user, :foreign_key => true
63
63
  end
64
- @model.should reference(:users, :id).on(:user)
64
+ expect(@model).to reference(:users, :id).on(:user)
65
65
  end
66
66
 
67
67
  it "should create foreign key with different reference" do
68
68
  recreate_table(@model) do |t|
69
69
  t.integer :author_id, :foreign_key => { :references => :users }
70
70
  end
71
- @model.should reference(:users, :id).on(:author_id)
71
+ expect(@model).to reference(:users, :id).on(:author_id)
72
72
  end
73
73
 
74
74
  it "should create foreign key with different reference using shortcut" do
75
75
  recreate_table(@model) do |t|
76
76
  t.integer :author_id, :references => :users
77
77
  end
78
- @model.should reference(:users, :id).on(:author_id)
78
+ expect(@model).to reference(:users, :id).on(:author_id)
79
79
  end
80
80
 
81
81
  it "should create foreign key with default name" do
82
82
  recreate_table @model do |t|
83
83
  t.integer :user_id, :foreign_key => true
84
84
  end
85
- @model.should reference(:users, :id).with_name("fk_#{@model.table_name}_user_id")
85
+ expect(@model).to reference(:users, :id).with_name("fk_#{@model.table_name}_user_id")
86
86
  end
87
87
 
88
88
  it "should create foreign key with specified name" do
89
89
  recreate_table @model do |t|
90
90
  t.integer :user_id, :foreign_key => { :name => "wugga" }
91
91
  end
92
- @model.should reference(:users, :id).with_name("wugga")
92
+ expect(@model).to reference(:users, :id).with_name("wugga")
93
93
  end
94
94
 
95
95
  it "should suppress foreign key" do
96
96
  recreate_table(@model) do |t|
97
97
  t.integer :member_id, :foreign_key => false
98
98
  end
99
- @model.should_not reference.on(:member_id)
99
+ expect(@model).not_to reference.on(:member_id)
100
100
  end
101
101
 
102
102
  it "should suppress foreign key using shortcut" do
103
103
  recreate_table(@model) do |t|
104
104
  t.integer :member_id, :references => nil
105
105
  end
106
- @model.should_not reference.on(:member_id)
106
+ expect(@model).not_to reference.on(:member_id)
107
107
  end
108
108
 
109
109
  it "should create foreign key using t.belongs_to" do
110
110
  recreate_table(@model) do |t|
111
111
  t.belongs_to :user
112
112
  end
113
- @model.should reference(:users, :id).on(:user_id)
113
+ expect(@model).to reference(:users, :id).on(:user_id)
114
114
  end
115
115
 
116
116
  it "should not create foreign key using t.belongs_to with :polymorphic => true" do
117
117
  recreate_table(@model) do |t|
118
118
  t.belongs_to :user, :polymorphic => true
119
119
  end
120
- @model.should_not reference(:users, :id).on(:user_id)
120
+ expect(@model).not_to reference(:users, :id).on(:user_id)
121
121
  end
122
122
 
123
123
  it "should create foreign key using t.references" do
124
124
  recreate_table(@model) do |t|
125
125
  t.references :user
126
126
  end
127
- @model.should reference(:users, :id).on(:user_id)
127
+ expect(@model).to reference(:users, :id).on(:user_id)
128
128
  end
129
129
 
130
130
  it "should not create foreign key using t.references with :foreign_key => false" do
131
131
  recreate_table(@model) do |t|
132
132
  t.references :user, :foreign_key => false
133
133
  end
134
- @model.should_not reference(:users, :id).on(:user_id)
134
+ expect(@model).not_to reference(:users, :id).on(:user_id)
135
135
  end
136
136
 
137
137
  it "should not create foreign key using t.references with :polymorphic => true" do
138
138
  recreate_table(@model) do |t|
139
139
  t.references :user, :polymorphic => true
140
140
  end
141
- @model.should_not reference(:users, :id).on(:user_id)
141
+ expect(@model).not_to reference(:users, :id).on(:user_id)
142
142
  end
143
143
 
144
144
  it "should create foreign key to the same table on parent_id" do
145
145
  recreate_table(@model) do |t|
146
146
  t.integer :parent_id
147
147
  end
148
- @model.should reference(@model.table_name, :id).on(:parent_id)
148
+ expect(@model).to reference(@model.table_name, :id).on(:parent_id)
149
149
  end
150
150
 
151
151
  it "should create an index if specified on column" do
152
152
  recreate_table(@model) do |t|
153
153
  t.integer :state, :index => true
154
154
  end
155
- @model.should have_index.on(:state)
155
+ expect(@model).to have_index.on(:state)
156
156
  end
157
157
 
158
158
  it "should create a unique index if specified on column" do
159
159
  recreate_table(@model) do |t|
160
160
  t.integer :state, :index => { :unique => true }
161
161
  end
162
- @model.should have_unique_index.on(:state)
162
+ expect(@model).to have_unique_index.on(:state)
163
163
  end
164
164
 
165
165
  it "should create a unique index if specified on column using shorthand" do
166
166
  recreate_table(@model) do |t|
167
167
  t.integer :state, :index => :unique
168
168
  end
169
- @model.should have_unique_index.on(:state)
169
+ expect(@model).to have_unique_index.on(:state)
170
+ end
171
+
172
+ [:references, :belongs_to].each do |reftype|
173
+
174
+ context "when define #{reftype}" do
175
+
176
+ before(:each) do
177
+ @model = Comment
178
+ end
179
+
180
+ it "should create foreign key" do
181
+ create_reference(reftype, :post)
182
+ expect(@model).to reference(:posts, :id).on(:post_id)
183
+ end
184
+
185
+ it "should not create a foreign_key if polymorphic" do
186
+ create_reference(reftype, :post, :polymorphic => true)
187
+ expect(@model).not_to reference(:posts, :id).on(:post_id)
188
+ end
189
+
190
+ it "should create an index implicitly" do
191
+ create_reference(reftype, :post)
192
+ expect(@model).to have_index.on(:post_id)
193
+ end
194
+
195
+ it "should create exactly one index explicitly (#157)" do
196
+ create_reference(reftype, :post, :index => true)
197
+ expect(@model).to have_index.on(:post_id)
198
+ end
199
+
200
+ it "should respect :unique (#157)" do
201
+ create_reference(reftype, :post, :index => :unique)
202
+ expect(@model).to have_unique_index.on(:post_id)
203
+ end
204
+
205
+ it "should create a two-column index if polymophic and index requested" do
206
+ create_reference(reftype, :post, :polymorphic => true, :index => true)
207
+ expect(@model).to have_index.on([:post_id, :post_type])
208
+ end unless ::ActiveRecord::VERSION::MAJOR.to_i < 4
209
+
210
+ protected
211
+
212
+ def create_reference(reftype, column_name, *args)
213
+ recreate_table(@model) do |t|
214
+ t.send reftype, column_name, *args
215
+ end
216
+ end
217
+
218
+ end
170
219
  end
171
220
 
172
221
  if SchemaPlusHelpers.mysql?
@@ -176,7 +225,7 @@ describe ActiveRecord::Migration do
176
225
  t.string :bar, :index => { :with => :foo, :length => { :foo => 8, :bar => 12 }}
177
226
  end
178
227
  index = @model.indexes.first
179
- Hash[index.columns.zip(index.lengths.map(&:to_i))].should == { "foo" => 8, "bar" => 12}
228
+ expect(Hash[index.columns.zip(index.lengths.map(&:to_i))]).to eq({ "foo" => 8, "bar" => 12})
180
229
  end
181
230
  end
182
231
 
@@ -185,7 +234,7 @@ describe ActiveRecord::Migration do
185
234
  t.integer :state
186
235
  t.index :state
187
236
  end
188
- @model.should have_index.on(:state)
237
+ expect(@model).to have_index.on(:state)
189
238
  end
190
239
 
191
240
  it "should create a unique index if specified explicitly" do
@@ -193,7 +242,7 @@ describe ActiveRecord::Migration do
193
242
  t.integer :state
194
243
  t.index :state, :unique => true
195
244
  end
196
- @model.should have_unique_index.on(:state)
245
+ expect(@model).to have_unique_index.on(:state)
197
246
  end
198
247
 
199
248
  it "should create a multiple-column index if specified" do
@@ -201,7 +250,7 @@ describe ActiveRecord::Migration do
201
250
  t.integer :city
202
251
  t.integer :state, :index => { :with => :city }
203
252
  end
204
- @model.should have_index.on([:state, :city])
253
+ expect(@model).to have_index.on([:state, :city])
205
254
  end
206
255
 
207
256
  it "should auto-index foreign keys only" do
@@ -210,9 +259,9 @@ describe ActiveRecord::Migration do
210
259
  t.integer :application_id, :references => nil
211
260
  t.integer :state
212
261
  end
213
- @model.should have_index.on(:user_id)
214
- @model.should_not have_index.on(:application_id)
215
- @model.should_not have_index.on(:state)
262
+ expect(@model).to have_index.on(:user_id)
263
+ expect(@model).not_to have_index.on(:application_id)
264
+ expect(@model).not_to have_index.on(:state)
216
265
  end
217
266
 
218
267
  it "should override foreign key auto_create positively" do
@@ -220,7 +269,7 @@ describe ActiveRecord::Migration do
220
269
  recreate_table @model, :foreign_keys => {:auto_create => true} do |t|
221
270
  t.integer :user_id
222
271
  end
223
- @model.should reference(:users, :id).on(:user_id)
272
+ expect(@model).to reference(:users, :id).on(:user_id)
224
273
  end
225
274
  end
226
275
 
@@ -229,7 +278,7 @@ describe ActiveRecord::Migration do
229
278
  recreate_table @model, :foreign_keys => {:auto_create => false} do |t|
230
279
  t.integer :user_id
231
280
  end
232
- @model.should_not reference.on(:user_id)
281
+ expect(@model).not_to reference.on(:user_id)
233
282
  end
234
283
  end
235
284
 
@@ -238,7 +287,7 @@ describe ActiveRecord::Migration do
238
287
  recreate_table @model, :foreign_keys => {:auto_index => true} do |t|
239
288
  t.integer :user_id
240
289
  end
241
- @model.should have_index.on(:user_id)
290
+ expect(@model).to have_index.on(:user_id)
242
291
  end
243
292
  end
244
293
 
@@ -268,28 +317,28 @@ describe ActiveRecord::Migration do
268
317
  recreate_table @model do |t|
269
318
  t.integer :user_id, :foreign_key => { :on_update => action }
270
319
  end
271
- @model.should reference.on(:user_id).on_update(action)
320
+ expect(@model).to reference.on(:user_id).on_update(action)
272
321
  end
273
322
 
274
323
  it "should create and detect on_update #{action.inspect} using shortcut" do
275
324
  recreate_table @model do |t|
276
325
  t.integer :user_id, :on_update => action
277
326
  end
278
- @model.should reference.on(:user_id).on_update(action)
327
+ expect(@model).to reference.on(:user_id).on_update(action)
279
328
  end
280
329
 
281
330
  it "should create and detect on_delete #{action.inspect}" do
282
331
  recreate_table @model do |t|
283
332
  t.integer :user_id, :foreign_key => { :on_delete => action }
284
333
  end
285
- @model.should reference.on(:user_id).on_delete(action)
334
+ expect(@model).to reference.on(:user_id).on_delete(action)
286
335
  end
287
336
 
288
337
  it "should create and detect on_delete #{action.inspect} using shortcut" do
289
338
  recreate_table @model do |t|
290
339
  t.integer :user_id, :on_delete => action
291
340
  end
292
- @model.should reference.on(:user_id).on_delete(action)
341
+ expect(@model).to reference.on(:user_id).on_delete(action)
293
342
  end
294
343
  end
295
344
 
@@ -298,7 +347,7 @@ describe ActiveRecord::Migration do
298
347
  recreate_table @model do |t|
299
348
  t.integer :user_id, :on_delete => :cascade, :deferrable => status
300
349
  end
301
- @model.should reference.on(:user_id).deferrable(status)
350
+ expect(@model).to reference.on(:user_id).deferrable(status)
302
351
  end
303
352
  end unless SchemaPlusHelpers.mysql?
304
353
 
@@ -307,7 +356,7 @@ describe ActiveRecord::Migration do
307
356
  recreate_table @model do |t|
308
357
  t.integer :user_id
309
358
  end
310
- @model.should reference.on(:user_id).on_delete(:cascade)
359
+ expect(@model).to reference.on(:user_id).on_delete(:cascade)
311
360
  end
312
361
  end
313
362
 
@@ -316,7 +365,7 @@ describe ActiveRecord::Migration do
316
365
  recreate_table @model, :foreign_keys => {:on_update => :restrict} do |t|
317
366
  t.integer :user_id
318
367
  end
319
- @model.should reference.on(:user_id).on_update(:restrict)
368
+ expect(@model).to reference.on(:user_id).on_update(:restrict)
320
369
  end
321
370
  end
322
371
 
@@ -325,7 +374,7 @@ describe ActiveRecord::Migration do
325
374
  recreate_table @model, :foreign_keys => {:on_delete => :restrict} do |t|
326
375
  t.integer :user_id
327
376
  end
328
- @model.should reference.on(:user_id).on_delete(:restrict)
377
+ expect(@model).to reference.on(:user_id).on_delete(:restrict)
329
378
  end
330
379
  end
331
380
 
@@ -334,7 +383,7 @@ describe ActiveRecord::Migration do
334
383
  recreate_table @model, :foreign_keys => {:on_update => :restrict} do |t|
335
384
  t.integer :user_id, :foreign_key => { :on_update => :set_null }
336
385
  end
337
- @model.should reference.on(:user_id).on_update(:set_null)
386
+ expect(@model).to reference.on(:user_id).on_update(:set_null)
338
387
  end
339
388
  end
340
389
 
@@ -343,7 +392,7 @@ describe ActiveRecord::Migration do
343
392
  recreate_table @model, :foreign_keys => {:on_delete => :restrict} do |t|
344
393
  t.integer :user_id, :foreign_key => { :on_delete => :set_null }
345
394
  end
346
- @model.should reference.on(:user_id).on_delete(:set_null)
395
+ expect(@model).to reference.on(:user_id).on_delete(:set_null)
347
396
  end
348
397
  end
349
398
 
@@ -369,7 +418,7 @@ describe ActiveRecord::Migration do
369
418
  recreate_table @model, :foreign_keys => {:auto_index => false} do |t|
370
419
  t.integer :user_id
371
420
  end
372
- @model.should_not have_index.on(:user_id)
421
+ expect(@model).not_to have_index.on(:user_id)
373
422
  end
374
423
  end
375
424
 
@@ -378,7 +427,7 @@ describe ActiveRecord::Migration do
378
427
  recreate_table @model do |t|
379
428
  t.integer :user_id, :index => false
380
429
  end
381
- @model.should_not have_index.on(:user_id)
430
+ expect(@model).not_to have_index.on(:user_id)
382
431
  end
383
432
  end
384
433
 
@@ -397,7 +446,7 @@ describe ActiveRecord::Migration do
397
446
  change_table(@model, :bulk => bulk) do |t|
398
447
  t.integer :state, :index => true
399
448
  end
400
- @model.should have_index.on(:state)
449
+ expect(@model).to have_index.on(:state)
401
450
  end
402
451
 
403
452
  unless SchemaPlusHelpers.sqlite3?
@@ -406,13 +455,13 @@ describe ActiveRecord::Migration do
406
455
  change_table(@model, :bulk => bulk) do |t|
407
456
  t.integer :user_id
408
457
  end
409
- @model.should reference(:users, :id).on(:user_id)
458
+ expect(@model).to reference(:users, :id).on(:user_id)
410
459
  end
411
460
 
412
461
  context "migrate down" do
413
462
  it "should remove a foreign key constraint"+suffix do
414
463
  Comment.reset_column_information
415
- Comment.should reference(:users, :id).on(:user_id)
464
+ expect(Comment).to reference(:users, :id).on(:user_id)
416
465
  migration = Class.new ::ActiveRecord::Migration do
417
466
  define_method(:change) {
418
467
  change_table("comments", :bulk => bulk) do |t|
@@ -424,7 +473,7 @@ describe ActiveRecord::Migration do
424
473
  migration.migrate(:down)
425
474
  end
426
475
  Comment.reset_column_information
427
- Comment.should_not reference(:users, :id).on(:user_id)
476
+ expect(Comment).not_to reference(:users, :id).on(:user_id)
428
477
  end
429
478
  end if ActiveRecord::VERSION::MAJOR >= 4
430
479
 
@@ -432,14 +481,14 @@ describe ActiveRecord::Migration do
432
481
  change_table(@model, :bulk => bulk) do |t|
433
482
  t.references :user
434
483
  end
435
- @model.should reference(:users, :id).on(:user_id)
484
+ expect(@model).to reference(:users, :id).on(:user_id)
436
485
  end
437
486
 
438
487
  it "should create a foreign key constraint using :belongs_to"+suffix do
439
488
  change_table(@model, :bulk => bulk) do |t|
440
489
  t.belongs_to :user
441
490
  end
442
- @model.should reference(:users, :id).on(:user_id)
491
+ expect(@model).to reference(:users, :id).on(:user_id)
443
492
  end
444
493
  end
445
494
  end
@@ -456,87 +505,87 @@ describe ActiveRecord::Migration do
456
505
 
457
506
  it "should create an index" do
458
507
  add_column(:slug, :string, :index => true) do
459
- @model.should have_index.on(:slug)
508
+ expect(@model).to have_index.on(:slug)
460
509
  end
461
510
  end
462
511
 
463
512
  it "should create foreign key" do
464
513
  add_column(:post_id, :integer) do
465
- @model.should reference(:posts, :id).on(:post_id)
514
+ expect(@model).to reference(:posts, :id).on(:post_id)
466
515
  end
467
516
  end
468
517
 
469
518
  it "should create foreign key to explicitly given table" do
470
519
  add_column(:author_id, :integer, :foreign_key => { :references => :users }) do
471
- @model.should reference(:users, :id).on(:author_id)
520
+ expect(@model).to reference(:users, :id).on(:author_id)
472
521
  end
473
522
  end
474
523
 
475
524
  it "should create foreign key to explicitly given table using shortcut" do
476
525
  add_column(:author_id, :integer, :references => :users) do
477
- @model.should reference(:users, :id).on(:author_id)
526
+ expect(@model).to reference(:users, :id).on(:author_id)
478
527
  end
479
528
  end
480
529
 
481
530
  it "should create foreign key to explicitly given table and column name" do
482
531
  add_column(:author_login, :string, :foreign_key => { :references => [:users, :login]}) do
483
- @model.should reference(:users, :login).on(:author_login)
532
+ expect(@model).to reference(:users, :login).on(:author_login)
484
533
  end
485
534
  end
486
535
 
487
536
  it "should create foreign key to the same table on parent_id" do
488
537
  add_column(:parent_id, :integer) do
489
- @model.should reference(@model.table_name, :id).on(:parent_id)
538
+ expect(@model).to reference(@model.table_name, :id).on(:parent_id)
490
539
  end
491
540
  end
492
541
 
493
542
  it "shouldn't create foreign key if column doesn't look like foreign key" do
494
543
  add_column(:views_count, :integer) do
495
- @model.should_not reference.on(:views_count)
544
+ expect(@model).not_to reference.on(:views_count)
496
545
  end
497
546
  end
498
547
 
499
548
  it "shouldn't create foreign key if specified explicitly" do
500
549
  add_column(:post_id, :integer, :foreign_key => false) do
501
- @model.should_not reference.on(:post_id)
550
+ expect(@model).not_to reference.on(:post_id)
502
551
  end
503
552
  end
504
553
 
505
554
  it "shouldn't create foreign key if specified explicitly by shorthand" do
506
555
  add_column(:post_id, :integer, :references => nil) do
507
- @model.should_not reference.on(:post_id)
556
+ expect(@model).not_to reference.on(:post_id)
508
557
  end
509
558
  end
510
559
 
511
560
  it "should create an index if specified" do
512
561
  add_column(:post_id, :integer, :index => true) do
513
- @model.should have_index.on(:post_id)
562
+ expect(@model).to have_index.on(:post_id)
514
563
  end
515
564
  end
516
565
 
517
566
  it "should create a unique index if specified" do
518
567
  add_column(:post_id, :integer, :index => { :unique => true }) do
519
- @model.should have_unique_index.on(:post_id)
568
+ expect(@model).to have_unique_index.on(:post_id)
520
569
  end
521
570
  end
522
571
 
523
572
  it "should create a unique index if specified by shorthand" do
524
573
  add_column(:post_id, :integer, :index => :unique) do
525
- @model.should have_unique_index.on(:post_id)
574
+ expect(@model).to have_unique_index.on(:post_id)
526
575
  end
527
576
  end
528
577
 
529
578
  it "should allow custom name for index" do
530
579
  index_name = 'comments_post_id_unique_index'
531
580
  add_column(:post_id, :integer, :index => { :unique => true, :name => index_name }) do
532
- @model.should have_unique_index(:name => index_name).on(:post_id)
581
+ expect(@model).to have_unique_index(:name => index_name).on(:post_id)
533
582
  end
534
583
  end
535
584
 
536
585
  it "should auto-index if specified in global options" do
537
586
  SchemaPlus.config.foreign_keys.auto_index = true
538
587
  add_column(:post_id, :integer) do
539
- @model.should have_index.on(:post_id)
588
+ expect(@model).to have_index.on(:post_id)
540
589
  end
541
590
  SchemaPlus.config.foreign_keys.auto_index = false
542
591
  end
@@ -544,7 +593,7 @@ describe ActiveRecord::Migration do
544
593
  it "should auto-index foreign keys only" do
545
594
  SchemaPlus.config.foreign_keys.auto_index = true
546
595
  add_column(:state, :integer) do
547
- @model.should_not have_index.on(:state)
596
+ expect(@model).not_to have_index.on(:state)
548
597
  end
549
598
  SchemaPlus.config.foreign_keys.auto_index = false
550
599
  end
@@ -555,7 +604,7 @@ describe ActiveRecord::Migration do
555
604
  # MySQL creates an index on foreign by default
556
605
  # and we can do nothing with that
557
606
  unless SchemaPlusHelpers.mysql?
558
- @model.should_not have_index.on(:post_id)
607
+ expect(@model).not_to have_index.on(:post_id)
559
608
  end
560
609
  end
561
610
  SchemaPlus.config.foreign_keys.auto_index = false
@@ -564,7 +613,7 @@ describe ActiveRecord::Migration do
564
613
  it "should use default on_update action" do
565
614
  SchemaPlus.config.foreign_keys.on_update = :cascade
566
615
  add_column(:post_id, :integer) do
567
- @model.should reference.on(:post_id).on_update(:cascade)
616
+ expect(@model).to reference.on(:post_id).on_update(:cascade)
568
617
  end
569
618
  SchemaPlus.config.foreign_keys.on_update = nil
570
619
  end
@@ -572,7 +621,7 @@ describe ActiveRecord::Migration do
572
621
  it "should use default on_delete action" do
573
622
  SchemaPlus.config.foreign_keys.on_delete = :cascade
574
623
  add_column(:post_id, :integer) do
575
- @model.should reference.on(:post_id).on_delete(:cascade)
624
+ expect(@model).to reference.on(:post_id).on_delete(:cascade)
576
625
  end
577
626
  SchemaPlus.config.foreign_keys.on_delete = nil
578
627
  end
@@ -581,7 +630,7 @@ describe ActiveRecord::Migration do
581
630
  SchemaPlus.config.foreign_keys.on_delete = :cascade
582
631
  SchemaPlus.config.foreign_keys.on_update = :restrict
583
632
  add_column(:post_id, :integer, :foreign_key => { :on_update => :set_null, :on_delete => :set_null}) do
584
- @model.should reference.on(:post_id).on_delete(:set_null).on_update(:set_null)
633
+ expect(@model).to reference.on(:post_id).on_delete(:set_null).on_update(:set_null)
585
634
  end
586
635
  SchemaPlus.config.foreign_keys.on_delete = nil
587
636
  end
@@ -599,43 +648,6 @@ describe ActiveRecord::Migration do
599
648
 
600
649
  end
601
650
 
602
- context "when add reference" do
603
-
604
- before(:each) do
605
- @model = Comment
606
- end
607
-
608
- it "should create foreign key" do
609
- add_reference(:post) do
610
- @model.should reference(:posts, :id).on(:post_id)
611
- end
612
- end
613
-
614
- it "should not create a foreign_key if polymorphic" do
615
- add_reference(:post, :polymorphic => true) do
616
- @model.should_not reference(:posts, :id).on(:post_id)
617
- end
618
- end
619
-
620
- it "should create a two-column index if polymophic and index requested" do
621
- add_reference(:post, :polymorphic => true, :index => true) do
622
- @model.should have_index.on([:post_id, :post_type])
623
- end
624
- end
625
-
626
-
627
- protected
628
- def add_reference(column_name, *args)
629
- table = @model.table_name
630
- ActiveRecord::Migration.suppress_messages do
631
- ActiveRecord::Migration.add_reference(table, column_name, *args)
632
- @model.reset_column_information
633
- yield if block_given?
634
- ActiveRecord::Migration.remove_column(table, "#{column_name}_id")
635
- end
636
- end
637
-
638
- end unless ::ActiveRecord::VERSION::MAJOR.to_i < 4
639
651
 
640
652
  context "when column is changed" do
641
653
 
@@ -645,7 +657,7 @@ describe ActiveRecord::Migration do
645
657
 
646
658
  it "should create foreign key" do
647
659
  change_column :user, :string, :foreign_key => { :references => [:users, :login] }
648
- @model.should reference(:users, :login).on(:user)
660
+ expect(@model).to reference(:users, :login).on(:user)
649
661
  end
650
662
 
651
663
  context "and initially references to users table" do
@@ -657,39 +669,39 @@ describe ActiveRecord::Migration do
657
669
  end
658
670
 
659
671
  it "should have foreign key" do
660
- @model.should reference(:users)
672
+ expect(@model).to reference(:users)
661
673
  end
662
674
 
663
675
  it "should drop foreign key if it is no longer valid" do
664
676
  change_column :user_id, :integer, :foreign_key => { :references => :members }
665
- @model.should_not reference(:users)
677
+ expect(@model).not_to reference(:users)
666
678
  end
667
679
 
668
680
  it "should drop foreign key if requested to do so" do
669
681
  change_column :user_id, :integer, :foreign_key => { :references => nil }
670
- @model.should_not reference(:users)
682
+ expect(@model).not_to reference(:users)
671
683
  end
672
684
 
673
685
  it "should remove auto-created index if foreign key is removed" do
674
- @model.should have_index.on(:user_id) # sanity check that index was auto-created
686
+ expect(@model).to have_index.on(:user_id) # sanity check that index was auto-created
675
687
  change_column :user_id, :integer, :foreign_key => { :references => nil }
676
- @model.should_not have_index.on(:user_id)
688
+ expect(@model).not_to have_index.on(:user_id)
677
689
  end
678
690
 
679
691
  it "should reference pointed table afterwards if new one is created" do
680
692
  change_column :user_id, :integer, :foreign_key => { :references => :members }
681
- @model.should reference(:members)
693
+ expect(@model).to reference(:members)
682
694
  end
683
695
 
684
696
  it "should maintain foreign key if it's unaffected by change" do
685
697
  change_column :user_id, :integer, :default => 0
686
- @model.should reference(:users)
698
+ expect(@model).to reference(:users)
687
699
  end
688
700
 
689
701
  it "should maintain foreign key if it's unaffected by change, even if auto_index is off" do
690
702
  with_fk_config(:auto_create => false) do
691
703
  change_column :user_id, :integer, :default => 0
692
- @model.should reference(:users)
704
+ expect(@model).to reference(:users)
693
705
  end
694
706
  end
695
707
 
@@ -703,7 +715,7 @@ describe ActiveRecord::Migration do
703
715
  end
704
716
 
705
717
  it "should create the index" do
706
- @model.should have_index.on(:user_id)
718
+ expect(@model).to have_index.on(:user_id)
707
719
  end
708
720
 
709
721
  it "adding foreign key should not fail due to attempt to auto-create existing index" do
@@ -731,15 +743,15 @@ describe ActiveRecord::Migration do
731
743
  end
732
744
 
733
745
  it "should remove a foreign key" do
734
- @model.should reference(:posts)
746
+ expect(@model).to reference(:posts)
735
747
  remove_column(:post_id)
736
- @model.should_not reference(:posts)
748
+ expect(@model).not_to reference(:posts)
737
749
  end
738
750
 
739
751
  it "should remove an index" do
740
- @model.should have_index.on(:post_id)
752
+ expect(@model).to have_index.on(:post_id)
741
753
  remove_column(:post_id)
742
- @model.should_not have_index.on(:post_id)
754
+ expect(@model).not_to have_index.on(:post_id)
743
755
  end
744
756
 
745
757
  protected
@@ -779,17 +791,17 @@ describe ActiveRecord::Migration do
779
791
 
780
792
  it "should rename rails-named indexes" do
781
793
  index = ActiveRecord::Base.connection.indexes(:newname).find{|index| index.columns == ['xyz']}
782
- index.name.should =~ /^index_newname_on/
794
+ expect(index.name).to match(/^index_newname_on/)
783
795
  end
784
796
 
785
797
  it "should rename fk indexes" do
786
798
  index = ActiveRecord::Base.connection.indexes(:newname).find{|index| index.columns == ['user_id']}
787
- index.name.should =~ /^fk__newname_/
799
+ expect(index.name).to match(/^fk__newname_/)
788
800
  end
789
801
 
790
802
  unless SchemaPlusHelpers.sqlite3?
791
803
  it "should rename foreign key constraints" do
792
- ActiveRecord::Base.connection.foreign_keys(:newname).first.name.should =~ /newname/
804
+ expect(ActiveRecord::Base.connection.foreign_keys(:newname).first.name).to match(/newname/)
793
805
  end
794
806
  end
795
807
 
@@ -821,7 +833,7 @@ describe ActiveRecord::Migration do
821
833
  end
822
834
  it "should rename foreign key constraints" do
823
835
  names = ActiveRecord::Base.connection.foreign_keys(:newname).map(&:name)
824
- names.grep(/newname/).should == names
836
+ expect(names.grep(/newname/)).to eq(names)
825
837
  end
826
838
  end
827
839