factory_girl 1.3.3 → 2.0.0.beta1

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 (53) hide show
  1. data/README.rdoc +68 -60
  2. data/features/support/test.db +0 -0
  3. data/lib/factory_girl.rb +6 -12
  4. data/lib/factory_girl/aliases.rb +2 -31
  5. data/lib/factory_girl/attribute.rb +1 -1
  6. data/lib/factory_girl/attribute/association.rb +1 -1
  7. data/lib/factory_girl/attribute/callback.rb +1 -1
  8. data/lib/factory_girl/attribute/dynamic.rb +3 -3
  9. data/lib/factory_girl/attribute/static.rb +1 -1
  10. data/lib/factory_girl/definition_proxy.rb +180 -0
  11. data/lib/factory_girl/deprecated.rb +18 -0
  12. data/lib/factory_girl/factory.rb +120 -355
  13. data/lib/factory_girl/find_definitions.rb +25 -0
  14. data/lib/factory_girl/proxy.rb +4 -6
  15. data/lib/factory_girl/proxy/attributes_for.rb +1 -1
  16. data/lib/factory_girl/proxy/build.rb +7 -5
  17. data/lib/factory_girl/proxy/create.rb +1 -1
  18. data/lib/factory_girl/proxy/stub.rb +11 -5
  19. data/lib/factory_girl/rails2.rb +1 -1
  20. data/lib/factory_girl/sequence.rb +5 -40
  21. data/lib/factory_girl/step_definitions.rb +7 -7
  22. data/lib/factory_girl/syntax.rb +7 -7
  23. data/lib/factory_girl/syntax/blueprint.rb +5 -4
  24. data/lib/factory_girl/syntax/default.rb +31 -0
  25. data/lib/factory_girl/syntax/generate.rb +13 -8
  26. data/lib/factory_girl/syntax/make.rb +8 -6
  27. data/lib/factory_girl/syntax/sham.rb +11 -8
  28. data/lib/factory_girl/syntax/vintage.rb +196 -0
  29. data/lib/factory_girl/version.rb +4 -0
  30. data/spec/acceptance/acceptance_spec.rb +43 -60
  31. data/spec/acceptance/syntax/blueprint_spec.rb +1 -5
  32. data/spec/acceptance/syntax/generate_spec.rb +1 -4
  33. data/spec/acceptance/syntax/make_spec.rb +1 -4
  34. data/spec/acceptance/syntax/sham_spec.rb +9 -7
  35. data/spec/acceptance/syntax/vintage_spec.rb +184 -0
  36. data/spec/factory_girl/aliases_spec.rb +5 -5
  37. data/spec/factory_girl/attribute/association_spec.rb +3 -3
  38. data/spec/factory_girl/attribute/callback_spec.rb +3 -3
  39. data/spec/factory_girl/attribute/dynamic_spec.rb +20 -9
  40. data/spec/factory_girl/attribute/static_spec.rb +5 -5
  41. data/spec/factory_girl/attribute_spec.rb +5 -5
  42. data/spec/factory_girl/definition_proxy_spec.rb +138 -0
  43. data/spec/factory_girl/deprecated_spec.rb +66 -0
  44. data/spec/factory_girl/factory_spec.rb +283 -566
  45. data/spec/factory_girl/find_definitions_spec.rb +89 -0
  46. data/spec/factory_girl/proxy/attributes_for_spec.rb +2 -2
  47. data/spec/factory_girl/proxy/build_spec.rb +17 -12
  48. data/spec/factory_girl/proxy/create_spec.rb +17 -12
  49. data/spec/factory_girl/proxy/stub_spec.rb +6 -5
  50. data/spec/factory_girl/proxy_spec.rb +2 -2
  51. data/spec/factory_girl/sequence_spec.rb +15 -38
  52. data/spec/spec_helper.rb +4 -0
  53. metadata +28 -11
