factory_girl 4.2.0 → 4.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -46,6 +46,31 @@ describe "callbacks" do
46
46
  end
47
47
  end
48
48
 
49
+ describe 'callbacks using Symbol#to_proc' do
50
+ before do
51
+ define_model('User') do
52
+ def confirmed?
53
+ !!@confirmed
54
+ end
55
+
56
+ def confirm!
57
+ @confirmed = true
58
+ end
59
+ end
60
+
61
+ FactoryGirl.define do
62
+ factory :user do
63
+ after :build, &:confirm!
64
+ end
65
+ end
66
+ end
67
+
68
+ it 'runs the callback correctly' do
69
+ user = FactoryGirl.build(:user)
70
+ expect(user).to be_confirmed
71
+ end
72
+ end
73
+
49
74
  describe "callbacks using syntax methods without referencing FactoryGirl explicitly" do
50
75
  before do
51
76
  define_model("User", first_name: :string, last_name: :string)
@@ -175,3 +200,54 @@ describe 'binding a callback to multiple callbacks' do
175
200
  expect(FactoryGirl.build_stubbed(:user, name: 'John Doe').name).to eq 'JOHN DOE'
176
201
  end
177
202
  end
203
+
204
+ describe 'global callbacks' do
205
+ include FactoryGirl::Syntax::Methods
206
+
207
+ before do
208
+ define_model('User', name: :string)
209
+ define_model('Company', name: :string)
210
+
211
+ FactoryGirl.define do
212
+ after :build do |object|
213
+ object.name = case object.class.to_s
214
+ when 'User' then 'John Doe'
215
+ when 'Company' then 'Acme Suppliers'
216
+ end
217
+ end
218
+
219
+ after :create do |object|
220
+ object.name = "#{object.name}!!!"
221
+ end
222
+
223
+ trait :awesome do
224
+ after :build do |object|
225
+ object.name = "___#{object.name}___"
226
+ end
227
+
228
+ after :create do |object|
229
+ object.name = "A#{object.name}Z"
230
+ end
231
+ end
232
+
233
+ factory :user do
234
+ after :build do |user|
235
+ user.name = user.name.downcase
236
+ end
237
+ end
238
+
239
+ factory :company do
240
+ after :build do |company|
241
+ company.name = company.name.upcase
242
+ end
243
+ end
244
+ end
245
+ end
246
+
247
+ it 'triggers after build callbacks for all factories' do
248
+ expect(build(:user).name).to eq 'john doe'
249
+ expect(create(:user).name).to eq 'john doe!!!'
250
+ expect(create(:user, :awesome).name).to eq 'A___john doe___!!!Z'
251
+ expect(build(:company).name).to eq 'ACME SUPPLIERS'
252
+ end
253
+ end
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ describe "create multiple instances" do
4
+ before do
5
+ define_model('Post', title: :string, position: :integer)
6
+
7
+ FactoryGirl.define do
8
+ factory(:post) do |post|
9
+ post.title "Through the Looking Glass"
10
+ post.position { rand(10**4) }
11
+ end
12
+ end
13
+ end
14
+
15
+ context "without default attributes" do
16
+ subject { FactoryGirl.create_pair(:post) }
17
+
18
+ its(:length) { should eq 2 }
19
+
20
+ it "creates all the posts" do
21
+ subject.each do |record|
22
+ expect(record).not_to be_new_record
23
+ end
24
+ end
25
+
26
+ it "uses the default factory values" do
27
+ subject.each do |record|
28
+ expect(record.title).to eq "Through the Looking Glass"
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'defining methods inside FactoryGirl' do
4
+ it 'raises with a meaningful message' do
5
+ define_model('User')
6
+
7
+ expect do
8
+ FactoryGirl.define do
9
+ factory :user do
10
+ def generate_name
11
+ 'John Doe'
12
+ end
13
+ end
14
+ end
15
+ end.to raise_error FactoryGirl::MethodDefinitionError, /Defining methods in blocks \(trait or factory\) is not supported \(generate_name\)/
16
+ end
17
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ describe "an instance generated by a factory named a camel case string " do
4
+ before do
5
+ define_model("UserModel")
6
+
7
+ FactoryGirl.define do
8
+ factory 'UserModel', class: UserModel
9
+ end
10
+ end
11
+
12
+ it "registers the UserModel factory" do
13
+ expect(FactoryGirl.factory_by_name('UserModel')).to be_a(FactoryGirl::Factory)
14
+ end
15
+ end
@@ -49,6 +49,14 @@ describe "register custom strategies" do
49
49
  expect(inserted_items.length).to eq 2
