factory_girl 2.4.1 → 2.4.2
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.
- data/Changelog +3 -0
- data/Gemfile.lock +1 -1
- data/gemfiles/2.1.gemfile.lock +1 -1
- data/gemfiles/2.3.gemfile.lock +1 -1
- data/gemfiles/3.0.gemfile.lock +1 -1
- data/gemfiles/3.1.gemfile.lock +1 -1
- data/gemfiles/3.2.gemfile.lock +1 -1
- data/lib/factory_girl/definition.rb +20 -11
- data/lib/factory_girl/factory.rb +2 -8
- data/lib/factory_girl/version.rb +1 -1
- data/spec/acceptance/traits_spec.rb +48 -0
- data/spec/factory_girl/definition_spec.rb +27 -10
- data/spec/factory_girl/factory_spec.rb +3 -3
- metadata +26 -26
data/Changelog
CHANGED
data/Gemfile.lock
CHANGED
data/gemfiles/2.1.gemfile.lock
CHANGED
data/gemfiles/2.3.gemfile.lock
CHANGED
data/gemfiles/3.0.gemfile.lock
CHANGED
data/gemfiles/3.1.gemfile.lock
CHANGED
data/gemfiles/3.2.gemfile.lock
CHANGED
|
@@ -2,12 +2,13 @@ module FactoryGirl
|
|
|
2
2
|
class Definition
|
|
3
3
|
attr_reader :callbacks, :defined_traits, :declarations
|
|
4
4
|
|
|
5
|
-
def initialize(name = nil)
|
|
6
|
-
@declarations
|
|
7
|
-
@callbacks
|
|
8
|
-
@defined_traits
|
|
9
|
-
@to_create
|
|
10
|
-
@
|
|
5
|
+
def initialize(name = nil, base_traits = [])
|
|
6
|
+
@declarations = DeclarationList.new(name)
|
|
7
|
+
@callbacks = []
|
|
8
|
+
@defined_traits = []
|
|
9
|
+
@to_create = lambda {|instance| instance.save! }
|
|
10
|
+
@base_traits = base_traits
|
|
11
|
+
@additional_traits = []
|
|
11
12
|
end
|
|
12
13
|
|
|
13
14
|
delegate :declare_attribute, :to => :declarations
|
|
@@ -20,17 +21,17 @@ module FactoryGirl
|
|
|
20
21
|
attributes
|
|
21
22
|
end
|
|
22
23
|
|
|
24
|
+
def processing_order
|
|
25
|
+
base_traits + [self] + additional_traits
|
|
26
|
+
end
|
|
27
|
+
|
|
23
28
|
def overridable
|
|
24
29
|
declarations.overridable
|
|
25
30
|
self
|
|
26
31
|
end
|
|
27
32
|
|
|
28
|
-
def traits
|
|
29
|
-
@traits.reverse.map { |name| trait_by_name(name) }
|
|
30
|
-
end
|
|
31
|
-
|
|
32
33
|
def inherit_traits(new_traits)
|
|
33
|
-
@
|
|
34
|
+
@additional_traits += new_traits
|
|
34
35
|
end
|
|
35
36
|
|
|
36
37
|
def add_callback(callback)
|
|
@@ -51,6 +52,14 @@ module FactoryGirl
|
|
|
51
52
|
|
|
52
53
|
private
|
|
53
54
|
|
|
55
|
+
def base_traits
|
|
56
|
+
@base_traits.map { |name| trait_by_name(name) }
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def additional_traits
|
|
60
|
+
@additional_traits.map { |name| trait_by_name(name) }
|
|
61
|
+
end
|
|
62
|
+
|
|
54
63
|
def trait_by_name(name)
|
|
55
64
|
trait_for(name) || FactoryGirl.trait_by_name(name)
|
|
56
65
|
end
|
data/lib/factory_girl/factory.rb
CHANGED
|
@@ -12,14 +12,12 @@ module FactoryGirl
|
|
|
12
12
|
@aliases = options[:aliases] || []
|
|
13
13
|
@class_name = options[:class]
|
|
14
14
|
@default_strategy = options[:default_strategy]
|
|
15
|
-
@definition = Definition.new(@name)
|
|
15
|
+
@definition = Definition.new(@name, options[:traits] || [])
|
|
16
16
|
@compiled = false
|
|
17
|
-
|
|
18
|
-
inherit_traits(options[:traits] || [])
|
|
19
17
|
end
|
|
20
18
|
|
|
21
19
|
delegate :add_callback, :declare_attribute, :to_create, :define_trait,
|
|
22
|
-
:defined_traits, :
|
|
20
|
+
:defined_traits, :inherit_traits, :processing_order, :to => :@definition
|
|
23
21
|
|
|
24
22
|
def factory_name
|
|
25
23
|
$stderr.puts "DEPRECATION WARNING: factory.factory_name is deprecated; use factory.name instead."
|
|
@@ -127,10 +125,6 @@ module FactoryGirl
|
|
|
127
125
|
|
|
128
126
|
private
|
|
129
127
|
|
|
130
|
-
def processing_order
|
|
131
|
-
[traits.reverse, @definition].flatten
|
|
132
|
-
end
|
|
133
|
-
|
|
134
128
|
def assert_valid_options(options)
|
|
135
129
|
options.assert_valid_keys(:class, :parent, :default_strategy, :aliases, :traits)
|
|
136
130
|
|
data/lib/factory_girl/version.rb
CHANGED
|
@@ -312,3 +312,51 @@ describe "applying inline traits" do
|
|
|
312
312
|
FactoryGirl.create(:user, :with_post).posts.should_not be_empty
|
|
313
313
|
end
|
|
314
314
|
end
|
|
315
|
+
|
|
316
|
+
describe "inline traits overriding existing attributes" do
|
|
317
|
+
before do
|
|
318
|
+
define_model("User", :status => :string)
|
|
319
|
+
|
|
320
|
+
FactoryGirl.define do
|
|
321
|
+
factory :user do
|
|
322
|
+
status "pending"
|
|
323
|
+
|
|
324
|
+
trait(:accepted) { status "accepted" }
|
|
325
|
+
trait(:declined) { status "declined" }
|
|
326
|
+
|
|
327
|
+
factory :declined_user, :traits => [:declined]
|
|
328
|
+
factory :extended_declined_user, :traits => [:declined] do
|
|
329
|
+
status "extended_declined"
|
|
330
|
+
end
|
|
331
|
+
end
|
|
332
|
+
end
|
|
333
|
+
end
|
|
334
|
+
|
|
335
|
+
it "returns the default status" do
|
|
336
|
+
FactoryGirl.build(:user).status.should == "pending"
|
|
337
|
+
end
|
|
338
|
+
|
|
339
|
+
it "prefers inline trait attributes over default attributes" do
|
|
340
|
+
FactoryGirl.build(:user, :accepted).status.should == "accepted"
|
|
341
|
+
end
|
|
342
|
+
|
|
343
|
+
it "prefers traits on a factory over default attributes" do
|
|
344
|
+
FactoryGirl.build(:declined_user).status.should == "declined"
|
|
345
|
+
end
|
|
346
|
+
|
|
347
|
+
it "prefers inline trait attributes over traits on a factory" do
|
|
348
|
+
FactoryGirl.build(:declined_user, :accepted).status.should == "accepted"
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
it "prefers attributes on factories over attributes from non-inline traits" do
|
|
352
|
+
FactoryGirl.build(:extended_declined_user).status.should == "extended_declined"
|
|
353
|
+
end
|
|
354
|
+
|
|
355
|
+
it "prefers inline traits over attributes on factories" do
|
|
356
|
+
FactoryGirl.build(:extended_declined_user, :accepted).status.should == "accepted"
|
|
357
|
+
end
|
|
358
|
+
|
|
359
|
+
it "prefers overridden attributes over attributes from traits, inline traits, or attributes on factories" do
|
|
360
|
+
FactoryGirl.build(:extended_declined_user, :accepted, :status => "completely overridden").status.should == "completely overridden"
|
|
361
|
+
end
|
|
362
|
+
end
|
|
@@ -64,24 +64,41 @@ describe FactoryGirl::Definition, "#to_create" do
|
|
|
64
64
|
end
|
|
65
65
|
end
|
|
66
66
|
|
|
67
|
-
describe FactoryGirl::Definition, "#
|
|
68
|
-
let(:female_trait) {
|
|
69
|
-
let(:admin_trait) {
|
|
67
|
+
describe FactoryGirl::Definition, "#processing_order" do
|
|
68
|
+
let(:female_trait) { FactoryGirl::Trait.new(:female) }
|
|
69
|
+
let(:admin_trait) { FactoryGirl::Trait.new(:admin) }
|
|
70
70
|
|
|
71
71
|
before do
|
|
72
72
|
subject.define_trait(female_trait)
|
|
73
73
|
FactoryGirl.stubs(:trait_by_name => admin_trait)
|
|
74
74
|
end
|
|
75
75
|
|
|
76
|
-
|
|
76
|
+
context "without base traits" do
|
|
77
|
+
it "returns the definition without any traits" do
|
|
78
|
+
subject.processing_order.should == [subject]
|
|
79
|
+
end
|
|
77
80
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
+
it "finds the correct traits after inheriting" do
|
|
82
|
+
subject.inherit_traits([:female])
|
|
83
|
+
subject.processing_order.should == [subject, female_trait]
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it "looks for the trait on FactoryGirl" do
|
|
87
|
+
subject.inherit_traits([:female, :admin])
|
|
88
|
+
subject.processing_order.should == [subject, female_trait, admin_trait]
|
|
89
|
+
end
|
|
81
90
|
end
|
|
82
91
|
|
|
83
|
-
|
|
84
|
-
subject.
|
|
85
|
-
|
|
92
|
+
context "with base traits" do
|
|
93
|
+
subject { FactoryGirl::Definition.new("my definition", [:female]) }
|
|
94
|
+
|
|
95
|
+
it "returns the base traits and definition" do
|
|
96
|
+
subject.processing_order.should == [female_trait, subject]
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
it "finds the correct traits after inheriting" do
|
|
100
|
+
subject.inherit_traits([:admin])
|
|
101
|
+
subject.processing_order.should == [female_trait, subject, admin_trait]
|
|
102
|
+
end
|
|
86
103
|
end
|
|
87
104
|
end
|
|
@@ -305,11 +305,11 @@ describe FactoryGirl::Factory, "#with_traits" do
|
|
|
305
305
|
end
|
|
306
306
|
|
|
307
307
|
it "returns a factory with the correct traits" do
|
|
308
|
-
subject.with_traits([:admin, :female]).
|
|
308
|
+
subject.with_traits([:admin, :female]).processing_order[1, 2].should == [admin_trait, female_trait]
|
|
309
309
|
end
|
|
310
310
|
|
|
311
|
-
it "doesn't modify the original factory's
|
|
311
|
+
it "doesn't modify the original factory's processing order" do
|
|
312
312
|
subject.with_traits([:admin, :female])
|
|
313
|
-
subject.
|
|
313
|
+
subject.processing_order.should == [subject.definition]
|
|
314
314
|
end
|
|
315
315
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: factory_girl
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.4.
|
|
4
|
+
version: 2.4.2
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,11 +9,11 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2012-01-
|
|
12
|
+
date: 2012-01-18 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: activesupport
|
|
16
|
-
requirement: &
|
|
16
|
+
requirement: &70205633314300 !ruby/object:Gem::Requirement
|
|
17
17
|
none: false
|
|
18
18
|
requirements:
|
|
19
19
|
- - ! '>='
|
|
@@ -21,10 +21,10 @@ dependencies:
|
|
|
21
21
|
version: '0'
|
|
22
22
|
type: :runtime
|
|
23
23
|
prerelease: false
|
|
24
|
-
version_requirements: *
|
|
24
|
+
version_requirements: *70205633314300
|
|
25
25
|
- !ruby/object:Gem::Dependency
|
|
26
26
|
name: rspec
|
|
27
|
-
requirement: &
|
|
27
|
+
requirement: &70205633310180 !ruby/object:Gem::Requirement
|
|
28
28
|
none: false
|
|
29
29
|
requirements:
|
|
30
30
|
- - ~>
|
|
@@ -32,10 +32,10 @@ dependencies:
|
|
|
32
32
|
version: '2.0'
|
|
33
33
|
type: :development
|
|
34
34
|
prerelease: false
|
|
35
|
-
version_requirements: *
|
|
35
|
+
version_requirements: *70205633310180
|
|
36
36
|
- !ruby/object:Gem::Dependency
|
|
37
37
|
name: cucumber
|
|
38
|
-
requirement: &
|
|
38
|
+
requirement: &70205633309440 !ruby/object:Gem::Requirement
|
|
39
39
|
none: false
|
|
40
40
|
requirements:
|
|
41
41
|
- - ~>
|
|
@@ -43,10 +43,10 @@ dependencies:
|
|
|
43
43
|
version: 1.0.0
|
|
44
44
|
type: :development
|
|
45
45
|
prerelease: false
|
|
46
|
-
version_requirements: *
|
|
46
|
+
version_requirements: *70205633309440
|
|
47
47
|
- !ruby/object:Gem::Dependency
|
|
48
48
|
name: timecop
|
|
49
|
-
requirement: &
|
|
49
|
+
requirement: &70205633308320 !ruby/object:Gem::Requirement
|
|
50
50
|
none: false
|
|
51
51
|
requirements:
|
|
52
52
|
- - ! '>='
|
|
@@ -54,10 +54,10 @@ dependencies:
|
|
|
54
54
|
version: '0'
|
|
55
55
|
type: :development
|
|
56
56
|
prerelease: false
|
|
57
|
-
version_requirements: *
|
|
57
|
+
version_requirements: *70205633308320
|
|
58
58
|
- !ruby/object:Gem::Dependency
|
|
59
59
|
name: rcov
|
|
60
|
-
requirement: &
|
|
60
|
+
requirement: &70205633307580 !ruby/object:Gem::Requirement
|
|
61
61
|
none: false
|
|
62
62
|
requirements:
|
|
63
63
|
- - ! '>='
|
|
@@ -65,10 +65,10 @@ dependencies:
|
|
|
65
65
|
version: '0'
|
|
66
66
|
type: :development
|
|
67
67
|
prerelease: false
|
|
68
|
-
version_requirements: *
|
|
68
|
+
version_requirements: *70205633307580
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
70
|
name: aruba
|
|
71
|
-
requirement: &
|
|
71
|
+
requirement: &70205633306600 !ruby/object:Gem::Requirement
|
|
72
72
|
none: false
|
|
73
73
|
requirements:
|
|
74
74
|
- - ! '>='
|
|
@@ -76,10 +76,10 @@ dependencies:
|
|
|
76
76
|
version: '0'
|
|
77
77
|
type: :development
|
|
78
78
|
prerelease: false
|
|
79
|
-
version_requirements: *
|
|
79
|
+
version_requirements: *70205633306600
|
|
80
80
|
- !ruby/object:Gem::Dependency
|
|
81
81
|
name: mocha
|
|
82
|
-
requirement: &
|
|
82
|
+
requirement: &70205633305800 !ruby/object:Gem::Requirement
|
|
83
83
|
none: false
|
|
84
84
|
requirements:
|
|
85
85
|
- - ! '>='
|
|
@@ -87,10 +87,10 @@ dependencies:
|
|
|
87
87
|
version: '0'
|
|
88
88
|
type: :development
|
|
89
89
|
prerelease: false
|
|
90
|
-
version_requirements: *
|
|
90
|
+
version_requirements: *70205633305800
|
|
91
91
|
- !ruby/object:Gem::Dependency
|
|
92
92
|
name: bourne
|
|
93
|
-
requirement: &
|
|
93
|
+
requirement: &70205633305240 !ruby/object:Gem::Requirement
|
|
94
94
|
none: false
|
|
95
95
|
requirements:
|
|
96
96
|
- - ! '>='
|
|
@@ -98,10 +98,10 @@ dependencies:
|
|
|
98
98
|
version: '0'
|
|
99
99
|
type: :development
|
|
100
100
|
prerelease: false
|
|
101
|
-
version_requirements: *
|
|
101
|
+
version_requirements: *70205633305240
|
|
102
102
|
- !ruby/object:Gem::Dependency
|
|
103
103
|
name: appraisal
|
|
104
|
-
requirement: &
|
|
104
|
+
requirement: &70205633304740 !ruby/object:Gem::Requirement
|
|
105
105
|
none: false
|
|
106
106
|
requirements:
|
|
107
107
|
- - ~>
|
|
@@ -109,10 +109,10 @@ dependencies:
|
|
|
109
109
|
version: 0.3.8
|
|
110
110
|
type: :development
|
|
111
111
|
prerelease: false
|
|
112
|
-
version_requirements: *
|
|
112
|
+
version_requirements: *70205633304740
|
|
113
113
|
- !ruby/object:Gem::Dependency
|
|
114
114
|
name: sqlite3-ruby
|
|
115
|
-
requirement: &
|
|
115
|
+
requirement: &70205633304300 !ruby/object:Gem::Requirement
|
|
116
116
|
none: false
|
|
117
117
|
requirements:
|
|
118
118
|
- - ! '>='
|
|
@@ -120,10 +120,10 @@ dependencies:
|
|
|
120
120
|
version: '0'
|
|
121
121
|
type: :development
|
|
122
122
|
prerelease: false
|
|
123
|
-
version_requirements: *
|
|
123
|
+
version_requirements: *70205633304300
|
|
124
124
|
- !ruby/object:Gem::Dependency
|
|
125
125
|
name: yard
|
|
126
|
-
requirement: &
|
|
126
|
+
requirement: &70205633303840 !ruby/object:Gem::Requirement
|
|
127
127
|
none: false
|
|
128
128
|
requirements:
|
|
129
129
|
- - ! '>='
|
|
@@ -131,10 +131,10 @@ dependencies:
|
|
|
131
131
|
version: '0'
|
|
132
132
|
type: :development
|
|
133
133
|
prerelease: false
|
|
134
|
-
version_requirements: *
|
|
134
|
+
version_requirements: *70205633303840
|
|
135
135
|
- !ruby/object:Gem::Dependency
|
|
136
136
|
name: bluecloth
|
|
137
|
-
requirement: &
|
|
137
|
+
requirement: &70205633303340 !ruby/object:Gem::Requirement
|
|
138
138
|
none: false
|
|
139
139
|
requirements:
|
|
140
140
|
- - ! '>='
|
|
@@ -142,7 +142,7 @@ dependencies:
|
|
|
142
142
|
version: '0'
|
|
143
143
|
type: :development
|
|
144
144
|
prerelease: false
|
|
145
|
-
version_requirements: *
|
|
145
|
+
version_requirements: *70205633303340
|
|
146
146
|
description: ! "factory_girl provides a framework and DSL for defining and\n using
|
|
147
147
|
factories - less error-prone, more explicit, and\n all-around
|
|
148
148
|
easier to work with than fixtures."
|