@@ -0,0 +1,89 @@
1
+ require 'spec_helper'
2
+
3
+ share_examples_for "finds definitions" do
4
+ before do
5
+ stub(FactoryGirl).require
6
+ FactoryGirl.find_definitions
7
+ end
8
+ subject { FactoryGirl }
9
+ end
10
+
11
+ describe "definition loading" do
12
+ def self.in_directory_with_files(*files)
13
+ before do
14
+ @pwd = Dir.pwd
15
+ @tmp_dir = File.join(File.dirname(__FILE__), 'tmp')
16
+ FileUtils.mkdir_p @tmp_dir
17
+ Dir.chdir(@tmp_dir)
18
+
19
+ files.each do |file|
20
+ FileUtils.mkdir_p File.dirname(file)
21
+ FileUtils.touch file
22
+ end
23
+ end
24
+
25
+ after do
26
+ Dir.chdir(@pwd)
27
+ FileUtils.rm_rf(@tmp_dir)
28
+ end
29
+ end
30
+
31
+ def require_definitions_from(file)
32
+ simple_matcher do |given, matcher|
33
+ has_received = have_received.method_missing(:require, file)
34
+ result = has_received.matches?(given)
35
+ matcher.description = "require definitions from #{file}"
36
+ matcher.failure_message = has_received.failure_message
37
+ result
38
+ end
39
+ end
40
+
41
+ describe "with factories.rb" do
42
+ in_directory_with_files 'factories.rb'
43
+ it_should_behave_like "finds definitions"
44
+ it { should require_definitions_from('factories.rb') }
45
+ end
46
+
47
+ %w(spec test).each do |dir|
48
+ describe "with a factories file under #{dir}" do
49
+ in_directory_with_files File.join(dir, 'factories.rb')
50
+ it_should_behave_like "finds definitions"
51
+ it { should require_definitions_from("#{dir}/factories.rb") }
52
+ end
53
+
54
+ describe "with a factories file under #{dir}/factories" do
55
+ in_directory_with_files File.join(dir, 'factories', 'post_factory.rb')
56
+ it_should_behave_like "finds definitions"
57
+ it { should require_definitions_from("#{dir}/factories/post_factory.rb") }
58
+ end
59
+
60
+ describe "with several factories files under #{dir}/factories" do
61
+ in_directory_with_files File.join(dir, 'factories', 'post_factory.rb'),
62
+ File.join(dir, 'factories', 'person_factory.rb')
63
+ it_should_behave_like "finds definitions"
64
+ it { should require_definitions_from("#{dir}/factories/post_factory.rb") }
65
+ it { should require_definitions_from("#{dir}/factories/person_factory.rb") }
66
+ end
67
+
68
+ describe "with several factories files under #{dir}/factories in non-alphabetical order" do
69
+ in_directory_with_files File.join(dir, 'factories', 'b.rb'),
70
+ File.join(dir, 'factories', 'a.rb')
71
+ it "should load the files in the right order" do
72
+ @loaded = []
73
+ stub(FactoryGirl).require { |a| @loaded << File.split(a)[-1] }
74
+ FactoryGirl.find_definitions
75
+ @loaded.should == ["a.rb", "b.rb"]
76
+ end
77
+ end
78
+
79
+ describe "with nested and unnested factories files under #{dir}" do
80
+ in_directory_with_files File.join(dir, 'factories.rb'),
81
+ File.join(dir, 'factories', 'post_factory.rb'),
82
+ File.join(dir, 'factories', 'person_factory.rb')
83
+ it_should_behave_like "finds definitions"
84
+ it { should require_definitions_from("#{dir}/factories.rb") }
85
+ it { should require_definitions_from("#{dir}/factories/post_factory.rb") }
86
+ it { should require_definitions_from("#{dir}/factories/person_factory.rb") }
87
+ end
88
+ end
89
+ end
@@ -1,8 +1,8 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Factory::Proxy::AttributesFor do
3
+ describe FactoryGirl::Proxy::AttributesFor do
4
4
  before do
