factory_girl_kibiz0r 2.0.0.beta2
Sign up to get free protection for your applications and to get access to all the features.
- data/Appraisals +12 -0
- data/CONTRIBUTION_GUIDELINES.md +9 -0
- data/Changelog +29 -0
- data/GETTING_STARTED.md +246 -0
- data/Gemfile +12 -0
- data/Gemfile.lock +62 -0
- data/LICENSE +19 -0
- data/README.md +64 -0
- data/Rakefile +54 -0
- data/features/factory_girl_steps.feature +151 -0
- data/features/step_definitions/database_steps.rb +20 -0
- data/features/support/env.rb +6 -0
- data/features/support/factories.rb +84 -0
- data/lib/factory_girl/aliases.rb +21 -0
- data/lib/factory_girl/attribute/association.rb +24 -0
- data/lib/factory_girl/attribute/callback.rb +16 -0
- data/lib/factory_girl/attribute/dynamic.rb +21 -0
- data/lib/factory_girl/attribute/implicit.rb +36 -0
- data/lib/factory_girl/attribute/list.rb +19 -0
- data/lib/factory_girl/attribute/sequence.rb +16 -0
- data/lib/factory_girl/attribute/static.rb +18 -0
- data/lib/factory_girl/attribute.rb +42 -0
- data/lib/factory_girl/definition_proxy.rb +147 -0
- data/lib/factory_girl/deprecated.rb +18 -0
- data/lib/factory_girl/factory.rb +196 -0
- data/lib/factory_girl/find_definitions.rb +23 -0
- data/lib/factory_girl/proxy/attributes_for.rb +21 -0
- data/lib/factory_girl/proxy/build.rb +36 -0
- data/lib/factory_girl/proxy/create.rb +16 -0
- data/lib/factory_girl/proxy/stub.rb +64 -0
- data/lib/factory_girl/proxy.rb +87 -0
- data/lib/factory_girl/rails2.rb +1 -0
- data/lib/factory_girl/registry.rb +45 -0
- data/lib/factory_girl/sequence.rb +31 -0
- data/lib/factory_girl/step_definitions.rb +60 -0
- data/lib/factory_girl/syntax/blueprint.rb +42 -0
- data/lib/factory_girl/syntax/default.rb +33 -0
- data/lib/factory_girl/syntax/generate.rb +73 -0
- data/lib/factory_girl/syntax/make.rb +41 -0
- data/lib/factory_girl/syntax/methods.rb +86 -0
- data/lib/factory_girl/syntax/sham.rb +45 -0
- data/lib/factory_girl/syntax/vintage.rb +152 -0
- data/lib/factory_girl/syntax.rb +12 -0
- data/lib/factory_girl/version.rb +4 -0
- data/lib/factory_girl.rb +54 -0
- data/spec/acceptance/acceptance_helper.rb +11 -0
- data/spec/acceptance/attribute_aliases_spec.rb +26 -0
- data/spec/acceptance/attributes_for_spec.rb +48 -0
- data/spec/acceptance/build_spec.rb +35 -0
- data/spec/acceptance/build_stubbed_spec.rb +79 -0
- data/spec/acceptance/callbacks_spec.rb +53 -0
- data/spec/acceptance/create_spec.rb +67 -0
- data/spec/acceptance/default_strategy_spec.rb +27 -0
- data/spec/acceptance/definition_spec.rb +28 -0
- data/spec/acceptance/parent_spec.rb +39 -0
- data/spec/acceptance/sequence_spec.rb +34 -0
- data/spec/acceptance/syntax/blueprint_spec.rb +32 -0
- data/spec/acceptance/syntax/generate_spec.rb +60 -0
- data/spec/acceptance/syntax/make_spec.rb +35 -0
- data/spec/acceptance/syntax/sham_spec.rb +44 -0
- data/spec/acceptance/syntax/vintage_spec.rb +224 -0
- data/spec/factory_girl/aliases_spec.rb +33 -0
- data/spec/factory_girl/attribute/association_spec.rb +33 -0
- data/spec/factory_girl/attribute/callback_spec.rb +23 -0
- data/spec/factory_girl/attribute/dynamic_spec.rb +60 -0
- data/spec/factory_girl/attribute/implicit_spec.rb +50 -0
- data/spec/factory_girl/attribute/sequence_spec.rb +21 -0
- data/spec/factory_girl/attribute/static_spec.rb +29 -0
- data/spec/factory_girl/attribute_spec.rb +39 -0
- data/spec/factory_girl/definition_proxy_spec.rb +129 -0
- data/spec/factory_girl/deprecated_spec.rb +66 -0
- data/spec/factory_girl/factory_spec.rb +374 -0
- data/spec/factory_girl/find_definitions_spec.rb +100 -0
- data/spec/factory_girl/proxy/attributes_for_spec.rb +52 -0
- data/spec/factory_girl/proxy/build_spec.rb +86 -0
- data/spec/factory_girl/proxy/create_spec.rb +107 -0
- data/spec/factory_girl/proxy/stub_spec.rb +80 -0
- data/spec/factory_girl/proxy_spec.rb +102 -0
- data/spec/factory_girl/registry_spec.rb +83 -0
- data/spec/factory_girl/sequence_spec.rb +96 -0
- data/spec/factory_girl_spec.rb +17 -0
- data/spec/spec_helper.rb +93 -0
- metadata +294 -0
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe FactoryGirl::Proxy::AttributesFor do
|
4
|
+
before do
|
5
|
+
@proxy = FactoryGirl::Proxy::AttributesFor.new(@class)
|
6
|
+
end
|
7
|
+
|
8
|
+
describe "when asked to associate with another factory" do
|
9
|
+
before do
|
10
|
+
stub(FactoryGirl).create
|
11
|
+
@proxy.associate(:owner, :user, {})
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should not set a value for the association" do
|
15
|
+
(@proxy.result(nil).key?(:owner)).should_not be
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should return nil when building an association" do
|
20
|
+
@proxy.association(:user).should be_nil
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should not call Factory.create when building an association" do
|
24
|
+
stub(FactoryGirl).create
|
25
|
+
@proxy.association(:user).should be_nil
|
26
|
+
FactoryGirl.should have_received.create.never
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should always return nil when building an association" do
|
30
|
+
@proxy.set(:association, 'x')
|
31
|
+
@proxy.association(:user).should be_nil
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should return a hash when asked for the result" do
|
35
|
+
@proxy.result(nil).should be_kind_of(Hash)
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "after setting an attribute" do
|
39
|
+
before do
|
40
|
+
@proxy.set(:attribute, 'value')
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should set that value in the resulting hash" do
|
44
|
+
@proxy.result(nil)[:attribute].should == 'value'
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should return that value when asked for that attribute" do
|
48
|
+
@proxy.get(:attribute).should == 'value'
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
@@ -0,0 +1,86 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe FactoryGirl::Proxy::Build do
|
4
|
+
before do
|
5
|
+
@class = Class.new
|
6
|
+
@instance = "built-instance"
|
7
|
+
|
8
|
+
stub(@class).new { @instance }
|
9
|
+
stub(@instance).attribute { 'value' }
|
10
|
+
stub(@instance, :attribute=)
|
11
|
+
stub(@instance, :owner=)
|
12
|
+
|
13
|
+
@proxy = FactoryGirl::Proxy::Build.new(@class)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should instantiate the class" do
|
17
|
+
@class.should have_received.new
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "when asked to associate with another factory" do
|
21
|
+
before do
|
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)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should create the associated instance" do
|
31
|
+
@associated_factory.should have_received.run(FactoryGirl::Proxy::Create, @overrides)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should set the associated instance" do
|
35
|
+
@instance.should have_received.method_missing(:owner=, @association)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
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)
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should return the built instance when asked for the result" do
|
50
|
+
@proxy.result(nil).should == @instance
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should run the :after_build callback when retrieving the result" do
|
54
|
+
spy = Object.new
|
55
|
+
stub(spy).foo
|
56
|
+
@proxy.add_callback(:after_build, proc{ spy.foo })
|
57
|
+
@proxy.result(nil)
|
58
|
+
spy.should have_received.foo
|
59
|
+
end
|
60
|
+
|
61
|
+
describe "when setting an attribute" do
|
62
|
+
before do
|
63
|
+
stub(@instance).attribute = 'value'
|
64
|
+
@proxy.set(:attribute, 'value')
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should set that value" do
|
68
|
+
@instance.should have_received.method_missing(:attribute=, 'value')
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe "when getting an attribute" do
|
73
|
+
before do
|
74
|
+
@result = @proxy.get(:attribute)
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should ask the built class for the value" do
|
78
|
+
@instance.should have_received.attribute
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should return the value for that attribute" do
|
82
|
+
@result.should == 'value'
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
@@ -0,0 +1,107 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe FactoryGirl::Proxy::Create do
|
4
|
+
before do
|
5
|
+
@class = Class.new
|
6
|
+
@instance = "built-instance"
|
7
|
+
|
8
|
+
stub(@class).new { @instance }
|
9
|
+
stub(@instance).attribute { 'value' }
|
10
|
+
stub(@instance, :attribute=)
|
11
|
+
stub(@instance, :owner=)
|
12
|
+
stub(@instance).save!
|
13
|
+
|
14
|
+
@proxy = FactoryGirl::Proxy::Create.new(@class)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should instantiate the class" do
|
18
|
+
@class.should have_received.new
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "when asked to associate with another factory" do
|
22
|
+
before do
|
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)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should create the associated instance" do
|
32
|
+
@associated_factory.should have_received.run(FactoryGirl::Proxy::Create, @overrides)
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should set the associated instance" do
|
36
|
+
@instance.should have_received.method_missing(:owner=, @association)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
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)
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "when asked for the result" do
|
51
|
+
before do
|
52
|
+
@build_spy = Object.new
|
53
|
+
@create_spy = Object.new
|
54
|
+
stub(@build_spy).foo
|
55
|
+
stub(@create_spy).foo
|
56
|
+
@proxy.add_callback(:after_build, proc{ @build_spy.foo })
|
57
|
+
@proxy.add_callback(:after_create, proc{ @create_spy.foo })
|
58
|
+
@result = @proxy.result(nil)
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should save the instance" do
|
62
|
+
@instance.should have_received.save!
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should return the built instance" do
|
66
|
+
@result.should == @instance
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should run both the build and the create callbacks" do
|
70
|
+
@build_spy.should have_received.foo
|
71
|
+
@create_spy.should have_received.foo
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
it "runs a custom create block" do
|
76
|
+
block = 'custom create block'
|
77
|
+
stub(block).call
|
78
|
+
stub(@instance).save! { raise }
|
79
|
+
instance = @proxy.result(block)
|
80
|
+
block.should have_received.call(instance)
|
81
|
+
end
|
82
|
+
|
83
|
+
describe "when setting an attribute" do
|
84
|
+
before do
|
85
|
+
@proxy.set(:attribute, 'value')
|
86
|
+
end
|
87
|
+
|
88
|
+
it "should set that value" do
|
89
|
+
@instance.should have_received.method_missing(:attribute=, 'value')
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
describe "when getting an attribute" do
|
94
|
+
before do
|
95
|
+
@result = @proxy.get(:attribute)
|
96
|
+
end
|
97
|
+
|
98
|
+
it "should ask the built class for the value" do
|
99
|
+
@instance.should have_received.attribute
|
100
|
+
end
|
101
|
+
|
102
|
+
it "should return the value for that attribute" do
|
103
|
+
@result.should == 'value'
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
@@ -0,0 +1,80 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe FactoryGirl::Proxy::Stub do
|
4
|
+
before do
|
5
|
+
@class = "class"
|
6
|
+
@instance = "instance"
|
7
|
+
stub(@class).new { @instance }
|
8
|
+
stub(@instance, :id=)
|
9
|
+
stub(@instance).id { 42 }
|
10
|
+
stub(@instance).reload { @instance.connection.reload }
|
11
|
+
|
12
|
+
@stub = FactoryGirl::Proxy::Stub.new(@class)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should not be a new record" do
|
16
|
+
@stub.result(nil).should_not be_new_record
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should not be able to connect to the database" do
|
20
|
+
lambda { @stub.result(nil).reload }.should raise_error(RuntimeError)
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "when a user factory exists" do
|
24
|
+
before do
|
25
|
+
@user = "user"
|
26
|
+
stub(FactoryGirl).factory_by_name { @associated_factory }
|
27
|
+
@associated_factory = 'associate-factory'
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "when asked to associate with another factory" do
|
31
|
+
before do
|
32
|
+
stub(@instance).owner { @user }
|
33
|
+
mock(@associated_factory).run(FactoryGirl::Proxy::Stub, {}) { @user }
|
34
|
+
mock(@stub).set(:owner, @user)
|
35
|
+
|
36
|
+
@stub.associate(:owner, :user, {})
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should set a value for the association" do
|
40
|
+
@stub.result(nil).owner.should == @user
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should return the association when building one" do
|
45
|
+
mock(@associated_factory).run(FactoryGirl::Proxy::Stub, {}) { @user }
|
46
|
+
@stub.association(:user).should == @user
|
47
|
+
end
|
48
|
+
|
49
|
+
describe "when asked for the result" do
|
50
|
+
it "should return the actual instance" do
|
51
|
+
@stub.result(nil).should == @instance
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should run the :after_stub callback" do
|
55
|
+
@spy = Object.new
|
56
|
+
stub(@spy).foo
|
57
|
+
@stub.add_callback(:after_stub, proc{ @spy.foo })
|
58
|
+
@stub.result(nil)
|
59
|
+
@spy.should have_received.foo
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe "with an existing attribute" do
|
65
|
+
before do
|
66
|
+
@value = "value"
|
67
|
+
mock(@instance).send(:attribute) { @value }
|
68
|
+
mock(@instance).send(:attribute=, @value)
|
69
|
+
@stub.set(:attribute, @value)
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should to the resulting object" do
|
73
|
+
@stub.attribute.should == 'value'
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should return that value when asked for that attribute" do
|
77
|
+
@stub.get(:attribute).should == @value
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe FactoryGirl::Proxy do
|
4
|
+
before do
|
5
|
+
@proxy = FactoryGirl::Proxy.new(Class.new)
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should do nothing when asked to set an attribute to a value" do
|
9
|
+
lambda { @proxy.set(:name, 'a name') }.should_not raise_error
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should return nil when asked for an attribute" do
|
13
|
+
@proxy.get(:name).should be_nil
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should call get for a missing method" do
|
17
|
+
mock(@proxy).get(:name) { "it's a name" }
|
18
|
+
@proxy.name.should == "it's a name"
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should store ignored attributes" do
|
22
|
+
@proxy.ignore(:name, "it's a name").should == "it's a name"
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should get an ignored attribute" do
|
26
|
+
@proxy.ignore(:name, "it's a name")
|
27
|
+
@proxy.get(:name).should == "it's a name"
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should do nothing when asked to associate with another factory" do
|
31
|
+
lambda { @proxy.associate(:owner, :user, {}) }.should_not raise_error
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should raise an error when asked for the result" do
|
35
|
+
lambda { @proxy.result(nil) }.should raise_error(NotImplementedError)
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "when adding callbacks" do
|
39
|
+
before do
|
40
|
+
@first_block = proc{ 'block 1' }
|
41
|
+
@second_block = proc{ 'block 2' }
|
42
|
+
end
|
43
|
+
it "should add a callback" do
|
44
|
+
@proxy.add_callback(:after_create, @first_block)
|
45
|
+
@proxy.callbacks[:after_create].should be_eql([@first_block])
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should add multiple callbacks of the same name" do
|
49
|
+
@proxy.add_callback(:after_create, @first_block)
|
50
|
+
@proxy.add_callback(:after_create, @second_block)
|
51
|
+
@proxy.callbacks[:after_create].should be_eql([@first_block, @second_block])
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should add multiple callbacks of different names" do
|
55
|
+
@proxy.add_callback(:after_create, @first_block)
|
56
|
+
@proxy.add_callback(:after_build, @second_block)
|
57
|
+
@proxy.callbacks[:after_create].should be_eql([@first_block])
|
58
|
+
@proxy.callbacks[:after_build].should be_eql([@second_block])
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe "when running callbacks" do
|
63
|
+
before do
|
64
|
+
@first_spy = Object.new
|
65
|
+
@second_spy = Object.new
|
66
|
+
stub(@first_spy).foo
|
67
|
+
stub(@second_spy).foo
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should run all callbacks with a given name" do
|
71
|
+
@proxy.add_callback(:after_create, proc{ @first_spy.foo })
|
72
|
+
@proxy.add_callback(:after_create, proc{ @second_spy.foo })
|
73
|
+
@proxy.run_callbacks(:after_create)
|
74
|
+
@first_spy.should have_received.foo
|
75
|
+
@second_spy.should have_received.foo
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should only run callbacks with a given name" do
|
79
|
+
@proxy.add_callback(:after_create, proc{ @first_spy.foo })
|
80
|
+
@proxy.add_callback(:after_build, proc{ @second_spy.foo })
|
81
|
+
@proxy.run_callbacks(:after_create)
|
82
|
+
@first_spy.should have_received.foo
|
83
|
+
@second_spy.should_not have_received.foo
|
84
|
+
end
|
85
|
+
|
86
|
+
it "should pass in the instance if the block takes an argument" do
|
87
|
+
@proxy.instance_variable_set("@instance", @first_spy)
|
88
|
+
@proxy.add_callback(:after_create, proc{|spy| spy.foo })
|
89
|
+
@proxy.run_callbacks(:after_create)
|
90
|
+
@first_spy.should have_received.foo
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should pass in the proxy if the block takes two arguments" do
|
94
|
+
@proxy.instance_variable_set("@instance", @first_spy)
|
95
|
+
stub(@proxy).bar
|
96
|
+
@proxy.add_callback(:after_create, proc {|spy, proxy| spy.foo; proxy.bar })
|
97
|
+
@proxy.run_callbacks(:after_create)
|
98
|
+
@first_spy.should have_received.foo
|
99
|
+
@proxy.should have_received.bar
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe FactoryGirl::Registry do
|
4
|
+
let(:factory) { FactoryGirl::Factory.new(:object) }
|
5
|
+
|
6
|
+
subject { FactoryGirl::Registry.new }
|
7
|
+
|
8
|
+
it "finds a registered a factory" do
|
9
|
+
subject.add(factory)
|
10
|
+
subject.find(factory.name).should == factory
|
11
|
+
end
|
12
|
+
|
13
|
+
it "raises when finding an unregistered factory" do
|
14
|
+
expect { subject.find(:bogus) }.to raise_error(ArgumentError)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "adds and returns a factory" do
|
18
|
+
subject.add(factory).should == factory
|
19
|
+
end
|
20
|
+
|
21
|
+
it "knows that a factory is registered by symbol" do
|
22
|
+
subject.add(factory)
|
23
|
+
subject.should be_registered(factory.name.to_sym)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "knows that a factory is registered by string" do
|
27
|
+
subject.add(factory)
|
28
|
+
subject.should be_registered(factory.name.to_s)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "knows that a factory isn't registered" do
|
32
|
+
subject.should_not be_registered("bogus")
|
33
|
+
end
|
34
|
+
|
35
|
+
it "can be accessed like a hash" do
|
36
|
+
subject.add(factory)
|
37
|
+
subject[factory.name].should == factory
|
38
|
+
end
|
39
|
+
|
40
|
+
it "iterates registered factories" do
|
41
|
+
other_factory = FactoryGirl::Factory.new(:string)
|
42
|
+
subject.add(factory)
|
43
|
+
subject.add(other_factory)
|
44
|
+
result = []
|
45
|
+
|
46
|
+
subject.each do |value|
|
47
|
+
result << value
|
48
|
+
end
|
49
|
+
|
50
|
+
result.should =~ [factory, other_factory]
|
51
|
+
end
|
52
|
+
|
53
|
+
it "registers an sequence" do
|
54
|
+
sequence = FactoryGirl::Sequence.new(:email) { |n| "somebody#{n}@example.com" }
|
55
|
+
subject.add(sequence)
|
56
|
+
subject.find(:email).should == sequence
|
57
|
+
end
|
58
|
+
|
59
|
+
it "doesn't allow a duplicate name" do
|
60
|
+
expect { 2.times { subject.add(factory) } }.
|
61
|
+
to raise_error(FactoryGirl::DuplicateDefinitionError)
|
62
|
+
end
|
63
|
+
|
64
|
+
it "registers aliases" do
|
65
|
+
aliases = [:thing, :widget]
|
66
|
+
factory = FactoryGirl::Factory.new(:object, :aliases => aliases)
|
67
|
+
subject.add(factory)
|
68
|
+
aliases.each do |name|
|
69
|
+
subject.find(name).should == factory
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
it "is enumerable" do
|
74
|
+
should be_kind_of(Enumerable)
|
75
|
+
end
|
76
|
+
|
77
|
+
it "clears registered factories" do
|
78
|
+
subject.add(factory)
|
79
|
+
subject.clear
|
80
|
+
subject.count.should == 0
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
@@ -0,0 +1,96 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe FactoryGirl::Sequence do
|
4
|
+
describe "a basic sequence" do
|
5
|
+
before do
|
6
|
+
@name = :test
|
7
|
+
@sequence = FactoryGirl::Sequence.new(@name) {|n| "=#{n}" }
|
8
|
+
end
|
9
|
+
|
10
|
+
it "has a name" do
|
11
|
+
@sequence.name.should == @name
|
12
|
+
end
|
13
|
+
|
14
|
+
it "has names" do
|
15
|
+
@sequence.names.should == [@name]
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should start with a value of 1" do
|
19
|
+
@sequence.next.should == "=1"
|
20
|
+
end
|
21
|
+
|
22
|
+
it "responds to default_strategy" do
|
23
|
+
@sequence.default_strategy.should == :create
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "after being called" do
|
27
|
+
before do
|
28
|
+
@sequence.next
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should use the next value" do
|
32
|
+
@sequence.next.should == "=2"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "a custom sequence" do
|
38
|
+
before do
|
39
|
+
@sequence = FactoryGirl::Sequence.new(:name, "A") {|n| "=#{n}" }
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should start with a value of A" do
|
43
|
+
@sequence.next.should == "=A"
|
44
|
+
end
|
45
|
+
|
46
|
+
describe "after being called" do
|
47
|
+
before do
|
48
|
+
@sequence.next
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should use the next value" do
|
52
|
+
@sequence.next.should == "=B"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "a basic sequence without a block" do
|
58
|
+
before do
|
59
|
+
@sequence = FactoryGirl::Sequence.new(:name)
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should start with a value of 1" do
|
63
|
+
@sequence.next.should == 1
|
64
|
+
end
|
65
|
+
|
66
|
+
describe "after being called" do
|
67
|
+
before do
|
68
|
+
@sequence.next
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should use the next value" do
|
72
|
+
@sequence.next.should == 2
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
describe "a custom sequence without a block" do
|
78
|
+
before do
|
79
|
+
@sequence = FactoryGirl::Sequence.new(:name, "A")
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should start with a value of A" do
|
83
|
+
@sequence.next.should == "A"
|
84
|
+
end
|
85
|
+
|
86
|
+
describe "after being called" do
|
87
|
+
before do
|
88
|
+
@sequence.next
|
89
|
+
end
|
90
|
+
|
91
|
+
it "should use the next value" do
|
92
|
+
@sequence.next.should == "B"
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe FactoryGirl do
|
4
|
+
let(:factory) { FactoryGirl::Factory.new(:object) }
|
5
|
+
let(:sequence) { FactoryGirl::Sequence.new(:email) }
|
6
|
+
|
7
|
+
it "finds a registered a factory" do
|
8
|
+
FactoryGirl.register_factory(factory)
|
9
|
+
FactoryGirl.factory_by_name(factory.name).should == factory
|
10
|
+
end
|
11
|
+
|
12
|
+
it "finds a registered a sequence" do
|
13
|
+
FactoryGirl.register_sequence(sequence)
|
14
|
+
FactoryGirl.sequence_by_name(sequence.name).should == sequence
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|