50
50
  expect(inserted_items.map(&:name)).to eq ["Custom strategy", "Custom strategy"]
51
51
  end
52
+
53
+ it "allows using the *_pair method to build a list using a custom strategy" do
54
+ FactoryGirl.register_strategy(:insert, custom_strategy)
55
+
56
+ inserted_items = FactoryGirl.insert_pair(:named_object)
57
+ expect(inserted_items.length).to eq 2
58
+ expect(inserted_items.map(&:name)).to eq ["Custom strategy", "Custom strategy"]
59
+ end
52
60
  end
53
61
 
54
62
  describe "including FactoryGirl::Syntax::Methods when custom strategies have been declared" do
@@ -38,4 +38,14 @@ describe "syntax methods within dynamic attributes" do
38
38
  expect(FactoryGirl.build(:post).title).to eq "generate result"
39
39
  expect(FactoryGirl.attributes_for(:post)[:title]).to be_nil
40
40
  end
41
+
42
+ it 'allows syntax methods to be used when the block has an arity of 1' do
43
+ FactoryGirl.define do
44
+ factory :post_using_block_with_variable, parent: :post do
45
+ user {|_| build(:user) }
46
+ end
47
+ end
48
+
49
+ expect(FactoryGirl.build(:post_using_block_with_variable).user).to be_instance_of(User)
50
+ end
41
51
  end
@@ -30,7 +30,7 @@ describe FactoryGirl::Callback do
30
30
  it "allows valid callback names to be assigned" do
31
31
  FactoryGirl.callback_names.each do |callback_name|
32
32
  expect { FactoryGirl::Callback.new(callback_name, -> {}) }.
33
- to_not raise_error(FactoryGirl::InvalidCallbackNameError)
33
+ to_not raise_error
34
34
  end
35
35
  end
36
36
 
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: factory_girl
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.0
5
- prerelease:
4
+ version: 4.3.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Josh Clayton
@@ -10,28 +9,25 @@ authors:
10
9
  autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2013-01-18 00:00:00.000000000 Z
12
+ date: 2013-11-04 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: activesupport
17
16
  requirement: !ruby/object:Gem::Requirement
18
- none: false
19
17
  requirements:
20
- - - ! '>='
18
+ - - '>='
21
19
  - !ruby/object:Gem::Version
22
20
  version: 3.0.0
23
21
  type: :runtime
24
22
  prerelease: false
25
23
  version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
24
  requirements:
28
- - - ! '>='
25
+ - - '>='
29
26
  - !ruby/object:Gem::Version
30
27
  version: 3.0.0
31
28
  - !ruby/object:Gem::Dependency
32
29
  name: rspec
33
30
  requirement: !ruby/object:Gem::Requirement
34
- none: false
35
31
  requirements:
36
32
  - - ~>
37
33
  - !ruby/object:Gem::Version
@@ -39,7 +35,6 @@ dependencies:
39
35
  type: :development
40
36
  prerelease: false
41
37
  version_requirements: !ruby/object:Gem::Requirement
42
- none: false
43
38
  requirements:
44
39
  - - ~>
45
40
  - !ruby/object:Gem::Version
@@ -47,7 +42,6 @@ dependencies:
47
42
  - !ruby/object:Gem::Dependency
48
43
  name: cucumber
49
44
  requirement: !ruby/object:Gem::Requirement
50
- none: false
51
45
  requirements:
52
46
  - - ~>
53
47
  - !ruby/object:Gem::Version
@@ -55,7 +49,6 @@ dependencies:
55
49
  type: :development
56
50
  prerelease: false
57
51
  version_requirements: !ruby/object:Gem::Requirement
58
- none: false
59
52
  requirements:
60
53
  - - ~>
61
54
  - !ruby/object:Gem::Version
@@ -63,87 +56,76 @@ dependencies:
63
56
  - !ruby/object:Gem::Dependency
64
57
  name: timecop
65
58
  requirement: !ruby/object:Gem::Requirement
66
- none: false
67
59
  requirements:
68
- - - ! '>='
60
+ - - '>='
69
61
  - !ruby/object:Gem::Version
70
62
  version: '0'
71
63
  type: :development
72
64
  prerelease: false