5
- @proxy = Factory::Proxy::AttributesFor.new(@class)
5
+ @proxy = FactoryGirl::Proxy::AttributesFor.new(@class)
6
6
  end
7
7
 
8
8
  describe "when asked to associate with another factory" do
@@ -1,18 +1,16 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Factory::Proxy::Build do
3
+ describe FactoryGirl::Proxy::Build do
4
4
  before do
5
5
  @class = Class.new
6
6
  @instance = "built-instance"
7
- @association = "associated-instance"
8
7
 
9
8
  stub(@class).new { @instance }
10
9
  stub(@instance).attribute { 'value' }
11
- stub(Factory).create { @association }
12
10
  stub(@instance, :attribute=)
13
11
  stub(@instance, :owner=)
14
12
 
15
- @proxy = Factory::Proxy::Build.new(@class)
13
+ @proxy = FactoryGirl::Proxy::Build.new(@class)
16
14
  end
17
15
 
18
16
  it "should instantiate the class" do
@@ -21,11 +19,16 @@ describe Factory::Proxy::Build do
21
19
 
22
20
  describe "when asked to associate with another factory" do
23
21
  before do
24
- @proxy.associate(:owner, :user, {})
22
+ @association = "associated-instance"
23
+ @associated_factory = "associated-factory"
24
+ stub(FactoryGirl).factory_by_name { @associated_factory }
25
+ stub(@associated_factory).run { @association }
26
+ @overrides = { 'attr' => 'value' }
27
+ @proxy.associate(:owner, :user, @overrides)
25
28
  end
26
29
 
27
30
  it "should create the associated instance" do
28
- Factory.should have_received.create(:user, {})
31
+ @associated_factory.should have_received.run(FactoryGirl::Proxy::Create, @overrides)
29
32
  end
30
33
 
31
34
  it "should set the associated instance" do
@@ -33,12 +36,14 @@ describe Factory::Proxy::Build do
33
36
  end
34
37
  end
35
38
 
36
- it "should call Factory.create when building an association" do
37
- association = 'association'
38
- attribs = { :first_name => 'Billy' }
39
- stub(Factory).create { association }
40
- @proxy.association(:user, attribs).should == association
41
- Factory.should have_received.create(:user, attribs)
39
+ it "should run create when building an association" do
40
+ association = "associated-instance"
41
+ associated_factory = "associated-factory"
42
+ stub(FactoryGirl).factory_by_name { associated_factory }
43
+ stub(associated_factory).run { association }
44
+ overrides = { 'attr' => 'value' }
45
+ @proxy.association(:user, overrides).should == association
46
+ associated_factory.should have_received.run(FactoryGirl::Proxy::Create, overrides)
42
47
  end
43
48
 
44
49
  it "should return the built instance when asked for the result" do
@@ -1,19 +1,17 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Factory::Proxy::Create do
3
+ describe FactoryGirl::Proxy::Create do
4
4
  before do
5
5
  @class = Class.new
6
6
  @instance = "built-instance"
7
- @association = "associated-instance"
8
7
 
9
8
  stub(@class).new { @instance }
10
- stub(Factory).create { @association }
11
9
  stub(@instance).attribute { 'value' }
12
10
  stub(@instance, :attribute=)
13
11
  stub(@instance, :owner=)
14
12
  stub(@instance).save!
15
13
 
16
- @proxy = Factory::Proxy::Create.new(@class)
14
+ @proxy = FactoryGirl::Proxy::Create.new(@class)
17
15
  end
18
16
 
19
17
  it "should instantiate the class" do
@@ -22,11 +20,16 @@ describe Factory::Proxy::Create do
22
20
 
23
21
  describe "when asked to associate with another factory" do
24
22
  before do
25
- @proxy.associate(:owner, :user, {})
23
+ @association = "associated-instance"
24
+ @associated_factory = "associated-factory"
25
+ stub(FactoryGirl).factory_by_name { @associated_factory }
26
+ stub(@associated_factory).run { @association }
27
+ @overrides = { 'attr' => 'value' }
28
+ @proxy.associate(:owner, :user, @overrides)
26
29
  end
27
30
 
28
31
  it "should create the associated instance" do
29
- Factory.should have_received.create(:user, {})
32
+ @associated_factory.should have_received.run(FactoryGirl::Proxy::Create, @overrides)
30
33
  end
31
34
 
32
35
  it "should set the associated instance" do
@@ -34,12 +37,14 @@ describe Factory::Proxy::Create do
34
37
  end
35
38
  end
36
39
 
37
- it "should call Factory.create when building an association" do
38
- association = 'association'
39
- attribs = { :first_name => 'Billy' }
40
- stub(Factory).create { association }
41
- @proxy.association(:user, attribs).should == association
42
- Factory.should have_received.create(:user, attribs)
40
+ it "should run create when building an association" do
41
+ association = "associated-instance"
42
+ associated_factory = "associated-factory"
43
+ stub(FactoryGirl).factory_by_name { associated_factory }
44
+ stub(associated_factory).run { association }
45
+ overrides = { 'attr' => 'value' }
46
+ @proxy.association(:user, overrides).should == association
47
+ associated_factory.should have_received.run(FactoryGirl::Proxy::Create, overrides)
43
48
  end
44
49
 
45
50
  describe "when asked for the result" do
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Factory::Proxy::Stub do
3
+ describe FactoryGirl::Proxy::Stub do
4
4
  before do
5
5
  @class = "class"
6
6
  @instance = "instance"
@@ -9,7 +9,7 @@ describe Factory::Proxy::Stub do
9
9
  stub(@instance).id { 42 }
10
10
  stub(@instance).reload { @instance.connection.reload }
11
11
 
12
- @stub = Factory::Proxy::Stub.new(@class)
12
+ @stub = FactoryGirl::Proxy::Stub.new(@class)
13
13
  end
14
14
 
15
15
  it "should not be a new record" do
@@ -23,13 +23,14 @@ describe Factory::Proxy::Stub do
23
23
  describe "when a user factory exists" do
24
24
  before do
25
25
  @user = "user"
26
- stub(Factory).stub(:user, {}) { @user }
26
+ stub(FactoryGirl).factory_by_name { @associated_factory }
27
+ @associated_factory = 'associate-factory'
27
28
  end
28
29
 
29
30
  describe "when asked to associate with another factory" do
30
31
  before do
31
32
  stub(@instance).owner { @user }
32
- mock(Factory).stub(:user, {}) { @user }
33
+ mock(@associated_factory).run(FactoryGirl::Proxy::Stub, {}) { @user }
33
34
  mock(@stub).set(:owner, @user)
34
35
 
35
36
  @stub.associate(:owner, :user, {})
@@ -41,7 +42,7 @@ describe Factory::Proxy::Stub do
41
42
  end
42
43
 
43
44
  it "should return the association when building one" do
44
- mock(Factory).create.never
45
+ mock(@associated_factory).run(FactoryGirl::Proxy::Stub, {}) { @user }
45
46
  @stub.association(:user).should == @user
46
47
  end
47
48
 
@@ -1,8 +1,8 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Factory::Proxy do
3
+ describe FactoryGirl::Proxy do
4
4
  before do
5
- @proxy = Factory::Proxy.new(Class.new)
5
+ @proxy = FactoryGirl::Proxy.new(Class.new)
6
6
  end
7
7
 
8
8
  it "should do nothing when asked to set an attribute to a value" do
@@ -1,9 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Factory::Sequence do
4
- describe "a sequence" do
3
+ describe FactoryGirl::Sequence do
4
+ describe "a basic sequence" do
5
5
  before do