73
65
  version_requirements: !ruby/object:Gem::Requirement
74
- none: false
75
66
  requirements:
76
- - - ! '>='
67
+ - - '>='
77
68
  - !ruby/object:Gem::Version
78
69
  version: '0'
79
70
  - !ruby/object:Gem::Dependency
80
71
  name: simplecov
81
72
  requirement: !ruby/object:Gem::Requirement
82
- none: false
83
73
  requirements:
84
- - - ! '>='
74
+ - - '>='
85
75
  - !ruby/object:Gem::Version
86
76
  version: '0'
87
77
  type: :development
88
78
  prerelease: false
89
79
  version_requirements: !ruby/object:Gem::Requirement
90
- none: false
91
80
  requirements:
92
- - - ! '>='
81
+ - - '>='
93
82
  - !ruby/object:Gem::Version
94
83
  version: '0'
95
84
  - !ruby/object:Gem::Dependency
96
85
  name: aruba
97
86
  requirement: !ruby/object:Gem::Requirement
98
- none: false
99
87
  requirements:
100
- - - ! '>='
88
+ - - '>='
101
89
  - !ruby/object:Gem::Version
102
90
  version: '0'
103
91
  type: :development
104
92
  prerelease: false
105
93
  version_requirements: !ruby/object:Gem::Requirement
106
- none: false
107
94
  requirements:
108
- - - ! '>='
95
+ - - '>='
109
96
  - !ruby/object:Gem::Version
110
97
  version: '0'
111
98
  - !ruby/object:Gem::Dependency
112
99
  name: mocha
113
100
  requirement: !ruby/object:Gem::Requirement
114
- none: false
115
101
  requirements:
116
- - - ! '>='
102
+ - - '>='
117
103
  - !ruby/object:Gem::Version
118
104
  version: 0.12.8
119
105
  type: :development
120
106
  prerelease: false
121
107
  version_requirements: !ruby/object:Gem::Requirement
122
- none: false
123
108
  requirements:
124
- - - ! '>='
109
+ - - '>='
125
110
  - !ruby/object:Gem::Version
126
111
  version: 0.12.8
127
112
  - !ruby/object:Gem::Dependency
128
113
  name: bourne
129
114
  requirement: !ruby/object:Gem::Requirement
130
- none: false
131
115
  requirements:
132
- - - ! '>='
116
+ - - '>='
133
117
  - !ruby/object:Gem::Version
134
118
  version: '0'
135
119
  type: :development
136
120
  prerelease: false
137
121
  version_requirements: !ruby/object:Gem::Requirement
138
- none: false
139
122
  requirements:
140
- - - ! '>='
123
+ - - '>='
141
124
  - !ruby/object:Gem::Version
142
125
  version: '0'
143
126
  - !ruby/object:Gem::Dependency
144
127
  name: appraisal
145
128
  requirement: !ruby/object:Gem::Requirement
146
- none: false
147
129
  requirements:
148
130
  - - ~>
149
131
  - !ruby/object:Gem::Version
@@ -151,7 +133,6 @@ dependencies:
151
133
  type: :development
152
134
  prerelease: false
153
135
  version_requirements: !ruby/object:Gem::Requirement
154
- none: false
155
136
  requirements:
156
137
  - - ~>
157
138
  - !ruby/object:Gem::Version
@@ -159,38 +140,35 @@ dependencies:
159
140
  - !ruby/object:Gem::Dependency
160
141
  name: sqlite3
161
142
  requirement: !ruby/object:Gem::Requirement
162
- none: false
163
143
  requirements:
164
- - - ! '>='
144
+ - - '>='
165
145
  - !ruby/object:Gem::Version
166
146
  version: '0'
167
147
  type: :development
168
148
  prerelease: false
169
149
  version_requirements: !ruby/object:Gem::Requirement
170
- none: false
171
150
  requirements:
172
- - - ! '>='
151
+ - - '>='
173
152
  - !ruby/object:Gem::Version
174
153
  version: '0'
175
154
  - !ruby/object:Gem::Dependency
176
155
  name: yard
177
156
  requirement: !ruby/object:Gem::Requirement
178
- none: false
179
157
  requirements:
180
- - - ! '>='
158
+ - - '>='
181
159
  - !ruby/object:Gem::Version
182
160
  version: '0'
183
161
  type: :development
184
162
  prerelease: false
185
163
  version_requirements: !ruby/object:Gem::Requirement
186
- none: false
187
164
  requirements:
188
- - - ! '>='
165
+ - - '>='
189
166
  - !ruby/object:Gem::Version
190
167
  version: '0'
191
- description: ! "factory_girl provides a framework and DSL for defining and\n using
192
- factories - less error-prone, more explicit, and\n all-around
193
- easier to work with than fixtures."
168
+ description: |-
169
+ factory_girl provides a framework and DSL for defining and
170
+ using factories - less error-prone, more explicit, and
171
+ all-around easier to work with than fixtures.
194
172
  email:
195
173
  - jclayton@thoughtbot.com
196
174
  - jferris@thoughtbot.com
@@ -220,8 +198,6 @@ files:
220
198
  - features/step_definitions/factory_girl_steps.rb
221
199
  - features/support/env.rb
222
200
  - features/support/factories.rb
223
- - gemfiles/3.0.gemfile
224
- - gemfiles/3.0.gemfile.lock
225
201
  - gemfiles/3.1.gemfile
226
202
  - gemfiles/3.1.gemfile.lock
227
203
  - gemfiles/3.2.gemfile
@@ -292,8 +268,11 @@ files:
292
268
  - spec/acceptance/build_stubbed_spec.rb
293
269
  - spec/acceptance/callbacks_spec.rb
294
270
  - spec/acceptance/create_list_spec.rb
271
+ - spec/acceptance/create_pair_spec.rb
295
272
  - spec/acceptance/create_spec.rb
296
273
  - spec/acceptance/define_child_before_parent_spec.rb
274
+ - spec/acceptance/defining_methods_inside_a_factory_spec.rb
275
+ - spec/acceptance/definition_camel_string_spec.rb
297
276
  - spec/acceptance/definition_spec.rb
298
277
  - spec/acceptance/definition_without_block_spec.rb
299
278
  - spec/acceptance/global_initialize_with_spec.rb
@@ -347,28 +326,28 @@ files:
347
326
  - spec/support/matchers/trait.rb
348
327
  - spec/support/shared_examples/strategy.rb
349
328
  homepage: https://github.com/thoughtbot/factory_girl
350
- licenses: []
329
+ licenses:
330
+ - MIT
331
+ metadata: {}
351
332
  post_install_message:
352
333
  rdoc_options: []
353
334
  require_paths:
354
335
  - lib
355
336
  required_ruby_version: !ruby/object:Gem::Requirement
356
- none: false
357
337
  requirements:
358
- - - ! '>='
338
+ - - '>='
359
339
  - !ruby/object:Gem::Version
360
340
  version: 1.9.2
361
341
  required_rubygems_version: !ruby/object:Gem::Requirement
362
- none: false
363
342
  requirements:
364
- - - ! '>='
343
+ - - '>='
365
344
  - !ruby/object:Gem::Version
366
345
  version: '0'
367
346
  requirements: []
368
347
  rubyforge_project:
369
- rubygems_version: 1.8.23
348
+ rubygems_version: 2.1.5
370
349
  signing_key:
371
- specification_version: 3
350
+ specification_version: 4
372
351
  summary: factory_girl provides a framework and DSL for defining and using model instance
373
352
  factories.
374
353
  test_files:
@@ -378,8 +357,6 @@ test_files:
378
357
  - features/step_definitions/factory_girl_steps.rb
379
358
  - features/support/env.rb
380
359
  - features/support/factories.rb
381
- - gemfiles/3.0.gemfile
382
- - gemfiles/3.0.gemfile.lock
383
360
  - gemfiles/3.1.gemfile
384
361
  - gemfiles/3.1.gemfile.lock
385
362
  - gemfiles/3.2.gemfile
@@ -398,8 +375,11 @@ test_files:
398
375
  - spec/acceptance/build_stubbed_spec.rb
399
376
  - spec/acceptance/callbacks_spec.rb
400
377
  - spec/acceptance/create_list_spec.rb
378
+ - spec/acceptance/create_pair_spec.rb
401
379
  - spec/acceptance/create_spec.rb
402
380
  - spec/acceptance/define_child_before_parent_spec.rb
381
+ - spec/acceptance/defining_methods_inside_a_factory_spec.rb
382
+ - spec/acceptance/definition_camel_string_spec.rb
403
383
  - spec/acceptance/definition_spec.rb
404
384
  - spec/acceptance/definition_without_block_spec.rb
405
385
  - spec/acceptance/global_initialize_with_spec.rb