6
- @sequence = Factory::Sequence.new {|n| "=#{n}" }
6
+ @sequence = FactoryGirl::Sequence.new {|n| "=#{n}" }
7
7
  end
8
8
 
9
9
  it "should start with a value of 1" do
@@ -20,47 +20,24 @@ describe Factory::Sequence do
20
20
  end
21
21
  end
22
22
  end
23
-
24
- describe "defining a sequence" do
23
+
24
+ describe "a custom sequence" do
25
25
  before do
26
- @sequence = "sequence"
27
- @name = :count
28
- stub(Factory::Sequence).new { @sequence }
29
- end
30
-
31
- it "should create a new sequence" do
32
- mock(Factory::Sequence).new() { @sequence }
33
- Factory.sequence(@name)
34
- end
35
-
36
- it "should use the supplied block as the sequence generator" do
37
- stub(Factory::Sequence).new.yields(1)
38
- yielded = false
39
- Factory.sequence(@name) {|n| yielded = true }
40
- (yielded).should be
26
+ @sequence = FactoryGirl::Sequence.new("A") {|n| "=#{n}" }
41
27
  end
42
- end
43
-
44
- describe "after defining a sequence" do
45
- before do
46
- @sequence = "sequence"
47
- @name = :test
48
- @value = '1 2 5'
49
-
50
- stub(@sequence).next { @value }
51
- stub(Factory::Sequence).new { @sequence }
52
28
 
53
- Factory.sequence(@name) {}
29
+ it "should start with a value of A" do
30
+ @sequence.next.should == "=A"
54
31
  end
55
32
 
56
- it "should call next on the sequence when sent next" do
57
- mock(@sequence).next
58
-
59
- Factory.next(@name)
60
- end
33
+ describe "after being called" do
34
+ before do
35
+ @sequence.next
36
+ end
61
37
 
62
- it "should return the value from the sequence" do
63
- Factory.next(@name).should == @value
38
+ it "should use the next value" do
39
+ @sequence.next.should == "=B"
40
+ end
64
41
  end
65
42
  end
66
43
  end
data/spec/spec_helper.rb CHANGED
@@ -10,6 +10,10 @@ require 'factory_girl'
10
10
 
11
11
  Spec::Runner.configure do |config|
12
12
  config.mock_with RR::Adapters::Rspec
13
+ config.after do
14
+ FactoryGirl.factories.clear
15
+ FactoryGirl.sequences.clear
16
+ end
13
17
  end
14
18
 
15
19
  share_as :DefinesConstants do
metadata CHANGED
@@ -1,13 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: factory_girl
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
5
- prerelease: false
4
+ hash: 299253613
5
+ prerelease: true
6
6
  segments:
7
- - 1
8
- - 3
9
- - 3
10
- version: 1.3.3
7
+ - 2
8
+ - 0
9
+ - 0
10
+ - beta1
11
+ version: 2.0.0.beta1
11
12
  platform: ruby
12
13
  authors:
13
14
  - Joe Ferris
@@ -15,7 +16,7 @@ autorequire:
15
16
  bindir: bin
16
17
  cert_chain: []
17
18
 
18
- date: 2011-01-11 00:00:00 -05:00
19
+ date: 2010-10-02 00:00:00 -04:00
19
20
  default_executable:
20
21
  dependencies:
21
22
  - !ruby/object:Gem::Dependency
@@ -144,7 +145,10 @@ files:
144
145
  - lib/factory_girl/attribute/dynamic.rb
145
146
  - lib/factory_girl/attribute/static.rb
146
147
  - lib/factory_girl/attribute.rb
148
+ - lib/factory_girl/definition_proxy.rb
149
+ - lib/factory_girl/deprecated.rb
147
150
  - lib/factory_girl/factory.rb
151
+ - lib/factory_girl/find_definitions.rb
148
152
  - lib/factory_girl/proxy/attributes_for.rb
149
153
  - lib/factory_girl/proxy/build.rb
150
154
  - lib/factory_girl/proxy/create.rb
@@ -154,10 +158,13 @@ files:
154
158
  - lib/factory_girl/sequence.rb
155
159
  - lib/factory_girl/step_definitions.rb
156
160
  - lib/factory_girl/syntax/blueprint.rb
161
+ - lib/factory_girl/syntax/default.rb
157
162
  - lib/factory_girl/syntax/generate.rb
158
163
  - lib/factory_girl/syntax/make.rb
159
164
  - lib/factory_girl/syntax/sham.rb
165
+ - lib/factory_girl/syntax/vintage.rb
160
166
  - lib/factory_girl/syntax.rb
167
+ - lib/factory_girl/version.rb
161
168
  - lib/factory_girl.rb
162
169
  - spec/acceptance/acceptance_helper.rb
163
170
  - spec/acceptance/acceptance_spec.rb
@@ -166,13 +173,17 @@ files:
166
173
  - spec/acceptance/syntax/generate_spec.rb
167
174
  - spec/acceptance/syntax/make_spec.rb
168
175
  - spec/acceptance/syntax/sham_spec.rb
176
+ - spec/acceptance/syntax/vintage_spec.rb
169
177
  - spec/factory_girl/aliases_spec.rb
170
178
  - spec/factory_girl/attribute/association_spec.rb
171
179
  - spec/factory_girl/attribute/callback_spec.rb
172
180
  - spec/factory_girl/attribute/dynamic_spec.rb
173
181
  - spec/factory_girl/attribute/static_spec.rb
174
182
  - spec/factory_girl/attribute_spec.rb
183
+ - spec/factory_girl/definition_proxy_spec.rb
184
+ - spec/factory_girl/deprecated_spec.rb
175
185
  - spec/factory_girl/factory_spec.rb
186
+ - spec/factory_girl/find_definitions_spec.rb
176
187
  - spec/factory_girl/proxy/attributes_for_spec.rb
177
188
  - spec/factory_girl/proxy/build_spec.rb
178
189
  - spec/factory_girl/proxy/create_spec.rb
@@ -208,12 +219,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
208
219
  required_rubygems_version: !ruby/object:Gem::Requirement
209
220
  none: false
210
221
  requirements:
211
- - - ">="
222
+ - - ">"
212
223
  - !ruby/object:Gem::Version
213
- hash: 3
224
+ hash: 25
214
225
  segments:
215
- - 0
216
- version: "0"
226
+ - 1
227
+ - 3
228
+ - 1
229
+ version: 1.3.1
217
230
  requirements: []
218
231
 
219
232
  rubyforge_project:
@@ -227,13 +240,17 @@ test_files:
227
240
  - spec/acceptance/syntax/generate_spec.rb
228
241
  - spec/acceptance/syntax/make_spec.rb
229
242
  - spec/acceptance/syntax/sham_spec.rb
243
+ - spec/acceptance/syntax/vintage_spec.rb
230
244
  - spec/factory_girl/aliases_spec.rb
231
245
  - spec/factory_girl/attribute/association_spec.rb
232
246
  - spec/factory_girl/attribute/callback_spec.rb
233
247
  - spec/factory_girl/attribute/dynamic_spec.rb
234
248
  - spec/factory_girl/attribute/static_spec.rb
235
249
  - spec/factory_girl/attribute_spec.rb
250
+ - spec/factory_girl/definition_proxy_spec.rb
251
+ - spec/factory_girl/deprecated_spec.rb
236
252
  - spec/factory_girl/factory_spec.rb
253
+ - spec/factory_girl/find_definitions_spec.rb
237
254
  - spec/factory_girl/proxy/attributes_for_spec.rb
238
255
  - spec/factory_girl/proxy/build_spec.rb
239
256
  - spec/factory_girl/proxy/create_spec.rb